GUI: Fix Tomato RAF theme for all builds. Compilation typo.
[tomato.git] / release / src-rt-6.x.4708 / toolchains / hndtools-arm-linux-2.6.36-uclibc-4.5.3 / share / info / gccint.info
blob039ff348d084034043b3a09e846f2b89951c7b10
1 This is doc/gccint.info, produced by makeinfo version 4.8 from
2 /projects/toolchains_build/buildroot-2012.02-brcm/output/toolchain/gcc-4.5.3/gcc/doc/gccint.texi.
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.
8  Permission is granted to copy, distribute and/or modify this document
9 under the terms of the GNU Free Documentation License, Version 1.2 or
10 any later version published by the Free Software Foundation; with the
11 Invariant Sections being "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".
16  (a) The FSF's Front-Cover Text is:
18  A GNU Manual
20  (b) The FSF's Back-Cover Text is:
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.
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.
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.
36  Permission is granted to copy, distribute and/or modify this document
37 under the terms of the GNU Free Documentation License, Version 1.2 or
38 any later version published by the Free Software Foundation; with the
39 Invariant Sections being "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".
44  (a) The FSF's Front-Cover Text is:
46  A GNU Manual
48  (b) The FSF's Back-Cover Text is:
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.
55 \x1f
56 File: gccint.info,  Node: Top,  Next: Contributing,  Up: (DIR)
58 Introduction
59 ************
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 (Buildroot 2012.02) version 4.5.3.  The use of the GNU compilers is
65 documented in a separate manual.  *Note Introduction: (gcc)Top.
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.
77  Additional tutorial information is linked to from
78 `http://gcc.gnu.org/readings.html'.
80 * Menu:
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.
106 * Funding::         How to help assure funding for free software.
107 * GNU Project::     The GNU Project and GNU/Linux.
109 * Copying::         GNU General Public License says
110                     how you can copy and share GCC.
111 * GNU Free Documentation License:: How you can copy and share this manual.
112 * Contributors::    People who have contributed to GCC.
114 * Option Index::    Index to command line options.
115 * Concept Index::   Index of concepts and symbol names.
117 \x1f
118 File: gccint.info,  Node: Contributing,  Next: Portability,  Prev: Top,  Up: Top
120 1 Contributing to GCC Development
121 *********************************
123 If you would like to help pretest GCC releases to assure they work well,
124 current development sources are available by SVN (see
125 `http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
126 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
128  If you would like to work on improvements to GCC, please read the
129 advice at these URLs:
131      `http://gcc.gnu.org/contribute.html'
132      `http://gcc.gnu.org/contributewhy.html'
134 for information on how to make useful contributions and avoid
135 duplication of effort.  Suggested projects are listed at
136 `http://gcc.gnu.org/projects/'.
138 \x1f
139 File: gccint.info,  Node: Portability,  Next: Interface,  Prev: Contributing,  Up: Top
141 2 GCC and Portability
142 *********************
144 GCC itself aims to be portable to any machine where `int' is at least a
145 32-bit type.  It aims to target machines with a flat (non-segmented)
146 byte addressed data address space (the code address space can be
147 separate).  Target ABIs may have 8, 16, 32 or 64-bit `int' type.  `char'
148 can be wider than 8 bits.
150  GCC gets most of the information about the target machine from a
151 machine description which gives an algebraic formula for each of the
152 machine's instructions.  This is a very clean way to describe the
153 target.  But when the compiler needs information that is difficult to
154 express in this fashion, ad-hoc parameters have been defined for
155 machine descriptions.  The purpose of portability is to reduce the
156 total work needed on the compiler; it was not of interest for its own
157 sake.
159  GCC does not contain machine dependent code, but it does contain code
160 that depends on machine parameters such as endianness (whether the most
161 significant byte has the highest or lowest address of the bytes in a
162 word) and the availability of autoincrement addressing.  In the
163 RTL-generation pass, it is often necessary to have multiple strategies
164 for generating code for a particular kind of syntax tree, strategies
165 that are usable for different combinations of parameters.  Often, not
166 all possible cases have been addressed, but only the common ones or
167 only the ones that have been encountered.  As a result, a new target
168 may require additional strategies.  You will know if this happens
169 because the compiler will call `abort'.  Fortunately, the new
170 strategies can be added in a machine-independent fashion, and will
171 affect only the target machines that need them.
173 \x1f
174 File: gccint.info,  Node: Interface,  Next: Libgcc,  Prev: Portability,  Up: Top
176 3 Interfacing to GCC Output
177 ***************************
179 GCC is normally configured to use the same function calling convention
180 normally in use on the target system.  This is done with the
181 machine-description macros described (*note Target Macros::).
183  However, returning of structure and union values is done differently on
184 some target machines.  As a result, functions compiled with PCC
185 returning such types cannot be called from code compiled with GCC, and
186 vice versa.  This does not cause trouble often because few Unix library
187 routines return structures or unions.
189  GCC code returns structures and unions that are 1, 2, 4 or 8 bytes
190 long in the same registers used for `int' or `double' return values.
191 (GCC typically allocates variables of such types in registers also.)
192 Structures and unions of other sizes are returned by storing them into
193 an address passed by the caller (usually in a register).  The target
194 hook `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
196  By contrast, PCC on most target machines returns structures and unions
197 of any size by copying the data into an area of static storage, and then
198 returning the address of that storage as if it were a pointer value.
199 The caller must copy the data from that memory area to the place where
200 the value is wanted.  This is slower than the method used by GCC, and
201 fails to be reentrant.
203  On some target machines, such as RISC machines and the 80386, the
204 standard system convention is to pass to the subroutine the address of
205 where to return the value.  On these machines, GCC has been configured
206 to be compatible with the standard compiler, when this method is used.
207 It may not be compatible for structures of 1, 2, 4 or 8 bytes.
209  GCC uses the system's standard convention for passing arguments.  On
210 some machines, the first few arguments are passed in registers; in
211 others, all are passed on the stack.  It would be possible to use
212 registers for argument passing on any machine, and this would probably
213 result in a significant speedup.  But the result would be complete
214 incompatibility with code that follows the standard convention.  So this
215 change is practical only if you are switching to GCC as the sole C
216 compiler for the system.  We may implement register argument passing on
217 certain machines once we have a complete GNU system so that we can
218 compile the libraries with GCC.
220  On some machines (particularly the SPARC), certain types of arguments
221 are passed "by invisible reference".  This means that the value is
222 stored in memory, and the address of the memory location is passed to
223 the subroutine.
225  If you use `longjmp', beware of automatic variables.  ISO C says that
226 automatic variables that are not declared `volatile' have undefined
227 values after a `longjmp'.  And this is all GCC promises to do, because
228 it is very difficult to restore register variables correctly, and one
229 of GCC's features is that it can put variables in registers without
230 your asking it to.
232 \x1f
233 File: gccint.info,  Node: Libgcc,  Next: Languages,  Prev: Interface,  Up: Top
235 4 The GCC low-level runtime library
236 ***********************************
238 GCC provides a low-level runtime library, `libgcc.a' or `libgcc_s.so.1'
239 on some platforms.  GCC generates calls to routines in this library
240 automatically, whenever it needs to perform some operation that is too
241 complicated to emit inline code for.
243  Most of the routines in `libgcc' handle arithmetic operations that the
244 target processor cannot perform directly.  This includes integer
245 multiply and divide on some machines, and all floating-point and
246 fixed-point operations on other machines.  `libgcc' also includes
247 routines for exception handling, and a handful of miscellaneous
248 operations.
250  Some of these routines can be defined in mostly machine-independent C.
251 Others must be hand-written in assembly language for each processor
252 that needs them.
254  GCC will also generate calls to C library routines, such as `memcpy'
255 and `memset', in some cases.  The set of routines that GCC may possibly
256 use is documented in *Note Other Builtins: (gcc)Other Builtins.
258  These routines take arguments and return values of a specific machine
259 mode, not a specific C type.  *Note Machine Modes::, for an explanation
260 of this concept.  For illustrative purposes, in this chapter the
261 floating point type `float' is assumed to correspond to `SFmode';
262 `double' to `DFmode'; and `long double' to both `TFmode' and `XFmode'.
263 Similarly, the integer types `int' and `unsigned int' correspond to
264 `SImode'; `long' and `unsigned long' to `DImode'; and `long long' and
265 `unsigned long long' to `TImode'.
267 * Menu:
269 * Integer library routines::
270 * Soft float library routines::
271 * Decimal float library routines::
272 * Fixed-point fractional library routines::
273 * Exception handling routines::
274 * Miscellaneous routines::
276 \x1f
277 File: gccint.info,  Node: Integer library routines,  Next: Soft float library routines,  Up: Libgcc
279 4.1 Routines for integer arithmetic
280 ===================================
282 The integer arithmetic routines are used on platforms that don't provide
283 hardware support for arithmetic operations on some modes.
285 4.1.1 Arithmetic functions
286 --------------------------
288  -- Runtime Function: int __ashlsi3 (int A, int B)
289  -- Runtime Function: long __ashldi3 (long A, int B)
290  -- Runtime Function: long long __ashlti3 (long long A, int B)
291      These functions return the result of shifting A left by B bits.
293  -- Runtime Function: int __ashrsi3 (int A, int B)
294  -- Runtime Function: long __ashrdi3 (long A, int B)
295  -- Runtime Function: long long __ashrti3 (long long A, int B)
296      These functions return the result of arithmetically shifting A
297      right by B bits.
299  -- Runtime Function: int __divsi3 (int A, int B)
300  -- Runtime Function: long __divdi3 (long A, long B)
301  -- Runtime Function: long long __divti3 (long long A, long long B)
302      These functions return the quotient of the signed division of A and
303      B.
305  -- Runtime Function: int __lshrsi3 (int A, int B)
306  -- Runtime Function: long __lshrdi3 (long A, int B)
307  -- Runtime Function: long long __lshrti3 (long long A, int B)
308      These functions return the result of logically shifting A right by
309      B bits.
311  -- Runtime Function: int __modsi3 (int A, int B)
312  -- Runtime Function: long __moddi3 (long A, long B)
313  -- Runtime Function: long long __modti3 (long long A, long long B)
314      These functions return the remainder of the signed division of A
315      and B.
317  -- Runtime Function: int __mulsi3 (int A, int B)
318  -- Runtime Function: long __muldi3 (long A, long B)
319  -- Runtime Function: long long __multi3 (long long A, long long B)
320      These functions return the product of A and B.
322  -- Runtime Function: long __negdi2 (long A)
323  -- Runtime Function: long long __negti2 (long long A)
324      These functions return the negation of A.
326  -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
327           int B)
328  -- Runtime Function: unsigned long __udivdi3 (unsigned long A,
329           unsigned long B)
330  -- Runtime Function: unsigned long long __udivti3 (unsigned long long
331           A, unsigned long long B)
332      These functions return the quotient of the unsigned division of A
333      and B.
335  -- Runtime Function: unsigned long __udivmoddi3 (unsigned long A,
336           unsigned long B, unsigned long *C)
337  -- Runtime Function: unsigned long long __udivti3 (unsigned long long
338           A, unsigned long long B, unsigned long long *C)
339      These functions calculate both the quotient and remainder of the
340      unsigned division of A and B.  The return value is the quotient,
341      and the remainder is placed in variable pointed to by C.
343  -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
344           int B)
345  -- Runtime Function: unsigned long __umoddi3 (unsigned long A,
346           unsigned long B)
347  -- Runtime Function: unsigned long long __umodti3 (unsigned long long
348           A, unsigned long long B)
349      These functions return the remainder of the unsigned division of A
350      and B.
352 4.1.2 Comparison functions
353 --------------------------
355 The following functions implement integral comparisons.  These functions
356 implement a low-level compare, upon which the higher level comparison
357 operators (such as less than and greater than or equal to) can be
358 constructed.  The returned values lie in the range zero to two, to allow
359 the high-level operators to be implemented by testing the returned
360 result using either signed or unsigned comparison.
362  -- Runtime Function: int __cmpdi2 (long A, long B)
363  -- Runtime Function: int __cmpti2 (long long A, long long B)
364      These functions perform a signed comparison of A and B.  If A is
365      less than B, they return 0; if A is greater than B, they return 2;
366      and if A and B are equal they return 1.
368  -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
369  -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned
370           long long B)
371      These functions perform an unsigned comparison of A and B.  If A
372      is less than B, they return 0; if A is greater than B, they return
373      2; and if A and B are equal they return 1.
375 4.1.3 Trapping arithmetic functions
376 -----------------------------------
378 The following functions implement trapping arithmetic.  These functions
379 call the libc function `abort' upon signed arithmetic overflow.
381  -- Runtime Function: int __absvsi2 (int A)
382  -- Runtime Function: long __absvdi2 (long A)
383      These functions return the absolute value of A.
385  -- Runtime Function: int __addvsi3 (int A, int B)
386  -- Runtime Function: long __addvdi3 (long A, long B)
387      These functions return the sum of A and B; that is `A + B'.
389  -- Runtime Function: int __mulvsi3 (int A, int B)
390  -- Runtime Function: long __mulvdi3 (long A, long B)
391      The functions return the product of A and B; that is `A * B'.
393  -- Runtime Function: int __negvsi2 (int A)
394  -- Runtime Function: long __negvdi2 (long A)
395      These functions return the negation of A; that is `-A'.
397  -- Runtime Function: int __subvsi3 (int A, int B)
398  -- Runtime Function: long __subvdi3 (long A, long B)
399      These functions return the difference between B and A; that is `A
400      - B'.
402 4.1.4 Bit operations
403 --------------------
405  -- Runtime Function: int __clzsi2 (int A)
406  -- Runtime Function: int __clzdi2 (long A)
407  -- Runtime Function: int __clzti2 (long long A)
408      These functions return the number of leading 0-bits in A, starting
409      at the most significant bit position.  If A is zero, the result is
410      undefined.
412  -- Runtime Function: int __ctzsi2 (int A)
413  -- Runtime Function: int __ctzdi2 (long A)
414  -- Runtime Function: int __ctzti2 (long long A)
415      These functions return the number of trailing 0-bits in A, starting
416      at the least significant bit position.  If A is zero, the result is
417      undefined.
419  -- Runtime Function: int __ffsdi2 (long A)
420  -- Runtime Function: int __ffsti2 (long long A)
421      These functions return the index of the least significant 1-bit in
422      A, or the value zero if A is zero.  The least significant bit is
423      index one.
425  -- Runtime Function: int __paritysi2 (int A)
426  -- Runtime Function: int __paritydi2 (long A)
427  -- Runtime Function: int __parityti2 (long long A)
428      These functions return the value zero if the number of bits set in
429      A is even, and the value one otherwise.
431  -- Runtime Function: int __popcountsi2 (int A)
432  -- Runtime Function: int __popcountdi2 (long A)
433  -- Runtime Function: int __popcountti2 (long long A)
434      These functions return the number of bits set in A.
436  -- Runtime Function: int32_t __bswapsi2 (int32_t A)
437  -- Runtime Function: int64_t __bswapdi2 (int64_t A)
438      These functions return the A byteswapped.
440 \x1f
441 File: gccint.info,  Node: Soft float library routines,  Next: Decimal float library routines,  Prev: Integer library routines,  Up: Libgcc
443 4.2 Routines for floating point emulation
444 =========================================
446 The software floating point library is used on machines which do not
447 have hardware support for floating point.  It is also used whenever
448 `-msoft-float' is used to disable generation of floating point
449 instructions.  (Not all targets support this switch.)
451  For compatibility with other compilers, the floating point emulation
452 routines can be renamed with the `DECLARE_LIBRARY_RENAMES' macro (*note
453 Library Calls::).  In this section, the default names are used.
455  Presently the library does not support `XFmode', which is used for
456 `long double' on some architectures.
458 4.2.1 Arithmetic functions
459 --------------------------
461  -- Runtime Function: float __addsf3 (float A, float B)
462  -- Runtime Function: double __adddf3 (double A, double B)
463  -- Runtime Function: long double __addtf3 (long double A, long double
464           B)
465  -- Runtime Function: long double __addxf3 (long double A, long double
466           B)
467      These functions return the sum of A and B.
469  -- Runtime Function: float __subsf3 (float A, float B)
470  -- Runtime Function: double __subdf3 (double A, double B)
471  -- Runtime Function: long double __subtf3 (long double A, long double
472           B)
473  -- Runtime Function: long double __subxf3 (long double A, long double
474           B)
475      These functions return the difference between B and A; that is,
476      A - B.
478  -- Runtime Function: float __mulsf3 (float A, float B)
479  -- Runtime Function: double __muldf3 (double A, double B)
480  -- Runtime Function: long double __multf3 (long double A, long double
481           B)
482  -- Runtime Function: long double __mulxf3 (long double A, long double
483           B)
484      These functions return the product of A and B.
486  -- Runtime Function: float __divsf3 (float A, float B)
487  -- Runtime Function: double __divdf3 (double A, double B)
488  -- Runtime Function: long double __divtf3 (long double A, long double
489           B)
490  -- Runtime Function: long double __divxf3 (long double A, long double
491           B)
492      These functions return the quotient of A and B; that is, A / B.
494  -- Runtime Function: float __negsf2 (float A)
495  -- Runtime Function: double __negdf2 (double A)
496  -- Runtime Function: long double __negtf2 (long double A)
497  -- Runtime Function: long double __negxf2 (long double A)
498      These functions return the negation of A.  They simply flip the
499      sign bit, so they can produce negative zero and negative NaN.
501 4.2.2 Conversion functions
502 --------------------------
504  -- Runtime Function: double __extendsfdf2 (float A)
505  -- Runtime Function: long double __extendsftf2 (float A)
506  -- Runtime Function: long double __extendsfxf2 (float A)
507  -- Runtime Function: long double __extenddftf2 (double A)
508  -- Runtime Function: long double __extenddfxf2 (double A)
509      These functions extend A to the wider mode of their return type.
511  -- Runtime Function: double __truncxfdf2 (long double A)
512  -- Runtime Function: double __trunctfdf2 (long double A)
513  -- Runtime Function: float __truncxfsf2 (long double A)
514  -- Runtime Function: float __trunctfsf2 (long double A)
515  -- Runtime Function: float __truncdfsf2 (double A)
516      These functions truncate A to the narrower mode of their return
517      type, rounding toward zero.
519  -- Runtime Function: int __fixsfsi (float A)
520  -- Runtime Function: int __fixdfsi (double A)
521  -- Runtime Function: int __fixtfsi (long double A)
522  -- Runtime Function: int __fixxfsi (long double A)
523      These functions convert A to a signed integer, rounding toward
524      zero.
526  -- Runtime Function: long __fixsfdi (float A)
527  -- Runtime Function: long __fixdfdi (double A)
528  -- Runtime Function: long __fixtfdi (long double A)
529  -- Runtime Function: long __fixxfdi (long double A)
530      These functions convert A to a signed long, rounding toward zero.
532  -- Runtime Function: long long __fixsfti (float A)
533  -- Runtime Function: long long __fixdfti (double A)
534  -- Runtime Function: long long __fixtfti (long double A)
535  -- Runtime Function: long long __fixxfti (long double A)
536      These functions convert A to a signed long long, rounding toward
537      zero.
539  -- Runtime Function: unsigned int __fixunssfsi (float A)
540  -- Runtime Function: unsigned int __fixunsdfsi (double A)
541  -- Runtime Function: unsigned int __fixunstfsi (long double A)
542  -- Runtime Function: unsigned int __fixunsxfsi (long double A)
543      These functions convert A to an unsigned integer, rounding toward
544      zero.  Negative values all become zero.
546  -- Runtime Function: unsigned long __fixunssfdi (float A)
547  -- Runtime Function: unsigned long __fixunsdfdi (double A)
548  -- Runtime Function: unsigned long __fixunstfdi (long double A)
549  -- Runtime Function: unsigned long __fixunsxfdi (long double A)
550      These functions convert A to an unsigned long, rounding toward
551      zero.  Negative values all become zero.
553  -- Runtime Function: unsigned long long __fixunssfti (float A)
554  -- Runtime Function: unsigned long long __fixunsdfti (double A)
555  -- Runtime Function: unsigned long long __fixunstfti (long double A)
556  -- Runtime Function: unsigned long long __fixunsxfti (long double A)
557      These functions convert A to an unsigned long long, rounding
558      toward zero.  Negative values all become zero.
560  -- Runtime Function: float __floatsisf (int I)
561  -- Runtime Function: double __floatsidf (int I)
562  -- Runtime Function: long double __floatsitf (int I)
563  -- Runtime Function: long double __floatsixf (int I)
564      These functions convert I, a signed integer, to floating point.
566  -- Runtime Function: float __floatdisf (long I)
567  -- Runtime Function: double __floatdidf (long I)
568  -- Runtime Function: long double __floatditf (long I)
569  -- Runtime Function: long double __floatdixf (long I)
570      These functions convert I, a signed long, to floating point.
572  -- Runtime Function: float __floattisf (long long I)
573  -- Runtime Function: double __floattidf (long long I)
574  -- Runtime Function: long double __floattitf (long long I)
575  -- Runtime Function: long double __floattixf (long long I)
576      These functions convert I, a signed long long, to floating point.
578  -- Runtime Function: float __floatunsisf (unsigned int I)
579  -- Runtime Function: double __floatunsidf (unsigned int I)
580  -- Runtime Function: long double __floatunsitf (unsigned int I)
581  -- Runtime Function: long double __floatunsixf (unsigned int I)
582      These functions convert I, an unsigned integer, to floating point.
584  -- Runtime Function: float __floatundisf (unsigned long I)
585  -- Runtime Function: double __floatundidf (unsigned long I)
586  -- Runtime Function: long double __floatunditf (unsigned long I)
587  -- Runtime Function: long double __floatundixf (unsigned long I)
588      These functions convert I, an unsigned long, to floating point.
590  -- Runtime Function: float __floatuntisf (unsigned long long I)
591  -- Runtime Function: double __floatuntidf (unsigned long long I)
592  -- Runtime Function: long double __floatuntitf (unsigned long long I)
593  -- Runtime Function: long double __floatuntixf (unsigned long long I)
594      These functions convert I, an unsigned long long, to floating
595      point.
597 4.2.3 Comparison functions
598 --------------------------
600 There are two sets of basic comparison functions.
602  -- Runtime Function: int __cmpsf2 (float A, float B)
603  -- Runtime Function: int __cmpdf2 (double A, double B)
604  -- Runtime Function: int __cmptf2 (long double A, long double B)
605      These functions calculate a <=> b.  That is, if A is less than B,
606      they return -1; if A is greater than B, they return 1; and if A
607      and B are equal they return 0.  If either argument is NaN they
608      return 1, but you should not rely on this; if NaN is a
609      possibility, use one of the higher-level comparison functions.
611  -- Runtime Function: int __unordsf2 (float A, float B)
612  -- Runtime Function: int __unorddf2 (double A, double B)
613  -- Runtime Function: int __unordtf2 (long double A, long double B)
614      These functions return a nonzero value if either argument is NaN,
615      otherwise 0.
617  There is also a complete group of higher level functions which
618 correspond directly to comparison operators.  They implement the ISO C
619 semantics for floating-point comparisons, taking NaN into account.  Pay
620 careful attention to the return values defined for each set.  Under the
621 hood, all of these routines are implemented as
623        if (__unordXf2 (a, b))
624          return E;
625        return __cmpXf2 (a, b);
627 where E is a constant chosen to give the proper behavior for NaN.
628 Thus, the meaning of the return value is different for each set.  Do
629 not rely on this implementation; only the semantics documented below
630 are guaranteed.
632  -- Runtime Function: int __eqsf2 (float A, float B)
633  -- Runtime Function: int __eqdf2 (double A, double B)
634  -- Runtime Function: int __eqtf2 (long double A, long double B)
635      These functions return zero if neither argument is NaN, and A and
636      B are equal.
638  -- Runtime Function: int __nesf2 (float A, float B)
639  -- Runtime Function: int __nedf2 (double A, double B)
640  -- Runtime Function: int __netf2 (long double A, long double B)
641      These functions return a nonzero value if either argument is NaN,
642      or if A and B are unequal.
644  -- Runtime Function: int __gesf2 (float A, float B)
645  -- Runtime Function: int __gedf2 (double A, double B)
646  -- Runtime Function: int __getf2 (long double A, long double B)
647      These functions return a value greater than or equal to zero if
648      neither argument is NaN, and A is greater than or equal to B.
650  -- Runtime Function: int __ltsf2 (float A, float B)
651  -- Runtime Function: int __ltdf2 (double A, double B)
652  -- Runtime Function: int __lttf2 (long double A, long double B)
653      These functions return a value less than zero if neither argument
654      is NaN, and A is strictly less than B.
656  -- Runtime Function: int __lesf2 (float A, float B)
657  -- Runtime Function: int __ledf2 (double A, double B)
658  -- Runtime Function: int __letf2 (long double A, long double B)
659      These functions return a value less than or equal to zero if
660      neither argument is NaN, and A is less than or equal to B.
662  -- Runtime Function: int __gtsf2 (float A, float B)
663  -- Runtime Function: int __gtdf2 (double A, double B)
664  -- Runtime Function: int __gttf2 (long double A, long double B)
665      These functions return a value greater than zero if neither
666      argument is NaN, and A is strictly greater than B.
668 4.2.4 Other floating-point functions
669 ------------------------------------
671  -- Runtime Function: float __powisf2 (float A, int B)
672  -- Runtime Function: double __powidf2 (double A, int B)
673  -- Runtime Function: long double __powitf2 (long double A, int B)
674  -- Runtime Function: long double __powixf2 (long double A, int B)
675      These functions convert raise A to the power B.
677  -- Runtime Function: complex float __mulsc3 (float A, float B, float
678           C, float D)
679  -- Runtime Function: complex double __muldc3 (double A, double B,
680           double C, double D)
681  -- Runtime Function: complex long double __multc3 (long double A, long
682           double B, long double C, long double D)
683  -- Runtime Function: complex long double __mulxc3 (long double A, long
684           double B, long double C, long double D)
685      These functions return the product of A + iB and C + iD, following
686      the rules of C99 Annex G.
688  -- Runtime Function: complex float __divsc3 (float A, float B, float
689           C, float D)
690  -- Runtime Function: complex double __divdc3 (double A, double B,
691           double C, double D)
692  -- Runtime Function: complex long double __divtc3 (long double A, long
693           double B, long double C, long double D)
694  -- Runtime Function: complex long double __divxc3 (long double A, long
695           double B, long double C, long double D)
696      These functions return the quotient of A + iB and C + iD (i.e., (A
697      + iB) / (C + iD)), following the rules of C99 Annex G.
699 \x1f
700 File: gccint.info,  Node: Decimal float library routines,  Next: Fixed-point fractional library routines,  Prev: Soft float library routines,  Up: Libgcc
702 4.3 Routines for decimal floating point emulation
703 =================================================
705 The software decimal floating point library implements IEEE 754-2008
706 decimal floating point arithmetic and is only activated on selected
707 targets.
709  The software decimal floating point library supports either DPD
710 (Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as
711 selected at configure time.
713 4.3.1 Arithmetic functions
714 --------------------------
716  -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32
717           B)
718  -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32
719           B)
720  -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64
721           B)
722  -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64
723           B)
724  -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A,
725           _Decimal128 B)
726  -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A,
727           _Decimal128 B)
728      These functions return the sum of A and B.
730  -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32
731           B)
732  -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32
733           B)
734  -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64
735           B)
736  -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64
737           B)
738  -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A,
739           _Decimal128 B)
740  -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A,
741           _Decimal128 B)
742      These functions return the difference between B and A; that is,
743      A - B.
745  -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32
746           B)
747  -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32
748           B)
749  -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64
750           B)
751  -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64
752           B)
753  -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A,
754           _Decimal128 B)
755  -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A,
756           _Decimal128 B)
757      These functions return the product of A and B.
759  -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32
760           B)
761  -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32
762           B)
763  -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64
764           B)
765  -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64
766           B)
767  -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A,
768           _Decimal128 B)
769  -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A,
770           _Decimal128 B)
771      These functions return the quotient of A and B; that is, A / B.
773  -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A)
774  -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A)
775  -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A)
776  -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A)
777  -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A)
778  -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A)
779      These functions return the negation of A.  They simply flip the
780      sign bit, so they can produce negative zero and negative NaN.
782 4.3.2 Conversion functions
783 --------------------------
785  -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A)
786  -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A)
787  -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A)
788  -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A)
789  -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A)
790  -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A)
791  -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A)
792  -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A)
793  -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A)
794  -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A)
795  -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A)
796  -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A)
797      These functions convert the value A from one decimal floating type
798      to another.
800  -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A)
801  -- Runtime Function: _Decimal64 __bid_extendsfdd (float A)
802  -- Runtime Function: _Decimal128 __dpd_extendsftd (float A)
803  -- Runtime Function: _Decimal128 __bid_extendsftd (float A)
804  -- Runtime Function: _Decimal128 __dpd_extenddftd (double A)
805  -- Runtime Function: _Decimal128 __bid_extenddftd (double A)
806  -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A)
807  -- Runtime Function: _Decimal128 __bid_extendxftd (long double A)
808  -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A)
809  -- Runtime Function: _Decimal32 __bid_truncdfsd (double A)
810  -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A)
811  -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A)
812  -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A)
813  -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A)
814  -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A)
815  -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A)
816  -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A)
817  -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A)
818      These functions convert the value of A from a binary floating type
819      to a decimal floating type of a different size.
821  -- Runtime Function: float __dpd_truncddsf (_Decimal64 A)
822  -- Runtime Function: float __bid_truncddsf (_Decimal64 A)
823  -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A)
824  -- Runtime Function: float __bid_trunctdsf (_Decimal128 A)
825  -- Runtime Function: double __dpd_extendsddf (_Decimal32 A)
826  -- Runtime Function: double __bid_extendsddf (_Decimal32 A)
827  -- Runtime Function: double __dpd_trunctddf (_Decimal128 A)
828  -- Runtime Function: double __bid_trunctddf (_Decimal128 A)
829  -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A)
830  -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A)
831  -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A)
832  -- Runtime Function: long double __bid_extendddxf (_Decimal64 A)
833  -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A)
834  -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A)
835  -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A)
836  -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A)
837  -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A)
838  -- Runtime Function: long double __bid_extendddtf (_Decimal64 A)
839      These functions convert the value of A from a decimal floating type
840      to a binary floating type of a different size.
842  -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A)
843  -- Runtime Function: _Decimal32 __bid_extendsfsd (float A)
844  -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A)
845  -- Runtime Function: _Decimal64 __bid_extenddfdd (double A)
846  -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A)
847  -- Runtime Function: _Decimal128 __bid_extendtftd (long double A)
848  -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A)
849  -- Runtime Function: float __bid_truncsdsf (_Decimal32 A)
850  -- Runtime Function: double __dpd_truncdddf (_Decimal64 A)
851  -- Runtime Function: double __bid_truncdddf (_Decimal64 A)
852  -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A)
853  -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A)
854      These functions convert the value of A between decimal and binary
855      floating types of the same size.
857  -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A)
858  -- Runtime Function: int __bid_fixsdsi (_Decimal32 A)
859  -- Runtime Function: int __dpd_fixddsi (_Decimal64 A)
860  -- Runtime Function: int __bid_fixddsi (_Decimal64 A)
861  -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A)
862  -- Runtime Function: int __bid_fixtdsi (_Decimal128 A)
863      These functions convert A to a signed integer.
865  -- Runtime Function: long __dpd_fixsddi (_Decimal32 A)
866  -- Runtime Function: long __bid_fixsddi (_Decimal32 A)
867  -- Runtime Function: long __dpd_fixdddi (_Decimal64 A)
868  -- Runtime Function: long __bid_fixdddi (_Decimal64 A)
869  -- Runtime Function: long __dpd_fixtddi (_Decimal128 A)
870  -- Runtime Function: long __bid_fixtddi (_Decimal128 A)
871      These functions convert A to a signed long.
873  -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A)
874  -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A)
875  -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A)
876  -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A)
877  -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A)
878  -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A)
879      These functions convert A to an unsigned integer.  Negative values
880      all become zero.
882  -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A)
883  -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A)
884  -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A)
885  -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A)
886  -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A)
887  -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A)
888      These functions convert A to an unsigned long.  Negative values
889      all become zero.
891  -- Runtime Function: _Decimal32 __dpd_floatsisd (int I)
892  -- Runtime Function: _Decimal32 __bid_floatsisd (int I)
893  -- Runtime Function: _Decimal64 __dpd_floatsidd (int I)
894  -- Runtime Function: _Decimal64 __bid_floatsidd (int I)
895  -- Runtime Function: _Decimal128 __dpd_floatsitd (int I)
896  -- Runtime Function: _Decimal128 __bid_floatsitd (int I)
897      These functions convert I, a signed integer, to decimal floating
898      point.
900  -- Runtime Function: _Decimal32 __dpd_floatdisd (long I)
901  -- Runtime Function: _Decimal32 __bid_floatdisd (long I)
902  -- Runtime Function: _Decimal64 __dpd_floatdidd (long I)
903  -- Runtime Function: _Decimal64 __bid_floatdidd (long I)
904  -- Runtime Function: _Decimal128 __dpd_floatditd (long I)
905  -- Runtime Function: _Decimal128 __bid_floatditd (long I)
906      These functions convert I, a signed long, to decimal floating
907      point.
909  -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I)
910  -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I)
911  -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I)
912  -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I)
913  -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I)
914  -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I)
915      These functions convert I, an unsigned integer, to decimal
916      floating point.
918  -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I)
919  -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I)
920  -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I)
921  -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I)
922  -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I)
923  -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I)
924      These functions convert I, an unsigned long, to decimal floating
925      point.
927 4.3.3 Comparison functions
928 --------------------------
930  -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B)
931  -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B)
932  -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B)
933  -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B)
934  -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B)
935  -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B)
936      These functions return a nonzero value if either argument is NaN,
937      otherwise 0.
939  There is also a complete group of higher level functions which
940 correspond directly to comparison operators.  They implement the ISO C
941 semantics for floating-point comparisons, taking NaN into account.  Pay
942 careful attention to the return values defined for each set.  Under the
943 hood, all of these routines are implemented as
945        if (__bid_unordXd2 (a, b))
946          return E;
947        return __bid_cmpXd2 (a, b);
949 where E is a constant chosen to give the proper behavior for NaN.
950 Thus, the meaning of the return value is different for each set.  Do
951 not rely on this implementation; only the semantics documented below
952 are guaranteed.
954  -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B)
955  -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B)
956  -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B)
957  -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B)
958  -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B)
959  -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B)
960      These functions return zero if neither argument is NaN, and A and
961      B are equal.
963  -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B)
964  -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B)
965  -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B)
966  -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B)
967  -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B)
968  -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B)
969      These functions return a nonzero value if either argument is NaN,
970      or if A and B are unequal.
972  -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B)
973  -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B)
974  -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B)
975  -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B)
976  -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B)
977  -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B)
978      These functions return a value greater than or equal to zero if
979      neither argument is NaN, and A is greater than or equal to B.
981  -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B)
982  -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B)
983  -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B)
984  -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B)
985  -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B)
986  -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B)
987      These functions return a value less than zero if neither argument
988      is NaN, and A is strictly less than B.
990  -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B)
991  -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B)
992  -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B)
993  -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B)
994  -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B)
995  -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B)
996      These functions return a value less than or equal to zero if
997      neither argument is NaN, and A is less than or equal to B.
999  -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B)
1000  -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B)
1001  -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B)
1002  -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B)
1003  -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B)
1004  -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B)
1005      These functions return a value greater than zero if neither
1006      argument is NaN, and A is strictly greater than B.
1008 \x1f
1009 File: gccint.info,  Node: Fixed-point fractional library routines,  Next: Exception handling routines,  Prev: Decimal float library routines,  Up: Libgcc
1011 4.4 Routines for fixed-point fractional emulation
1012 =================================================
1014 The software fixed-point library implements fixed-point fractional
1015 arithmetic, and is only activated on selected targets.
1017  For ease of comprehension `fract' is an alias for the `_Fract' type,
1018 `accum' an alias for `_Accum', and `sat' an alias for `_Sat'.
1020  For illustrative purposes, in this section the fixed-point fractional
1021 type `short fract' is assumed to correspond to machine mode `QQmode';
1022 `unsigned short fract' to `UQQmode'; `fract' to `HQmode';
1023 `unsigned fract' to `UHQmode'; `long fract' to `SQmode';
1024 `unsigned long fract' to `USQmode'; `long long fract' to `DQmode'; and
1025 `unsigned long long fract' to `UDQmode'.  Similarly the fixed-point
1026 accumulator type `short accum' corresponds to `HAmode';
1027 `unsigned short accum' to `UHAmode'; `accum' to `SAmode';
1028 `unsigned accum' to `USAmode'; `long accum' to `DAmode';
1029 `unsigned long accum' to `UDAmode'; `long long accum' to `TAmode'; and
1030 `unsigned long long accum' to `UTAmode'.
1032 4.4.1 Arithmetic functions
1033 --------------------------
1035  -- Runtime Function: short fract __addqq3 (short fract A, short fract
1036           B)
1037  -- Runtime Function: fract __addhq3 (fract A, fract B)
1038  -- Runtime Function: long fract __addsq3 (long fract A, long fract B)
1039  -- Runtime Function: long long fract __adddq3 (long long fract A, long
1040           long fract B)
1041  -- Runtime Function: unsigned short fract __adduqq3 (unsigned short
1042           fract A, unsigned short fract B)
1043  -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A,
1044           unsigned fract B)
1045  -- Runtime Function: unsigned long fract __addusq3 (unsigned long
1046           fract A, unsigned long fract B)
1047  -- Runtime Function: unsigned long long fract __addudq3 (unsigned long
1048           long fract A, unsigned long long fract B)
1049  -- Runtime Function: short accum __addha3 (short accum A, short accum
1050           B)
1051  -- Runtime Function: accum __addsa3 (accum A, accum B)
1052  -- Runtime Function: long accum __addda3 (long accum A, long accum B)
1053  -- Runtime Function: long long accum __addta3 (long long accum A, long
1054           long accum B)
1055  -- Runtime Function: unsigned short accum __adduha3 (unsigned short
1056           accum A, unsigned short accum B)
1057  -- Runtime Function: unsigned accum __addusa3 (unsigned accum A,
1058           unsigned accum B)
1059  -- Runtime Function: unsigned long accum __adduda3 (unsigned long
1060           accum A, unsigned long accum B)
1061  -- Runtime Function: unsigned long long accum __adduta3 (unsigned long
1062           long accum A, unsigned long long accum B)
1063      These functions return the sum of A and B.
1065  -- Runtime Function: short fract __ssaddqq3 (short fract A, short
1066           fract B)
1067  -- Runtime Function: fract __ssaddhq3 (fract A, fract B)
1068  -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B)
1069  -- Runtime Function: long long fract __ssadddq3 (long long fract A,
1070           long long fract B)
1071  -- Runtime Function: short accum __ssaddha3 (short accum A, short
1072           accum B)
1073  -- Runtime Function: accum __ssaddsa3 (accum A, accum B)
1074  -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B)
1075  -- Runtime Function: long long accum __ssaddta3 (long long accum A,
1076           long long accum B)
1077      These functions return the sum of A and B with signed saturation.
1079  -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short
1080           fract A, unsigned short fract B)
1081  -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A,
1082           unsigned fract B)
1083  -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long
1084           fract A, unsigned long fract B)
1085  -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned
1086           long long fract A, unsigned long long fract B)
1087  -- Runtime Function: unsigned short accum __usadduha3 (unsigned short
1088           accum A, unsigned short accum B)
1089  -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A,
1090           unsigned accum B)
1091  -- Runtime Function: unsigned long accum __usadduda3 (unsigned long
1092           accum A, unsigned long accum B)
1093  -- Runtime Function: unsigned long long accum __usadduta3 (unsigned
1094           long long accum A, unsigned long long accum B)
1095      These functions return the sum of A and B with unsigned saturation.
1097  -- Runtime Function: short fract __subqq3 (short fract A, short fract
1098           B)
1099  -- Runtime Function: fract __subhq3 (fract A, fract B)
1100  -- Runtime Function: long fract __subsq3 (long fract A, long fract B)
1101  -- Runtime Function: long long fract __subdq3 (long long fract A, long
1102           long fract B)
1103  -- Runtime Function: unsigned short fract __subuqq3 (unsigned short
1104           fract A, unsigned short fract B)
1105  -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A,
1106           unsigned fract B)
1107  -- Runtime Function: unsigned long fract __subusq3 (unsigned long
1108           fract A, unsigned long fract B)
1109  -- Runtime Function: unsigned long long fract __subudq3 (unsigned long
1110           long fract A, unsigned long long fract B)
1111  -- Runtime Function: short accum __subha3 (short accum A, short accum
1112           B)
1113  -- Runtime Function: accum __subsa3 (accum A, accum B)
1114  -- Runtime Function: long accum __subda3 (long accum A, long accum B)
1115  -- Runtime Function: long long accum __subta3 (long long accum A, long
1116           long accum B)
1117  -- Runtime Function: unsigned short accum __subuha3 (unsigned short
1118           accum A, unsigned short accum B)
1119  -- Runtime Function: unsigned accum __subusa3 (unsigned accum A,
1120           unsigned accum B)
1121  -- Runtime Function: unsigned long accum __subuda3 (unsigned long
1122           accum A, unsigned long accum B)
1123  -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
1124           long accum A, unsigned long long accum B)
1125      These functions return the difference of A and B; that is, `A - B'.
1127  -- Runtime Function: short fract __sssubqq3 (short fract A, short
1128           fract B)
1129  -- Runtime Function: fract __sssubhq3 (fract A, fract B)
1130  -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B)
1131  -- Runtime Function: long long fract __sssubdq3 (long long fract A,
1132           long long fract B)
1133  -- Runtime Function: short accum __sssubha3 (short accum A, short
1134           accum B)
1135  -- Runtime Function: accum __sssubsa3 (accum A, accum B)
1136  -- Runtime Function: long accum __sssubda3 (long accum A, long accum B)
1137  -- Runtime Function: long long accum __sssubta3 (long long accum A,
1138           long long accum B)
1139      These functions return the difference of A and B with signed
1140      saturation;  that is, `A - B'.
1142  -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
1143           fract A, unsigned short fract B)
1144  -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A,
1145           unsigned fract B)
1146  -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long
1147           fract A, unsigned long fract B)
1148  -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned
1149           long long fract A, unsigned long long fract B)
1150  -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short
1151           accum A, unsigned short accum B)
1152  -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A,
1153           unsigned accum B)
1154  -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long
1155           accum A, unsigned long accum B)
1156  -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
1157           long long accum A, unsigned long long accum B)
1158      These functions return the difference of A and B with unsigned
1159      saturation;  that is, `A - B'.
1161  -- Runtime Function: short fract __mulqq3 (short fract A, short fract
1162           B)
1163  -- Runtime Function: fract __mulhq3 (fract A, fract B)
1164  -- Runtime Function: long fract __mulsq3 (long fract A, long fract B)
1165  -- Runtime Function: long long fract __muldq3 (long long fract A, long
1166           long fract B)
1167  -- Runtime Function: unsigned short fract __muluqq3 (unsigned short
1168           fract A, unsigned short fract B)
1169  -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A,
1170           unsigned fract B)
1171  -- Runtime Function: unsigned long fract __mulusq3 (unsigned long
1172           fract A, unsigned long fract B)
1173  -- Runtime Function: unsigned long long fract __muludq3 (unsigned long
1174           long fract A, unsigned long long fract B)
1175  -- Runtime Function: short accum __mulha3 (short accum A, short accum
1176           B)
1177  -- Runtime Function: accum __mulsa3 (accum A, accum B)
1178  -- Runtime Function: long accum __mulda3 (long accum A, long accum B)
1179  -- Runtime Function: long long accum __multa3 (long long accum A, long
1180           long accum B)
1181  -- Runtime Function: unsigned short accum __muluha3 (unsigned short
1182           accum A, unsigned short accum B)
1183  -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A,
1184           unsigned accum B)
1185  -- Runtime Function: unsigned long accum __muluda3 (unsigned long
1186           accum A, unsigned long accum B)
1187  -- Runtime Function: unsigned long long accum __muluta3 (unsigned long
1188           long accum A, unsigned long long accum B)
1189      These functions return the product of A and B.
1191  -- Runtime Function: short fract __ssmulqq3 (short fract A, short
1192           fract B)
1193  -- Runtime Function: fract __ssmulhq3 (fract A, fract B)
1194  -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B)
1195  -- Runtime Function: long long fract __ssmuldq3 (long long fract A,
1196           long long fract B)
1197  -- Runtime Function: short accum __ssmulha3 (short accum A, short
1198           accum B)
1199  -- Runtime Function: accum __ssmulsa3 (accum A, accum B)
1200  -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B)
1201  -- Runtime Function: long long accum __ssmulta3 (long long accum A,
1202           long long accum B)
1203      These functions return the product of A and B with signed
1204      saturation.
1206  -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short
1207           fract A, unsigned short fract B)
1208  -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A,
1209           unsigned fract B)
1210  -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long
1211           fract A, unsigned long fract B)
1212  -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned
1213           long long fract A, unsigned long long fract B)
1214  -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short
1215           accum A, unsigned short accum B)
1216  -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A,
1217           unsigned accum B)
1218  -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long
1219           accum A, unsigned long accum B)
1220  -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned
1221           long long accum A, unsigned long long accum B)
1222      These functions return the product of A and B with unsigned
1223      saturation.
1225  -- Runtime Function: short fract __divqq3 (short fract A, short fract
1226           B)
1227  -- Runtime Function: fract __divhq3 (fract A, fract B)
1228  -- Runtime Function: long fract __divsq3 (long fract A, long fract B)
1229  -- Runtime Function: long long fract __divdq3 (long long fract A, long
1230           long fract B)
1231  -- Runtime Function: short accum __divha3 (short accum A, short accum
1232           B)
1233  -- Runtime Function: accum __divsa3 (accum A, accum B)
1234  -- Runtime Function: long accum __divda3 (long accum A, long accum B)
1235  -- Runtime Function: long long accum __divta3 (long long accum A, long
1236           long accum B)
1237      These functions return the quotient of the signed division of A
1238      and B.
1240  -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short
1241           fract A, unsigned short fract B)
1242  -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A,
1243           unsigned fract B)
1244  -- Runtime Function: unsigned long fract __udivusq3 (unsigned long
1245           fract A, unsigned long fract B)
1246  -- Runtime Function: unsigned long long fract __udivudq3 (unsigned
1247           long long fract A, unsigned long long fract B)
1248  -- Runtime Function: unsigned short accum __udivuha3 (unsigned short
1249           accum A, unsigned short accum B)
1250  -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A,
1251           unsigned accum B)
1252  -- Runtime Function: unsigned long accum __udivuda3 (unsigned long
1253           accum A, unsigned long accum B)
1254  -- Runtime Function: unsigned long long accum __udivuta3 (unsigned
1255           long long accum A, unsigned long long accum B)
1256      These functions return the quotient of the unsigned division of A
1257      and B.
1259  -- Runtime Function: short fract __ssdivqq3 (short fract A, short
1260           fract B)
1261  -- Runtime Function: fract __ssdivhq3 (fract A, fract B)
1262  -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B)
1263  -- Runtime Function: long long fract __ssdivdq3 (long long fract A,
1264           long long fract B)
1265  -- Runtime Function: short accum __ssdivha3 (short accum A, short
1266           accum B)
1267  -- Runtime Function: accum __ssdivsa3 (accum A, accum B)
1268  -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B)
1269  -- Runtime Function: long long accum __ssdivta3 (long long accum A,
1270           long long accum B)
1271      These functions return the quotient of the signed division of A
1272      and B with signed saturation.
1274  -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short
1275           fract A, unsigned short fract B)
1276  -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A,
1277           unsigned fract B)
1278  -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long
1279           fract A, unsigned long fract B)
1280  -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned
1281           long long fract A, unsigned long long fract B)
1282  -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short
1283           accum A, unsigned short accum B)
1284  -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A,
1285           unsigned accum B)
1286  -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long
1287           accum A, unsigned long accum B)
1288  -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned
1289           long long accum A, unsigned long long accum B)
1290      These functions return the quotient of the unsigned division of A
1291      and B with unsigned saturation.
1293  -- Runtime Function: short fract __negqq2 (short fract A)
1294  -- Runtime Function: fract __neghq2 (fract A)
1295  -- Runtime Function: long fract __negsq2 (long fract A)
1296  -- Runtime Function: long long fract __negdq2 (long long fract A)
1297  -- Runtime Function: unsigned short fract __neguqq2 (unsigned short
1298           fract A)
1299  -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A)
1300  -- Runtime Function: unsigned long fract __negusq2 (unsigned long
1301           fract A)
1302  -- Runtime Function: unsigned long long fract __negudq2 (unsigned long
1303           long fract A)
1304  -- Runtime Function: short accum __negha2 (short accum A)
1305  -- Runtime Function: accum __negsa2 (accum A)
1306  -- Runtime Function: long accum __negda2 (long accum A)
1307  -- Runtime Function: long long accum __negta2 (long long accum A)
1308  -- Runtime Function: unsigned short accum __neguha2 (unsigned short
1309           accum A)
1310  -- Runtime Function: unsigned accum __negusa2 (unsigned accum A)
1311  -- Runtime Function: unsigned long accum __neguda2 (unsigned long
1312           accum A)
1313  -- Runtime Function: unsigned long long accum __neguta2 (unsigned long
1314           long accum A)
1315      These functions return the negation of A.
1317  -- Runtime Function: short fract __ssnegqq2 (short fract A)
1318  -- Runtime Function: fract __ssneghq2 (fract A)
1319  -- Runtime Function: long fract __ssnegsq2 (long fract A)
1320  -- Runtime Function: long long fract __ssnegdq2 (long long fract A)
1321  -- Runtime Function: short accum __ssnegha2 (short accum A)
1322  -- Runtime Function: accum __ssnegsa2 (accum A)
1323  -- Runtime Function: long accum __ssnegda2 (long accum A)
1324  -- Runtime Function: long long accum __ssnegta2 (long long accum A)
1325      These functions return the negation of A with signed saturation.
1327  -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short
1328           fract A)
1329  -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A)
1330  -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long
1331           fract A)
1332  -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned
1333           long long fract A)
1334  -- Runtime Function: unsigned short accum __usneguha2 (unsigned short
1335           accum A)
1336  -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A)
1337  -- Runtime Function: unsigned long accum __usneguda2 (unsigned long
1338           accum A)
1339  -- Runtime Function: unsigned long long accum __usneguta2 (unsigned
1340           long long accum A)
1341      These functions return the negation of A with unsigned saturation.
1343  -- Runtime Function: short fract __ashlqq3 (short fract A, int B)
1344  -- Runtime Function: fract __ashlhq3 (fract A, int B)
1345  -- Runtime Function: long fract __ashlsq3 (long fract A, int B)
1346  -- Runtime Function: long long fract __ashldq3 (long long fract A, int
1347           B)
1348  -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short
1349           fract A, int B)
1350  -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int
1351           B)
1352  -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long
1353           fract A, int B)
1354  -- Runtime Function: unsigned long long fract __ashludq3 (unsigned
1355           long long fract A, int B)
1356  -- Runtime Function: short accum __ashlha3 (short accum A, int B)
1357  -- Runtime Function: accum __ashlsa3 (accum A, int B)
1358  -- Runtime Function: long accum __ashlda3 (long accum A, int B)
1359  -- Runtime Function: long long accum __ashlta3 (long long accum A, int
1360           B)
1361  -- Runtime Function: unsigned short accum __ashluha3 (unsigned short
1362           accum A, int B)
1363  -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int
1364           B)
1365  -- Runtime Function: unsigned long accum __ashluda3 (unsigned long
1366           accum A, int B)
1367  -- Runtime Function: unsigned long long accum __ashluta3 (unsigned
1368           long long accum A, int B)
1369      These functions return the result of shifting A left by B bits.
1371  -- Runtime Function: short fract __ashrqq3 (short fract A, int B)
1372  -- Runtime Function: fract __ashrhq3 (fract A, int B)
1373  -- Runtime Function: long fract __ashrsq3 (long fract A, int B)
1374  -- Runtime Function: long long fract __ashrdq3 (long long fract A, int
1375           B)
1376  -- Runtime Function: short accum __ashrha3 (short accum A, int B)
1377  -- Runtime Function: accum __ashrsa3 (accum A, int B)
1378  -- Runtime Function: long accum __ashrda3 (long accum A, int B)
1379  -- Runtime Function: long long accum __ashrta3 (long long accum A, int
1380           B)
1381      These functions return the result of arithmetically shifting A
1382      right by B bits.
1384  -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short
1385           fract A, int B)
1386  -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int
1387           B)
1388  -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long
1389           fract A, int B)
1390  -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned
1391           long long fract A, int B)
1392  -- Runtime Function: unsigned short accum __lshruha3 (unsigned short
1393           accum A, int B)
1394  -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int
1395           B)
1396  -- Runtime Function: unsigned long accum __lshruda3 (unsigned long
1397           accum A, int B)
1398  -- Runtime Function: unsigned long long accum __lshruta3 (unsigned
1399           long long accum A, int B)
1400      These functions return the result of logically shifting A right by
1401      B bits.
1403  -- Runtime Function: fract __ssashlhq3 (fract A, int B)
1404  -- Runtime Function: long fract __ssashlsq3 (long fract A, int B)
1405  -- Runtime Function: long long fract __ssashldq3 (long long fract A,
1406           int B)
1407  -- Runtime Function: short accum __ssashlha3 (short accum A, int B)
1408  -- Runtime Function: accum __ssashlsa3 (accum A, int B)
1409  -- Runtime Function: long accum __ssashlda3 (long accum A, int B)
1410  -- Runtime Function: long long accum __ssashlta3 (long long accum A,
1411           int B)
1412      These functions return the result of shifting A left by B bits
1413      with signed saturation.
1415  -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short
1416           fract A, int B)
1417  -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A,
1418           int B)
1419  -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long
1420           fract A, int B)
1421  -- Runtime Function: unsigned long long fract __usashludq3 (unsigned
1422           long long fract A, int B)
1423  -- Runtime Function: unsigned short accum __usashluha3 (unsigned short
1424           accum A, int B)
1425  -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A,
1426           int B)
1427  -- Runtime Function: unsigned long accum __usashluda3 (unsigned long
1428           accum A, int B)
1429  -- Runtime Function: unsigned long long accum __usashluta3 (unsigned
1430           long long accum A, int B)
1431      These functions return the result of shifting A left by B bits
1432      with unsigned saturation.
1434 4.4.2 Comparison functions
1435 --------------------------
1437 The following functions implement fixed-point comparisons.  These
1438 functions implement a low-level compare, upon which the higher level
1439 comparison operators (such as less than and greater than or equal to)
1440 can be constructed.  The returned values lie in the range zero to two,
1441 to allow the high-level operators to be implemented by testing the
1442 returned result using either signed or unsigned comparison.
1444  -- Runtime Function: int __cmpqq2 (short fract A, short fract B)
1445  -- Runtime Function: int __cmphq2 (fract A, fract B)
1446  -- Runtime Function: int __cmpsq2 (long fract A, long fract B)
1447  -- Runtime Function: int __cmpdq2 (long long fract A, long long fract
1448           B)
1449  -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned
1450           short fract B)
1451  -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B)
1452  -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned
1453           long fract B)
1454  -- Runtime Function: int __cmpudq2 (unsigned long long fract A,
1455           unsigned long long fract B)
1456  -- Runtime Function: int __cmpha2 (short accum A, short accum B)
1457  -- Runtime Function: int __cmpsa2 (accum A, accum B)
1458  -- Runtime Function: int __cmpda2 (long accum A, long accum B)
1459  -- Runtime Function: int __cmpta2 (long long accum A, long long accum
1460           B)
1461  -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned
1462           short accum B)
1463  -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B)
1464  -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned
1465           long accum B)
1466  -- Runtime Function: int __cmputa2 (unsigned long long accum A,
1467           unsigned long long accum B)
1468      These functions perform a signed or unsigned comparison of A and B
1469      (depending on the selected machine mode).  If A is less than B,
1470      they return 0; if A is greater than B, they return 2; and if A and
1471      B are equal they return 1.
1473 4.4.3 Conversion functions
1474 --------------------------
1476  -- Runtime Function: fract __fractqqhq2 (short fract A)
1477  -- Runtime Function: long fract __fractqqsq2 (short fract A)
1478  -- Runtime Function: long long fract __fractqqdq2 (short fract A)
1479  -- Runtime Function: short accum __fractqqha (short fract A)
1480  -- Runtime Function: accum __fractqqsa (short fract A)
1481  -- Runtime Function: long accum __fractqqda (short fract A)
1482  -- Runtime Function: long long accum __fractqqta (short fract A)
1483  -- Runtime Function: unsigned short fract __fractqquqq (short fract A)
1484  -- Runtime Function: unsigned fract __fractqquhq (short fract A)
1485  -- Runtime Function: unsigned long fract __fractqqusq (short fract A)
1486  -- Runtime Function: unsigned long long fract __fractqqudq (short
1487           fract A)
1488  -- Runtime Function: unsigned short accum __fractqquha (short fract A)
1489  -- Runtime Function: unsigned accum __fractqqusa (short fract A)
1490  -- Runtime Function: unsigned long accum __fractqquda (short fract A)
1491  -- Runtime Function: unsigned long long accum __fractqquta (short
1492           fract A)
1493  -- Runtime Function: signed char __fractqqqi (short fract A)
1494  -- Runtime Function: short __fractqqhi (short fract A)
1495  -- Runtime Function: int __fractqqsi (short fract A)
1496  -- Runtime Function: long __fractqqdi (short fract A)
1497  -- Runtime Function: long long __fractqqti (short fract A)
1498  -- Runtime Function: float __fractqqsf (short fract A)
1499  -- Runtime Function: double __fractqqdf (short fract A)
1500  -- Runtime Function: short fract __fracthqqq2 (fract A)
1501  -- Runtime Function: long fract __fracthqsq2 (fract A)
1502  -- Runtime Function: long long fract __fracthqdq2 (fract A)
1503  -- Runtime Function: short accum __fracthqha (fract A)
1504  -- Runtime Function: accum __fracthqsa (fract A)
1505  -- Runtime Function: long accum __fracthqda (fract A)
1506  -- Runtime Function: long long accum __fracthqta (fract A)
1507  -- Runtime Function: unsigned short fract __fracthquqq (fract A)
1508  -- Runtime Function: unsigned fract __fracthquhq (fract A)
1509  -- Runtime Function: unsigned long fract __fracthqusq (fract A)
1510  -- Runtime Function: unsigned long long fract __fracthqudq (fract A)
1511  -- Runtime Function: unsigned short accum __fracthquha (fract A)
1512  -- Runtime Function: unsigned accum __fracthqusa (fract A)
1513  -- Runtime Function: unsigned long accum __fracthquda (fract A)
1514  -- Runtime Function: unsigned long long accum __fracthquta (fract A)
1515  -- Runtime Function: signed char __fracthqqi (fract A)
1516  -- Runtime Function: short __fracthqhi (fract A)
1517  -- Runtime Function: int __fracthqsi (fract A)
1518  -- Runtime Function: long __fracthqdi (fract A)
1519  -- Runtime Function: long long __fracthqti (fract A)
1520  -- Runtime Function: float __fracthqsf (fract A)
1521  -- Runtime Function: double __fracthqdf (fract A)
1522  -- Runtime Function: short fract __fractsqqq2 (long fract A)
1523  -- Runtime Function: fract __fractsqhq2 (long fract A)
1524  -- Runtime Function: long long fract __fractsqdq2 (long fract A)
1525  -- Runtime Function: short accum __fractsqha (long fract A)
1526  -- Runtime Function: accum __fractsqsa (long fract A)
1527  -- Runtime Function: long accum __fractsqda (long fract A)
1528  -- Runtime Function: long long accum __fractsqta (long fract A)
1529  -- Runtime Function: unsigned short fract __fractsquqq (long fract A)
1530  -- Runtime Function: unsigned fract __fractsquhq (long fract A)
1531  -- Runtime Function: unsigned long fract __fractsqusq (long fract A)
1532  -- Runtime Function: unsigned long long fract __fractsqudq (long fract
1533           A)
1534  -- Runtime Function: unsigned short accum __fractsquha (long fract A)
1535  -- Runtime Function: unsigned accum __fractsqusa (long fract A)
1536  -- Runtime Function: unsigned long accum __fractsquda (long fract A)
1537  -- Runtime Function: unsigned long long accum __fractsquta (long fract
1538           A)
1539  -- Runtime Function: signed char __fractsqqi (long fract A)
1540  -- Runtime Function: short __fractsqhi (long fract A)
1541  -- Runtime Function: int __fractsqsi (long fract A)
1542  -- Runtime Function: long __fractsqdi (long fract A)
1543  -- Runtime Function: long long __fractsqti (long fract A)
1544  -- Runtime Function: float __fractsqsf (long fract A)
1545  -- Runtime Function: double __fractsqdf (long fract A)
1546  -- Runtime Function: short fract __fractdqqq2 (long long fract A)
1547  -- Runtime Function: fract __fractdqhq2 (long long fract A)
1548  -- Runtime Function: long fract __fractdqsq2 (long long fract A)
1549  -- Runtime Function: short accum __fractdqha (long long fract A)
1550  -- Runtime Function: accum __fractdqsa (long long fract A)
1551  -- Runtime Function: long accum __fractdqda (long long fract A)
1552  -- Runtime Function: long long accum __fractdqta (long long fract A)
1553  -- Runtime Function: unsigned short fract __fractdquqq (long long
1554           fract A)
1555  -- Runtime Function: unsigned fract __fractdquhq (long long fract A)
1556  -- Runtime Function: unsigned long fract __fractdqusq (long long fract
1557           A)
1558  -- Runtime Function: unsigned long long fract __fractdqudq (long long
1559           fract A)
1560  -- Runtime Function: unsigned short accum __fractdquha (long long
1561           fract A)
1562  -- Runtime Function: unsigned accum __fractdqusa (long long fract A)
1563  -- Runtime Function: unsigned long accum __fractdquda (long long fract
1564           A)
1565  -- Runtime Function: unsigned long long accum __fractdquta (long long
1566           fract A)
1567  -- Runtime Function: signed char __fractdqqi (long long fract A)
1568  -- Runtime Function: short __fractdqhi (long long fract A)
1569  -- Runtime Function: int __fractdqsi (long long fract A)
1570  -- Runtime Function: long __fractdqdi (long long fract A)
1571  -- Runtime Function: long long __fractdqti (long long fract A)
1572  -- Runtime Function: float __fractdqsf (long long fract A)
1573  -- Runtime Function: double __fractdqdf (long long fract A)
1574  -- Runtime Function: short fract __fracthaqq (short accum A)
1575  -- Runtime Function: fract __fracthahq (short accum A)
1576  -- Runtime Function: long fract __fracthasq (short accum A)
1577  -- Runtime Function: long long fract __fracthadq (short accum A)
1578  -- Runtime Function: accum __fracthasa2 (short accum A)
1579  -- Runtime Function: long accum __fracthada2 (short accum A)
1580  -- Runtime Function: long long accum __fracthata2 (short accum A)
1581  -- Runtime Function: unsigned short fract __fracthauqq (short accum A)
1582  -- Runtime Function: unsigned fract __fracthauhq (short accum A)
1583  -- Runtime Function: unsigned long fract __fracthausq (short accum A)
1584  -- Runtime Function: unsigned long long fract __fracthaudq (short
1585           accum A)
1586  -- Runtime Function: unsigned short accum __fracthauha (short accum A)
1587  -- Runtime Function: unsigned accum __fracthausa (short accum A)
1588  -- Runtime Function: unsigned long accum __fracthauda (short accum A)
1589  -- Runtime Function: unsigned long long accum __fracthauta (short
1590           accum A)
1591  -- Runtime Function: signed char __fracthaqi (short accum A)
1592  -- Runtime Function: short __fracthahi (short accum A)
1593  -- Runtime Function: int __fracthasi (short accum A)
1594  -- Runtime Function: long __fracthadi (short accum A)
1595  -- Runtime Function: long long __fracthati (short accum A)
1596  -- Runtime Function: float __fracthasf (short accum A)
1597  -- Runtime Function: double __fracthadf (short accum A)
1598  -- Runtime Function: short fract __fractsaqq (accum A)
1599  -- Runtime Function: fract __fractsahq (accum A)
1600  -- Runtime Function: long fract __fractsasq (accum A)
1601  -- Runtime Function: long long fract __fractsadq (accum A)
1602  -- Runtime Function: short accum __fractsaha2 (accum A)
1603  -- Runtime Function: long accum __fractsada2 (accum A)
1604  -- Runtime Function: long long accum __fractsata2 (accum A)
1605  -- Runtime Function: unsigned short fract __fractsauqq (accum A)
1606  -- Runtime Function: unsigned fract __fractsauhq (accum A)
1607  -- Runtime Function: unsigned long fract __fractsausq (accum A)
1608  -- Runtime Function: unsigned long long fract __fractsaudq (accum A)
1609  -- Runtime Function: unsigned short accum __fractsauha (accum A)
1610  -- Runtime Function: unsigned accum __fractsausa (accum A)
1611  -- Runtime Function: unsigned long accum __fractsauda (accum A)
1612  -- Runtime Function: unsigned long long accum __fractsauta (accum A)
1613  -- Runtime Function: signed char __fractsaqi (accum A)
1614  -- Runtime Function: short __fractsahi (accum A)
1615  -- Runtime Function: int __fractsasi (accum A)
1616  -- Runtime Function: long __fractsadi (accum A)
1617  -- Runtime Function: long long __fractsati (accum A)
1618  -- Runtime Function: float __fractsasf (accum A)
1619  -- Runtime Function: double __fractsadf (accum A)
1620  -- Runtime Function: short fract __fractdaqq (long accum A)
1621  -- Runtime Function: fract __fractdahq (long accum A)
1622  -- Runtime Function: long fract __fractdasq (long accum A)
1623  -- Runtime Function: long long fract __fractdadq (long accum A)
1624  -- Runtime Function: short accum __fractdaha2 (long accum A)
1625  -- Runtime Function: accum __fractdasa2 (long accum A)
1626  -- Runtime Function: long long accum __fractdata2 (long accum A)
1627  -- Runtime Function: unsigned short fract __fractdauqq (long accum A)
1628  -- Runtime Function: unsigned fract __fractdauhq (long accum A)
1629  -- Runtime Function: unsigned long fract __fractdausq (long accum A)
1630  -- Runtime Function: unsigned long long fract __fractdaudq (long accum
1631           A)
1632  -- Runtime Function: unsigned short accum __fractdauha (long accum A)
1633  -- Runtime Function: unsigned accum __fractdausa (long accum A)
1634  -- Runtime Function: unsigned long accum __fractdauda (long accum A)
1635  -- Runtime Function: unsigned long long accum __fractdauta (long accum
1636           A)
1637  -- Runtime Function: signed char __fractdaqi (long accum A)
1638  -- Runtime Function: short __fractdahi (long accum A)
1639  -- Runtime Function: int __fractdasi (long accum A)
1640  -- Runtime Function: long __fractdadi (long accum A)
1641  -- Runtime Function: long long __fractdati (long accum A)
1642  -- Runtime Function: float __fractdasf (long accum A)
1643  -- Runtime Function: double __fractdadf (long accum A)
1644  -- Runtime Function: short fract __fracttaqq (long long accum A)
1645  -- Runtime Function: fract __fracttahq (long long accum A)
1646  -- Runtime Function: long fract __fracttasq (long long accum A)
1647  -- Runtime Function: long long fract __fracttadq (long long accum A)
1648  -- Runtime Function: short accum __fracttaha2 (long long accum A)
1649  -- Runtime Function: accum __fracttasa2 (long long accum A)
1650  -- Runtime Function: long accum __fracttada2 (long long accum A)
1651  -- Runtime Function: unsigned short fract __fracttauqq (long long
1652           accum A)
1653  -- Runtime Function: unsigned fract __fracttauhq (long long accum A)
1654  -- Runtime Function: unsigned long fract __fracttausq (long long accum
1655           A)
1656  -- Runtime Function: unsigned long long fract __fracttaudq (long long
1657           accum A)
1658  -- Runtime Function: unsigned short accum __fracttauha (long long
1659           accum A)
1660  -- Runtime Function: unsigned accum __fracttausa (long long accum A)
1661  -- Runtime Function: unsigned long accum __fracttauda (long long accum
1662           A)
1663  -- Runtime Function: unsigned long long accum __fracttauta (long long
1664           accum A)
1665  -- Runtime Function: signed char __fracttaqi (long long accum A)
1666  -- Runtime Function: short __fracttahi (long long accum A)
1667  -- Runtime Function: int __fracttasi (long long accum A)
1668  -- Runtime Function: long __fracttadi (long long accum A)
1669  -- Runtime Function: long long __fracttati (long long accum A)
1670  -- Runtime Function: float __fracttasf (long long accum A)
1671  -- Runtime Function: double __fracttadf (long long accum A)
1672  -- Runtime Function: short fract __fractuqqqq (unsigned short fract A)
1673  -- Runtime Function: fract __fractuqqhq (unsigned short fract A)
1674  -- Runtime Function: long fract __fractuqqsq (unsigned short fract A)
1675  -- Runtime Function: long long fract __fractuqqdq (unsigned short
1676           fract A)
1677  -- Runtime Function: short accum __fractuqqha (unsigned short fract A)
1678  -- Runtime Function: accum __fractuqqsa (unsigned short fract A)
1679  -- Runtime Function: long accum __fractuqqda (unsigned short fract A)
1680  -- Runtime Function: long long accum __fractuqqta (unsigned short
1681           fract A)
1682  -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short
1683           fract A)
1684  -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned
1685           short fract A)
1686  -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned
1687           short fract A)
1688  -- Runtime Function: unsigned short accum __fractuqquha (unsigned
1689           short fract A)
1690  -- Runtime Function: unsigned accum __fractuqqusa (unsigned short
1691           fract A)
1692  -- Runtime Function: unsigned long accum __fractuqquda (unsigned short
1693           fract A)
1694  -- Runtime Function: unsigned long long accum __fractuqquta (unsigned
1695           short fract A)
1696  -- Runtime Function: signed char __fractuqqqi (unsigned short fract A)
1697  -- Runtime Function: short __fractuqqhi (unsigned short fract A)
1698  -- Runtime Function: int __fractuqqsi (unsigned short fract A)
1699  -- Runtime Function: long __fractuqqdi (unsigned short fract A)
1700  -- Runtime Function: long long __fractuqqti (unsigned short fract A)
1701  -- Runtime Function: float __fractuqqsf (unsigned short fract A)
1702  -- Runtime Function: double __fractuqqdf (unsigned short fract A)
1703  -- Runtime Function: short fract __fractuhqqq (unsigned fract A)
1704  -- Runtime Function: fract __fractuhqhq (unsigned fract A)
1705  -- Runtime Function: long fract __fractuhqsq (unsigned fract A)
1706  -- Runtime Function: long long fract __fractuhqdq (unsigned fract A)
1707  -- Runtime Function: short accum __fractuhqha (unsigned fract A)
1708  -- Runtime Function: accum __fractuhqsa (unsigned fract A)
1709  -- Runtime Function: long accum __fractuhqda (unsigned fract A)
1710  -- Runtime Function: long long accum __fractuhqta (unsigned fract A)
1711  -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned
1712           fract A)
1713  -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned
1714           fract A)
1715  -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned
1716           fract A)
1717  -- Runtime Function: unsigned short accum __fractuhquha (unsigned
1718           fract A)
1719  -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A)
1720  -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract
1721           A)
1722  -- Runtime Function: unsigned long long accum __fractuhquta (unsigned
1723           fract A)
1724  -- Runtime Function: signed char __fractuhqqi (unsigned fract A)
1725  -- Runtime Function: short __fractuhqhi (unsigned fract A)
1726  -- Runtime Function: int __fractuhqsi (unsigned fract A)
1727  -- Runtime Function: long __fractuhqdi (unsigned fract A)
1728  -- Runtime Function: long long __fractuhqti (unsigned fract A)
1729  -- Runtime Function: float __fractuhqsf (unsigned fract A)
1730  -- Runtime Function: double __fractuhqdf (unsigned fract A)
1731  -- Runtime Function: short fract __fractusqqq (unsigned long fract A)
1732  -- Runtime Function: fract __fractusqhq (unsigned long fract A)
1733  -- Runtime Function: long fract __fractusqsq (unsigned long fract A)
1734  -- Runtime Function: long long fract __fractusqdq (unsigned long fract
1735           A)
1736  -- Runtime Function: short accum __fractusqha (unsigned long fract A)
1737  -- Runtime Function: accum __fractusqsa (unsigned long fract A)
1738  -- Runtime Function: long accum __fractusqda (unsigned long fract A)
1739  -- Runtime Function: long long accum __fractusqta (unsigned long fract
1740           A)
1741  -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned
1742           long fract A)
1743  -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long
1744           fract A)
1745  -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned
1746           long fract A)
1747  -- Runtime Function: unsigned short accum __fractusquha (unsigned long
1748           fract A)
1749  -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract
1750           A)
1751  -- Runtime Function: unsigned long accum __fractusquda (unsigned long
1752           fract A)
1753  -- Runtime Function: unsigned long long accum __fractusquta (unsigned
1754           long fract A)
1755  -- Runtime Function: signed char __fractusqqi (unsigned long fract A)
1756  -- Runtime Function: short __fractusqhi (unsigned long fract A)
1757  -- Runtime Function: int __fractusqsi (unsigned long fract A)
1758  -- Runtime Function: long __fractusqdi (unsigned long fract A)
1759  -- Runtime Function: long long __fractusqti (unsigned long fract A)
1760  -- Runtime Function: float __fractusqsf (unsigned long fract A)
1761  -- Runtime Function: double __fractusqdf (unsigned long fract A)
1762  -- Runtime Function: short fract __fractudqqq (unsigned long long
1763           fract A)
1764  -- Runtime Function: fract __fractudqhq (unsigned long long fract A)
1765  -- Runtime Function: long fract __fractudqsq (unsigned long long fract
1766           A)
1767  -- Runtime Function: long long fract __fractudqdq (unsigned long long
1768           fract A)
1769  -- Runtime Function: short accum __fractudqha (unsigned long long
1770           fract A)
1771  -- Runtime Function: accum __fractudqsa (unsigned long long fract A)
1772  -- Runtime Function: long accum __fractudqda (unsigned long long fract
1773           A)
1774  -- Runtime Function: long long accum __fractudqta (unsigned long long
1775           fract A)
1776  -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned
1777           long long fract A)
1778  -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long
1779           fract A)
1780  -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long
1781           long fract A)
1782  -- Runtime Function: unsigned short accum __fractudquha (unsigned long
1783           long fract A)
1784  -- Runtime Function: unsigned accum __fractudqusa (unsigned long long
1785           fract A)
1786  -- Runtime Function: unsigned long accum __fractudquda (unsigned long
1787           long fract A)
1788  -- Runtime Function: unsigned long long accum __fractudquta (unsigned
1789           long long fract A)
1790  -- Runtime Function: signed char __fractudqqi (unsigned long long
1791           fract A)
1792  -- Runtime Function: short __fractudqhi (unsigned long long fract A)
1793  -- Runtime Function: int __fractudqsi (unsigned long long fract A)
1794  -- Runtime Function: long __fractudqdi (unsigned long long fract A)
1795  -- Runtime Function: long long __fractudqti (unsigned long long fract
1796           A)
1797  -- Runtime Function: float __fractudqsf (unsigned long long fract A)
1798  -- Runtime Function: double __fractudqdf (unsigned long long fract A)
1799  -- Runtime Function: short fract __fractuhaqq (unsigned short accum A)
1800  -- Runtime Function: fract __fractuhahq (unsigned short accum A)
1801  -- Runtime Function: long fract __fractuhasq (unsigned short accum A)
1802  -- Runtime Function: long long fract __fractuhadq (unsigned short
1803           accum A)
1804  -- Runtime Function: short accum __fractuhaha (unsigned short accum A)
1805  -- Runtime Function: accum __fractuhasa (unsigned short accum A)
1806  -- Runtime Function: long accum __fractuhada (unsigned short accum A)
1807  -- Runtime Function: long long accum __fractuhata (unsigned short
1808           accum A)
1809  -- Runtime Function: unsigned short fract __fractuhauqq (unsigned
1810           short accum A)
1811  -- Runtime Function: unsigned fract __fractuhauhq (unsigned short
1812           accum A)
1813  -- Runtime Function: unsigned long fract __fractuhausq (unsigned short
1814           accum A)
1815  -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned
1816           short accum A)
1817  -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short
1818           accum A)
1819  -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned
1820           short accum A)
1821  -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned
1822           short accum A)
1823  -- Runtime Function: signed char __fractuhaqi (unsigned short accum A)
1824  -- Runtime Function: short __fractuhahi (unsigned short accum A)
1825  -- Runtime Function: int __fractuhasi (unsigned short accum A)
1826  -- Runtime Function: long __fractuhadi (unsigned short accum A)
1827  -- Runtime Function: long long __fractuhati (unsigned short accum A)
1828  -- Runtime Function: float __fractuhasf (unsigned short accum A)
1829  -- Runtime Function: double __fractuhadf (unsigned short accum A)
1830  -- Runtime Function: short fract __fractusaqq (unsigned accum A)
1831  -- Runtime Function: fract __fractusahq (unsigned accum A)
1832  -- Runtime Function: long fract __fractusasq (unsigned accum A)
1833  -- Runtime Function: long long fract __fractusadq (unsigned accum A)
1834  -- Runtime Function: short accum __fractusaha (unsigned accum A)
1835  -- Runtime Function: accum __fractusasa (unsigned accum A)
1836  -- Runtime Function: long accum __fractusada (unsigned accum A)
1837  -- Runtime Function: long long accum __fractusata (unsigned accum A)
1838  -- Runtime Function: unsigned short fract __fractusauqq (unsigned
1839           accum A)
1840  -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A)
1841  -- Runtime Function: unsigned long fract __fractusausq (unsigned accum
1842           A)
1843  -- Runtime Function: unsigned long long fract __fractusaudq (unsigned
1844           accum A)
1845  -- Runtime Function: unsigned short accum __fractusauha2 (unsigned
1846           accum A)
1847  -- Runtime Function: unsigned long accum __fractusauda2 (unsigned
1848           accum A)
1849  -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned
1850           accum A)
1851  -- Runtime Function: signed char __fractusaqi (unsigned accum A)
1852  -- Runtime Function: short __fractusahi (unsigned accum A)
1853  -- Runtime Function: int __fractusasi (unsigned accum A)
1854  -- Runtime Function: long __fractusadi (unsigned accum A)
1855  -- Runtime Function: long long __fractusati (unsigned accum A)
1856  -- Runtime Function: float __fractusasf (unsigned accum A)
1857  -- Runtime Function: double __fractusadf (unsigned accum A)
1858  -- Runtime Function: short fract __fractudaqq (unsigned long accum A)
1859  -- Runtime Function: fract __fractudahq (unsigned long accum A)
1860  -- Runtime Function: long fract __fractudasq (unsigned long accum A)
1861  -- Runtime Function: long long fract __fractudadq (unsigned long accum
1862           A)
1863  -- Runtime Function: short accum __fractudaha (unsigned long accum A)
1864  -- Runtime Function: accum __fractudasa (unsigned long accum A)
1865  -- Runtime Function: long accum __fractudada (unsigned long accum A)
1866  -- Runtime Function: long long accum __fractudata (unsigned long accum
1867           A)
1868  -- Runtime Function: unsigned short fract __fractudauqq (unsigned long
1869           accum A)
1870  -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum
1871           A)
1872  -- Runtime Function: unsigned long fract __fractudausq (unsigned long
1873           accum A)
1874  -- Runtime Function: unsigned long long fract __fractudaudq (unsigned
1875           long accum A)
1876  -- Runtime Function: unsigned short accum __fractudauha2 (unsigned
1877           long accum A)
1878  -- Runtime Function: unsigned accum __fractudausa2 (unsigned long
1879           accum A)
1880  -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned
1881           long accum A)
1882  -- Runtime Function: signed char __fractudaqi (unsigned long accum A)
1883  -- Runtime Function: short __fractudahi (unsigned long accum A)
1884  -- Runtime Function: int __fractudasi (unsigned long accum A)
1885  -- Runtime Function: long __fractudadi (unsigned long accum A)
1886  -- Runtime Function: long long __fractudati (unsigned long accum A)
1887  -- Runtime Function: float __fractudasf (unsigned long accum A)
1888  -- Runtime Function: double __fractudadf (unsigned long accum A)
1889  -- Runtime Function: short fract __fractutaqq (unsigned long long
1890           accum A)
1891  -- Runtime Function: fract __fractutahq (unsigned long long accum A)
1892  -- Runtime Function: long fract __fractutasq (unsigned long long accum
1893           A)
1894  -- Runtime Function: long long fract __fractutadq (unsigned long long
1895           accum A)
1896  -- Runtime Function: short accum __fractutaha (unsigned long long
1897           accum A)
1898  -- Runtime Function: accum __fractutasa (unsigned long long accum A)
1899  -- Runtime Function: long accum __fractutada (unsigned long long accum
1900           A)
1901  -- Runtime Function: long long accum __fractutata (unsigned long long
1902           accum A)
1903  -- Runtime Function: unsigned short fract __fractutauqq (unsigned long
1904           long accum A)
1905  -- Runtime Function: unsigned fract __fractutauhq (unsigned long long
1906           accum A)
1907  -- Runtime Function: unsigned long fract __fractutausq (unsigned long
1908           long accum A)
1909  -- Runtime Function: unsigned long long fract __fractutaudq (unsigned
1910           long long accum A)
1911  -- Runtime Function: unsigned short accum __fractutauha2 (unsigned
1912           long long accum A)
1913  -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long
1914           accum A)
1915  -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long
1916           long accum A)
1917  -- Runtime Function: signed char __fractutaqi (unsigned long long
1918           accum A)
1919  -- Runtime Function: short __fractutahi (unsigned long long accum A)
1920  -- Runtime Function: int __fractutasi (unsigned long long accum A)
1921  -- Runtime Function: long __fractutadi (unsigned long long accum A)
1922  -- Runtime Function: long long __fractutati (unsigned long long accum
1923           A)
1924  -- Runtime Function: float __fractutasf (unsigned long long accum A)
1925  -- Runtime Function: double __fractutadf (unsigned long long accum A)
1926  -- Runtime Function: short fract __fractqiqq (signed char A)
1927  -- Runtime Function: fract __fractqihq (signed char A)
1928  -- Runtime Function: long fract __fractqisq (signed char A)
1929  -- Runtime Function: long long fract __fractqidq (signed char A)
1930  -- Runtime Function: short accum __fractqiha (signed char A)
1931  -- Runtime Function: accum __fractqisa (signed char A)
1932  -- Runtime Function: long accum __fractqida (signed char A)
1933  -- Runtime Function: long long accum __fractqita (signed char A)
1934  -- Runtime Function: unsigned short fract __fractqiuqq (signed char A)
1935  -- Runtime Function: unsigned fract __fractqiuhq (signed char A)
1936  -- Runtime Function: unsigned long fract __fractqiusq (signed char A)
1937  -- Runtime Function: unsigned long long fract __fractqiudq (signed
1938           char A)
1939  -- Runtime Function: unsigned short accum __fractqiuha (signed char A)
1940  -- Runtime Function: unsigned accum __fractqiusa (signed char A)
1941  -- Runtime Function: unsigned long accum __fractqiuda (signed char A)
1942  -- Runtime Function: unsigned long long accum __fractqiuta (signed
1943           char A)
1944  -- Runtime Function: short fract __fracthiqq (short A)
1945  -- Runtime Function: fract __fracthihq (short A)
1946  -- Runtime Function: long fract __fracthisq (short A)
1947  -- Runtime Function: long long fract __fracthidq (short A)
1948  -- Runtime Function: short accum __fracthiha (short A)
1949  -- Runtime Function: accum __fracthisa (short A)
1950  -- Runtime Function: long accum __fracthida (short A)
1951  -- Runtime Function: long long accum __fracthita (short A)
1952  -- Runtime Function: unsigned short fract __fracthiuqq (short A)
1953  -- Runtime Function: unsigned fract __fracthiuhq (short A)
1954  -- Runtime Function: unsigned long fract __fracthiusq (short A)
1955  -- Runtime Function: unsigned long long fract __fracthiudq (short A)
1956  -- Runtime Function: unsigned short accum __fracthiuha (short A)
1957  -- Runtime Function: unsigned accum __fracthiusa (short A)
1958  -- Runtime Function: unsigned long accum __fracthiuda (short A)
1959  -- Runtime Function: unsigned long long accum __fracthiuta (short A)
1960  -- Runtime Function: short fract __fractsiqq (int A)
1961  -- Runtime Function: fract __fractsihq (int A)
1962  -- Runtime Function: long fract __fractsisq (int A)
1963  -- Runtime Function: long long fract __fractsidq (int A)
1964  -- Runtime Function: short accum __fractsiha (int A)
1965  -- Runtime Function: accum __fractsisa (int A)
1966  -- Runtime Function: long accum __fractsida (int A)
1967  -- Runtime Function: long long accum __fractsita (int A)
1968  -- Runtime Function: unsigned short fract __fractsiuqq (int A)
1969  -- Runtime Function: unsigned fract __fractsiuhq (int A)
1970  -- Runtime Function: unsigned long fract __fractsiusq (int A)
1971  -- Runtime Function: unsigned long long fract __fractsiudq (int A)
1972  -- Runtime Function: unsigned short accum __fractsiuha (int A)
1973  -- Runtime Function: unsigned accum __fractsiusa (int A)
1974  -- Runtime Function: unsigned long accum __fractsiuda (int A)
1975  -- Runtime Function: unsigned long long accum __fractsiuta (int A)
1976  -- Runtime Function: short fract __fractdiqq (long A)
1977  -- Runtime Function: fract __fractdihq (long A)
1978  -- Runtime Function: long fract __fractdisq (long A)
1979  -- Runtime Function: long long fract __fractdidq (long A)
1980  -- Runtime Function: short accum __fractdiha (long A)
1981  -- Runtime Function: accum __fractdisa (long A)
1982  -- Runtime Function: long accum __fractdida (long A)
1983  -- Runtime Function: long long accum __fractdita (long A)
1984  -- Runtime Function: unsigned short fract __fractdiuqq (long A)
1985  -- Runtime Function: unsigned fract __fractdiuhq (long A)
1986  -- Runtime Function: unsigned long fract __fractdiusq (long A)
1987  -- Runtime Function: unsigned long long fract __fractdiudq (long A)
1988  -- Runtime Function: unsigned short accum __fractdiuha (long A)
1989  -- Runtime Function: unsigned accum __fractdiusa (long A)
1990  -- Runtime Function: unsigned long accum __fractdiuda (long A)
1991  -- Runtime Function: unsigned long long accum __fractdiuta (long A)
1992  -- Runtime Function: short fract __fracttiqq (long long A)
1993  -- Runtime Function: fract __fracttihq (long long A)
1994  -- Runtime Function: long fract __fracttisq (long long A)
1995  -- Runtime Function: long long fract __fracttidq (long long A)
1996  -- Runtime Function: short accum __fracttiha (long long A)
1997  -- Runtime Function: accum __fracttisa (long long A)
1998  -- Runtime Function: long accum __fracttida (long long A)
1999  -- Runtime Function: long long accum __fracttita (long long A)
2000  -- Runtime Function: unsigned short fract __fracttiuqq (long long A)
2001  -- Runtime Function: unsigned fract __fracttiuhq (long long A)
2002  -- Runtime Function: unsigned long fract __fracttiusq (long long A)
2003  -- Runtime Function: unsigned long long fract __fracttiudq (long long
2004           A)
2005  -- Runtime Function: unsigned short accum __fracttiuha (long long A)
2006  -- Runtime Function: unsigned accum __fracttiusa (long long A)
2007  -- Runtime Function: unsigned long accum __fracttiuda (long long A)
2008  -- Runtime Function: unsigned long long accum __fracttiuta (long long
2009           A)
2010  -- Runtime Function: short fract __fractsfqq (float A)
2011  -- Runtime Function: fract __fractsfhq (float A)
2012  -- Runtime Function: long fract __fractsfsq (float A)
2013  -- Runtime Function: long long fract __fractsfdq (float A)
2014  -- Runtime Function: short accum __fractsfha (float A)
2015  -- Runtime Function: accum __fractsfsa (float A)
2016  -- Runtime Function: long accum __fractsfda (float A)
2017  -- Runtime Function: long long accum __fractsfta (float A)
2018  -- Runtime Function: unsigned short fract __fractsfuqq (float A)
2019  -- Runtime Function: unsigned fract __fractsfuhq (float A)
2020  -- Runtime Function: unsigned long fract __fractsfusq (float A)
2021  -- Runtime Function: unsigned long long fract __fractsfudq (float A)
2022  -- Runtime Function: unsigned short accum __fractsfuha (float A)
2023  -- Runtime Function: unsigned accum __fractsfusa (float A)
2024  -- Runtime Function: unsigned long accum __fractsfuda (float A)
2025  -- Runtime Function: unsigned long long accum __fractsfuta (float A)
2026  -- Runtime Function: short fract __fractdfqq (double A)
2027  -- Runtime Function: fract __fractdfhq (double A)
2028  -- Runtime Function: long fract __fractdfsq (double A)
2029  -- Runtime Function: long long fract __fractdfdq (double A)
2030  -- Runtime Function: short accum __fractdfha (double A)
2031  -- Runtime Function: accum __fractdfsa (double A)
2032  -- Runtime Function: long accum __fractdfda (double A)
2033  -- Runtime Function: long long accum __fractdfta (double A)
2034  -- Runtime Function: unsigned short fract __fractdfuqq (double A)
2035  -- Runtime Function: unsigned fract __fractdfuhq (double A)
2036  -- Runtime Function: unsigned long fract __fractdfusq (double A)
2037  -- Runtime Function: unsigned long long fract __fractdfudq (double A)
2038  -- Runtime Function: unsigned short accum __fractdfuha (double A)
2039  -- Runtime Function: unsigned accum __fractdfusa (double A)
2040  -- Runtime Function: unsigned long accum __fractdfuda (double A)
2041  -- Runtime Function: unsigned long long accum __fractdfuta (double A)
2042      These functions convert from fractional and signed non-fractionals
2043      to fractionals and signed non-fractionals, without saturation.
2045  -- Runtime Function: fract __satfractqqhq2 (short fract A)
2046  -- Runtime Function: long fract __satfractqqsq2 (short fract A)
2047  -- Runtime Function: long long fract __satfractqqdq2 (short fract A)
2048  -- Runtime Function: short accum __satfractqqha (short fract A)
2049  -- Runtime Function: accum __satfractqqsa (short fract A)
2050  -- Runtime Function: long accum __satfractqqda (short fract A)
2051  -- Runtime Function: long long accum __satfractqqta (short fract A)
2052  -- Runtime Function: unsigned short fract __satfractqquqq (short fract
2053           A)
2054  -- Runtime Function: unsigned fract __satfractqquhq (short fract A)
2055  -- Runtime Function: unsigned long fract __satfractqqusq (short fract
2056           A)
2057  -- Runtime Function: unsigned long long fract __satfractqqudq (short
2058           fract A)
2059  -- Runtime Function: unsigned short accum __satfractqquha (short fract
2060           A)
2061  -- Runtime Function: unsigned accum __satfractqqusa (short fract A)
2062  -- Runtime Function: unsigned long accum __satfractqquda (short fract
2063           A)
2064  -- Runtime Function: unsigned long long accum __satfractqquta (short
2065           fract A)
2066  -- Runtime Function: short fract __satfracthqqq2 (fract A)
2067  -- Runtime Function: long fract __satfracthqsq2 (fract A)
2068  -- Runtime Function: long long fract __satfracthqdq2 (fract A)
2069  -- Runtime Function: short accum __satfracthqha (fract A)
2070  -- Runtime Function: accum __satfracthqsa (fract A)
2071  -- Runtime Function: long accum __satfracthqda (fract A)
2072  -- Runtime Function: long long accum __satfracthqta (fract A)
2073  -- Runtime Function: unsigned short fract __satfracthquqq (fract A)
2074  -- Runtime Function: unsigned fract __satfracthquhq (fract A)
2075  -- Runtime Function: unsigned long fract __satfracthqusq (fract A)
2076  -- Runtime Function: unsigned long long fract __satfracthqudq (fract A)
2077  -- Runtime Function: unsigned short accum __satfracthquha (fract A)
2078  -- Runtime Function: unsigned accum __satfracthqusa (fract A)
2079  -- Runtime Function: unsigned long accum __satfracthquda (fract A)
2080  -- Runtime Function: unsigned long long accum __satfracthquta (fract A)
2081  -- Runtime Function: short fract __satfractsqqq2 (long fract A)
2082  -- Runtime Function: fract __satfractsqhq2 (long fract A)
2083  -- Runtime Function: long long fract __satfractsqdq2 (long fract A)
2084  -- Runtime Function: short accum __satfractsqha (long fract A)
2085  -- Runtime Function: accum __satfractsqsa (long fract A)
2086  -- Runtime Function: long accum __satfractsqda (long fract A)
2087  -- Runtime Function: long long accum __satfractsqta (long fract A)
2088  -- Runtime Function: unsigned short fract __satfractsquqq (long fract
2089           A)
2090  -- Runtime Function: unsigned fract __satfractsquhq (long fract A)
2091  -- Runtime Function: unsigned long fract __satfractsqusq (long fract A)
2092  -- Runtime Function: unsigned long long fract __satfractsqudq (long
2093           fract A)
2094  -- Runtime Function: unsigned short accum __satfractsquha (long fract
2095           A)
2096  -- Runtime Function: unsigned accum __satfractsqusa (long fract A)
2097  -- Runtime Function: unsigned long accum __satfractsquda (long fract A)
2098  -- Runtime Function: unsigned long long accum __satfractsquta (long
2099           fract A)
2100  -- Runtime Function: short fract __satfractdqqq2 (long long fract A)
2101  -- Runtime Function: fract __satfractdqhq2 (long long fract A)
2102  -- Runtime Function: long fract __satfractdqsq2 (long long fract A)
2103  -- Runtime Function: short accum __satfractdqha (long long fract A)
2104  -- Runtime Function: accum __satfractdqsa (long long fract A)
2105  -- Runtime Function: long accum __satfractdqda (long long fract A)
2106  -- Runtime Function: long long accum __satfractdqta (long long fract A)
2107  -- Runtime Function: unsigned short fract __satfractdquqq (long long
2108           fract A)
2109  -- Runtime Function: unsigned fract __satfractdquhq (long long fract A)
2110  -- Runtime Function: unsigned long fract __satfractdqusq (long long
2111           fract A)
2112  -- Runtime Function: unsigned long long fract __satfractdqudq (long
2113           long fract A)
2114  -- Runtime Function: unsigned short accum __satfractdquha (long long
2115           fract A)
2116  -- Runtime Function: unsigned accum __satfractdqusa (long long fract A)
2117  -- Runtime Function: unsigned long accum __satfractdquda (long long
2118           fract A)
2119  -- Runtime Function: unsigned long long accum __satfractdquta (long
2120           long fract A)
2121  -- Runtime Function: short fract __satfracthaqq (short accum A)
2122  -- Runtime Function: fract __satfracthahq (short accum A)
2123  -- Runtime Function: long fract __satfracthasq (short accum A)
2124  -- Runtime Function: long long fract __satfracthadq (short accum A)
2125  -- Runtime Function: accum __satfracthasa2 (short accum A)
2126  -- Runtime Function: long accum __satfracthada2 (short accum A)
2127  -- Runtime Function: long long accum __satfracthata2 (short accum A)
2128  -- Runtime Function: unsigned short fract __satfracthauqq (short accum
2129           A)
2130  -- Runtime Function: unsigned fract __satfracthauhq (short accum A)
2131  -- Runtime Function: unsigned long fract __satfracthausq (short accum
2132           A)
2133  -- Runtime Function: unsigned long long fract __satfracthaudq (short
2134           accum A)
2135  -- Runtime Function: unsigned short accum __satfracthauha (short accum
2136           A)
2137  -- Runtime Function: unsigned accum __satfracthausa (short accum A)
2138  -- Runtime Function: unsigned long accum __satfracthauda (short accum
2139           A)
2140  -- Runtime Function: unsigned long long accum __satfracthauta (short
2141           accum A)
2142  -- Runtime Function: short fract __satfractsaqq (accum A)
2143  -- Runtime Function: fract __satfractsahq (accum A)
2144  -- Runtime Function: long fract __satfractsasq (accum A)
2145  -- Runtime Function: long long fract __satfractsadq (accum A)
2146  -- Runtime Function: short accum __satfractsaha2 (accum A)
2147  -- Runtime Function: long accum __satfractsada2 (accum A)
2148  -- Runtime Function: long long accum __satfractsata2 (accum A)
2149  -- Runtime Function: unsigned short fract __satfractsauqq (accum A)
2150  -- Runtime Function: unsigned fract __satfractsauhq (accum A)
2151  -- Runtime Function: unsigned long fract __satfractsausq (accum A)
2152  -- Runtime Function: unsigned long long fract __satfractsaudq (accum A)
2153  -- Runtime Function: unsigned short accum __satfractsauha (accum A)
2154  -- Runtime Function: unsigned accum __satfractsausa (accum A)
2155  -- Runtime Function: unsigned long accum __satfractsauda (accum A)
2156  -- Runtime Function: unsigned long long accum __satfractsauta (accum A)
2157  -- Runtime Function: short fract __satfractdaqq (long accum A)
2158  -- Runtime Function: fract __satfractdahq (long accum A)
2159  -- Runtime Function: long fract __satfractdasq (long accum A)
2160  -- Runtime Function: long long fract __satfractdadq (long accum A)
2161  -- Runtime Function: short accum __satfractdaha2 (long accum A)
2162  -- Runtime Function: accum __satfractdasa2 (long accum A)
2163  -- Runtime Function: long long accum __satfractdata2 (long accum A)
2164  -- Runtime Function: unsigned short fract __satfractdauqq (long accum
2165           A)
2166  -- Runtime Function: unsigned fract __satfractdauhq (long accum A)
2167  -- Runtime Function: unsigned long fract __satfractdausq (long accum A)
2168  -- Runtime Function: unsigned long long fract __satfractdaudq (long
2169           accum A)
2170  -- Runtime Function: unsigned short accum __satfractdauha (long accum
2171           A)
2172  -- Runtime Function: unsigned accum __satfractdausa (long accum A)
2173  -- Runtime Function: unsigned long accum __satfractdauda (long accum A)
2174  -- Runtime Function: unsigned long long accum __satfractdauta (long
2175           accum A)
2176  -- Runtime Function: short fract __satfracttaqq (long long accum A)
2177  -- Runtime Function: fract __satfracttahq (long long accum A)
2178  -- Runtime Function: long fract __satfracttasq (long long accum A)
2179  -- Runtime Function: long long fract __satfracttadq (long long accum A)
2180  -- Runtime Function: short accum __satfracttaha2 (long long accum A)
2181  -- Runtime Function: accum __satfracttasa2 (long long accum A)
2182  -- Runtime Function: long accum __satfracttada2 (long long accum A)
2183  -- Runtime Function: unsigned short fract __satfracttauqq (long long
2184           accum A)
2185  -- Runtime Function: unsigned fract __satfracttauhq (long long accum A)
2186  -- Runtime Function: unsigned long fract __satfracttausq (long long
2187           accum A)
2188  -- Runtime Function: unsigned long long fract __satfracttaudq (long
2189           long accum A)
2190  -- Runtime Function: unsigned short accum __satfracttauha (long long
2191           accum A)
2192  -- Runtime Function: unsigned accum __satfracttausa (long long accum A)
2193  -- Runtime Function: unsigned long accum __satfracttauda (long long
2194           accum A)
2195  -- Runtime Function: unsigned long long accum __satfracttauta (long
2196           long accum A)
2197  -- Runtime Function: short fract __satfractuqqqq (unsigned short fract
2198           A)
2199  -- Runtime Function: fract __satfractuqqhq (unsigned short fract A)
2200  -- Runtime Function: long fract __satfractuqqsq (unsigned short fract
2201           A)
2202  -- Runtime Function: long long fract __satfractuqqdq (unsigned short
2203           fract A)
2204  -- Runtime Function: short accum __satfractuqqha (unsigned short fract
2205           A)
2206  -- Runtime Function: accum __satfractuqqsa (unsigned short fract A)
2207  -- Runtime Function: long accum __satfractuqqda (unsigned short fract
2208           A)
2209  -- Runtime Function: long long accum __satfractuqqta (unsigned short
2210           fract A)
2211  -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short
2212           fract A)
2213  -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned
2214           short fract A)
2215  -- Runtime Function: unsigned long long fract __satfractuqqudq2
2216           (unsigned short fract A)
2217  -- Runtime Function: unsigned short accum __satfractuqquha (unsigned
2218           short fract A)
2219  -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short
2220           fract A)
2221  -- Runtime Function: unsigned long accum __satfractuqquda (unsigned
2222           short fract A)
2223  -- Runtime Function: unsigned long long accum __satfractuqquta
2224           (unsigned short fract A)
2225  -- Runtime Function: short fract __satfractuhqqq (unsigned fract A)
2226  -- Runtime Function: fract __satfractuhqhq (unsigned fract A)
2227  -- Runtime Function: long fract __satfractuhqsq (unsigned fract A)
2228  -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A)
2229  -- Runtime Function: short accum __satfractuhqha (unsigned fract A)
2230  -- Runtime Function: accum __satfractuhqsa (unsigned fract A)
2231  -- Runtime Function: long accum __satfractuhqda (unsigned fract A)
2232  -- Runtime Function: long long accum __satfractuhqta (unsigned fract A)
2233  -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned
2234           fract A)
2235  -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned
2236           fract A)
2237  -- Runtime Function: unsigned long long fract __satfractuhqudq2
2238           (unsigned fract A)
2239  -- Runtime Function: unsigned short accum __satfractuhquha (unsigned
2240           fract A)
2241  -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A)
2242  -- Runtime Function: unsigned long accum __satfractuhquda (unsigned
2243           fract A)
2244  -- Runtime Function: unsigned long long accum __satfractuhquta
2245           (unsigned fract A)
2246  -- Runtime Function: short fract __satfractusqqq (unsigned long fract
2247           A)
2248  -- Runtime Function: fract __satfractusqhq (unsigned long fract A)
2249  -- Runtime Function: long fract __satfractusqsq (unsigned long fract A)
2250  -- Runtime Function: long long fract __satfractusqdq (unsigned long
2251           fract A)
2252  -- Runtime Function: short accum __satfractusqha (unsigned long fract
2253           A)
2254  -- Runtime Function: accum __satfractusqsa (unsigned long fract A)
2255  -- Runtime Function: long accum __satfractusqda (unsigned long fract A)
2256  -- Runtime Function: long long accum __satfractusqta (unsigned long
2257           fract A)
2258  -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned
2259           long fract A)
2260  -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long
2261           fract A)
2262  -- Runtime Function: unsigned long long fract __satfractusqudq2
2263           (unsigned long fract A)
2264  -- Runtime Function: unsigned short accum __satfractusquha (unsigned
2265           long fract A)
2266  -- Runtime Function: unsigned accum __satfractusqusa (unsigned long
2267           fract A)
2268  -- Runtime Function: unsigned long accum __satfractusquda (unsigned
2269           long fract A)
2270  -- Runtime Function: unsigned long long accum __satfractusquta
2271           (unsigned long fract A)
2272  -- Runtime Function: short fract __satfractudqqq (unsigned long long
2273           fract A)
2274  -- Runtime Function: fract __satfractudqhq (unsigned long long fract A)
2275  -- Runtime Function: long fract __satfractudqsq (unsigned long long
2276           fract A)
2277  -- Runtime Function: long long fract __satfractudqdq (unsigned long
2278           long fract A)
2279  -- Runtime Function: short accum __satfractudqha (unsigned long long
2280           fract A)
2281  -- Runtime Function: accum __satfractudqsa (unsigned long long fract A)
2282  -- Runtime Function: long accum __satfractudqda (unsigned long long
2283           fract A)
2284  -- Runtime Function: long long accum __satfractudqta (unsigned long
2285           long fract A)
2286  -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned
2287           long long fract A)
2288  -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long
2289           long fract A)
2290  -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned
2291           long long fract A)
2292  -- Runtime Function: unsigned short accum __satfractudquha (unsigned
2293           long long fract A)
2294  -- Runtime Function: unsigned accum __satfractudqusa (unsigned long
2295           long fract A)
2296  -- Runtime Function: unsigned long accum __satfractudquda (unsigned
2297           long long fract A)
2298  -- Runtime Function: unsigned long long accum __satfractudquta
2299           (unsigned long long fract A)
2300  -- Runtime Function: short fract __satfractuhaqq (unsigned short accum
2301           A)
2302  -- Runtime Function: fract __satfractuhahq (unsigned short accum A)
2303  -- Runtime Function: long fract __satfractuhasq (unsigned short accum
2304           A)
2305  -- Runtime Function: long long fract __satfractuhadq (unsigned short
2306           accum A)
2307  -- Runtime Function: short accum __satfractuhaha (unsigned short accum
2308           A)
2309  -- Runtime Function: accum __satfractuhasa (unsigned short accum A)
2310  -- Runtime Function: long accum __satfractuhada (unsigned short accum
2311           A)
2312  -- Runtime Function: long long accum __satfractuhata (unsigned short
2313           accum A)
2314  -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned
2315           short accum A)
2316  -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short
2317           accum A)
2318  -- Runtime Function: unsigned long fract __satfractuhausq (unsigned
2319           short accum A)
2320  -- Runtime Function: unsigned long long fract __satfractuhaudq
2321           (unsigned short accum A)
2322  -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short
2323           accum A)
2324  -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned
2325           short accum A)
2326  -- Runtime Function: unsigned long long accum __satfractuhauta2
2327           (unsigned short accum A)
2328  -- Runtime Function: short fract __satfractusaqq (unsigned accum A)
2329  -- Runtime Function: fract __satfractusahq (unsigned accum A)
2330  -- Runtime Function: long fract __satfractusasq (unsigned accum A)
2331  -- Runtime Function: long long fract __satfractusadq (unsigned accum A)
2332  -- Runtime Function: short accum __satfractusaha (unsigned accum A)
2333  -- Runtime Function: accum __satfractusasa (unsigned accum A)
2334  -- Runtime Function: long accum __satfractusada (unsigned accum A)
2335  -- Runtime Function: long long accum __satfractusata (unsigned accum A)
2336  -- Runtime Function: unsigned short fract __satfractusauqq (unsigned
2337           accum A)
2338  -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A)
2339  -- Runtime Function: unsigned long fract __satfractusausq (unsigned
2340           accum A)
2341  -- Runtime Function: unsigned long long fract __satfractusaudq
2342           (unsigned accum A)
2343  -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned
2344           accum A)
2345  -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned
2346           accum A)
2347  -- Runtime Function: unsigned long long accum __satfractusauta2
2348           (unsigned accum A)
2349  -- Runtime Function: short fract __satfractudaqq (unsigned long accum
2350           A)
2351  -- Runtime Function: fract __satfractudahq (unsigned long accum A)
2352  -- Runtime Function: long fract __satfractudasq (unsigned long accum A)
2353  -- Runtime Function: long long fract __satfractudadq (unsigned long
2354           accum A)
2355  -- Runtime Function: short accum __satfractudaha (unsigned long accum
2356           A)
2357  -- Runtime Function: accum __satfractudasa (unsigned long accum A)
2358  -- Runtime Function: long accum __satfractudada (unsigned long accum A)
2359  -- Runtime Function: long long accum __satfractudata (unsigned long
2360           accum A)
2361  -- Runtime Function: unsigned short fract __satfractudauqq (unsigned
2362           long accum A)
2363  -- Runtime Function: unsigned fract __satfractudauhq (unsigned long
2364           accum A)
2365  -- Runtime Function: unsigned long fract __satfractudausq (unsigned
2366           long accum A)
2367  -- Runtime Function: unsigned long long fract __satfractudaudq
2368           (unsigned long accum A)
2369  -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned
2370           long accum A)
2371  -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long
2372           accum A)
2373  -- Runtime Function: unsigned long long accum __satfractudauta2
2374           (unsigned long accum A)
2375  -- Runtime Function: short fract __satfractutaqq (unsigned long long
2376           accum A)
2377  -- Runtime Function: fract __satfractutahq (unsigned long long accum A)
2378  -- Runtime Function: long fract __satfractutasq (unsigned long long
2379           accum A)
2380  -- Runtime Function: long long fract __satfractutadq (unsigned long
2381           long accum A)
2382  -- Runtime Function: short accum __satfractutaha (unsigned long long
2383           accum A)
2384  -- Runtime Function: accum __satfractutasa (unsigned long long accum A)
2385  -- Runtime Function: long accum __satfractutada (unsigned long long
2386           accum A)
2387  -- Runtime Function: long long accum __satfractutata (unsigned long
2388           long accum A)
2389  -- Runtime Function: unsigned short fract __satfractutauqq (unsigned
2390           long long accum A)
2391  -- Runtime Function: unsigned fract __satfractutauhq (unsigned long
2392           long accum A)
2393  -- Runtime Function: unsigned long fract __satfractutausq (unsigned
2394           long long accum A)
2395  -- Runtime Function: unsigned long long fract __satfractutaudq
2396           (unsigned long long accum A)
2397  -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned
2398           long long accum A)
2399  -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long
2400           long accum A)
2401  -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned
2402           long long accum A)
2403  -- Runtime Function: short fract __satfractqiqq (signed char A)
2404  -- Runtime Function: fract __satfractqihq (signed char A)
2405  -- Runtime Function: long fract __satfractqisq (signed char A)
2406  -- Runtime Function: long long fract __satfractqidq (signed char A)
2407  -- Runtime Function: short accum __satfractqiha (signed char A)
2408  -- Runtime Function: accum __satfractqisa (signed char A)
2409  -- Runtime Function: long accum __satfractqida (signed char A)
2410  -- Runtime Function: long long accum __satfractqita (signed char A)
2411  -- Runtime Function: unsigned short fract __satfractqiuqq (signed char
2412           A)
2413  -- Runtime Function: unsigned fract __satfractqiuhq (signed char A)
2414  -- Runtime Function: unsigned long fract __satfractqiusq (signed char
2415           A)
2416  -- Runtime Function: unsigned long long fract __satfractqiudq (signed
2417           char A)
2418  -- Runtime Function: unsigned short accum __satfractqiuha (signed char
2419           A)
2420  -- Runtime Function: unsigned accum __satfractqiusa (signed char A)
2421  -- Runtime Function: unsigned long accum __satfractqiuda (signed char
2422           A)
2423  -- Runtime Function: unsigned long long accum __satfractqiuta (signed
2424           char A)
2425  -- Runtime Function: short fract __satfracthiqq (short A)
2426  -- Runtime Function: fract __satfracthihq (short A)
2427  -- Runtime Function: long fract __satfracthisq (short A)
2428  -- Runtime Function: long long fract __satfracthidq (short A)
2429  -- Runtime Function: short accum __satfracthiha (short A)
2430  -- Runtime Function: accum __satfracthisa (short A)
2431  -- Runtime Function: long accum __satfracthida (short A)
2432  -- Runtime Function: long long accum __satfracthita (short A)
2433  -- Runtime Function: unsigned short fract __satfracthiuqq (short A)
2434  -- Runtime Function: unsigned fract __satfracthiuhq (short A)
2435  -- Runtime Function: unsigned long fract __satfracthiusq (short A)
2436  -- Runtime Function: unsigned long long fract __satfracthiudq (short A)
2437  -- Runtime Function: unsigned short accum __satfracthiuha (short A)
2438  -- Runtime Function: unsigned accum __satfracthiusa (short A)
2439  -- Runtime Function: unsigned long accum __satfracthiuda (short A)
2440  -- Runtime Function: unsigned long long accum __satfracthiuta (short A)
2441  -- Runtime Function: short fract __satfractsiqq (int A)
2442  -- Runtime Function: fract __satfractsihq (int A)
2443  -- Runtime Function: long fract __satfractsisq (int A)
2444  -- Runtime Function: long long fract __satfractsidq (int A)
2445  -- Runtime Function: short accum __satfractsiha (int A)
2446  -- Runtime Function: accum __satfractsisa (int A)
2447  -- Runtime Function: long accum __satfractsida (int A)
2448  -- Runtime Function: long long accum __satfractsita (int A)
2449  -- Runtime Function: unsigned short fract __satfractsiuqq (int A)
2450  -- Runtime Function: unsigned fract __satfractsiuhq (int A)
2451  -- Runtime Function: unsigned long fract __satfractsiusq (int A)
2452  -- Runtime Function: unsigned long long fract __satfractsiudq (int A)
2453  -- Runtime Function: unsigned short accum __satfractsiuha (int A)
2454  -- Runtime Function: unsigned accum __satfractsiusa (int A)
2455  -- Runtime Function: unsigned long accum __satfractsiuda (int A)
2456  -- Runtime Function: unsigned long long accum __satfractsiuta (int A)
2457  -- Runtime Function: short fract __satfractdiqq (long A)
2458  -- Runtime Function: fract __satfractdihq (long A)
2459  -- Runtime Function: long fract __satfractdisq (long A)
2460  -- Runtime Function: long long fract __satfractdidq (long A)
2461  -- Runtime Function: short accum __satfractdiha (long A)
2462  -- Runtime Function: accum __satfractdisa (long A)
2463  -- Runtime Function: long accum __satfractdida (long A)
2464  -- Runtime Function: long long accum __satfractdita (long A)
2465  -- Runtime Function: unsigned short fract __satfractdiuqq (long A)
2466  -- Runtime Function: unsigned fract __satfractdiuhq (long A)
2467  -- Runtime Function: unsigned long fract __satfractdiusq (long A)
2468  -- Runtime Function: unsigned long long fract __satfractdiudq (long A)
2469  -- Runtime Function: unsigned short accum __satfractdiuha (long A)
2470  -- Runtime Function: unsigned accum __satfractdiusa (long A)
2471  -- Runtime Function: unsigned long accum __satfractdiuda (long A)
2472  -- Runtime Function: unsigned long long accum __satfractdiuta (long A)
2473  -- Runtime Function: short fract __satfracttiqq (long long A)
2474  -- Runtime Function: fract __satfracttihq (long long A)
2475  -- Runtime Function: long fract __satfracttisq (long long A)
2476  -- Runtime Function: long long fract __satfracttidq (long long A)
2477  -- Runtime Function: short accum __satfracttiha (long long A)
2478  -- Runtime Function: accum __satfracttisa (long long A)
2479  -- Runtime Function: long accum __satfracttida (long long A)
2480  -- Runtime Function: long long accum __satfracttita (long long A)
2481  -- Runtime Function: unsigned short fract __satfracttiuqq (long long A)
2482  -- Runtime Function: unsigned fract __satfracttiuhq (long long A)
2483  -- Runtime Function: unsigned long fract __satfracttiusq (long long A)
2484  -- Runtime Function: unsigned long long fract __satfracttiudq (long
2485           long A)
2486  -- Runtime Function: unsigned short accum __satfracttiuha (long long A)
2487  -- Runtime Function: unsigned accum __satfracttiusa (long long A)
2488  -- Runtime Function: unsigned long accum __satfracttiuda (long long A)
2489  -- Runtime Function: unsigned long long accum __satfracttiuta (long
2490           long A)
2491  -- Runtime Function: short fract __satfractsfqq (float A)
2492  -- Runtime Function: fract __satfractsfhq (float A)
2493  -- Runtime Function: long fract __satfractsfsq (float A)
2494  -- Runtime Function: long long fract __satfractsfdq (float A)
2495  -- Runtime Function: short accum __satfractsfha (float A)
2496  -- Runtime Function: accum __satfractsfsa (float A)
2497  -- Runtime Function: long accum __satfractsfda (float A)
2498  -- Runtime Function: long long accum __satfractsfta (float A)
2499  -- Runtime Function: unsigned short fract __satfractsfuqq (float A)
2500  -- Runtime Function: unsigned fract __satfractsfuhq (float A)
2501  -- Runtime Function: unsigned long fract __satfractsfusq (float A)
2502  -- Runtime Function: unsigned long long fract __satfractsfudq (float A)
2503  -- Runtime Function: unsigned short accum __satfractsfuha (float A)
2504  -- Runtime Function: unsigned accum __satfractsfusa (float A)
2505  -- Runtime Function: unsigned long accum __satfractsfuda (float A)
2506  -- Runtime Function: unsigned long long accum __satfractsfuta (float A)
2507  -- Runtime Function: short fract __satfractdfqq (double A)
2508  -- Runtime Function: fract __satfractdfhq (double A)
2509  -- Runtime Function: long fract __satfractdfsq (double A)
2510  -- Runtime Function: long long fract __satfractdfdq (double A)
2511  -- Runtime Function: short accum __satfractdfha (double A)
2512  -- Runtime Function: accum __satfractdfsa (double A)
2513  -- Runtime Function: long accum __satfractdfda (double A)
2514  -- Runtime Function: long long accum __satfractdfta (double A)
2515  -- Runtime Function: unsigned short fract __satfractdfuqq (double A)
2516  -- Runtime Function: unsigned fract __satfractdfuhq (double A)
2517  -- Runtime Function: unsigned long fract __satfractdfusq (double A)
2518  -- Runtime Function: unsigned long long fract __satfractdfudq (double
2519           A)
2520  -- Runtime Function: unsigned short accum __satfractdfuha (double A)
2521  -- Runtime Function: unsigned accum __satfractdfusa (double A)
2522  -- Runtime Function: unsigned long accum __satfractdfuda (double A)
2523  -- Runtime Function: unsigned long long accum __satfractdfuta (double
2524           A)
2525      The functions convert from fractional and signed non-fractionals to
2526      fractionals, with saturation.
2528  -- Runtime Function: unsigned char __fractunsqqqi (short fract A)
2529  -- Runtime Function: unsigned short __fractunsqqhi (short fract A)
2530  -- Runtime Function: unsigned int __fractunsqqsi (short fract A)
2531  -- Runtime Function: unsigned long __fractunsqqdi (short fract A)
2532  -- Runtime Function: unsigned long long __fractunsqqti (short fract A)
2533  -- Runtime Function: unsigned char __fractunshqqi (fract A)
2534  -- Runtime Function: unsigned short __fractunshqhi (fract A)
2535  -- Runtime Function: unsigned int __fractunshqsi (fract A)
2536  -- Runtime Function: unsigned long __fractunshqdi (fract A)
2537  -- Runtime Function: unsigned long long __fractunshqti (fract A)
2538  -- Runtime Function: unsigned char __fractunssqqi (long fract A)
2539  -- Runtime Function: unsigned short __fractunssqhi (long fract A)
2540  -- Runtime Function: unsigned int __fractunssqsi (long fract A)
2541  -- Runtime Function: unsigned long __fractunssqdi (long fract A)
2542  -- Runtime Function: unsigned long long __fractunssqti (long fract A)
2543  -- Runtime Function: unsigned char __fractunsdqqi (long long fract A)
2544  -- Runtime Function: unsigned short __fractunsdqhi (long long fract A)
2545  -- Runtime Function: unsigned int __fractunsdqsi (long long fract A)
2546  -- Runtime Function: unsigned long __fractunsdqdi (long long fract A)
2547  -- Runtime Function: unsigned long long __fractunsdqti (long long
2548           fract A)
2549  -- Runtime Function: unsigned char __fractunshaqi (short accum A)
2550  -- Runtime Function: unsigned short __fractunshahi (short accum A)
2551  -- Runtime Function: unsigned int __fractunshasi (short accum A)
2552  -- Runtime Function: unsigned long __fractunshadi (short accum A)
2553  -- Runtime Function: unsigned long long __fractunshati (short accum A)
2554  -- Runtime Function: unsigned char __fractunssaqi (accum A)
2555  -- Runtime Function: unsigned short __fractunssahi (accum A)
2556  -- Runtime Function: unsigned int __fractunssasi (accum A)
2557  -- Runtime Function: unsigned long __fractunssadi (accum A)
2558  -- Runtime Function: unsigned long long __fractunssati (accum A)
2559  -- Runtime Function: unsigned char __fractunsdaqi (long accum A)
2560  -- Runtime Function: unsigned short __fractunsdahi (long accum A)
2561  -- Runtime Function: unsigned int __fractunsdasi (long accum A)
2562  -- Runtime Function: unsigned long __fractunsdadi (long accum A)
2563  -- Runtime Function: unsigned long long __fractunsdati (long accum A)
2564  -- Runtime Function: unsigned char __fractunstaqi (long long accum A)
2565  -- Runtime Function: unsigned short __fractunstahi (long long accum A)
2566  -- Runtime Function: unsigned int __fractunstasi (long long accum A)
2567  -- Runtime Function: unsigned long __fractunstadi (long long accum A)
2568  -- Runtime Function: unsigned long long __fractunstati (long long
2569           accum A)
2570  -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short
2571           fract A)
2572  -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short
2573           fract A)
2574  -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short
2575           fract A)
2576  -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short
2577           fract A)
2578  -- Runtime Function: unsigned long long __fractunsuqqti (unsigned
2579           short fract A)
2580  -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A)
2581  -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A)
2582  -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A)
2583  -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A)
2584  -- Runtime Function: unsigned long long __fractunsuhqti (unsigned
2585           fract A)
2586  -- Runtime Function: unsigned char __fractunsusqqi (unsigned long
2587           fract A)
2588  -- Runtime Function: unsigned short __fractunsusqhi (unsigned long
2589           fract A)
2590  -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract
2591           A)
2592  -- Runtime Function: unsigned long __fractunsusqdi (unsigned long
2593           fract A)
2594  -- Runtime Function: unsigned long long __fractunsusqti (unsigned long
2595           fract A)
2596  -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long
2597           fract A)
2598  -- Runtime Function: unsigned short __fractunsudqhi (unsigned long
2599           long fract A)
2600  -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long
2601           fract A)
2602  -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long
2603           fract A)
2604  -- Runtime Function: unsigned long long __fractunsudqti (unsigned long
2605           long fract A)
2606  -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short
2607           accum A)
2608  -- Runtime Function: unsigned short __fractunsuhahi (unsigned short
2609           accum A)
2610  -- Runtime Function: unsigned int __fractunsuhasi (unsigned short
2611           accum A)
2612  -- Runtime Function: unsigned long __fractunsuhadi (unsigned short
2613           accum A)
2614  -- Runtime Function: unsigned long long __fractunsuhati (unsigned
2615           short accum A)
2616  -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A)
2617  -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A)
2618  -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A)
2619  -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A)
2620  -- Runtime Function: unsigned long long __fractunsusati (unsigned
2621           accum A)
2622  -- Runtime Function: unsigned char __fractunsudaqi (unsigned long
2623           accum A)
2624  -- Runtime Function: unsigned short __fractunsudahi (unsigned long
2625           accum A)
2626  -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum
2627           A)
2628  -- Runtime Function: unsigned long __fractunsudadi (unsigned long
2629           accum A)
2630  -- Runtime Function: unsigned long long __fractunsudati (unsigned long
2631           accum A)
2632  -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long
2633           accum A)
2634  -- Runtime Function: unsigned short __fractunsutahi (unsigned long
2635           long accum A)
2636  -- Runtime Function: unsigned int __fractunsutasi (unsigned long long
2637           accum A)
2638  -- Runtime Function: unsigned long __fractunsutadi (unsigned long long
2639           accum A)
2640  -- Runtime Function: unsigned long long __fractunsutati (unsigned long
2641           long accum A)
2642  -- Runtime Function: short fract __fractunsqiqq (unsigned char A)
2643  -- Runtime Function: fract __fractunsqihq (unsigned char A)
2644  -- Runtime Function: long fract __fractunsqisq (unsigned char A)
2645  -- Runtime Function: long long fract __fractunsqidq (unsigned char A)
2646  -- Runtime Function: short accum __fractunsqiha (unsigned char A)
2647  -- Runtime Function: accum __fractunsqisa (unsigned char A)
2648  -- Runtime Function: long accum __fractunsqida (unsigned char A)
2649  -- Runtime Function: long long accum __fractunsqita (unsigned char A)
2650  -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned
2651           char A)
2652  -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A)
2653  -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned
2654           char A)
2655  -- Runtime Function: unsigned long long fract __fractunsqiudq
2656           (unsigned char A)
2657  -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned
2658           char A)
2659  -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A)
2660  -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned
2661           char A)
2662  -- Runtime Function: unsigned long long accum __fractunsqiuta
2663           (unsigned char A)
2664  -- Runtime Function: short fract __fractunshiqq (unsigned short A)
2665  -- Runtime Function: fract __fractunshihq (unsigned short A)
2666  -- Runtime Function: long fract __fractunshisq (unsigned short A)
2667  -- Runtime Function: long long fract __fractunshidq (unsigned short A)
2668  -- Runtime Function: short accum __fractunshiha (unsigned short A)
2669  -- Runtime Function: accum __fractunshisa (unsigned short A)
2670  -- Runtime Function: long accum __fractunshida (unsigned short A)
2671  -- Runtime Function: long long accum __fractunshita (unsigned short A)
2672  -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned
2673           short A)
2674  -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A)
2675  -- Runtime Function: unsigned long fract __fractunshiusq (unsigned
2676           short A)
2677  -- Runtime Function: unsigned long long fract __fractunshiudq
2678           (unsigned short A)
2679  -- Runtime Function: unsigned short accum __fractunshiuha (unsigned
2680           short A)
2681  -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A)
2682  -- Runtime Function: unsigned long accum __fractunshiuda (unsigned
2683           short A)
2684  -- Runtime Function: unsigned long long accum __fractunshiuta
2685           (unsigned short A)
2686  -- Runtime Function: short fract __fractunssiqq (unsigned int A)
2687  -- Runtime Function: fract __fractunssihq (unsigned int A)
2688  -- Runtime Function: long fract __fractunssisq (unsigned int A)
2689  -- Runtime Function: long long fract __fractunssidq (unsigned int A)
2690  -- Runtime Function: short accum __fractunssiha (unsigned int A)
2691  -- Runtime Function: accum __fractunssisa (unsigned int A)
2692  -- Runtime Function: long accum __fractunssida (unsigned int A)
2693  -- Runtime Function: long long accum __fractunssita (unsigned int A)
2694  -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned
2695           int A)
2696  -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A)
2697  -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int
2698           A)
2699  -- Runtime Function: unsigned long long fract __fractunssiudq
2700           (unsigned int A)
2701  -- Runtime Function: unsigned short accum __fractunssiuha (unsigned
2702           int A)
2703  -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A)
2704  -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int
2705           A)
2706  -- Runtime Function: unsigned long long accum __fractunssiuta
2707           (unsigned int A)
2708  -- Runtime Function: short fract __fractunsdiqq (unsigned long A)
2709  -- Runtime Function: fract __fractunsdihq (unsigned long A)
2710  -- Runtime Function: long fract __fractunsdisq (unsigned long A)
2711  -- Runtime Function: long long fract __fractunsdidq (unsigned long A)
2712  -- Runtime Function: short accum __fractunsdiha (unsigned long A)
2713  -- Runtime Function: accum __fractunsdisa (unsigned long A)
2714  -- Runtime Function: long accum __fractunsdida (unsigned long A)
2715  -- Runtime Function: long long accum __fractunsdita (unsigned long A)
2716  -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned
2717           long A)
2718  -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A)
2719  -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned
2720           long A)
2721  -- Runtime Function: unsigned long long fract __fractunsdiudq
2722           (unsigned long A)
2723  -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned
2724           long A)
2725  -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A)
2726  -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned
2727           long A)
2728  -- Runtime Function: unsigned long long accum __fractunsdiuta
2729           (unsigned long A)
2730  -- Runtime Function: short fract __fractunstiqq (unsigned long long A)
2731  -- Runtime Function: fract __fractunstihq (unsigned long long A)
2732  -- Runtime Function: long fract __fractunstisq (unsigned long long A)
2733  -- Runtime Function: long long fract __fractunstidq (unsigned long
2734           long A)
2735  -- Runtime Function: short accum __fractunstiha (unsigned long long A)
2736  -- Runtime Function: accum __fractunstisa (unsigned long long A)
2737  -- Runtime Function: long accum __fractunstida (unsigned long long A)
2738  -- Runtime Function: long long accum __fractunstita (unsigned long
2739           long A)
2740  -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned
2741           long long A)
2742  -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long
2743           long A)
2744  -- Runtime Function: unsigned long fract __fractunstiusq (unsigned
2745           long long A)
2746  -- Runtime Function: unsigned long long fract __fractunstiudq
2747           (unsigned long long A)
2748  -- Runtime Function: unsigned short accum __fractunstiuha (unsigned
2749           long long A)
2750  -- Runtime Function: unsigned accum __fractunstiusa (unsigned long
2751           long A)
2752  -- Runtime Function: unsigned long accum __fractunstiuda (unsigned
2753           long long A)
2754  -- Runtime Function: unsigned long long accum __fractunstiuta
2755           (unsigned long long A)
2756      These functions convert from fractionals to unsigned
2757      non-fractionals; and from unsigned non-fractionals to fractionals,
2758      without saturation.
2760  -- Runtime Function: short fract __satfractunsqiqq (unsigned char A)
2761  -- Runtime Function: fract __satfractunsqihq (unsigned char A)
2762  -- Runtime Function: long fract __satfractunsqisq (unsigned char A)
2763  -- Runtime Function: long long fract __satfractunsqidq (unsigned char
2764           A)
2765  -- Runtime Function: short accum __satfractunsqiha (unsigned char A)
2766  -- Runtime Function: accum __satfractunsqisa (unsigned char A)
2767  -- Runtime Function: long accum __satfractunsqida (unsigned char A)
2768  -- Runtime Function: long long accum __satfractunsqita (unsigned char
2769           A)
2770  -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned
2771           char A)
2772  -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char
2773           A)
2774  -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned
2775           char A)
2776  -- Runtime Function: unsigned long long fract __satfractunsqiudq
2777           (unsigned char A)
2778  -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned
2779           char A)
2780  -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char
2781           A)
2782  -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned
2783           char A)
2784  -- Runtime Function: unsigned long long accum __satfractunsqiuta
2785           (unsigned char A)
2786  -- Runtime Function: short fract __satfractunshiqq (unsigned short A)
2787  -- Runtime Function: fract __satfractunshihq (unsigned short A)
2788  -- Runtime Function: long fract __satfractunshisq (unsigned short A)
2789  -- Runtime Function: long long fract __satfractunshidq (unsigned short
2790           A)
2791  -- Runtime Function: short accum __satfractunshiha (unsigned short A)
2792  -- Runtime Function: accum __satfractunshisa (unsigned short A)
2793  -- Runtime Function: long accum __satfractunshida (unsigned short A)
2794  -- Runtime Function: long long accum __satfractunshita (unsigned short
2795           A)
2796  -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned
2797           short A)
2798  -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short
2799           A)
2800  -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned
2801           short A)
2802  -- Runtime Function: unsigned long long fract __satfractunshiudq
2803           (unsigned short A)
2804  -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned
2805           short A)
2806  -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short
2807           A)
2808  -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned
2809           short A)
2810  -- Runtime Function: unsigned long long accum __satfractunshiuta
2811           (unsigned short A)
2812  -- Runtime Function: short fract __satfractunssiqq (unsigned int A)
2813  -- Runtime Function: fract __satfractunssihq (unsigned int A)
2814  -- Runtime Function: long fract __satfractunssisq (unsigned int A)
2815  -- Runtime Function: long long fract __satfractunssidq (unsigned int A)
2816  -- Runtime Function: short accum __satfractunssiha (unsigned int A)
2817  -- Runtime Function: accum __satfractunssisa (unsigned int A)
2818  -- Runtime Function: long accum __satfractunssida (unsigned int A)
2819  -- Runtime Function: long long accum __satfractunssita (unsigned int A)
2820  -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned
2821           int A)
2822  -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A)
2823  -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned
2824           int A)
2825  -- Runtime Function: unsigned long long fract __satfractunssiudq
2826           (unsigned int A)
2827  -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned
2828           int A)
2829  -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A)
2830  -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned
2831           int A)
2832  -- Runtime Function: unsigned long long accum __satfractunssiuta
2833           (unsigned int A)
2834  -- Runtime Function: short fract __satfractunsdiqq (unsigned long A)
2835  -- Runtime Function: fract __satfractunsdihq (unsigned long A)
2836  -- Runtime Function: long fract __satfractunsdisq (unsigned long A)
2837  -- Runtime Function: long long fract __satfractunsdidq (unsigned long
2838           A)
2839  -- Runtime Function: short accum __satfractunsdiha (unsigned long A)
2840  -- Runtime Function: accum __satfractunsdisa (unsigned long A)
2841  -- Runtime Function: long accum __satfractunsdida (unsigned long A)
2842  -- Runtime Function: long long accum __satfractunsdita (unsigned long
2843           A)
2844  -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned
2845           long A)
2846  -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long
2847           A)
2848  -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned
2849           long A)
2850  -- Runtime Function: unsigned long long fract __satfractunsdiudq
2851           (unsigned long A)
2852  -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned
2853           long A)
2854  -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long
2855           A)
2856  -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned
2857           long A)
2858  -- Runtime Function: unsigned long long accum __satfractunsdiuta
2859           (unsigned long A)
2860  -- Runtime Function: short fract __satfractunstiqq (unsigned long long
2861           A)
2862  -- Runtime Function: fract __satfractunstihq (unsigned long long A)
2863  -- Runtime Function: long fract __satfractunstisq (unsigned long long
2864           A)
2865  -- Runtime Function: long long fract __satfractunstidq (unsigned long
2866           long A)
2867  -- Runtime Function: short accum __satfractunstiha (unsigned long long
2868           A)
2869  -- Runtime Function: accum __satfractunstisa (unsigned long long A)
2870  -- Runtime Function: long accum __satfractunstida (unsigned long long
2871           A)
2872  -- Runtime Function: long long accum __satfractunstita (unsigned long
2873           long A)
2874  -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned
2875           long long A)
2876  -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long
2877           long A)
2878  -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned
2879           long long A)
2880  -- Runtime Function: unsigned long long fract __satfractunstiudq
2881           (unsigned long long A)
2882  -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned
2883           long long A)
2884  -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long
2885           long A)
2886  -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned
2887           long long A)
2888  -- Runtime Function: unsigned long long accum __satfractunstiuta
2889           (unsigned long long A)
2890      These functions convert from unsigned non-fractionals to
2891      fractionals, with saturation.
2893 \x1f
2894 File: gccint.info,  Node: Exception handling routines,  Next: Miscellaneous routines,  Prev: Fixed-point fractional library routines,  Up: Libgcc
2896 4.5 Language-independent routines for exception handling
2897 ========================================================
2899 document me!
2901        _Unwind_DeleteException
2902        _Unwind_Find_FDE
2903        _Unwind_ForcedUnwind
2904        _Unwind_GetGR
2905        _Unwind_GetIP
2906        _Unwind_GetLanguageSpecificData
2907        _Unwind_GetRegionStart
2908        _Unwind_GetTextRelBase
2909        _Unwind_GetDataRelBase
2910        _Unwind_RaiseException
2911        _Unwind_Resume
2912        _Unwind_SetGR
2913        _Unwind_SetIP
2914        _Unwind_FindEnclosingFunction
2915        _Unwind_SjLj_Register
2916        _Unwind_SjLj_Unregister
2917        _Unwind_SjLj_RaiseException
2918        _Unwind_SjLj_ForcedUnwind
2919        _Unwind_SjLj_Resume
2920        __deregister_frame
2921        __deregister_frame_info
2922        __deregister_frame_info_bases
2923        __register_frame
2924        __register_frame_info
2925        __register_frame_info_bases
2926        __register_frame_info_table
2927        __register_frame_info_table_bases
2928        __register_frame_table
2930 \x1f
2931 File: gccint.info,  Node: Miscellaneous routines,  Prev: Exception handling routines,  Up: Libgcc
2933 4.6 Miscellaneous runtime library routines
2934 ==========================================
2936 4.6.1 Cache control functions
2937 -----------------------------
2939  -- Runtime Function: void __clear_cache (char *BEG, char *END)
2940      This function clears the instruction cache between BEG and END.
2942 \x1f
2943 File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top
2945 5 Language Front Ends in GCC
2946 ****************************
2948 The interface to front ends for languages in GCC, and in particular the
2949 `tree' structure (*note GENERIC::), was initially designed for C, and
2950 many aspects of it are still somewhat biased towards C and C-like
2951 languages.  It is, however, reasonably well suited to other procedural
2952 languages, and front ends for many such languages have been written for
2953 GCC.
2955  Writing a compiler as a front end for GCC, rather than compiling
2956 directly to assembler or generating C code which is then compiled by
2957 GCC, has several advantages:
2959    * GCC front ends benefit from the support for many different target
2960      machines already present in GCC.
2962    * GCC front ends benefit from all the optimizations in GCC.  Some of
2963      these, such as alias analysis, may work better when GCC is
2964      compiling directly from source code then when it is compiling from
2965      generated C code.
2967    * Better debugging information is generated when compiling directly
2968      from source code than when going via intermediate generated C code.
2970  Because of the advantages of writing a compiler as a GCC front end,
2971 GCC front ends have also been created for languages very different from
2972 those for which GCC was designed, such as the declarative
2973 logic/functional language Mercury.  For these reasons, it may also be
2974 useful to implement compilers created for specialized purposes (for
2975 example, as part of a research project) as GCC front ends.
2977 \x1f
2978 File: gccint.info,  Node: Source Tree,  Next: Testsuites,  Prev: Languages,  Up: Top
2980 6 Source Tree Structure and Build System
2981 ****************************************
2983 This chapter describes the structure of the GCC source tree, and how
2984 GCC is built.  The user documentation for building and installing GCC
2985 is in a separate manual (`http://gcc.gnu.org/install/'), with which it
2986 is presumed that you are familiar.
2988 * Menu:
2990 * Configure Terms:: Configuration terminology and history.
2991 * Top Level::       The top level source directory.
2992 * gcc Directory::   The `gcc' subdirectory.
2994 \x1f
2995 File: gccint.info,  Node: Configure Terms,  Next: Top Level,  Up: Source Tree
2997 6.1 Configure Terms and History
2998 ===============================
3000 The configure and build process has a long and colorful history, and can
3001 be confusing to anyone who doesn't know why things are the way they are.
3002 While there are other documents which describe the configuration process
3003 in detail, here are a few things that everyone working on GCC should
3004 know.
3006  There are three system names that the build knows about: the machine
3007 you are building on ("build"), the machine that you are building for
3008 ("host"), and the machine that GCC will produce code for ("target").
3009 When you configure GCC, you specify these with `--build=', `--host=',
3010 and `--target='.
3012  Specifying the host without specifying the build should be avoided, as
3013 `configure' may (and once did) assume that the host you specify is also
3014 the build, which may not be true.
3016  If build, host, and target are all the same, this is called a
3017 "native".  If build and host are the same but target is different, this
3018 is called a "cross".  If build, host, and target are all different this
3019 is called a "canadian" (for obscure reasons dealing with Canada's
3020 political party and the background of the person working on the build
3021 at that time).  If host and target are the same, but build is
3022 different, you are using a cross-compiler to build a native for a
3023 different system.  Some people call this a "host-x-host", "crossed
3024 native", or "cross-built native".  If build and target are the same,
3025 but host is different, you are using a cross compiler to build a cross
3026 compiler that produces code for the machine you're building on.  This
3027 is rare, so there is no common way of describing it.  There is a
3028 proposal to call this a "crossback".
3030  If build and host are the same, the GCC you are building will also be
3031 used to build the target libraries (like `libstdc++').  If build and
3032 host are different, you must have already built and installed a cross
3033 compiler that will be used to build the target libraries (if you
3034 configured with `--target=foo-bar', this compiler will be called
3035 `foo-bar-gcc').
3037  In the case of target libraries, the machine you're building for is the
3038 machine you specified with `--target'.  So, build is the machine you're
3039 building on (no change there), host is the machine you're building for
3040 (the target libraries are built for the target, so host is the target
3041 you specified), and target doesn't apply (because you're not building a
3042 compiler, you're building libraries).  The configure/make process will
3043 adjust these variables as needed.  It also sets `$with_cross_host' to
3044 the original `--host' value in case you need it.
3046  The `libiberty' support library is built up to three times: once for
3047 the host, once for the target (even if they are the same), and once for
3048 the build if build and host are different.  This allows it to be used
3049 by all programs which are generated in the course of the build process.
3051 \x1f
3052 File: gccint.info,  Node: Top Level,  Next: gcc Directory,  Prev: Configure Terms,  Up: Source Tree
3054 6.2 Top Level Source Directory
3055 ==============================
3057 The top level source directory in a GCC distribution contains several
3058 files and directories that are shared with other software distributions
3059 such as that of GNU Binutils.  It also contains several subdirectories
3060 that contain parts of GCC and its runtime libraries:
3062 `boehm-gc'
3063      The Boehm conservative garbage collector, used as part of the Java
3064      runtime library.
3066 `config'
3067      Autoconf macros and Makefile fragments used throughout the tree.
3069 `contrib'
3070      Contributed scripts that may be found useful in conjunction with
3071      GCC.  One of these, `contrib/texi2pod.pl', is used to generate man
3072      pages from Texinfo manuals as part of the GCC build process.
3074 `fixincludes'
3075      The support for fixing system headers to work with GCC.  See
3076      `fixincludes/README' for more information.  The headers fixed by
3077      this mechanism are installed in `LIBSUBDIR/include-fixed'.  Along
3078      with those headers, `README-fixinc' is also installed, as
3079      `LIBSUBDIR/include-fixed/README'.
3081 `gcc'
3082      The main sources of GCC itself (except for runtime libraries),
3083      including optimizers, support for different target architectures,
3084      language front ends, and testsuites.  *Note The `gcc'
3085      Subdirectory: gcc Directory, for details.
3087 `gnattools'
3088      Support tools for GNAT.
3090 `include'
3091      Headers for the `libiberty' library.
3093 `intl'
3094      GNU `libintl', from GNU `gettext', for systems which do not
3095      include it in `libc'.
3097 `libada'
3098      The Ada runtime library.
3100 `libcpp'
3101      The C preprocessor library.
3103 `libdecnumber'
3104      The Decimal Float support library.
3106 `libffi'
3107      The `libffi' library, used as part of the Java runtime library.
3109 `libgcc'
3110      The GCC runtime library.
3112 `libgfortran'
3113      The Fortran runtime library.
3115 `libgomp'
3116      The GNU OpenMP runtime library.
3118 `libiberty'
3119      The `libiberty' library, used for portability and for some
3120      generally useful data structures and algorithms.  *Note
3121      Introduction: (libiberty)Top, for more information about this
3122      library.
3124 `libjava'
3125      The Java runtime library.
3127 `libmudflap'
3128      The `libmudflap' library, used for instrumenting pointer and array
3129      dereferencing operations.
3131 `libobjc'
3132      The Objective-C and Objective-C++ runtime library.
3134 `libssp'
3135      The Stack protector runtime library.
3137 `libstdc++-v3'
3138      The C++ runtime library.
3140 `lto-plugin'
3141      Plugin used by `gold' if link-time optimizations are enabled.
3143 `maintainer-scripts'
3144      Scripts used by the `gccadmin' account on `gcc.gnu.org'.
3146 `zlib'
3147      The `zlib' compression library, used by the Java front end, as
3148      part of the Java runtime library, and for compressing and
3149      uncompressing GCC's intermediate language in LTO object files.
3151  The build system in the top level directory, including how recursion
3152 into subdirectories works and how building runtime libraries for
3153 multilibs is handled, is documented in a separate manual, included with
3154 GNU Binutils.  *Note GNU configure and build system: (configure)Top,
3155 for details.
3157 \x1f
3158 File: gccint.info,  Node: gcc Directory,  Prev: Top Level,  Up: Source Tree
3160 6.3 The `gcc' Subdirectory
3161 ==========================
3163 The `gcc' directory contains many files that are part of the C sources
3164 of GCC, other files used as part of the configuration and build
3165 process, and subdirectories including documentation and a testsuite.
3166 The files that are sources of GCC are documented in a separate chapter.
3167 *Note Passes and Files of the Compiler: Passes.
3169 * Menu:
3171 * Subdirectories:: Subdirectories of `gcc'.
3172 * Configuration::  The configuration process, and the files it uses.
3173 * Build::          The build system in the `gcc' directory.
3174 * Makefile::       Targets in `gcc/Makefile'.
3175 * Library Files::  Library source files and headers under `gcc/'.
3176 * Headers::        Headers installed by GCC.
3177 * Documentation::  Building documentation in GCC.
3178 * Front End::      Anatomy of a language front end.
3179 * Back End::       Anatomy of a target back end.
3181 \x1f
3182 File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory
3184 6.3.1 Subdirectories of `gcc'
3185 -----------------------------
3187 The `gcc' directory contains the following subdirectories:
3189 `LANGUAGE'
3190      Subdirectories for various languages.  Directories containing a
3191      file `config-lang.in' are language subdirectories.  The contents of
3192      the subdirectories `cp' (for C++), `lto' (for LTO), `objc' (for
3193      Objective-C) and `objcp' (for Objective-C++) are documented in
3194      this manual (*note Passes and Files of the Compiler: Passes.);
3195      those for other languages are not.  *Note Anatomy of a Language
3196      Front End: Front End, for details of the files in these
3197      directories.
3199 `config'
3200      Configuration files for supported architectures and operating
3201      systems.  *Note Anatomy of a Target Back End: Back End, for
3202      details of the files in this directory.
3204 `doc'
3205      Texinfo documentation for GCC, together with automatically
3206      generated man pages and support for converting the installation
3207      manual to HTML.  *Note Documentation::.
3209 `ginclude'
3210      System headers installed by GCC, mainly those required by the C
3211      standard of freestanding implementations.  *Note Headers Installed
3212      by GCC: Headers, for details of when these and other headers are
3213      installed.
3215 `po'
3216      Message catalogs with translations of messages produced by GCC into
3217      various languages, `LANGUAGE.po'.  This directory also contains
3218      `gcc.pot', the template for these message catalogues, `exgettext',
3219      a wrapper around `gettext' to extract the messages from the GCC
3220      sources and create `gcc.pot', which is run by `make gcc.pot', and
3221      `EXCLUDES', a list of files from which messages should not be
3222      extracted.
3224 `testsuite'
3225      The GCC testsuites (except for those for runtime libraries).
3226      *Note Testsuites::.
3228 \x1f
3229 File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory
3231 6.3.2 Configuration in the `gcc' Directory
3232 ------------------------------------------
3234 The `gcc' directory is configured with an Autoconf-generated script
3235 `configure'.  The `configure' script is generated from `configure.ac'
3236 and `aclocal.m4'.  From the files `configure.ac' and `acconfig.h',
3237 Autoheader generates the file `config.in'.  The file `cstamp-h.in' is
3238 used as a timestamp.
3240 * Menu:
3242 * Config Fragments::     Scripts used by `configure'.
3243 * System Config::        The `config.build', `config.host', and
3244                          `config.gcc' files.
3245 * Configuration Files::  Files created by running `configure'.
3247 \x1f
3248 File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration
3250 6.3.2.1 Scripts Used by `configure'
3251 ...................................
3253 `configure' uses some other scripts to help in its work:
3255    * The standard GNU `config.sub' and `config.guess' files, kept in
3256      the top level directory, are used.
3258    * The file `config.gcc' is used to handle configuration specific to
3259      the particular target machine.  The file `config.build' is used to
3260      handle configuration specific to the particular build machine.
3261      The file `config.host' is used to handle configuration specific to
3262      the particular host machine.  (In general, these should only be
3263      used for features that cannot reasonably be tested in Autoconf
3264      feature tests.)  *Note The `config.build'; `config.host'; and
3265      `config.gcc' Files: System Config, for details of the contents of
3266      these files.
3268    * Each language subdirectory has a file `LANGUAGE/config-lang.in'
3269      that is used for front-end-specific configuration.  *Note The
3270      Front End `config-lang.in' File: Front End Config, for details of
3271      this file.
3273    * A helper script `configure.frag' is used as part of creating the
3274      output of `configure'.
3276 \x1f
3277 File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration
3279 6.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files
3280 .................................................................
3282 The `config.build' file contains specific rules for particular systems
3283 which GCC is built on.  This should be used as rarely as possible, as
3284 the behavior of the build system can always be detected by autoconf.
3286  The `config.host' file contains specific rules for particular systems
3287 which GCC will run on.  This is rarely needed.
3289  The `config.gcc' file contains specific rules for particular systems
3290 which GCC will generate code for.  This is usually needed.
3292  Each file has a list of the shell variables it sets, with
3293 descriptions, at the top of the file.
3295  FIXME: document the contents of these files, and what variables should
3296 be set to control build, host and target configuration.
3298 \x1f
3299 File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration
3301 6.3.2.3 Files Created by `configure'
3302 ....................................
3304 Here we spell out what files will be set up by `configure' in the `gcc'
3305 directory.  Some other files are created as temporary files in the
3306 configuration process, and are not used in the subsequent build; these
3307 are not documented.
3309    * `Makefile' is constructed from `Makefile.in', together with the
3310      host and target fragments (*note Makefile Fragments: Fragments.)
3311      `t-TARGET' and `x-HOST' from `config', if any, and language
3312      Makefile fragments `LANGUAGE/Make-lang.in'.
3314    * `auto-host.h' contains information about the host machine
3315      determined by `configure'.  If the host machine is different from
3316      the build machine, then `auto-build.h' is also created, containing
3317      such information about the build machine.
3319    * `config.status' is a script that may be run to recreate the
3320      current configuration.
3322    * `configargs.h' is a header containing details of the arguments
3323      passed to `configure' to configure GCC, and of the thread model
3324      used.
3326    * `cstamp-h' is used as a timestamp.
3328    * `gccbug', a script for reporting bugs in GCC, is constructed from
3329      `gccbug.in'.
3331    * If a language `config-lang.in' file (*note The Front End
3332      `config-lang.in' File: Front End Config.) sets `outputs', then the
3333      files listed in `outputs' there are also generated.
3335  The following configuration headers are created from the Makefile,
3336 using `mkconfig.sh', rather than directly by `configure'.  `config.h',
3337 `bconfig.h' and `tconfig.h' all contain the `xm-MACHINE.h' header, if
3338 any, appropriate to the host, build and target machines respectively,
3339 the configuration headers for the target, and some definitions; for the
3340 host and build machines, these include the autoconfigured headers
3341 generated by `configure'.  The other configuration headers are
3342 determined by `config.gcc'.  They also contain the typedefs for `rtx',
3343 `rtvec' and `tree'.
3345    * `config.h', for use in programs that run on the host machine.
3347    * `bconfig.h', for use in programs that run on the build machine.
3349    * `tconfig.h', for use in programs and libraries for the target
3350      machine.
3352    * `tm_p.h', which includes the header `MACHINE-protos.h' that
3353      contains prototypes for functions in the target `.c' file.  FIXME:
3354      why is such a separate header necessary?
3356 \x1f
3357 File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory
3359 6.3.3 Build System in the `gcc' Directory
3360 -----------------------------------------
3362 FIXME: describe the build system, including what is built in what
3363 stages.  Also list the various source files that are used in the build
3364 process but aren't source files of GCC itself and so aren't documented
3365 below (*note Passes::).
3367 \x1f
3368 File: gccint.info,  Node: Makefile,  Next: Library Files,  Prev: Build,  Up: gcc Directory
3370 6.3.4 Makefile Targets
3371 ----------------------
3373 These targets are available from the `gcc' directory:
3375 `all'
3376      This is the default target.  Depending on what your
3377      build/host/target configuration is, it coordinates all the things
3378      that need to be built.
3380 `doc'
3381      Produce info-formatted documentation and man pages.  Essentially it
3382      calls `make man' and `make info'.
3384 `dvi'
3385      Produce DVI-formatted documentation.
3387 `pdf'
3388      Produce PDF-formatted documentation.
3390 `html'
3391      Produce HTML-formatted documentation.
3393 `man'
3394      Generate man pages.
3396 `info'
3397      Generate info-formatted pages.
3399 `mostlyclean'
3400      Delete the files made while building the compiler.
3402 `clean'
3403      That, and all the other files built by `make all'.
3405 `distclean'
3406      That, and all the files created by `configure'.
3408 `maintainer-clean'
3409      Distclean plus any file that can be generated from other files.
3410      Note that additional tools may be required beyond what is normally
3411      needed to build GCC.
3413 `srcextra'
3414      Generates files in the source directory that are not
3415      version-controlled but should go into a release tarball.
3417 `srcinfo'
3418 `srcman'
3419      Copies the info-formatted and manpage documentation into the source
3420      directory usually for the purpose of generating a release tarball.
3422 `install'
3423      Installs GCC.
3425 `uninstall'
3426      Deletes installed files, though this is not supported.
3428 `check'
3429      Run the testsuite.  This creates a `testsuite' subdirectory that
3430      has various `.sum' and `.log' files containing the results of the
3431      testing.  You can run subsets with, for example, `make check-gcc'.
3432      You can specify specific tests by setting `RUNTESTFLAGS' to be the
3433      name of the `.exp' file, optionally followed by (for some tests)
3434      an equals and a file wildcard, like:
3436           make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
3438      Note that running the testsuite may require additional tools be
3439      installed, such as Tcl or DejaGnu.
3441  The toplevel tree from which you start GCC compilation is not the GCC
3442 directory, but rather a complex Makefile that coordinates the various
3443 steps of the build, including bootstrapping the compiler and using the
3444 new compiler to build target libraries.
3446  When GCC is configured for a native configuration, the default action
3447 for `make' is to do a full three-stage bootstrap.  This means that GCC
3448 is built three times--once with the native compiler, once with the
3449 native-built compiler it just built, and once with the compiler it
3450 built the second time.  In theory, the last two should produce the same
3451 results, which `make compare' can check.  Each stage is configured
3452 separately and compiled into a separate directory, to minimize problems
3453 due to ABI incompatibilities between the native compiler and GCC.
3455  If you do a change, rebuilding will also start from the first stage
3456 and "bubble" up the change through the three stages.  Each stage is
3457 taken from its build directory (if it had been built previously),
3458 rebuilt, and copied to its subdirectory.  This will allow you to, for
3459 example, continue a bootstrap after fixing a bug which causes the
3460 stage2 build to crash.  It does not provide as good coverage of the
3461 compiler as bootstrapping from scratch, but it ensures that the new
3462 code is syntactically correct (e.g., that you did not use GCC extensions
3463 by mistake), and avoids spurious bootstrap comparison failures(1).
3465  Other targets available from the top level include:
3467 `bootstrap-lean'
3468      Like `bootstrap', except that the various stages are removed once
3469      they're no longer needed.  This saves disk space.
3471 `bootstrap2'
3472 `bootstrap2-lean'
3473      Performs only the first two stages of bootstrap.  Unlike a
3474      three-stage bootstrap, this does not perform a comparison to test
3475      that the compiler is running properly.  Note that the disk space
3476      required by a "lean" bootstrap is approximately independent of the
3477      number of stages.
3479 `stageN-bubble (N = 1...4)'
3480      Rebuild all the stages up to N, with the appropriate flags,
3481      "bubbling" the changes as described above.
3483 `all-stageN (N = 1...4)'
3484      Assuming that stage N has already been built, rebuild it with the
3485      appropriate flags.  This is rarely needed.
3487 `cleanstrap'
3488      Remove everything (`make clean') and rebuilds (`make bootstrap').
3490 `compare'
3491      Compares the results of stages 2 and 3.  This ensures that the
3492      compiler is running properly, since it should produce the same
3493      object files regardless of how it itself was compiled.
3495 `profiledbootstrap'
3496      Builds a compiler with profiling feedback information.  For more
3497      information, see *Note Building with profile feedback:
3498      (gccinstall)Building.
3500 `restrap'
3501      Restart a bootstrap, so that everything that was not built with
3502      the system compiler is rebuilt.
3504 `stageN-start (N = 1...4)'
3505      For each package that is bootstrapped, rename directories so that,
3506      for example, `gcc' points to the stageN GCC, compiled with the
3507      stageN-1 GCC(2).
3509      You will invoke this target if you need to test or debug the
3510      stageN GCC.  If you only need to execute GCC (but you need not run
3511      `make' either to rebuild it or to run test suites), you should be
3512      able to work directly in the `stageN-gcc' directory.  This makes
3513      it easier to debug multiple stages in parallel.
3515 `stage'
3516      For each package that is bootstrapped, relocate its build directory
3517      to indicate its stage.  For example, if the `gcc' directory points
3518      to the stage2 GCC, after invoking this target it will be renamed
3519      to `stage2-gcc'.
3522  If you wish to use non-default GCC flags when compiling the stage2 and
3523 stage3 compilers, set `BOOT_CFLAGS' on the command line when doing
3524 `make'.
3526  Usually, the first stage only builds the languages that the compiler
3527 is written in: typically, C and maybe Ada.  If you are debugging a
3528 miscompilation of a different stage2 front-end (for example, of the
3529 Fortran front-end), you may want to have front-ends for other languages
3530 in the first stage as well.  To do so, set `STAGE1_LANGUAGES' on the
3531 command line when doing `make'.
3533  For example, in the aforementioned scenario of debugging a Fortran
3534 front-end miscompilation caused by the stage1 compiler, you may need a
3535 command like
3537      make stage2-bubble STAGE1_LANGUAGES=c,fortran
3539  Alternatively, you can use per-language targets to build and test
3540 languages that are not enabled by default in stage1.  For example,
3541 `make f951' will build a Fortran compiler even in the stage1 build
3542 directory.
3544  ---------- Footnotes ----------
3546  (1) Except if the compiler was buggy and miscompiled some of the files
3547 that were not modified.  In this case, it's best to use `make restrap'.
3549  (2) Customarily, the system compiler is also termed the `stage0' GCC.
3551 \x1f
3552 File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory
3554 6.3.5 Library Source Files and Headers under the `gcc' Directory
3555 ----------------------------------------------------------------
3557 FIXME: list here, with explanation, all the C source files and headers
3558 under the `gcc' directory that aren't built into the GCC executable but
3559 rather are part of runtime libraries and object files, such as
3560 `crtstuff.c' and `unwind-dw2.c'.  *Note Headers Installed by GCC:
3561 Headers, for more information about the `ginclude' directory.
3563 \x1f
3564 File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory
3566 6.3.6 Headers Installed by GCC
3567 ------------------------------
3569 In general, GCC expects the system C library to provide most of the
3570 headers to be used with it.  However, GCC will fix those headers if
3571 necessary to make them work with GCC, and will install some headers
3572 required of freestanding implementations.  These headers are installed
3573 in `LIBSUBDIR/include'.  Headers for non-C runtime libraries are also
3574 installed by GCC; these are not documented here.  (FIXME: document them
3575 somewhere.)
3577  Several of the headers GCC installs are in the `ginclude' directory.
3578 These headers, `iso646.h', `stdarg.h', `stdbool.h', and `stddef.h', are
3579 installed in `LIBSUBDIR/include', unless the target Makefile fragment
3580 (*note Target Fragment::) overrides this by setting `USER_H'.
3582  In addition to these headers and those generated by fixing system
3583 headers to work with GCC, some other headers may also be installed in
3584 `LIBSUBDIR/include'.  `config.gcc' may set `extra_headers'; this
3585 specifies additional headers under `config' to be installed on some
3586 systems.
3588  GCC installs its own version of `<float.h>', from `ginclude/float.h'.
3589 This is done to cope with command-line options that change the
3590 representation of floating point numbers.
3592  GCC also installs its own version of `<limits.h>'; this is generated
3593 from `glimits.h', together with `limitx.h' and `limity.h' if the system
3594 also has its own version of `<limits.h>'.  (GCC provides its own header
3595 because it is required of ISO C freestanding implementations, but needs
3596 to include the system header from its own header as well because other
3597 standards such as POSIX specify additional values to be defined in
3598 `<limits.h>'.)  The system's `<limits.h>' header is used via
3599 `LIBSUBDIR/include/syslimits.h', which is copied from `gsyslimits.h' if
3600 it does not need fixing to work with GCC; if it needs fixing,
3601 `syslimits.h' is the fixed copy.
3603  GCC can also install `<tgmath.h>'.  It will do this when `config.gcc'
3604 sets `use_gcc_tgmath' to `yes'.
3606 \x1f
3607 File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory
3609 6.3.7 Building Documentation
3610 ----------------------------
3612 The main GCC documentation is in the form of manuals in Texinfo format.
3613 These are installed in Info format; DVI versions may be generated by
3614 `make dvi', PDF versions by `make pdf', and HTML versions by `make
3615 html'.  In addition, some man pages are generated from the Texinfo
3616 manuals, there are some other text files with miscellaneous
3617 documentation, and runtime libraries have their own documentation
3618 outside the `gcc' directory.  FIXME: document the documentation for
3619 runtime libraries somewhere.
3621 * Menu:
3623 * Texinfo Manuals::      GCC manuals in Texinfo format.
3624 * Man Page Generation::  Generating man pages from Texinfo manuals.
3625 * Miscellaneous Docs::   Miscellaneous text files with documentation.
3627 \x1f
3628 File: gccint.info,  Node: Texinfo Manuals,  Next: Man Page Generation,  Up: Documentation
3630 6.3.7.1 Texinfo Manuals
3631 .......................
3633 The manuals for GCC as a whole, and the C and C++ front ends, are in
3634 files `doc/*.texi'.  Other front ends have their own manuals in files
3635 `LANGUAGE/*.texi'.  Common files `doc/include/*.texi' are provided
3636 which may be included in multiple manuals; the following files are in
3637 `doc/include':
3639 `fdl.texi'
3640      The GNU Free Documentation License.
3642 `funding.texi'
3643      The section "Funding Free Software".
3645 `gcc-common.texi'
3646      Common definitions for manuals.
3648 `gpl.texi'
3649 `gpl_v3.texi'
3650      The GNU General Public License.
3652 `texinfo.tex'
3653      A copy of `texinfo.tex' known to work with the GCC manuals.
3655  DVI-formatted manuals are generated by `make dvi', which uses
3656 `texi2dvi' (via the Makefile macro `$(TEXI2DVI)').  PDF-formatted
3657 manuals are generated by `make pdf', which uses `texi2pdf' (via the
3658 Makefile macro `$(TEXI2PDF)').  HTML formatted manuals are generated by
3659 `make html'.  Info manuals are generated by `make info' (which is run
3660 as part of a bootstrap); this generates the manuals in the source
3661 directory, using `makeinfo' via the Makefile macro `$(MAKEINFO)', and
3662 they are included in release distributions.
3664  Manuals are also provided on the GCC web site, in both HTML and
3665 PostScript forms.  This is done via the script
3666 `maintainer-scripts/update_web_docs'.  Each manual to be provided
3667 online must be listed in the definition of `MANUALS' in that file; a
3668 file `NAME.texi' must only appear once in the source tree, and the
3669 output manual must have the same name as the source file.  (However,
3670 other Texinfo files, included in manuals but not themselves the root
3671 files of manuals, may have names that appear more than once in the
3672 source tree.)  The manual file `NAME.texi' should only include other
3673 files in its own directory or in `doc/include'.  HTML manuals will be
3674 generated by `makeinfo --html', PostScript manuals by `texi2dvi' and
3675 `dvips', and PDF manuals by `texi2pdf'.  All Texinfo files that are
3676 parts of manuals must be version-controlled, even if they are generated
3677 files, for the generation of online manuals to work.
3679  The installation manual, `doc/install.texi', is also provided on the
3680 GCC web site.  The HTML version is generated by the script
3681 `doc/install.texi2html'.
3683 \x1f
3684 File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation
3686 6.3.7.2 Man Page Generation
3687 ...........................
3689 Because of user demand, in addition to full Texinfo manuals, man pages
3690 are provided which contain extracts from those manuals.  These man
3691 pages are generated from the Texinfo manuals using
3692 `contrib/texi2pod.pl' and `pod2man'.  (The man page for `g++',
3693 `cp/g++.1', just contains a `.so' reference to `gcc.1', but all the
3694 other man pages are generated from Texinfo manuals.)
3696  Because many systems may not have the necessary tools installed to
3697 generate the man pages, they are only generated if the `configure'
3698 script detects that recent enough tools are installed, and the
3699 Makefiles allow generating man pages to fail without aborting the
3700 build.  Man pages are also included in release distributions.  They are
3701 generated in the source directory.
3703  Magic comments in Texinfo files starting `@c man' control what parts
3704 of a Texinfo file go into a man page.  Only a subset of Texinfo is
3705 supported by `texi2pod.pl', and it may be necessary to add support for
3706 more Texinfo features to this script when generating new man pages.  To
3707 improve the man page output, some special Texinfo macros are provided
3708 in `doc/include/gcc-common.texi' which `texi2pod.pl' understands:
3710 `@gcctabopt'
3711      Use in the form `@table @gcctabopt' for tables of options, where
3712      for printed output the effect of `@code' is better than that of
3713      `@option' but for man page output a different effect is wanted.
3715 `@gccoptlist'
3716      Use for summary lists of options in manuals.
3718 `@gol'
3719      Use at the end of each line inside `@gccoptlist'.  This is
3720      necessary to avoid problems with differences in how the
3721      `@gccoptlist' macro is handled by different Texinfo formatters.
3723  FIXME: describe the `texi2pod.pl' input language and magic comments in
3724 more detail.
3726 \x1f
3727 File: gccint.info,  Node: Miscellaneous Docs,  Prev: Man Page Generation,  Up: Documentation
3729 6.3.7.3 Miscellaneous Documentation
3730 ...................................
3732 In addition to the formal documentation that is installed by GCC, there
3733 are several other text files in the `gcc' subdirectory with
3734 miscellaneous documentation:
3736 `ABOUT-GCC-NLS'
3737      Notes on GCC's Native Language Support.  FIXME: this should be
3738      part of this manual rather than a separate file.
3740 `ABOUT-NLS'
3741      Notes on the Free Translation Project.
3743 `COPYING'
3744 `COPYING3'
3745      The GNU General Public License, Versions 2 and 3.
3747 `COPYING.LIB'
3748 `COPYING3.LIB'
3749      The GNU Lesser General Public License, Versions 2.1 and 3.
3751 `*ChangeLog*'
3752 `*/ChangeLog*'
3753      Change log files for various parts of GCC.
3755 `LANGUAGES'
3756      Details of a few changes to the GCC front-end interface.  FIXME:
3757      the information in this file should be part of general
3758      documentation of the front-end interface in this manual.
3760 `ONEWS'
3761      Information about new features in old versions of GCC.  (For recent
3762      versions, the information is on the GCC web site.)
3764 `README.Portability'
3765      Information about portability issues when writing code in GCC.
3766      FIXME: why isn't this part of this manual or of the GCC Coding
3767      Conventions?
3769  FIXME: document such files in subdirectories, at least `config', `cp',
3770 `objc', `testsuite'.
3772 \x1f
3773 File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory
3775 6.3.8 Anatomy of a Language Front End
3776 -------------------------------------
3778 A front end for a language in GCC has the following parts:
3780    * A directory `LANGUAGE' under `gcc' containing source files for
3781      that front end.  *Note The Front End `LANGUAGE' Directory: Front
3782      End Directory, for details.
3784    * A mention of the language in the list of supported languages in
3785      `gcc/doc/install.texi'.
3787    * A mention of the name under which the language's runtime library is
3788      recognized by `--enable-shared=PACKAGE' in the documentation of
3789      that option in `gcc/doc/install.texi'.
3791    * A mention of any special prerequisites for building the front end
3792      in the documentation of prerequisites in `gcc/doc/install.texi'.
3794    * Details of contributors to that front end in
3795      `gcc/doc/contrib.texi'.  If the details are in that front end's
3796      own manual then there should be a link to that manual's list in
3797      `contrib.texi'.
3799    * Information about support for that language in
3800      `gcc/doc/frontends.texi'.
3802    * Information about standards for that language, and the front end's
3803      support for them, in `gcc/doc/standards.texi'.  This may be a link
3804      to such information in the front end's own manual.
3806    * Details of source file suffixes for that language and `-x LANG'
3807      options supported, in `gcc/doc/invoke.texi'.
3809    * Entries in `default_compilers' in `gcc.c' for source file suffixes
3810      for that language.
3812    * Preferably testsuites, which may be under `gcc/testsuite' or
3813      runtime library directories.  FIXME: document somewhere how to
3814      write testsuite harnesses.
3816    * Probably a runtime library for the language, outside the `gcc'
3817      directory.  FIXME: document this further.
3819    * Details of the directories of any runtime libraries in
3820      `gcc/doc/sourcebuild.texi'.
3822    * Check targets in `Makefile.def' for the top-level `Makefile' to
3823      check just the compiler or the compiler and runtime library for the
3824      language.
3826  If the front end is added to the official GCC source repository, the
3827 following are also necessary:
3829    * At least one Bugzilla component for bugs in that front end and
3830      runtime libraries.  This category needs to be mentioned in
3831      `gcc/gccbug.in', as well as being added to the Bugzilla database.
3833    * Normally, one or more maintainers of that front end listed in
3834      `MAINTAINERS'.
3836    * Mentions on the GCC web site in `index.html' and `frontends.html',
3837      with any relevant links on `readings.html'.  (Front ends that are
3838      not an official part of GCC may also be listed on
3839      `frontends.html', with relevant links.)
3841    * A news item on `index.html', and possibly an announcement on the
3842      <gcc-announce@gcc.gnu.org> mailing list.
3844    * The front end's manuals should be mentioned in
3845      `maintainer-scripts/update_web_docs' (*note Texinfo Manuals::) and
3846      the online manuals should be linked to from
3847      `onlinedocs/index.html'.
3849    * Any old releases or CVS repositories of the front end, before its
3850      inclusion in GCC, should be made available on the GCC FTP site
3851      `ftp://gcc.gnu.org/pub/gcc/old-releases/'.
3853    * The release and snapshot script `maintainer-scripts/gcc_release'
3854      should be updated to generate appropriate tarballs for this front
3855      end.  The associated `maintainer-scripts/snapshot-README' and
3856      `maintainer-scripts/snapshot-index.html' files should be updated
3857      to list the tarballs and diffs for this front end.
3859    * If this front end includes its own version files that include the
3860      current date, `maintainer-scripts/update_version' should be
3861      updated accordingly.
3863 * Menu:
3865 * Front End Directory::  The front end `LANGUAGE' directory.
3866 * Front End Config::     The front end `config-lang.in' file.
3867 * Front End Makefile::   The front end `Make-lang.in' file.
3869 \x1f
3870 File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End
3872 6.3.8.1 The Front End `LANGUAGE' Directory
3873 ..........................................
3875 A front end `LANGUAGE' directory contains the source files of that
3876 front end (but not of any runtime libraries, which should be outside
3877 the `gcc' directory).  This includes documentation, and possibly some
3878 subsidiary programs built alongside the front end.  Certain files are
3879 special and other parts of the compiler depend on their names:
3881 `config-lang.in'
3882      This file is required in all language subdirectories.  *Note The
3883      Front End `config-lang.in' File: Front End Config, for details of
3884      its contents
3886 `Make-lang.in'
3887      This file is required in all language subdirectories.  *Note The
3888      Front End `Make-lang.in' File: Front End Makefile, for details of
3889      its contents.
3891 `lang.opt'
3892      This file registers the set of switches that the front end accepts
3893      on the command line, and their `--help' text.  *Note Options::.
3895 `lang-specs.h'
3896      This file provides entries for `default_compilers' in `gcc.c'
3897      which override the default of giving an error that a compiler for
3898      that language is not installed.
3900 `LANGUAGE-tree.def'
3901      This file, which need not exist, defines any language-specific tree
3902      codes.
3904 \x1f
3905 File: gccint.info,  Node: Front End Config,  Next: Front End Makefile,  Prev: Front End Directory,  Up: Front End
3907 6.3.8.2 The Front End `config-lang.in' File
3908 ...........................................
3910 Each language subdirectory contains a `config-lang.in' file.  In
3911 addition the main directory contains `c-config-lang.in', which contains
3912 limited information for the C language.  This file is a shell script
3913 that may define some variables describing the language:
3915 `language'
3916      This definition must be present, and gives the name of the language
3917      for some purposes such as arguments to `--enable-languages'.
3919 `lang_requires'
3920      If defined, this variable lists (space-separated) language front
3921      ends other than C that this front end requires to be enabled (with
3922      the names given being their `language' settings).  For example, the
3923      Java front end depends on the C++ front end, so sets
3924      `lang_requires=c++'.
3926 `subdir_requires'
3927      If defined, this variable lists (space-separated) front end
3928      directories other than C that this front end requires to be
3929      present.  For example, the Objective-C++ front end uses source
3930      files from the C++ and Objective-C front ends, so sets
3931      `subdir_requires="cp objc"'.
3933 `target_libs'
3934      If defined, this variable lists (space-separated) targets in the
3935      top level `Makefile' to build the runtime libraries for this
3936      language, such as `target-libobjc'.
3938 `lang_dirs'
3939      If defined, this variable lists (space-separated) top level
3940      directories (parallel to `gcc'), apart from the runtime libraries,
3941      that should not be configured if this front end is not built.
3943 `build_by_default'
3944      If defined to `no', this language front end is not built unless
3945      enabled in a `--enable-languages' argument.  Otherwise, front ends
3946      are built by default, subject to any special logic in
3947      `configure.ac' (as is present to disable the Ada front end if the
3948      Ada compiler is not already installed).
3950 `boot_language'
3951      If defined to `yes', this front end is built in stage1 of the
3952      bootstrap.  This is only relevant to front ends written in their
3953      own languages.
3955 `compilers'
3956      If defined, a space-separated list of compiler executables that
3957      will be run by the driver.  The names here will each end with
3958      `\$(exeext)'.
3960 `outputs'
3961      If defined, a space-separated list of files that should be
3962      generated by `configure' substituting values in them.  This
3963      mechanism can be used to create a file `LANGUAGE/Makefile' from
3964      `LANGUAGE/Makefile.in', but this is deprecated, building
3965      everything from the single `gcc/Makefile' is preferred.
3967 `gtfiles'
3968      If defined, a space-separated list of files that should be scanned
3969      by `gengtype.c' to generate the garbage collection tables and
3970      routines for this language.  This excludes the files that are
3971      common to all front ends.  *Note Type Information::.
3974 \x1f
3975 File: gccint.info,  Node: Front End Makefile,  Prev: Front End Config,  Up: Front End
3977 6.3.8.3 The Front End `Make-lang.in' File
3978 .........................................
3980 Each language subdirectory contains a `Make-lang.in' file.  It contains
3981 targets `LANG.HOOK' (where `LANG' is the setting of `language' in
3982 `config-lang.in') for the following values of `HOOK', and any other
3983 Makefile rules required to build those targets (which may if necessary
3984 use other Makefiles specified in `outputs' in `config-lang.in',
3985 although this is deprecated).  It also adds any testsuite targets that
3986 can use the standard rule in `gcc/Makefile.in' to the variable
3987 `lang_checks'.
3989 `all.cross'
3990 `start.encap'
3991 `rest.encap'
3992      FIXME: exactly what goes in each of these targets?
3994 `tags'
3995      Build an `etags' `TAGS' file in the language subdirectory in the
3996      source tree.
3998 `info'
3999      Build info documentation for the front end, in the build directory.
4000      This target is only called by `make bootstrap' if a suitable
4001      version of `makeinfo' is available, so does not need to check for
4002      this, and should fail if an error occurs.
4004 `dvi'
4005      Build DVI documentation for the front end, in the build directory.
4006      This should be done using `$(TEXI2DVI)', with appropriate `-I'
4007      arguments pointing to directories of included files.
4009 `pdf'
4010      Build PDF documentation for the front end, in the build directory.
4011      This should be done using `$(TEXI2PDF)', with appropriate `-I'
4012      arguments pointing to directories of included files.
4014 `html'
4015      Build HTML documentation for the front end, in the build directory.
4017 `man'
4018      Build generated man pages for the front end from Texinfo manuals
4019      (*note Man Page Generation::), in the build directory.  This target
4020      is only called if the necessary tools are available, but should
4021      ignore errors so as not to stop the build if errors occur; man
4022      pages are optional and the tools involved may be installed in a
4023      broken way.
4025 `install-common'
4026      Install everything that is part of the front end, apart from the
4027      compiler executables listed in `compilers' in `config-lang.in'.
4029 `install-info'
4030      Install info documentation for the front end, if it is present in
4031      the source directory.  This target should have dependencies on
4032      info files that should be installed.
4034 `install-man'
4035      Install man pages for the front end.  This target should ignore
4036      errors.
4038 `install-plugin'
4039      Install headers needed for plugins.
4041 `srcextra'
4042      Copies its dependencies into the source directory.  This generally
4043      should be used for generated files such as Bison output files
4044      which are not version-controlled, but should be included in any
4045      release tarballs.  This target will be executed during a bootstrap
4046      if `--enable-generated-files-in-srcdir' was specified as a
4047      `configure' option.
4049 `srcinfo'
4050 `srcman'
4051      Copies its dependencies into the source directory.  These targets
4052      will be executed during a bootstrap if
4053      `--enable-generated-files-in-srcdir' was specified as a
4054      `configure' option.
4056 `uninstall'
4057      Uninstall files installed by installing the compiler.  This is
4058      currently documented not to be supported, so the hook need not do
4059      anything.
4061 `mostlyclean'
4062 `clean'
4063 `distclean'
4064 `maintainer-clean'
4065      The language parts of the standard GNU `*clean' targets.  *Note
4066      Standard Targets for Users: (standards)Standard Targets, for
4067      details of the standard targets.  For GCC, `maintainer-clean'
4068      should delete all generated files in the source directory that are
4069      not version-controlled, but should not delete anything that is.
4071  `Make-lang.in' must also define a variable `LANG_OBJS' to a list of
4072 host object files that are used by that language.
4074 \x1f
4075 File: gccint.info,  Node: Back End,  Prev: Front End,  Up: gcc Directory
4077 6.3.9 Anatomy of a Target Back End
4078 ----------------------------------
4080 A back end for a target architecture in GCC has the following parts:
4082    * A directory `MACHINE' under `gcc/config', containing a machine
4083      description `MACHINE.md' file (*note Machine Descriptions: Machine
4084      Desc.), header files `MACHINE.h' and `MACHINE-protos.h' and a
4085      source file `MACHINE.c' (*note Target Description Macros and
4086      Functions: Target Macros.), possibly a target Makefile fragment
4087      `t-MACHINE' (*note The Target Makefile Fragment: Target
4088      Fragment.), and maybe some other files.  The names of these files
4089      may be changed from the defaults given by explicit specifications
4090      in `config.gcc'.
4092    * If necessary, a file `MACHINE-modes.def' in the `MACHINE'
4093      directory, containing additional machine modes to represent
4094      condition codes.  *Note Condition Code::, for further details.
4096    * An optional `MACHINE.opt' file in the `MACHINE' directory,
4097      containing a list of target-specific options.  You can also add
4098      other option files using the `extra_options' variable in
4099      `config.gcc'.  *Note Options::.
4101    * Entries in `config.gcc' (*note The `config.gcc' File: System
4102      Config.) for the systems with this target architecture.
4104    * Documentation in `gcc/doc/invoke.texi' for any command-line
4105      options supported by this target (*note Run-time Target
4106      Specification: Run-time Target.).  This means both entries in the
4107      summary table of options and details of the individual options.
4109    * Documentation in `gcc/doc/extend.texi' for any target-specific
4110      attributes supported (*note Defining target-specific uses of
4111      `__attribute__': Target Attributes.), including where the same
4112      attribute is already supported on some targets, which are
4113      enumerated in the manual.
4115    * Documentation in `gcc/doc/extend.texi' for any target-specific
4116      pragmas supported.
4118    * Documentation in `gcc/doc/extend.texi' of any target-specific
4119      built-in functions supported.
4121    * Documentation in `gcc/doc/extend.texi' of any target-specific
4122      format checking styles supported.
4124    * Documentation in `gcc/doc/md.texi' of any target-specific
4125      constraint letters (*note Constraints for Particular Machines:
4126      Machine Constraints.).
4128    * A note in `gcc/doc/contrib.texi' under the person or people who
4129      contributed the target support.
4131    * Entries in `gcc/doc/install.texi' for all target triplets
4132      supported with this target architecture, giving details of any
4133      special notes about installation for this target, or saying that
4134      there are no special notes if there are none.
4136    * Possibly other support outside the `gcc' directory for runtime
4137      libraries.  FIXME: reference docs for this.  The `libstdc++'
4138      porting manual needs to be installed as info for this to work, or
4139      to be a chapter of this manual.
4141  If the back end is added to the official GCC source repository, the
4142 following are also necessary:
4144    * An entry for the target architecture in `readings.html' on the GCC
4145      web site, with any relevant links.
4147    * Details of the properties of the back end and target architecture
4148      in `backends.html' on the GCC web site.
4150    * A news item about the contribution of support for that target
4151      architecture, in `index.html' on the GCC web site.
4153    * Normally, one or more maintainers of that target listed in
4154      `MAINTAINERS'.  Some existing architectures may be unmaintained,
4155      but it would be unusual to add support for a target that does not
4156      have a maintainer when support is added.
4158 \x1f
4159 File: gccint.info,  Node: Testsuites,  Next: Options,  Prev: Source Tree,  Up: Top
4161 7 Testsuites
4162 ************
4164 GCC contains several testsuites to help maintain compiler quality.
4165 Most of the runtime libraries and language front ends in GCC have
4166 testsuites.  Currently only the C language testsuites are documented
4167 here; FIXME: document the others.
4169 * Menu:
4171 * Test Idioms::     Idioms used in testsuite code.
4172 * Test Directives:: Directives used within DejaGnu tests.
4173 * Ada Tests::       The Ada language testsuites.
4174 * C Tests::         The C language testsuites.
4175 * libgcj Tests::    The Java library testsuites.
4176 * LTO Testing::     Support for testing link-time optimizations.
4177 * gcov Testing::    Support for testing gcov.
4178 * profopt Testing:: Support for testing profile-directed optimizations.
4179 * compat Testing::  Support for testing binary compatibility.
4180 * Torture Tests::   Support for torture testing using multiple options.
4182 \x1f
4183 File: gccint.info,  Node: Test Idioms,  Next: Test Directives,  Up: Testsuites
4185 7.1 Idioms Used in Testsuite Code
4186 =================================
4188 In general, C testcases have a trailing `-N.c', starting with `-1.c',
4189 in case other testcases with similar names are added later.  If the
4190 test is a test of some well-defined feature, it should have a name
4191 referring to that feature such as `FEATURE-1.c'.  If it does not test a
4192 well-defined feature but just happens to exercise a bug somewhere in
4193 the compiler, and a bug report has been filed for this bug in the GCC
4194 bug database, `prBUG-NUMBER-1.c' is the appropriate form of name.
4195 Otherwise (for miscellaneous bugs not filed in the GCC bug database),
4196 and previously more generally, test cases are named after the date on
4197 which they were added.  This allows people to tell at a glance whether
4198 a test failure is because of a recently found bug that has not yet been
4199 fixed, or whether it may be a regression, but does not give any other
4200 information about the bug or where discussion of it may be found.  Some
4201 other language testsuites follow similar conventions.
4203  In the `gcc.dg' testsuite, it is often necessary to test that an error
4204 is indeed a hard error and not just a warning--for example, where it is
4205 a constraint violation in the C standard, which must become an error
4206 with `-pedantic-errors'.  The following idiom, where the first line
4207 shown is line LINE of the file and the line that generates the error,
4208 is used for this:
4210      /* { dg-bogus "warning" "warning in place of error" } */
4211      /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
4213  It may be necessary to check that an expression is an integer constant
4214 expression and has a certain value.  To check that `E' has value `V',
4215 an idiom similar to the following is used:
4217      char x[((E) == (V) ? 1 : -1)];
4219  In `gcc.dg' tests, `__typeof__' is sometimes used to make assertions
4220 about the types of expressions.  See, for example,
4221 `gcc.dg/c99-condexpr-1.c'.  The more subtle uses depend on the exact
4222 rules for the types of conditional expressions in the C standard; see,
4223 for example, `gcc.dg/c99-intconst-1.c'.
4225  It is useful to be able to test that optimizations are being made
4226 properly.  This cannot be done in all cases, but it can be done where
4227 the optimization will lead to code being optimized away (for example,
4228 where flow analysis or alias analysis should show that certain code
4229 cannot be called) or to functions not being called because they have
4230 been expanded as built-in functions.  Such tests go in
4231 `gcc.c-torture/execute'.  Where code should be optimized away, a call
4232 to a nonexistent function such as `link_failure ()' may be inserted; a
4233 definition
4235      #ifndef __OPTIMIZE__
4236      void
4237      link_failure (void)
4238      {
4239        abort ();
4240      }
4241      #endif
4243 will also be needed so that linking still succeeds when the test is run
4244 without optimization.  When all calls to a built-in function should
4245 have been optimized and no calls to the non-built-in version of the
4246 function should remain, that function may be defined as `static' to
4247 call `abort ()' (although redeclaring a function as static may not work
4248 on all targets).
4250  All testcases must be portable.  Target-specific testcases must have
4251 appropriate code to avoid causing failures on unsupported systems;
4252 unfortunately, the mechanisms for this differ by directory.
4254  FIXME: discuss non-C testsuites here.
4256 \x1f
4257 File: gccint.info,  Node: Test Directives,  Next: Ada Tests,  Prev: Test Idioms,  Up: Testsuites
4259 7.2 Directives used within DejaGnu tests
4260 ========================================
4262 * Menu:
4264 * Directives::  Syntax and descriptions of test directives.
4265 * Selectors:: Selecting targets to which a test applies.
4266 * Effective-Target Keywords:: Keywords describing target attributes.
4267 * Add Options:: Features for `dg-add-options'
4268 * Require Support:: Variants of `dg-require-SUPPORT'
4269 * Final Actions:: Commands for use in `dg-final'
4271 \x1f
4272 File: gccint.info,  Node: Directives,  Next: Selectors,  Up: Test Directives
4274 7.2.1 Syntax and Descriptions of test directives
4275 ------------------------------------------------
4277 Test directives appear within comments in a test source file and begin
4278 with `dg-'.  Some of these are defined within DejaGnu and others are
4279 local to the GCC testsuite.
4281  The order in which test directives appear in a test can be important:
4282 directives local to GCC sometimes override information used by the
4283 DejaGnu directives, which know nothing about the GCC directives, so the
4284 DejaGnu directives must precede GCC directives.
4286  Several test directives include selectors (*note Selectors::) which
4287 are usually preceded by the keyword `target' or `xfail'.
4289 7.2.1.1 Specify how to build the test
4290 .....................................
4292 `{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
4293      DO-WHAT-KEYWORD specifies how the test is compiled and whether it
4294      is executed.  It is one of:
4296     `preprocess'
4297           Compile with `-E' to run only the preprocessor.
4299     `compile'
4300           Compile with `-S' to produce an assembly code file.
4302     `assemble'
4303           Compile with `-c' to produce a relocatable object file.
4305     `link'
4306           Compile, assemble, and link to produce an executable file.
4308     `run'
4309           Produce and run an executable file, which is expected to
4310           return an exit code of 0.
4312      The default is `compile'.  That can be overridden for a set of
4313      tests by redefining `dg-do-what-default' within the `.exp' file
4314      for those tests.
4316      If the directive includes the optional `{ target SELECTOR }' then
4317      the test is skipped unless the target system matches the SELECTOR.
4319      If DO-WHAT-KEYWORD is `run' and the directive includes the
4320      optional `{ xfail SELECTOR }' and the selector is met then the
4321      test is expected to fail.  The `xfail' clause is ignored for other
4322      values of DO-WHAT-KEYWORD; those tests can use directive
4323      `dg-xfail-if'.
4325 7.2.1.2 Specify additional compiler options
4326 ...........................................
4328 `{ dg-options OPTIONS [{ target SELECTOR }] }'
4329      This DejaGnu directive provides a list of compiler options, to be
4330      used if the target system matches SELECTOR, that replace the
4331      default options used for this set of tests.
4333 `{ dg-add-options FEATURE ... }'
4334      Add any compiler options that are needed to access certain
4335      features.  This directive does nothing on targets that enable the
4336      features by default, or that don't provide them at all.  It must
4337      come after all `dg-options' directives.  For supported values of
4338      FEATURE see *Note Add Options::.
4340 7.2.1.3 Modify the test timeout value
4341 .....................................
4343 The normal timeout limit, in seconds, is found by searching the
4344 following in order:
4346    * the value defined by an earlier `dg-timeout' directive in the test
4348    * variable TOOL_TIMEOUT defined by the set of tests
4350    * GCC,TIMEOUT set in the target board
4352    * 300
4354 `{ dg-timeout N [{target SELECTOR }] }'
4355      Set the time limit for the compilation and for the execution of
4356      the test to the specified number of seconds.
4358 `{ dg-timeout-factor X [{ target SELECTOR }] }'
4359      Multiply the normal time limit for compilation and execution of
4360      the test by the specified floating-point factor.
4362 7.2.1.4 Skip a test for some targets
4363 ....................................
4365 `{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4366      Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each
4367      element is a string of zero or more GCC options.  Skip the test if
4368      all of the following conditions are met:
4369         * the test system is included in SELECTOR
4371         * for at least one of the option strings in INCLUDE-OPTS, every
4372           option from that string is in the set of options with which
4373           the test would be compiled; use `"*"' for an INCLUDE-OPTS list
4374           that matches any options; that is the default if INCLUDE-OPTS
4375           is not specified
4377         * for each of the option strings in EXCLUDE-OPTS, at least one
4378           option from that string is not in the set of options with
4379           which the test would be compiled; use `""' for an empty
4380           EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not
4381           specified
4383      For example, to skip a test if option `-Os' is present:
4385           /* { dg-skip-if "" { *-*-* }  { "-Os" } { "" } } */
4387      To skip a test if both options `-O2' and `-g' are present:
4389           /* { dg-skip-if "" { *-*-* }  { "-O2 -g" } { "" } } */
4391      To skip a test if either `-O2' or `-O3' is present:
4393           /* { dg-skip-if "" { *-*-* }  { "-O2" "-O3" } { "" } } */
4395      To skip a test unless option `-Os' is present:
4397           /* { dg-skip-if "" { *-*-* }  { "*" } { "-Os" } } */
4399      To skip a test if either `-O2' or `-O3' is used with `-g' but not
4400      if `-fpic' is also present:
4402           /* { dg-skip-if "" { *-*-* }  { "-O2 -g" "-O3 -g" } { "-fpic" } } */
4404 `{ dg-require-effective-target KEYWORD [{ SELECTOR }] }'
4405      Skip the test if the test target, including current multilib flags,
4406      is not covered by the effective-target keyword.  If the directive
4407      includes the optional `{ SELECTOR }' then the effective-target
4408      test is only performed if the target system matches the SELECTOR.
4409      This directive must appear after any `dg-do' directive in the test
4410      and before any `dg-additional-sources' directive.  *Note
4411      Effective-Target Keywords::.
4413 `{ dg-require-SUPPORT args }'
4414      Skip the test if the target does not provide the required support.
4415      These directives must appear after any `dg-do' directive in the
4416      test and before any `dg-additional-sources' directive.  They
4417      require at least one argument, which can be an empty string if the
4418      specific procedure does not examine the argument.  *Note Require
4419      Support::, for a complete list of these directives.
4421 7.2.1.5 Expect a test to fail for some targets
4422 ..............................................
4424 `{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4425      Expect the test to fail if the conditions (which are the same as
4426      for `dg-skip-if') are met.  This does not affect the execute step.
4428 `{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4429      Expect the execute step of a test to fail if the conditions (which
4430      are the same as for `dg-skip-if') are met.
4432 7.2.1.6 Expect the test executable to fail
4433 ..........................................
4435 `{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }'
4436      Expect the test executable to return a nonzero exit status if the
4437      conditions (which are the same as for `dg-skip-if') are met.
4439 7.2.1.7 Verify compiler messages
4440 ................................
4442 `{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4443      This DejaGnu directive appears on a source line that is expected
4444      to get an error message, or else specifies the source line
4445      associated with the message.  If there is no message for that line
4446      or if the text of that message is not matched by REGEXP then the
4447      check fails and COMMENT is included in the `FAIL' message.  The
4448      check does not look for the string `error' unless it is part of
4449      REGEXP.
4451 `{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4452      This DejaGnu directive appears on a source line that is expected
4453      to get a warning message, or else specifies the source line
4454      associated with the message.  If there is no message for that line
4455      or if the text of that message is not matched by REGEXP then the
4456      check fails and COMMENT is included in the `FAIL' message.  The
4457      check does not look for the string `warning' unless it is part of
4458      REGEXP.
4460 `{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4461      The line is expected to get a message other than an error or
4462      warning.  If there is no message for that line or if the text of
4463      that message is not matched by REGEXP then the check fails and
4464      COMMENT is included in the `FAIL' message.
4466 `{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4467      This DejaGnu directive appears on a source line that should not
4468      get a message matching REGEXP, or else specifies the source line
4469      associated with the bogus message.  It is usually used with `xfail'
4470      to indicate that the message is a known problem for a particular
4471      set of targets.
4473 `{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
4474      This DejaGnu directive indicates that the test is expected to fail
4475      due to compiler messages that are not handled by `dg-error',
4476      `dg-warning' or `dg-bogus'.  For this directive `xfail' has the
4477      same effect as `target'.
4479 `{ dg-prune-output REGEXP }'
4480      Prune messages matching REGEXP from the test output.
4482 7.2.1.8 Verify output of the test executable
4483 ............................................
4485 `{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
4486      This DejaGnu directive compares REGEXP to the combined output that
4487      the test executable writes to `stdout' and `stderr'.
4489 7.2.1.9 Specify additional files for a test
4490 ...........................................
4492 `{ dg-additional-files "FILELIST" }'
4493      Specify additional files, other than source files, that must be
4494      copied to the system where the compiler runs.
4496 `{ dg-additional-sources "FILELIST" }'
4497      Specify additional source files to appear in the compile line
4498      following the main test file.
4500 7.2.1.10 Add checks at the end of a test
4501 ........................................
4503 `{ dg-final { LOCAL-DIRECTIVE } }'
4504      This DejaGnu directive is placed within a comment anywhere in the
4505      source file and is processed after the test has been compiled and
4506      run.  Multiple `dg-final' commands are processed in the order in
4507      which they appear in the source file.  *Note Final Actions::, for
4508      a list of directives that can be used within `dg-final'.
4510 \x1f
4511 File: gccint.info,  Node: Selectors,  Next: Effective-Target Keywords,  Prev: Directives,  Up: Test Directives
4513 7.2.2 Selecting targets to which a test applies
4514 -----------------------------------------------
4516 Several test directives include SELECTORs to limit the targets for
4517 which a test is run or to declare that a test is expected to fail on
4518 particular targets.
4520  A selector is:
4521    * one or more target triplets, possibly including wildcard characters
4523    * a single effective-target keyword (*note Effective-Target
4524      Keywords::)
4526    * a logical expression
4528  Depending on the context, the selector specifies whether a test is
4529 skipped and reported as unsupported or is expected to fail.  Use
4530 `*-*-*' to match any target.
4532  A selector expression appears within curly braces and uses a single
4533 logical operator: one of `!', `&&', or `||'.  An operand is another
4534 selector expression, an effective-target keyword, a single target
4535 triplet, or a list of target triplets within quotes or curly braces.
4536 For example:
4538      { target { ! "hppa*-*-* ia64*-*-*" } }
4539      { target { powerpc*-*-* && lp64 } }
4540      { xfail { lp64 || vect_no_align } }
4542 \x1f
4543 File: gccint.info,  Node: Effective-Target Keywords,  Next: Add Options,  Prev: Selectors,  Up: Test Directives
4545 7.2.3 Keywords describing target attributes
4546 -------------------------------------------
4548 Effective-target keywords identify sets of targets that support
4549 particular functionality.  They are used to limit tests to be run only
4550 for particular targets, or to specify that particular sets of targets
4551 are expected to fail some tests.
4553  Effective-target keywords are defined in `lib/target-supports.exp' in
4554 the GCC testsuite, with the exception of those that are documented as
4555 being local to a particular test directory.
4557  The `effective target' takes into account all of the compiler options
4558 with which the test will be compiled, including the multilib options.
4559 By convention, keywords ending in `_nocache' can also include options
4560 specified for the particular test in an earlier `dg-options' or
4561 `dg-add-options' directive.
4563 7.2.3.1 Data type sizes
4564 .......................
4566 `ilp32'
4567      Target has 32-bit `int', `long', and pointers.
4569 `lp64'
4570      Target has 32-bit `int', 64-bit `long' and pointers.
4572 `llp64'
4573      Target has 32-bit `int' and `long', 64-bit `long long' and
4574      pointers.
4576 `double64'
4577      Target has 64-bit `double'.
4579 `double64plus'
4580      Target has `double' that is 64 bits or longer.
4582 `int32plus'
4583      Target has `int' that is at 32 bits or longer.
4585 `int16'
4586      Target has `int' that is 16 bits or shorter.
4588 `large_double'
4589      Target supports `double' that is longer than `float'.
4591 `large_long_double'
4592      Target supports `long double' that is longer than `double'.
4594 `ptr32plus'
4595      Target has pointers that are 32 bits or longer.
4597 `size32plus'
4598      Target supports array and structure sizes that are 32 bits or
4599      longer.
4601 `4byte_wchar_t'
4602      Target has `wchar_t' that is at least 4 bytes.
4604 7.2.3.2 Fortran-specific attributes
4605 ...................................
4607 `fortran_integer_16'
4608      Target supports Fortran `integer' that is 16 bytes or longer.
4610 `fortran_large_int'
4611      Target supports Fortran `integer' kinds larger than `integer(8)'.
4613 `fortran_large_real'
4614      Target supports Fortran `real' kinds larger than `real(8)'.
4616 7.2.3.3 Vector-specific attributes
4617 ..................................
4619 `vect_condition'
4620      Target supports vector conditional operations.
4622 `vect_double'
4623      Target supports hardware vectors of `double'.
4625 `vect_float'
4626      Target supports hardware vectors of `float'.
4628 `vect_int'
4629      Target supports hardware vectors of `int'.
4631 `vect_int_mult'
4632      Target supports a vector widening multiplication of `short'
4633      operands into an `int' result, or supports promotion (unpacking)
4634      from `short' to `int' and a non-widening multiplication of `int'.
4636 `vect_long'
4637      Target supports hardware vectors of `long'.
4639 `vect_long_long'
4640      Target supports hardware vectors of `long long'.
4642 `vect_aligned_arrays'
4643      Target aligns arrays to vector alignment boundary.
4645 `vect_hw_misalign'
4646      Target supports a vector misalign access.
4648 `vect_no_align'
4649      Target does not support a vector alignment mechanism.
4651 `vect_no_int_max'
4652      Target does not support a vector max instruction on `int'.
4654 `vect_no_int_add'
4655      Target does not support a vector add instruction on `int'.
4657 `vect_no_bitwise'
4658      Target does not support vector bitwise instructions.
4660 `vect_char_mult'
4661      Target supports `vector char' multiplication.
4663 `vect_short_mult'
4664      Target supports `vector short' multiplication.
4666 `vect_int_mult'
4667      Target supports `vector int' multiplication.
4669 `vect_extract_even_odd'
4670      Target supports vector even/odd element extraction.
4672 `vect_extract_even_odd_wide'
4673      Target supports vector even/odd element extraction of vectors with
4674      elements `SImode' or larger.
4676 `vect_interleave'
4677      Target supports vector interleaving.
4679 `vect_strided'
4680      Target supports vector interleaving and extract even/odd.
4682 `vect_strided_wide'
4683      Target supports vector interleaving and extract even/odd for wide
4684      element types.
4686 `vect_perm'
4687      Target supports vector permutation.
4689 `vect_shift'
4690      Target supports a hardware vector shift operation.
4692 `vect_widen_sum_hi_to_si'
4693      Target supports a vector widening summation of `short' operands
4694      into `int' results, or can promote (unpack) from `short' to `int'.
4696 `vect_widen_sum_qi_to_hi'
4697      Target supports a vector widening summation of `char' operands
4698      into `short' results, or can promote (unpack) from `char' to
4699      `short'.
4701 `vect_widen_sum_qi_to_si'
4702      Target supports a vector widening summation of `char' operands
4703      into `int' results.
4705 `vect_widen_mult_qi_to_hi'
4706      Target supports a vector widening multiplication of `char' operands
4707      into `short' results, or can promote (unpack) from `char' to
4708      `short' and perform non-widening multiplication of `short'.
4710 `vect_widen_mult_hi_to_si'
4711      Target supports a vector widening multiplication of `short'
4712      operands into `int' results, or can promote (unpack) from `short'
4713      to `int' and perform non-widening multiplication of `int'.
4715 `vect_sdot_qi'
4716      Target supports a vector dot-product of `signed char'.
4718 `vect_udot_qi'
4719      Target supports a vector dot-product of `unsigned char'.
4721 `vect_sdot_hi'
4722      Target supports a vector dot-product of `signed short'.
4724 `vect_udot_hi'
4725      Target supports a vector dot-product of `unsigned short'.
4727 `vect_pack_trunc'
4728      Target supports a vector demotion (packing) of `short' to `char'
4729      and from `int' to `short' using modulo arithmetic.
4731 `vect_unpack'
4732      Target supports a vector promotion (unpacking) of `char' to `short'
4733      and from `char' to `int'.
4735 `vect_intfloat_cvt'
4736      Target supports conversion from `signed int' to `float'.
4738 `vect_uintfloat_cvt'
4739      Target supports conversion from `unsigned int' to `float'.
4741 `vect_floatint_cvt'
4742      Target supports conversion from `float' to `signed int'.
4744 `vect_floatuint_cvt'
4745      Target supports conversion from `float' to `unsigned int'.
4747 7.2.3.4 Thread Local Storage attributes
4748 .......................................
4750 `tls'
4751      Target supports thread-local storage.
4753 `tls_native'
4754      Target supports native (rather than emulated) thread-local storage.
4756 `tls_runtime'
4757      Test system supports executing TLS executables.
4759 7.2.3.5 Decimal floating point attributes
4760 .........................................
4762 `dfp'
4763      Targets supports compiling decimal floating point extension to C.
4765 `dfp_nocache'
4766      Including the options used to compile this particular test, the
4767      target supports compiling decimal floating point extension to C.
4769 `dfprt'
4770      Test system can execute decimal floating point tests.
4772 `dfprt_nocache'
4773      Including the options used to compile this particular test, the
4774      test system can execute decimal floating point tests.
4776 `hard_dfp'
4777      Target generates decimal floating point instructions with current
4778      options.
4780 7.2.3.6 ARM-specific attributes
4781 ...............................
4783 `arm32'
4784      ARM target generates 32-bit code.
4786 `arm_eabi'
4787      ARM target adheres to the ABI for the ARM Architecture.
4789 `arm_hard_vfp_ok'
4790      ARM target supports `-mfpu=vfp -mfloat-abi=hard'.  Some multilibs
4791      may be incompatible with these options.
4793 `arm_iwmmxt_ok'
4794      ARM target supports `-mcpu=iwmmxt'.  Some multilibs may be
4795      incompatible with this option.
4797 `arm_neon'
4798      ARM target supports generating NEON instructions.
4800 `arm_neon_hw'
4801      Test system supports executing NEON instructions.
4803 `arm_neon_ok'
4804      ARM Target supports `-mfpu=neon -mfloat-abi=softfp'.  Some
4805      multilibs may be incompatible with these options.
4807 `arm_thumb1_ok'
4808      ARM target generates Thumb-1 code for `-mthumb'.
4810 `arm_thumb2_ok'
4811      ARM target generates Thumb-2 code for `-mthumb'.
4813 `arm_vfp_ok'
4814      ARM target supports `-mfpu=vfp -mfloat-abi=softfp'.  Some
4815      multilibs may be incompatible with these options.
4817 7.2.3.7 MIPS-specific attributes
4818 ................................
4820 `mips64'
4821      MIPS target supports 64-bit instructions.
4823 `nomips16'
4824      MIPS target does not produce MIPS16 code.
4826 `mips16_attribute'
4827      MIPS target can generate MIPS16 code.
4829 `mips_loongson'
4830      MIPS target is a Loongson-2E or -2F target using an ABI that
4831      supports the Loongson vector modes.
4833 `mips_newabi_large_long_double'
4834      MIPS target supports `long double' larger than `double' when using
4835      the new ABI.
4837 `mpaired_single'
4838      MIPS target supports `-mpaired-single'.
4840 7.2.3.8 PowerPC-specific attributes
4841 ...................................
4843 `powerpc64'
4844      Test system supports executing 64-bit instructions.
4846 `powerpc_altivec'
4847      PowerPC target supports AltiVec.
4849 `powerpc_altivec_ok'
4850      PowerPC target supports `-maltivec'.
4852 `powerpc_fprs'
4853      PowerPC target supports floating-point registers.
4855 `powerpc_hard_double'
4856      PowerPC target supports hardware double-precision floating-point.
4858 `powerpc_ppu_ok'
4859      PowerPC target supports `-mcpu=cell'.
4861 `powerpc_spe'
4862      PowerPC target supports PowerPC SPE.
4864 `powerpc_spe_nocache'
4865      Including the options used to compile this particular test, the
4866      PowerPC target supports PowerPC SPE.
4868 `powerpc_spu'
4869      PowerPC target supports PowerPC SPU.
4871 `spu_auto_overlay'
4872      SPU target has toolchain that supports automatic overlay
4873      generation.
4875 `powerpc_vsx_ok'
4876      PowerPC target supports `-mvsx'.
4878 `powerpc_405_nocache'
4879      Including the options used to compile this particular test, the
4880      PowerPC target supports PowerPC 405.
4882 `vmx_hw'
4883      PowerPC target supports executing AltiVec instructions.
4885 7.2.3.9 Other hardware attributes
4886 .................................
4888 `avx'
4889      Target supports compiling AVX instructions.
4891 `cell_hw'
4892      Test system can execute AltiVec and Cell PPU instructions.
4894 `coldfire_fpu'
4895      Target uses a ColdFire FPU.
4897 `hard_float'
4898      Target supports FPU instructions.
4900 `sse'
4901      Target supports compiling `sse' instructions.
4903 `sse_runtime'
4904      Target supports the execution of `sse' instructions.
4906 `sse2'
4907      Target supports compiling `sse2' instructions.
4909 `sse2_runtime'
4910      Target supports the execution of `sse2' instructions.
4912 `sync_char_short'
4913      Target supports atomic operations on `char' and `short'.
4915 `sync_int_long'
4916      Target supports atomic operations on `int' and `long'.
4918 `ultrasparc_hw'
4919      Test environment appears to run executables on a simulator that
4920      accepts only `EM_SPARC' executables and chokes on `EM_SPARC32PLUS'
4921      or `EM_SPARCV9' executables.
4923 `vect_cmdline_needed'
4924      Target requires a command line argument to enable a SIMD
4925      instruction set.
4927 7.2.3.10 Environment attributes
4928 ...............................
4931      The language for the compiler under test is C.
4933 `c++'
4934      The language for the compiler under test is C++.
4936 `c99_runtime'
4937      Target provides a full C99 runtime.
4939 `correct_iso_cpp_string_wchar_protos'
4940      Target `string.h' and `wchar.h' headers provide C++ required
4941      overloads for `strchr' etc. functions.
4943 `dummy_wcsftime'
4944      Target uses a dummy `wcsftime' function that always returns zero.
4946 `fd_truncate'
4947      Target can truncate a file from a file descriptor, as used by
4948      `libgfortran/io/unix.c:fd_truncate'; i.e. `ftruncate' or `chsize'.
4950 `freestanding'
4951      Target is `freestanding' as defined in section 4 of the C99
4952      standard.  Effectively, it is a target which supports no extra
4953      headers or libraries other than what is considered essential.
4955 `init_priority'
4956      Target supports constructors with initialization priority
4957      arguments.
4959 `inttypes_types'
4960      Target has the basic signed and unsigned types in `inttypes.h'.
4961      This is for tests that GCC's notions of these types agree with
4962      those in the header, as some systems have only `inttypes.h'.
4964 `lax_strtofp'
4965      Target might have errors of a few ULP in string to floating-point
4966      conversion functions and overflow is not always detected correctly
4967      by those functions.
4969 `newlib'
4970      Target supports Newlib.
4972 `pow10'
4973      Target provides `pow10' function.
4975 `pthread'
4976      Target can compile using `pthread.h' with no errors or warnings.
4978 `pthread_h'
4979      Target has `pthread.h'.
4981 `run_expensive_tests'
4982      Expensive testcases (usually those that consume excessive amounts
4983      of CPU time) should be run on this target.  This can be enabled by
4984      setting the `GCC_TEST_RUN_EXPENSIVE' environment variable to a
4985      non-empty string.
4987 `simulator'
4988      Test system runs executables on a simulator (i.e. slowly) rather
4989      than hardware (i.e. fast).
4991 `stdint_types'
4992      Target has the basic signed and unsigned C types in `stdint.h'.
4993      This will be obsolete when GCC ensures a working `stdint.h' for
4994      all targets.
4996 `trampolines'
4997      Target supports trampolines.
4999 `uclibc'
5000      Target supports uClibc.
5002 `unwrapped'
5003      Target does not use a status wrapper.
5005 `vxworks_kernel'
5006      Target is a VxWorks kernel.
5008 `vxworks_rtp'
5009      Target is a VxWorks RTP.
5011 `wchar'
5012      Target supports wide characters.
5014 7.2.3.11 Other attributes
5015 .........................
5017 `automatic_stack_alignment'
5018      Target supports automatic stack alignment.
5020 `cxa_atexit'
5021      Target uses `__cxa_atexit'.
5023 `default_packed'
5024      Target has packed layout of structure members by default.
5026 `fgraphite'
5027      Target supports Graphite optimizations.
5029 `fixed_point'
5030      Target supports fixed-point extension to C.
5032 `fopenmp'
5033      Target supports OpenMP via `-fopenmp'.
5035 `fpic'
5036      Target supports `-fpic' and `-fPIC'.
5038 `freorder'
5039      Target supports `-freorder-blocks-and-partition'.
5041 `fstack_protector'
5042      Target supports `-fstack-protector'.
5044 `gas'
5045      Target uses GNU `as'.
5047 `gc_sections'
5048      Target supports `--gc-sections'.
5050 `keeps_null_pointer_checks'
5051      Target keeps null pointer checks, either due to the use of
5052      `-fno-delete-null-pointer-checks' or hardwired into the target.
5054 `lto'
5055      Compiler has been configured to support link-time optimization
5056      (LTO).
5058 `named_sections'
5059      Target supports named sections.
5061 `natural_alignment_32'
5062      Target uses natural alignment (aligned to type size) for types of
5063      32 bits or less.
5065 `target_natural_alignment_64'
5066      Target uses natural alignment (aligned to type size) for types of
5067      64 bits or less.
5069 `nonpic'
5070      Target does not generate PIC by default.
5072 `pcc_bitfield_type_matters'
5073      Target defines `PCC_BITFIELD_TYPE_MATTERS'.
5075 `pe_aligned_commons'
5076      Target supports `-mpe-aligned-commons'.
5078 `section_anchors'
5079      Target supports section anchors.
5081 `short_enums'
5082      Target defaults to short enums.
5084 `static'
5085      Target supports `-static'.
5087 `static_libgfortran'
5088      Target supports statically linking `libgfortran'.
5090 `string_merging'
5091      Target supports merging string constants at link time.
5093 `ucn'
5094      Target supports compiling and assembling UCN.
5096 `ucn_nocache'
5097      Including the options used to compile this particular test, the
5098      target supports compiling and assembling UCN.
5100 `unaligned_stack'
5101      Target does not guarantee that its `STACK_BOUNDARY' is greater than
5102      or equal to the required vector alignment.
5104 `vector_alignment_reachable'
5105      Vector alignment is reachable for types of 32 bits or less.
5107 `vector_alignment_reachable_for_64bit'
5108      Vector alignment is reachable for types of 64 bits or less.
5110 `wchar_t_char16_t_compatible'
5111      Target supports `wchar_t' that is compatible with `char16_t'.
5113 `wchar_t_char32_t_compatible'
5114      Target supports `wchar_t' that is compatible with `char32_t'.
5116 7.2.3.12 Local to tests in `gcc.target/i386'
5117 ............................................
5119 `3dnow'
5120      Target supports compiling `3dnow' instructions.
5122 `aes'
5123      Target supports compiling `aes' instructions.
5125 `fma4'
5126      Target supports compiling `fma4' instructions.
5128 `ms_hook_prologue'
5129      Target supports attribute `ms_hook_prologue'.
5131 `pclmul'
5132      Target supports compiling `pclmul' instructions.
5134 `sse3'
5135      Target supports compiling `sse3' instructions.
5137 `sse4'
5138      Target supports compiling `sse4' instructions.
5140 `sse4a'
5141      Target supports compiling `sse4a' instructions.
5143 `ssse3'
5144      Target supports compiling `ssse3' instructions.
5146 `vaes'
5147      Target supports compiling `vaes' instructions.
5149 `vpclmul'
5150      Target supports compiling `vpclmul' instructions.
5152 `xop'
5153      Target supports compiling `xop' instructions.
5155 7.2.3.13 Local to tests in `gcc.target/spu/ea'
5156 ..............................................
5158 `ealib'
5159      Target `__ea' library functions are available.
5161 7.2.3.14 Local to tests in `gcc.test-framework'
5162 ...............................................
5164 `no'
5165      Always returns 0.
5167 `yes'
5168      Always returns 1.
5170 \x1f
5171 File: gccint.info,  Node: Add Options,  Next: Require Support,  Prev: Effective-Target Keywords,  Up: Test Directives
5173 7.2.4 Features for `dg-add-options'
5174 -----------------------------------
5176 The supported values of FEATURE for directive `dg-add-options' are:
5178 `bind_pic_locally'
5179      Add the target-specific flags needed to enable functions to bind
5180      locally when using pic/PIC passes in the testsuite.
5182 `c99_runtime'
5183      Add the target-specific flags needed to access the C99 runtime.
5185 `ieee'
5186      Add the target-specific flags needed to enable full IEEE
5187      compliance mode.
5189 `mips16_attribute'
5190      `mips16' function attributes.  Only MIPS targets support this
5191      feature, and only then in certain modes.
5193 `tls'
5194      Add the target-specific flags needed to use thread-local storage.
5196 \x1f
5197 File: gccint.info,  Node: Require Support,  Next: Final Actions,  Prev: Add Options,  Up: Test Directives
5199 7.2.5 Variants of `dg-require-SUPPORT'
5200 --------------------------------------
5202 A few of the `dg-require' directives take arguments.
5204 `dg-require-iconv CODESET'
5205      Skip the test if the target does not support iconv.  CODESET is
5206      the codeset to convert to.
5208 `dg-require-profiling PROFOPT'
5209      Skip the test if the target does not support profiling with option
5210      PROFOPT.
5212 `dg-require-visibility VIS'
5213      Skip the test if the target does not support the `visibility'
5214      attribute.  If VIS is `""', support for `visibility("hidden")' is
5215      checked, for `visibility("VIS")' otherwise.
5217  The original `dg-require' directives were defined before there was
5218 support for effective-target keywords.  The directives that do not take
5219 arguments could be replaced with effective-target keywords.
5221 `dg-require-alias ""'
5222      Skip the test if the target does not support the `alias' attribute.
5224 `dg-require-ascii-locale ""'
5225      Skip the test if the host does not support an ASCII locale.
5227 `dg-require-compat-dfp ""'
5228      Skip this test unless both compilers in a `compat' testsuite
5229      support decimal floating point.
5231 `dg-require-cxa-atexit ""'
5232      Skip the test if the target does not support `__cxa_atexit'.  This
5233      is equivalent to `dg-require-effective-target cxa_atexit'.
5235 `dg-require-dll ""'
5236      Skip the test if the target does not support DLL attributes.
5238 `dg-require-fork ""'
5239      Skip the test if the target does not support `fork'.
5241 `dg-require-gc-sections ""'
5242      Skip the test if the target's linker does not support the
5243      `--gc-sections' flags.  This is equivalent to
5244      `dg-require-effective-target gc-sections'.
5246 `dg-require-host-local ""'
5247      Skip the test if the host is remote, rather than the same as the
5248      build system.  Some tests are incompatible with DejaGnu's handling
5249      of remote hosts, which involves copying the source file to the
5250      host and compiling it with a relative path and "`-o a.out'".
5252 `dg-require-mkfifo ""'
5253      Skip the test if the target does not support `mkfifo'.
5255 `dg-require-named-sections ""'
5256      Skip the test is the target does not support named sections.  This
5257      is equivalent to `dg-require-effective-target named_sections'.
5259 `dg-require-weak ""'
5260      Skip the test if the target does not support weak symbols.
5262 `dg-require-weak-override ""'
5263      Skip the test if the target does not support overriding weak
5264      symbols.
5266 \x1f
5267 File: gccint.info,  Node: Final Actions,  Prev: Require Support,  Up: Test Directives
5269 7.2.6 Commands for use in `dg-final'
5270 ------------------------------------
5272 The GCC testsuite defines the following directives to be used within
5273 `dg-final'.
5275 7.2.6.1 Scan a particular file
5276 ..............................
5278 `scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
5279      Passes if REGEXP matches text in FILENAME.
5281 `scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
5282      Passes if REGEXP does not match text in FILENAME.
5284 `scan-module MODULE REGEXP [{ target/xfail SELECTOR }]'
5285      Passes if REGEXP matches in Fortran module MODULE.
5287 7.2.6.2 Scan the assembly output
5288 ................................
5290 `scan-assembler REGEX [{ target/xfail SELECTOR }]'
5291      Passes if REGEX matches text in the test's assembler output.
5293 `scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
5294      Passes if REGEX does not match text in the test's assembler output.
5296 `scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
5297      Passes if REGEX is matched exactly NUM times in the test's
5298      assembler output.
5300 `scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
5301      Passes if REGEX matches text in the test's demangled assembler
5302      output.
5304 `scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
5305      Passes if REGEX does not match text in the test's demangled
5306      assembler output.
5308 `scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
5309      Passes if SYMBOL is defined as a hidden symbol in the test's
5310      assembly output.
5312 `scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
5313      Passes if SYMBOL is not defined as a hidden symbol in the test's
5314      assembly output.
5316 7.2.6.3 Scan optimization dump files
5317 ....................................
5319 These commands are available for KIND of `tree', `rtl', and `ipa'.
5321 `scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
5322      Passes if REGEX matches text in the dump file with suffix SUFFIX.
5324 `scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
5325      Passes if REGEX does not match text in the dump file with suffix
5326      SUFFIX.
5328 `scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
5329      Passes if REGEX is found exactly NUM times in the dump file with
5330      suffix SUFFIX.
5332 `scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
5333      Passes if REGEX matches demangled text in the dump file with
5334      suffix SUFFIX.
5336 `scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
5337      Passes if REGEX does not match demangled text in the dump file with
5338      suffix SUFFIX.
5340 7.2.6.4 Verify that an output files exists or not
5341 .................................................
5343 `output-exists [{ target/xfail SELECTOR }]'
5344      Passes if compiler output file exists.
5346 `output-exists-not [{ target/xfail SELECTOR }]'
5347      Passes if compiler output file does not exist.
5349 7.2.6.5 Check for LTO tests
5350 ...........................
5352 `scan-symbol REGEXP [{ target/xfail SELECTOR }]'
5353      Passes if the pattern is present in the final executable.
5355 7.2.6.6 Checks for `gcov' tests
5356 ...............................
5358 `run-gcov SOURCEFILE'
5359      Check line counts in `gcov' tests.
5361 `run-gcov [branches] [calls] { OPTS SOURCEFILE }'
5362      Check branch and/or call counts, in addition to line counts, in
5363      `gcov' tests.
5365 7.2.6.7 Clean up generated test files
5366 .....................................
5368 `cleanup-coverage-files'
5369      Removes coverage data files generated for this test.
5371 `cleanup-ipa-dump SUFFIX'
5372      Removes IPA dump files generated for this test.
5374 `cleanup-modules'
5375      Removes Fortran module files generated for this test.
5377 `cleanup-profile-file'
5378      Removes profiling files generated for this test.
5380 `cleanup-repo-files'
5381      Removes files generated for this test for `-frepo'.
5383 `cleanup-rtl-dump SUFFIX'
5384      Removes RTL dump files generated for this test.
5386 `cleanup-saved-temps'
5387      Removes files for the current test which were kept for
5388      `-save-temps'.
5390 `cleanup-tree-dump SUFFIX'
5391      Removes tree dump files matching SUFFIX which were generated for
5392      this test.
5394 \x1f
5395 File: gccint.info,  Node: Ada Tests,  Next: C Tests,  Prev: Test Directives,  Up: Testsuites
5397 7.3 Ada Language Testsuites
5398 ===========================
5400 The Ada testsuite includes executable tests from the ACATS 2.5
5401 testsuite, publicly available at
5402 `http://www.adaic.org/compilers/acats/2.5'.
5404  These tests are integrated in the GCC testsuite in the `ada/acats'
5405 directory, and enabled automatically when running `make check', assuming
5406 the Ada language has been enabled when configuring GCC.
5408  You can also run the Ada testsuite independently, using `make
5409 check-ada', or run a subset of the tests by specifying which chapter to
5410 run, e.g.:
5412      $ make check-ada CHAPTERS="c3 c9"
5414  The tests are organized by directory, each directory corresponding to
5415 a chapter of the Ada Reference Manual.  So for example, `c9' corresponds
5416 to chapter 9, which deals with tasking features of the language.
5418  There is also an extra chapter called `gcc' containing a template for
5419 creating new executable tests, although this is deprecated in favor of
5420 the `gnat.dg' testsuite.
5422  The tests are run using two `sh' scripts: `run_acats' and
5423 `run_all.sh'.  To run the tests using a simulator or a cross target,
5424 see the small customization section at the top of `run_all.sh'.
5426  These tests are run using the build tree: they can be run without doing
5427 a `make install'.
5429 \x1f
5430 File: gccint.info,  Node: C Tests,  Next: libgcj Tests,  Prev: Ada Tests,  Up: Testsuites
5432 7.4 C Language Testsuites
5433 =========================
5435 GCC contains the following C language testsuites, in the
5436 `gcc/testsuite' directory:
5438 `gcc.dg'
5439      This contains tests of particular features of the C compiler,
5440      using the more modern `dg' harness.  Correctness tests for various
5441      compiler features should go here if possible.
5443      Magic comments determine whether the file is preprocessed,
5444      compiled, linked or run.  In these tests, error and warning
5445      message texts are compared against expected texts or regular
5446      expressions given in comments.  These tests are run with the
5447      options `-ansi -pedantic' unless other options are given in the
5448      test.  Except as noted below they are not run with multiple
5449      optimization options.
5451 `gcc.dg/compat'
5452      This subdirectory contains tests for binary compatibility using
5453      `lib/compat.exp', which in turn uses the language-independent
5454      support (*note Support for testing binary compatibility: compat
5455      Testing.).
5457 `gcc.dg/cpp'
5458      This subdirectory contains tests of the preprocessor.
5460 `gcc.dg/debug'
5461      This subdirectory contains tests for debug formats.  Tests in this
5462      subdirectory are run for each debug format that the compiler
5463      supports.
5465 `gcc.dg/format'
5466      This subdirectory contains tests of the `-Wformat' format
5467      checking.  Tests in this directory are run with and without
5468      `-DWIDE'.
5470 `gcc.dg/noncompile'
5471      This subdirectory contains tests of code that should not compile
5472      and does not need any special compilation options.  They are run
5473      with multiple optimization options, since sometimes invalid code
5474      crashes the compiler with optimization.
5476 `gcc.dg/special'
5477      FIXME: describe this.
5479 `gcc.c-torture'
5480      This contains particular code fragments which have historically
5481      broken easily.  These tests are run with multiple optimization
5482      options, so tests for features which only break at some
5483      optimization levels belong here.  This also contains tests to
5484      check that certain optimizations occur.  It might be worthwhile to
5485      separate the correctness tests cleanly from the code quality
5486      tests, but it hasn't been done yet.
5488 `gcc.c-torture/compat'
5489      FIXME: describe this.
5491      This directory should probably not be used for new tests.
5493 `gcc.c-torture/compile'
5494      This testsuite contains test cases that should compile, but do not
5495      need to link or run.  These test cases are compiled with several
5496      different combinations of optimization options.  All warnings are
5497      disabled for these test cases, so this directory is not suitable if
5498      you wish to test for the presence or absence of compiler warnings.
5499      While special options can be set, and tests disabled on specific
5500      platforms, by the use of `.x' files, mostly these test cases
5501      should not contain platform dependencies.  FIXME: discuss how
5502      defines such as `NO_LABEL_VALUES' and `STACK_SIZE' are used.
5504 `gcc.c-torture/execute'
5505      This testsuite contains test cases that should compile, link and
5506      run; otherwise the same comments as for `gcc.c-torture/compile'
5507      apply.
5509 `gcc.c-torture/execute/ieee'
5510      This contains tests which are specific to IEEE floating point.
5512 `gcc.c-torture/unsorted'
5513      FIXME: describe this.
5515      This directory should probably not be used for new tests.
5517 `gcc.misc-tests'
5518      This directory contains C tests that require special handling.
5519      Some of these tests have individual expect files, and others share
5520      special-purpose expect files:
5522     ``bprob*.c''
5523           Test `-fbranch-probabilities' using
5524           `gcc.misc-tests/bprob.exp', which in turn uses the generic,
5525           language-independent framework (*note Support for testing
5526           profile-directed optimizations: profopt Testing.).
5528     ``gcov*.c''
5529           Test `gcov' output using `gcov.exp', which in turn uses the
5530           language-independent support (*note Support for testing gcov:
5531           gcov Testing.).
5533     ``i386-pf-*.c''
5534           Test i386-specific support for data prefetch using
5535           `i386-prefetch.exp'.
5537 `gcc.test-framework'
5539     ``dg-*.c''
5540           Test the testsuite itself using
5541           `gcc.test-framework/test-framework.exp'.
5544  FIXME: merge in `testsuite/README.gcc' and discuss the format of test
5545 cases and magic comments more.
5547 \x1f
5548 File: gccint.info,  Node: libgcj Tests,  Next: LTO Testing,  Prev: C Tests,  Up: Testsuites
5550 7.5 The Java library testsuites.
5551 ================================
5553 Runtime tests are executed via `make check' in the
5554 `TARGET/libjava/testsuite' directory in the build tree.  Additional
5555 runtime tests can be checked into this testsuite.
5557  Regression testing of the core packages in libgcj is also covered by
5558 the Mauve testsuite.  The Mauve Project develops tests for the Java
5559 Class Libraries.  These tests are run as part of libgcj testing by
5560 placing the Mauve tree within the libjava testsuite sources at
5561 `libjava/testsuite/libjava.mauve/mauve', or by specifying the location
5562 of that tree when invoking `make', as in `make MAUVEDIR=~/mauve check'.
5564  To detect regressions, a mechanism in `mauve.exp' compares the
5565 failures for a test run against the list of expected failures in
5566 `libjava/testsuite/libjava.mauve/xfails' from the source hierarchy.
5567 Update this file when adding new failing tests to Mauve, or when fixing
5568 bugs in libgcj that had caused Mauve test failures.
5570  We encourage developers to contribute test cases to Mauve.
5572 \x1f
5573 File: gccint.info,  Node: LTO Testing,  Next: gcov Testing,  Prev: libgcj Tests,  Up: Testsuites
5575 7.6 Support for testing link-time optimizations
5576 ===============================================
5578 Tests for link-time optimizations usually require multiple source files
5579 that are compiled separately, perhaps with different sets of options.
5580 There are several special-purpose test directives used for these tests.
5582 `{ dg-lto-do DO-WHAT-KEYWORD }'
5583      DO-WHAT-KEYWORD specifies how the test is compiled and whether it
5584      is executed.  It is one of:
5586     `assemble'
5587           Compile with `-c' to produce a relocatable object file.
5589     `link'
5590           Compile, assemble, and link to produce an executable file.
5592     `run'
5593           Produce and run an executable file, which is expected to
5594           return an exit code of 0.
5596      The default is `assemble'.  That can be overridden for a set of
5597      tests by redefining `dg-do-what-default' within the `.exp' file
5598      for those tests.
5600      Unlike `dg-do', `dg-lto-do' does not support an optional `target'
5601      or `xfail' list.  Use `dg-skip-if', `dg-xfail-if', or
5602      `dg-xfail-run-if'.
5604 `{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}'
5605      This directive provides a list of one or more sets of compiler
5606      options to override LTO_OPTIONS.  Each test will be compiled and
5607      run with each of these sets of options.
5609 `{ dg-extra-ld-options OPTIONS }'
5610      This directive adds OPTIONS to the linker options used.
5612 `{ dg-suppress-ld-options OPTIONS }'
5613      This directive removes OPTIONS from the set of linker options used.
5615 \x1f
5616 File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: LTO Testing,  Up: Testsuites
5618 7.7 Support for testing `gcov'
5619 ==============================
5621 Language-independent support for testing `gcov', and for checking that
5622 branch profiling produces expected values, is provided by the expect
5623 file `lib/gcov.exp'.  `gcov' tests also rely on procedures in
5624 `lib/gcc-dg.exp' to compile and run the test program.  A typical `gcov'
5625 test contains the following DejaGnu commands within comments:
5627      { dg-options "-fprofile-arcs -ftest-coverage" }
5628      { dg-do run { target native } }
5629      { dg-final { run-gcov sourcefile } }
5631  Checks of `gcov' output can include line counts, branch percentages,
5632 and call return percentages.  All of these checks are requested via
5633 commands that appear in comments in the test's source file.  Commands
5634 to check line counts are processed by default.  Commands to check
5635 branch percentages and call return percentages are processed if the
5636 `run-gcov' command has arguments `branches' or `calls', respectively.
5637 For example, the following specifies checking both, as well as passing
5638 `-b' to `gcov':
5640      { dg-final { run-gcov branches calls { -b sourcefile } } }
5642  A line count command appears within a comment on the source line that
5643 is expected to get the specified count and has the form `count(CNT)'.
5644 A test should only check line counts for lines that will get the same
5645 count for any architecture.
5647  Commands to check branch percentages (`branch') and call return
5648 percentages (`returns') are very similar to each other.  A beginning
5649 command appears on or before the first of a range of lines that will
5650 report the percentage, and the ending command follows that range of
5651 lines.  The beginning command can include a list of percentages, all of
5652 which are expected to be found within the range.  A range is terminated
5653 by the next command of the same kind.  A command `branch(end)' or
5654 `returns(end)' marks the end of a range without starting a new one.
5655 For example:
5657      if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
5658                                      /* branch(end) */
5659        foo (i, j);
5661  For a call return percentage, the value specified is the percentage of
5662 calls reported to return.  For a branch percentage, the value is either
5663 the expected percentage or 100 minus that value, since the direction of
5664 a branch can differ depending on the target or the optimization level.
5666  Not all branches and calls need to be checked.  A test should not
5667 check for branches that might be optimized away or replaced with
5668 predicated instructions.  Don't check for calls inserted by the
5669 compiler or ones that might be inlined or optimized away.
5671  A single test can check for combinations of line counts, branch
5672 percentages, and call return percentages.  The command to check a line
5673 count must appear on the line that will report that count, but commands
5674 to check branch percentages and call return percentages can bracket the
5675 lines that report them.
5677 \x1f
5678 File: gccint.info,  Node: profopt Testing,  Next: compat Testing,  Prev: gcov Testing,  Up: Testsuites
5680 7.8 Support for testing profile-directed optimizations
5681 ======================================================
5683 The file `profopt.exp' provides language-independent support for
5684 checking correct execution of a test built with profile-directed
5685 optimization.  This testing requires that a test program be built and
5686 executed twice.  The first time it is compiled to generate profile
5687 data, and the second time it is compiled to use the data that was
5688 generated during the first execution.  The second execution is to
5689 verify that the test produces the expected results.
5691  To check that the optimization actually generated better code, a test
5692 can be built and run a third time with normal optimizations to verify
5693 that the performance is better with the profile-directed optimizations.
5694 `profopt.exp' has the beginnings of this kind of support.
5696  `profopt.exp' provides generic support for profile-directed
5697 optimizations.  Each set of tests that uses it provides information
5698 about a specific optimization:
5700 `tool'
5701      tool being tested, e.g., `gcc'
5703 `profile_option'
5704      options used to generate profile data
5706 `feedback_option'
5707      options used to optimize using that profile data
5709 `prof_ext'
5710      suffix of profile data files
5712 `PROFOPT_OPTIONS'
5713      list of options with which to run each test, similar to the lists
5714      for torture tests
5716 `{ dg-final-generate { LOCAL-DIRECTIVE } }'
5717      This directive is similar to `dg-final', but the LOCAL-DIRECTIVE
5718      is run after the generation of profile data.
5720 `{ dg-final-use { LOCAL-DIRECTIVE } }'
5721      The LOCAL-DIRECTIVE is run after the profile data have been used.
5723 \x1f
5724 File: gccint.info,  Node: compat Testing,  Next: Torture Tests,  Prev: profopt Testing,  Up: Testsuites
5726 7.9 Support for testing binary compatibility
5727 ============================================
5729 The file `compat.exp' provides language-independent support for binary
5730 compatibility testing.  It supports testing interoperability of two
5731 compilers that follow the same ABI, or of multiple sets of compiler
5732 options that should not affect binary compatibility.  It is intended to
5733 be used for testsuites that complement ABI testsuites.
5735  A test supported by this framework has three parts, each in a separate
5736 source file: a main program and two pieces that interact with each
5737 other to split up the functionality being tested.
5739 `TESTNAME_main.SUFFIX'
5740      Contains the main program, which calls a function in file
5741      `TESTNAME_x.SUFFIX'.
5743 `TESTNAME_x.SUFFIX'
5744      Contains at least one call to a function in `TESTNAME_y.SUFFIX'.
5746 `TESTNAME_y.SUFFIX'
5747      Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'.
5749  Within each test, the main program and one functional piece are
5750 compiled by the GCC under test.  The other piece can be compiled by an
5751 alternate compiler.  If no alternate compiler is specified, then all
5752 three source files are all compiled by the GCC under test.  You can
5753 specify pairs of sets of compiler options.  The first element of such a
5754 pair specifies options used with the GCC under test, and the second
5755 element of the pair specifies options used with the alternate compiler.
5756 Each test is compiled with each pair of options.
5758  `compat.exp' defines default pairs of compiler options.  These can be
5759 overridden by defining the environment variable `COMPAT_OPTIONS' as:
5761      COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
5762        ...[list {TSTN} {ALTN}]]"
5764  where TSTI and ALTI are lists of options, with TSTI used by the
5765 compiler under test and ALTI used by the alternate compiler.  For
5766 example, with `[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
5767 the test is first built with `-g -O0' by the compiler under test and
5768 with `-O3' by the alternate compiler.  The test is built a second time
5769 using `-fpic' by the compiler under test and `-fPIC -O2' by the
5770 alternate compiler.
5772  An alternate compiler is specified by defining an environment variable
5773 to be the full pathname of an installed compiler; for C define
5774 `ALT_CC_UNDER_TEST', and for C++ define `ALT_CXX_UNDER_TEST'.  These
5775 will be written to the `site.exp' file used by DejaGnu.  The default is
5776 to build each test with the compiler under test using the first of each
5777 pair of compiler options from `COMPAT_OPTIONS'.  When
5778 `ALT_CC_UNDER_TEST' or `ALT_CXX_UNDER_TEST' is `same', each test is
5779 built using the compiler under test but with combinations of the
5780 options from `COMPAT_OPTIONS'.
5782  To run only the C++ compatibility suite using the compiler under test
5783 and another version of GCC using specific compiler options, do the
5784 following from `OBJDIR/gcc':
5786      rm site.exp
5787      make -k \
5788        ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
5789        COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \
5790        check-c++ \
5791        RUNTESTFLAGS="compat.exp"
5793  A test that fails when the source files are compiled with different
5794 compilers, but passes when the files are compiled with the same
5795 compiler, demonstrates incompatibility of the generated code or runtime
5796 support.  A test that fails for the alternate compiler but passes for
5797 the compiler under test probably tests for a bug that was fixed in the
5798 compiler under test but is present in the alternate compiler.
5800  The binary compatibility tests support a small number of test framework
5801 commands that appear within comments in a test file.
5803 `dg-require-*'
5804      These commands can be used in `TESTNAME_main.SUFFIX' to skip the
5805      test if specific support is not available on the target.
5807 `dg-options'
5808      The specified options are used for compiling this particular source
5809      file, appended to the options from `COMPAT_OPTIONS'.  When this
5810      command appears in `TESTNAME_main.SUFFIX' the options are also
5811      used to link the test program.
5813 `dg-xfail-if'
5814      This command can be used in a secondary source file to specify that
5815      compilation is expected to fail for particular options on
5816      particular targets.
5818 \x1f
5819 File: gccint.info,  Node: Torture Tests,  Prev: compat Testing,  Up: Testsuites
5821 7.10 Support for torture testing using multiple options
5822 =======================================================
5824 Throughout the compiler testsuite there are several directories whose
5825 tests are run multiple times, each with a different set of options.
5826 These are known as torture tests.  `lib/torture-options.exp' defines
5827 procedures to set up these lists:
5829 `torture-init'
5830      Initialize use of torture lists.
5832 `set-torture-options'
5833      Set lists of torture options to use for tests with and without
5834      loops.  Optionally combine a set of torture options with a set of
5835      other options, as is done with Objective-C runtime options.
5837 `torture-finish'
5838      Finalize use of torture lists.
5840  The `.exp' file for a set of tests that use torture options must
5841 include calls to these three procedures if:
5843    * It calls `gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS.
5845    * It calls ${TOOL}`-torture' or ${TOOL}`-torture-execute', where
5846      TOOL is `c', `fortran', or `objc'.
5848    * It calls `dg-pch'.
5850  It is not necessary for a `.exp' file that calls `gcc-dg-runtest' to
5851 call the torture procedures if the tests should use the list in
5852 DG_TORTURE_OPTIONS defined in `gcc-dg.exp'.
5854  Most uses of torture options can override the default lists by defining
5855 TORTURE_OPTIONS or add to the default list by defining
5856 ADDITIONAL_TORTURE_OPTIONS.  Define these in a `.dejagnurc' file or add
5857 them to the `site.exp' file; for example
5859      set ADDITIONAL_TORTURE_OPTIONS  [list \
5860        { -O2 -ftree-loop-linear } \
5861        { -O2 -fpeel-loops } ]
5863 \x1f
5864 File: gccint.info,  Node: Options,  Next: Passes,  Prev: Testsuites,  Up: Top
5866 8 Option specification files
5867 ****************************
5869 Most GCC command-line options are described by special option
5870 definition files, the names of which conventionally end in `.opt'.
5871 This chapter describes the format of these files.
5873 * Menu:
5875 * Option file format::   The general layout of the files
5876 * Option properties::    Supported option properties
5878 \x1f
5879 File: gccint.info,  Node: Option file format,  Next: Option properties,  Up: Options
5881 8.1 Option file format
5882 ======================
5884 Option files are a simple list of records in which each field occupies
5885 its own line and in which the records themselves are separated by blank
5886 lines.  Comments may appear on their own line anywhere within the file
5887 and are preceded by semicolons.  Whitespace is allowed before the
5888 semicolon.
5890  The files can contain the following types of record:
5892    * A language definition record.  These records have two fields: the
5893      string `Language' and the name of the language.  Once a language
5894      has been declared in this way, it can be used as an option
5895      property.  *Note Option properties::.
5897    * A target specific save record to save additional information. These
5898      records have two fields: the string `TargetSave', and a
5899      declaration type to go in the `cl_target_option' structure.
5901    * An option definition record.  These records have the following
5902      fields:
5903        1. the name of the option, with the leading "-" removed
5905        2. a space-separated list of option properties (*note Option
5906           properties::)
5908        3. the help text to use for `--help' (omitted if the second field
5909           contains the `Undocumented' property).
5911      By default, all options beginning with "f", "W" or "m" are
5912      implicitly assumed to take a "no-" form.  This form should not be
5913      listed separately.  If an option beginning with one of these
5914      letters does not have a "no-" form, you can use the
5915      `RejectNegative' property to reject it.
5917      The help text is automatically line-wrapped before being displayed.
5918      Normally the name of the option is printed on the left-hand side of
5919      the output and the help text is printed on the right.  However, if
5920      the help text contains a tab character, the text to the left of
5921      the tab is used instead of the option's name and the text to the
5922      right of the tab forms the help text.  This allows you to
5923      elaborate on what type of argument the option takes.
5925    * A target mask record.  These records have one field of the form
5926      `Mask(X)'.  The options-processing script will automatically
5927      allocate a bit in `target_flags' (*note Run-time Target::) for
5928      each mask name X and set the macro `MASK_X' to the appropriate
5929      bitmask.  It will also declare a `TARGET_X' macro that has the
5930      value 1 when bit `MASK_X' is set and 0 otherwise.
5932      They are primarily intended to declare target masks that are not
5933      associated with user options, either because these masks represent
5934      internal switches or because the options are not available on all
5935      configurations and yet the masks always need to be defined.
5937 \x1f
5938 File: gccint.info,  Node: Option properties,  Prev: Option file format,  Up: Options
5940 8.2 Option properties
5941 =====================
5943 The second field of an option record can specify any of the following
5944 properties.  When an option takes an argument, it is enclosed in
5945 parentheses following the option property name.  The parser that
5946 handles option files is quite simplistic, and will be tricked by any
5947 nested parentheses within the argument text itself; in this case, the
5948 entire option argument can be wrapped in curly braces within the
5949 parentheses to demarcate it, e.g.:
5951      Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
5953 `Common'
5954      The option is available for all languages and targets.
5956 `Target'
5957      The option is available for all languages but is target-specific.
5959 `LANGUAGE'
5960      The option is available when compiling for the given language.
5962      It is possible to specify several different languages for the same
5963      option.  Each LANGUAGE must have been declared by an earlier
5964      `Language' record.  *Note Option file format::.
5966 `RejectNegative'
5967      The option does not have a "no-" form.  All options beginning with
5968      "f", "W" or "m" are assumed to have a "no-" form unless this
5969      property is used.
5971 `Negative(OTHERNAME)'
5972      The option will turn off another option OTHERNAME, which is the
5973      option name with the leading "-" removed.  This chain action will
5974      propagate through the `Negative' property of the option to be
5975      turned off.
5977 `Joined'
5978 `Separate'
5979      The option takes a mandatory argument.  `Joined' indicates that
5980      the option and argument can be included in the same `argv' entry
5981      (as with `-mflush-func=NAME', for example).  `Separate' indicates
5982      that the option and argument can be separate `argv' entries (as
5983      with `-o').  An option is allowed to have both of these properties.
5985 `JoinedOrMissing'
5986      The option takes an optional argument.  If the argument is given,
5987      it will be part of the same `argv' entry as the option itself.
5989      This property cannot be used alongside `Joined' or `Separate'.
5991 `UInteger'
5992      The option's argument is a non-negative integer.  The option parser
5993      will check and convert the argument before passing it to the
5994      relevant option handler.  `UInteger' should also be used on
5995      options like `-falign-loops' where both `-falign-loops' and
5996      `-falign-loops'=N are supported to make sure the saved options are
5997      given a full integer.
5999 `Var(VAR)'
6000      The state of this option should be stored in variable VAR.  The
6001      way that the state is stored depends on the type of option:
6003         * If the option uses the `Mask' or `InverseMask' properties,
6004           VAR is the integer variable that contains the mask.
6006         * If the option is a normal on/off switch, VAR is an integer
6007           variable that is nonzero when the option is enabled.  The
6008           options parser will set the variable to 1 when the positive
6009           form of the option is used and 0 when the "no-" form is used.
6011         * If the option takes an argument and has the `UInteger'
6012           property, VAR is an integer variable that stores the value of
6013           the argument.
6015         * Otherwise, if the option takes an argument, VAR is a pointer
6016           to the argument string.  The pointer will be null if the
6017           argument is optional and wasn't given.
6019      The option-processing script will usually declare VAR in
6020      `options.c' and leave it to be zero-initialized at start-up time.
6021      You can modify this behavior using `VarExists' and `Init'.
6023 `Var(VAR, SET)'
6024      The option controls an integer variable VAR and is active when VAR
6025      equals SET.  The option parser will set VAR to SET when the
6026      positive form of the option is used and `!SET' when the "no-" form
6027      is used.
6029      VAR is declared in the same way as for the single-argument form
6030      described above.
6032 `VarExists'
6033      The variable specified by the `Var' property already exists.  No
6034      definition should be added to `options.c' in response to this
6035      option record.
6037      You should use this property only if the variable is declared
6038      outside `options.c'.
6040 `Init(VALUE)'
6041      The variable specified by the `Var' property should be statically
6042      initialized to VALUE.
6044 `Mask(NAME)'
6045      The option is associated with a bit in the `target_flags' variable
6046      (*note Run-time Target::) and is active when that bit is set.  You
6047      may also specify `Var' to select a variable other than
6048      `target_flags'.
6050      The options-processing script will automatically allocate a unique
6051      bit for the option.  If the option is attached to `target_flags',
6052      the script will set the macro `MASK_NAME' to the appropriate
6053      bitmask.  It will also declare a `TARGET_NAME' macro that has the
6054      value 1 when the option is active and 0 otherwise.  If you use
6055      `Var' to attach the option to a different variable, the associated
6056      macros are called `OPTION_MASK_NAME' and `OPTION_NAME'
6057      respectively.
6059      You can disable automatic bit allocation using `MaskExists'.
6061 `InverseMask(OTHERNAME)'
6062 `InverseMask(OTHERNAME, THISNAME)'
6063      The option is the inverse of another option that has the
6064      `Mask(OTHERNAME)' property.  If THISNAME is given, the
6065      options-processing script will declare a `TARGET_THISNAME' macro
6066      that is 1 when the option is active and 0 otherwise.
6068 `MaskExists'
6069      The mask specified by the `Mask' property already exists.  No
6070      `MASK' or `TARGET' definitions should be added to `options.h' in
6071      response to this option record.
6073      The main purpose of this property is to support synonymous options.
6074      The first option should use `Mask(NAME)' and the others should use
6075      `Mask(NAME) MaskExists'.
6077 `Report'
6078      The state of the option should be printed by `-fverbose-asm'.
6080 `Undocumented'
6081      The option is deliberately missing documentation and should not be
6082      included in the `--help' output.
6084 `Condition(COND)'
6085      The option should only be accepted if preprocessor condition COND
6086      is true.  Note that any C declarations associated with the option
6087      will be present even if COND is false; COND simply controls
6088      whether the option is accepted and whether it is printed in the
6089      `--help' output.
6091 `Save'
6092      Build the `cl_target_option' structure to hold a copy of the
6093      option, add the functions `cl_target_option_save' and
6094      `cl_target_option_restore' to save and restore the options.
6096 \x1f
6097 File: gccint.info,  Node: Passes,  Next: GENERIC,  Prev: Options,  Up: Top
6099 9 Passes and Files of the Compiler
6100 **********************************
6102 This chapter is dedicated to giving an overview of the optimization and
6103 code generation passes of the compiler.  In the process, it describes
6104 some of the language front end interface, though this description is no
6105 where near complete.
6107 * Menu:
6109 * Parsing pass::         The language front end turns text into bits.
6110 * Gimplification pass::  The bits are turned into something we can optimize.
6111 * Pass manager::         Sequencing the optimization passes.
6112 * Tree SSA passes::      Optimizations on a high-level representation.
6113 * RTL passes::           Optimizations on a low-level representation.
6115 \x1f
6116 File: gccint.info,  Node: Parsing pass,  Next: Gimplification pass,  Up: Passes
6118 9.1 Parsing pass
6119 ================
6121 The language front end is invoked only once, via
6122 `lang_hooks.parse_file', to parse the entire input.  The language front
6123 end may use any intermediate language representation deemed
6124 appropriate.  The C front end uses GENERIC trees (CROSSREF), plus a
6125 double handful of language specific tree codes defined in
6126 `c-common.def'.  The Fortran front end uses a completely different
6127 private representation.
6129  At some point the front end must translate the representation used in
6130 the front end to a representation understood by the language-independent
6131 portions of the compiler.  Current practice takes one of two forms.
6132 The C front end manually invokes the gimplifier (CROSSREF) on each
6133 function, and uses the gimplifier callbacks to convert the
6134 language-specific tree nodes directly to GIMPLE (CROSSREF) before
6135 passing the function off to be compiled.  The Fortran front end
6136 converts from a private representation to GENERIC, which is later
6137 lowered to GIMPLE when the function is compiled.  Which route to choose
6138 probably depends on how well GENERIC (plus extensions) can be made to
6139 match up with the source language and necessary parsing data structures.
6141  BUG: Gimplification must occur before nested function lowering, and
6142 nested function lowering must be done by the front end before passing
6143 the data off to cgraph.
6145  TODO: Cgraph should control nested function lowering.  It would only
6146 be invoked when it is certain that the outer-most function is used.
6148  TODO: Cgraph needs a gimplify_function callback.  It should be invoked
6149 when (1) it is certain that the function is used, (2) warning flags
6150 specified by the user require some amount of compilation in order to
6151 honor, (3) the language indicates that semantic analysis is not
6152 complete until gimplification occurs.  Hum... this sounds overly
6153 complicated.  Perhaps we should just have the front end gimplify
6154 always; in most cases it's only one function call.
6156  The front end needs to pass all function definitions and top level
6157 declarations off to the middle-end so that they can be compiled and
6158 emitted to the object file.  For a simple procedural language, it is
6159 usually most convenient to do this as each top level declaration or
6160 definition is seen.  There is also a distinction to be made between
6161 generating functional code and generating complete debug information.
6162 The only thing that is absolutely required for functional code is that
6163 function and data _definitions_ be passed to the middle-end.  For
6164 complete debug information, function, data and type declarations should
6165 all be passed as well.
6167  In any case, the front end needs each complete top-level function or
6168 data declaration, and each data definition should be passed to
6169 `rest_of_decl_compilation'.  Each complete type definition should be
6170 passed to `rest_of_type_compilation'.  Each function definition should
6171 be passed to `cgraph_finalize_function'.
6173  TODO: I know rest_of_compilation currently has all sorts of RTL
6174 generation semantics.  I plan to move all code generation bits (both
6175 Tree and RTL) to compile_function.  Should we hide cgraph from the
6176 front ends and move back to rest_of_compilation as the official
6177 interface?  Possibly we should rename all three interfaces such that
6178 the names match in some meaningful way and that is more descriptive
6179 than "rest_of".
6181  The middle-end will, at its option, emit the function and data
6182 definitions immediately or queue them for later processing.
6184 \x1f
6185 File: gccint.info,  Node: Gimplification pass,  Next: Pass manager,  Prev: Parsing pass,  Up: Passes
6187 9.2 Gimplification pass
6188 =======================
6190 "Gimplification" is a whimsical term for the process of converting the
6191 intermediate representation of a function into the GIMPLE language
6192 (CROSSREF).  The term stuck, and so words like "gimplification",
6193 "gimplify", "gimplifier" and the like are sprinkled throughout this
6194 section of code.
6196  While a front end may certainly choose to generate GIMPLE directly if
6197 it chooses, this can be a moderately complex process unless the
6198 intermediate language used by the front end is already fairly simple.
6199 Usually it is easier to generate GENERIC trees plus extensions and let
6200 the language-independent gimplifier do most of the work.
6202  The main entry point to this pass is `gimplify_function_tree' located
6203 in `gimplify.c'.  From here we process the entire function gimplifying
6204 each statement in turn.  The main workhorse for this pass is
6205 `gimplify_expr'.  Approximately everything passes through here at least
6206 once, and it is from here that we invoke the `lang_hooks.gimplify_expr'
6207 callback.
6209  The callback should examine the expression in question and return
6210 `GS_UNHANDLED' if the expression is not a language specific construct
6211 that requires attention.  Otherwise it should alter the expression in
6212 some way to such that forward progress is made toward producing valid
6213 GIMPLE.  If the callback is certain that the transformation is complete
6214 and the expression is valid GIMPLE, it should return `GS_ALL_DONE'.
6215 Otherwise it should return `GS_OK', which will cause the expression to
6216 be processed again.  If the callback encounters an error during the
6217 transformation (because the front end is relying on the gimplification
6218 process to finish semantic checks), it should return `GS_ERROR'.
6220 \x1f
6221 File: gccint.info,  Node: Pass manager,  Next: Tree SSA passes,  Prev: Gimplification pass,  Up: Passes
6223 9.3 Pass manager
6224 ================
6226 The pass manager is located in `passes.c', `tree-optimize.c' and
6227 `tree-pass.h'.  Its job is to run all of the individual passes in the
6228 correct order, and take care of standard bookkeeping that applies to
6229 every pass.
6231  The theory of operation is that each pass defines a structure that
6232 represents everything we need to know about that pass--when it should
6233 be run, how it should be run, what intermediate language form or
6234 on-the-side data structures it needs.  We register the pass to be run
6235 in some particular order, and the pass manager arranges for everything
6236 to happen in the correct order.
6238  The actuality doesn't completely live up to the theory at present.
6239 Command-line switches and `timevar_id_t' enumerations must still be
6240 defined elsewhere.  The pass manager validates constraints but does not
6241 attempt to (re-)generate data structures or lower intermediate language
6242 form based on the requirements of the next pass.  Nevertheless, what is
6243 present is useful, and a far sight better than nothing at all.
6245  Each pass should have a unique name.  Each pass may have its own dump
6246 file (for GCC debugging purposes).  Passes with a name starting with a
6247 star do not dump anything.  Sometimes passes are supposed to share a
6248 dump file / option name.  To still give these unique names, you can use
6249 a prefix that is delimited by a space from the part that is used for
6250 the dump file / option name.  E.g. When the pass name is "ud dce", the
6251 name used for dump file/options is "dce".
6253  TODO: describe the global variables set up by the pass manager, and a
6254 brief description of how a new pass should use it.  I need to look at
6255 what info RTL passes use first....
6257 \x1f
6258 File: gccint.info,  Node: Tree SSA passes,  Next: RTL passes,  Prev: Pass manager,  Up: Passes
6260 9.4 Tree SSA passes
6261 ===================
6263 The following briefly describes the Tree optimization passes that are
6264 run after gimplification and what source files they are located in.
6266    * Remove useless statements
6268      This pass is an extremely simple sweep across the gimple code in
6269      which we identify obviously dead code and remove it.  Here we do
6270      things like simplify `if' statements with constant conditions,
6271      remove exception handling constructs surrounding code that
6272      obviously cannot throw, remove lexical bindings that contain no
6273      variables, and other assorted simplistic cleanups.  The idea is to
6274      get rid of the obvious stuff quickly rather than wait until later
6275      when it's more work to get rid of it.  This pass is located in
6276      `tree-cfg.c' and described by `pass_remove_useless_stmts'.
6278    * Mudflap declaration registration
6280      If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize
6281      Options.) is enabled, we generate code to register some variable
6282      declarations with the mudflap runtime.  Specifically, the runtime
6283      tracks the lifetimes of those variable declarations that have
6284      their addresses taken, or whose bounds are unknown at compile time
6285      (`extern').  This pass generates new exception handling constructs
6286      (`try'/`finally'), and so must run before those are lowered.  In
6287      addition, the pass enqueues declarations of static variables whose
6288      lifetimes extend to the entire program.  The pass is located in
6289      `tree-mudflap.c' and is described by `pass_mudflap_1'.
6291    * OpenMP lowering
6293      If OpenMP generation (`-fopenmp') is enabled, this pass lowers
6294      OpenMP constructs into GIMPLE.
6296      Lowering of OpenMP constructs involves creating replacement
6297      expressions for local variables that have been mapped using data
6298      sharing clauses, exposing the control flow of most synchronization
6299      directives and adding region markers to facilitate the creation of
6300      the control flow graph.  The pass is located in `omp-low.c' and is
6301      described by `pass_lower_omp'.
6303    * OpenMP expansion
6305      If OpenMP generation (`-fopenmp') is enabled, this pass expands
6306      parallel regions into their own functions to be invoked by the
6307      thread library.  The pass is located in `omp-low.c' and is
6308      described by `pass_expand_omp'.
6310    * Lower control flow
6312      This pass flattens `if' statements (`COND_EXPR') and moves lexical
6313      bindings (`BIND_EXPR') out of line.  After this pass, all `if'
6314      statements will have exactly two `goto' statements in its `then'
6315      and `else' arms.  Lexical binding information for each statement
6316      will be found in `TREE_BLOCK' rather than being inferred from its
6317      position under a `BIND_EXPR'.  This pass is found in
6318      `gimple-low.c' and is described by `pass_lower_cf'.
6320    * Lower exception handling control flow
6322      This pass decomposes high-level exception handling constructs
6323      (`TRY_FINALLY_EXPR' and `TRY_CATCH_EXPR') into a form that
6324      explicitly represents the control flow involved.  After this pass,
6325      `lookup_stmt_eh_region' will return a non-negative number for any
6326      statement that may have EH control flow semantics; examine
6327      `tree_can_throw_internal' or `tree_can_throw_external' for exact
6328      semantics.  Exact control flow may be extracted from
6329      `foreach_reachable_handler'.  The EH region nesting tree is defined
6330      in `except.h' and built in `except.c'.  The lowering pass itself
6331      is in `tree-eh.c' and is described by `pass_lower_eh'.
6333    * Build the control flow graph
6335      This pass decomposes a function into basic blocks and creates all
6336      of the edges that connect them.  It is located in `tree-cfg.c' and
6337      is described by `pass_build_cfg'.
6339    * Find all referenced variables
6341      This pass walks the entire function and collects an array of all
6342      variables referenced in the function, `referenced_vars'.  The
6343      index at which a variable is found in the array is used as a UID
6344      for the variable within this function.  This data is needed by the
6345      SSA rewriting routines.  The pass is located in `tree-dfa.c' and
6346      is described by `pass_referenced_vars'.
6348    * Enter static single assignment form
6350      This pass rewrites the function such that it is in SSA form.  After
6351      this pass, all `is_gimple_reg' variables will be referenced by
6352      `SSA_NAME', and all occurrences of other variables will be
6353      annotated with `VDEFS' and `VUSES'; PHI nodes will have been
6354      inserted as necessary for each basic block.  This pass is located
6355      in `tree-ssa.c' and is described by `pass_build_ssa'.
6357    * Warn for uninitialized variables
6359      This pass scans the function for uses of `SSA_NAME's that are fed
6360      by default definition.  For non-parameter variables, such uses are
6361      uninitialized.  The pass is run twice, before and after
6362      optimization (if turned on).  In the first pass we only warn for
6363      uses that are positively uninitialized; in the second pass we warn
6364      for uses that are possibly uninitialized.  The pass is located in
6365      `tree-ssa.c' and is defined by `pass_early_warn_uninitialized' and
6366      `pass_late_warn_uninitialized'.
6368    * Dead code elimination
6370      This pass scans the function for statements without side effects
6371      whose result is unused.  It does not do memory life analysis, so
6372      any value that is stored in memory is considered used.  The pass
6373      is run multiple times throughout the optimization process.  It is
6374      located in `tree-ssa-dce.c' and is described by `pass_dce'.
6376    * Dominator optimizations
6378      This pass performs trivial dominator-based copy and constant
6379      propagation, expression simplification, and jump threading.  It is
6380      run multiple times throughout the optimization process.  It is
6381      located in `tree-ssa-dom.c' and is described by `pass_dominator'.
6383    * Forward propagation of single-use variables
6385      This pass attempts to remove redundant computation by substituting
6386      variables that are used once into the expression that uses them and
6387      seeing if the result can be simplified.  It is located in
6388      `tree-ssa-forwprop.c' and is described by `pass_forwprop'.
6390    * Copy Renaming
6392      This pass attempts to change the name of compiler temporaries
6393      involved in copy operations such that SSA->normal can coalesce the
6394      copy away.  When compiler temporaries are copies of user
6395      variables, it also renames the compiler temporary to the user
6396      variable resulting in better use of user symbols.  It is located
6397      in `tree-ssa-copyrename.c' and is described by `pass_copyrename'.
6399    * PHI node optimizations
6401      This pass recognizes forms of PHI inputs that can be represented as
6402      conditional expressions and rewrites them into straight line code.
6403      It is located in `tree-ssa-phiopt.c' and is described by
6404      `pass_phiopt'.
6406    * May-alias optimization
6408      This pass performs a flow sensitive SSA-based points-to analysis.
6409      The resulting may-alias, must-alias, and escape analysis
6410      information is used to promote variables from in-memory
6411      addressable objects to non-aliased variables that can be renamed
6412      into SSA form.  We also update the `VDEF'/`VUSE' memory tags for
6413      non-renameable aggregates so that we get fewer false kills.  The
6414      pass is located in `tree-ssa-alias.c' and is described by
6415      `pass_may_alias'.
6417      Interprocedural points-to information is located in
6418      `tree-ssa-structalias.c' and described by `pass_ipa_pta'.
6420    * Profiling
6422      This pass rewrites the function in order to collect runtime block
6423      and value profiling data.  Such data may be fed back into the
6424      compiler on a subsequent run so as to allow optimization based on
6425      expected execution frequencies.  The pass is located in
6426      `predict.c' and is described by `pass_profile'.
6428    * Lower complex arithmetic
6430      This pass rewrites complex arithmetic operations into their
6431      component scalar arithmetic operations.  The pass is located in
6432      `tree-complex.c' and is described by `pass_lower_complex'.
6434    * Scalar replacement of aggregates
6436      This pass rewrites suitable non-aliased local aggregate variables
6437      into a set of scalar variables.  The resulting scalar variables are
6438      rewritten into SSA form, which allows subsequent optimization
6439      passes to do a significantly better job with them.  The pass is
6440      located in `tree-sra.c' and is described by `pass_sra'.
6442    * Dead store elimination
6444      This pass eliminates stores to memory that are subsequently
6445      overwritten by another store, without any intervening loads.  The
6446      pass is located in `tree-ssa-dse.c' and is described by `pass_dse'.
6448    * Tail recursion elimination
6450      This pass transforms tail recursion into a loop.  It is located in
6451      `tree-tailcall.c' and is described by `pass_tail_recursion'.
6453    * Forward store motion
6455      This pass sinks stores and assignments down the flowgraph closer
6456      to their use point.  The pass is located in `tree-ssa-sink.c' and
6457      is described by `pass_sink_code'.
6459    * Partial redundancy elimination
6461      This pass eliminates partially redundant computations, as well as
6462      performing load motion.  The pass is located in `tree-ssa-pre.c'
6463      and is described by `pass_pre'.
6465      Just before partial redundancy elimination, if
6466      `-funsafe-math-optimizations' is on, GCC tries to convert
6467      divisions to multiplications by the reciprocal.  The pass is
6468      located in `tree-ssa-math-opts.c' and is described by
6469      `pass_cse_reciprocal'.
6471    * Full redundancy elimination
6473      This is a simpler form of PRE that only eliminates redundancies
6474      that occur an all paths.  It is located in `tree-ssa-pre.c' and
6475      described by `pass_fre'.
6477    * Loop optimization
6479      The main driver of the pass is placed in `tree-ssa-loop.c' and
6480      described by `pass_loop'.
6482      The optimizations performed by this pass are:
6484      Loop invariant motion.  This pass moves only invariants that would
6485      be hard to handle on RTL level (function calls, operations that
6486      expand to nontrivial sequences of insns).  With `-funswitch-loops'
6487      it also moves operands of conditions that are invariant out of the
6488      loop, so that we can use just trivial invariantness analysis in
6489      loop unswitching.  The pass also includes store motion.  The pass
6490      is implemented in `tree-ssa-loop-im.c'.
6492      Canonical induction variable creation.  This pass creates a simple
6493      counter for number of iterations of the loop and replaces the exit
6494      condition of the loop using it, in case when a complicated
6495      analysis is necessary to determine the number of iterations.
6496      Later optimizations then may determine the number easily.  The
6497      pass is implemented in `tree-ssa-loop-ivcanon.c'.
6499      Induction variable optimizations.  This pass performs standard
6500      induction variable optimizations, including strength reduction,
6501      induction variable merging and induction variable elimination.
6502      The pass is implemented in `tree-ssa-loop-ivopts.c'.
6504      Loop unswitching.  This pass moves the conditional jumps that are
6505      invariant out of the loops.  To achieve this, a duplicate of the
6506      loop is created for each possible outcome of conditional jump(s).
6507      The pass is implemented in `tree-ssa-loop-unswitch.c'.  This pass
6508      should eventually replace the RTL level loop unswitching in
6509      `loop-unswitch.c', but currently the RTL level pass is not
6510      completely redundant yet due to deficiencies in tree level alias
6511      analysis.
6513      The optimizations also use various utility functions contained in
6514      `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and
6515      `cfgloopmanip.c'.
6517      Vectorization.  This pass transforms loops to operate on vector
6518      types instead of scalar types.  Data parallelism across loop
6519      iterations is exploited to group data elements from consecutive
6520      iterations into a vector and operate on them in parallel.
6521      Depending on available target support the loop is conceptually
6522      unrolled by a factor `VF' (vectorization factor), which is the
6523      number of elements operated upon in parallel in each iteration,
6524      and the `VF' copies of each scalar operation are fused to form a
6525      vector operation.  Additional loop transformations such as peeling
6526      and versioning may take place to align the number of iterations,
6527      and to align the memory accesses in the loop.  The pass is
6528      implemented in `tree-vectorizer.c' (the main driver),
6529      `tree-vect-loop.c' and `tree-vect-loop-manip.c' (loop specific
6530      parts and general loop utilities), `tree-vect-slp' (loop-aware SLP
6531      functionality), `tree-vect-stmts.c' and `tree-vect-data-refs.c'.
6532      Analysis of data references is in `tree-data-ref.c'.
6534      SLP Vectorization.  This pass performs vectorization of
6535      straight-line code. The pass is implemented in `tree-vectorizer.c'
6536      (the main driver), `tree-vect-slp.c', `tree-vect-stmts.c' and
6537      `tree-vect-data-refs.c'.
6539      Autoparallelization.  This pass splits the loop iteration space to
6540      run into several threads.  The pass is implemented in
6541      `tree-parloops.c'.
6543      Graphite is a loop transformation framework based on the polyhedral
6544      model.  Graphite stands for Gimple Represented as Polyhedra.  The
6545      internals of this infrastructure are documented in
6546      `http://gcc.gnu.org/wiki/Graphite'.  The passes working on this
6547      representation are implemented in the various `graphite-*' files.
6549    * Tree level if-conversion for vectorizer
6551      This pass applies if-conversion to simple loops to help vectorizer.
6552      We identify if convertible loops, if-convert statements and merge
6553      basic blocks in one big block.  The idea is to present loop in such
6554      form so that vectorizer can have one to one mapping between
6555      statements and available vector operations.  This patch
6556      re-introduces COND_EXPR at GIMPLE level.  This pass is located in
6557      `tree-if-conv.c' and is described by `pass_if_conversion'.
6559    * Conditional constant propagation
6561      This pass relaxes a lattice of values in order to identify those
6562      that must be constant even in the presence of conditional branches.
6563      The pass is located in `tree-ssa-ccp.c' and is described by
6564      `pass_ccp'.
6566      A related pass that works on memory loads and stores, and not just
6567      register values, is located in `tree-ssa-ccp.c' and described by
6568      `pass_store_ccp'.
6570    * Conditional copy propagation
6572      This is similar to constant propagation but the lattice of values
6573      is the "copy-of" relation.  It eliminates redundant copies from the
6574      code.  The pass is located in `tree-ssa-copy.c' and described by
6575      `pass_copy_prop'.
6577      A related pass that works on memory copies, and not just register
6578      copies, is located in `tree-ssa-copy.c' and described by
6579      `pass_store_copy_prop'.
6581    * Value range propagation
6583      This transformation is similar to constant propagation but instead
6584      of propagating single constant values, it propagates known value
6585      ranges.  The implementation is based on Patterson's range
6586      propagation algorithm (Accurate Static Branch Prediction by Value
6587      Range Propagation, J. R. C. Patterson, PLDI '95).  In contrast to
6588      Patterson's algorithm, this implementation does not propagate
6589      branch probabilities nor it uses more than a single range per SSA
6590      name. This means that the current implementation cannot be used
6591      for branch prediction (though adapting it would not be difficult).
6592      The pass is located in `tree-vrp.c' and is described by
6593      `pass_vrp'.
6595    * Folding built-in functions
6597      This pass simplifies built-in functions, as applicable, with
6598      constant arguments or with inferable string lengths.  It is
6599      located in `tree-ssa-ccp.c' and is described by
6600      `pass_fold_builtins'.
6602    * Split critical edges
6604      This pass identifies critical edges and inserts empty basic blocks
6605      such that the edge is no longer critical.  The pass is located in
6606      `tree-cfg.c' and is described by `pass_split_crit_edges'.
6608    * Control dependence dead code elimination
6610      This pass is a stronger form of dead code elimination that can
6611      eliminate unnecessary control flow statements.   It is located in
6612      `tree-ssa-dce.c' and is described by `pass_cd_dce'.
6614    * Tail call elimination
6616      This pass identifies function calls that may be rewritten into
6617      jumps.  No code transformation is actually applied here, but the
6618      data and control flow problem is solved.  The code transformation
6619      requires target support, and so is delayed until RTL.  In the
6620      meantime `CALL_EXPR_TAILCALL' is set indicating the possibility.
6621      The pass is located in `tree-tailcall.c' and is described by
6622      `pass_tail_calls'.  The RTL transformation is handled by
6623      `fixup_tail_calls' in `calls.c'.
6625    * Warn for function return without value
6627      For non-void functions, this pass locates return statements that do
6628      not specify a value and issues a warning.  Such a statement may
6629      have been injected by falling off the end of the function.  This
6630      pass is run last so that we have as much time as possible to prove
6631      that the statement is not reachable.  It is located in
6632      `tree-cfg.c' and is described by `pass_warn_function_return'.
6634    * Mudflap statement annotation
6636      If mudflap is enabled, we rewrite some memory accesses with code to
6637      validate that the memory access is correct.  In particular,
6638      expressions involving pointer dereferences (`INDIRECT_REF',
6639      `ARRAY_REF', etc.) are replaced by code that checks the selected
6640      address range against the mudflap runtime's database of valid
6641      regions.  This check includes an inline lookup into a
6642      direct-mapped cache, based on shift/mask operations of the pointer
6643      value, with a fallback function call into the runtime.  The pass
6644      is located in `tree-mudflap.c' and is described by
6645      `pass_mudflap_2'.
6647    * Leave static single assignment form
6649      This pass rewrites the function such that it is in normal form.  At
6650      the same time, we eliminate as many single-use temporaries as
6651      possible, so the intermediate language is no longer GIMPLE, but
6652      GENERIC.  The pass is located in `tree-outof-ssa.c' and is
6653      described by `pass_del_ssa'.
6655    * Merge PHI nodes that feed into one another
6657      This is part of the CFG cleanup passes.  It attempts to join PHI
6658      nodes from a forwarder CFG block into another block with PHI
6659      nodes.  The pass is located in `tree-cfgcleanup.c' and is
6660      described by `pass_merge_phi'.
6662    * Return value optimization
6664      If a function always returns the same local variable, and that
6665      local variable is an aggregate type, then the variable is replaced
6666      with the return value for the function (i.e., the function's
6667      DECL_RESULT).  This is equivalent to the C++ named return value
6668      optimization applied to GIMPLE.  The pass is located in
6669      `tree-nrv.c' and is described by `pass_nrv'.
6671    * Return slot optimization
6673      If a function returns a memory object and is called as `var =
6674      foo()', this pass tries to change the call so that the address of
6675      `var' is sent to the caller to avoid an extra memory copy.  This
6676      pass is located in `tree-nrv.c' and is described by
6677      `pass_return_slot'.
6679    * Optimize calls to `__builtin_object_size'
6681      This is a propagation pass similar to CCP that tries to remove
6682      calls to `__builtin_object_size' when the size of the object can be
6683      computed at compile-time.  This pass is located in
6684      `tree-object-size.c' and is described by `pass_object_sizes'.
6686    * Loop invariant motion
6688      This pass removes expensive loop-invariant computations out of
6689      loops.  The pass is located in `tree-ssa-loop.c' and described by
6690      `pass_lim'.
6692    * Loop nest optimizations
6694      This is a family of loop transformations that works on loop nests.
6695      It includes loop interchange, scaling, skewing and reversal and
6696      they are all geared to the optimization of data locality in array
6697      traversals and the removal of dependencies that hamper
6698      optimizations such as loop parallelization and vectorization.  The
6699      pass is located in `tree-loop-linear.c' and described by
6700      `pass_linear_transform'.
6702    * Removal of empty loops
6704      This pass removes loops with no code in them.  The pass is located
6705      in `tree-ssa-loop-ivcanon.c' and described by `pass_empty_loop'.
6707    * Unrolling of small loops
6709      This pass completely unrolls loops with few iterations.  The pass
6710      is located in `tree-ssa-loop-ivcanon.c' and described by
6711      `pass_complete_unroll'.
6713    * Predictive commoning
6715      This pass makes the code reuse the computations from the previous
6716      iterations of the loops, especially loads and stores to memory.
6717      It does so by storing the values of these computations to a bank
6718      of temporary variables that are rotated at the end of loop.  To
6719      avoid the need for this rotation, the loop is then unrolled and
6720      the copies of the loop body are rewritten to use the appropriate
6721      version of the temporary variable.  This pass is located in
6722      `tree-predcom.c' and described by `pass_predcom'.
6724    * Array prefetching
6726      This pass issues prefetch instructions for array references inside
6727      loops.  The pass is located in `tree-ssa-loop-prefetch.c' and
6728      described by `pass_loop_prefetch'.
6730    * Reassociation
6732      This pass rewrites arithmetic expressions to enable optimizations
6733      that operate on them, like redundancy elimination and
6734      vectorization.  The pass is located in `tree-ssa-reassoc.c' and
6735      described by `pass_reassoc'.
6737    * Optimization of `stdarg' functions
6739      This pass tries to avoid the saving of register arguments into the
6740      stack on entry to `stdarg' functions.  If the function doesn't use
6741      any `va_start' macros, no registers need to be saved.  If
6742      `va_start' macros are used, the `va_list' variables don't escape
6743      the function, it is only necessary to save registers that will be
6744      used in `va_arg' macros.  For instance, if `va_arg' is only used
6745      with integral types in the function, floating point registers
6746      don't need to be saved.  This pass is located in `tree-stdarg.c'
6747      and described by `pass_stdarg'.
6750 \x1f
6751 File: gccint.info,  Node: RTL passes,  Prev: Tree SSA passes,  Up: Passes
6753 9.5 RTL passes
6754 ==============
6756 The following briefly describes the RTL generation and optimization
6757 passes that are run after the Tree optimization passes.
6759    * RTL generation
6761      The source files for RTL generation include `stmt.c', `calls.c',
6762      `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and
6763      `emit-rtl.c'.  Also, the file `insn-emit.c', generated from the
6764      machine description by the program `genemit', is used in this
6765      pass.  The header file `expr.h' is used for communication within
6766      this pass.
6768      The header files `insn-flags.h' and `insn-codes.h', generated from
6769      the machine description by the programs `genflags' and `gencodes',
6770      tell this pass which standard names are available for use and
6771      which patterns correspond to them.
6773    * Generation of exception landing pads
6775      This pass generates the glue that handles communication between the
6776      exception handling library routines and the exception handlers
6777      within the function.  Entry points in the function that are
6778      invoked by the exception handling library are called "landing
6779      pads".  The code for this pass is located in `except.c'.
6781    * Control flow graph cleanup
6783      This pass removes unreachable code, simplifies jumps to next,
6784      jumps to jump, jumps across jumps, etc.  The pass is run multiple
6785      times.  For historical reasons, it is occasionally referred to as
6786      the "jump optimization pass".  The bulk of the code for this pass
6787      is in `cfgcleanup.c', and there are support routines in `cfgrtl.c'
6788      and `jump.c'.
6790    * Forward propagation of single-def values
6792      This pass attempts to remove redundant computation by substituting
6793      variables that come from a single definition, and seeing if the
6794      result can be simplified.  It performs copy propagation and
6795      addressing mode selection.  The pass is run twice, with values
6796      being propagated into loops only on the second run.  The code is
6797      located in `fwprop.c'.
6799    * Common subexpression elimination
6801      This pass removes redundant computation within basic blocks, and
6802      optimizes addressing modes based on cost.  The pass is run twice.
6803      The code for this pass is located in `cse.c'.
6805    * Global common subexpression elimination
6807      This pass performs two different types of GCSE  depending on
6808      whether you are optimizing for size or not (LCM based GCSE tends
6809      to increase code size for a gain in speed, while Morel-Renvoise
6810      based GCSE does not).  When optimizing for size, GCSE is done
6811      using Morel-Renvoise Partial Redundancy Elimination, with the
6812      exception that it does not try to move invariants out of
6813      loops--that is left to  the loop optimization pass.  If MR PRE
6814      GCSE is done, code hoisting (aka unification) is also done, as
6815      well as load motion.  If you are optimizing for speed, LCM (lazy
6816      code motion) based GCSE is done.  LCM is based on the work of
6817      Knoop, Ruthing, and Steffen.  LCM based GCSE also does loop
6818      invariant code motion.  We also perform load and store motion when
6819      optimizing for speed.  Regardless of which type of GCSE is used,
6820      the GCSE pass also performs global constant and  copy propagation.
6821      The source file for this pass is `gcse.c', and the LCM routines
6822      are in `lcm.c'.
6824    * Loop optimization
6826      This pass performs several loop related optimizations.  The source
6827      files `cfgloopanal.c' and `cfgloopmanip.c' contain generic loop
6828      analysis and manipulation code.  Initialization and finalization
6829      of loop structures is handled by `loop-init.c'.  A loop invariant
6830      motion pass is implemented in `loop-invariant.c'.  Basic block
6831      level optimizations--unrolling, peeling and unswitching loops--
6832      are implemented in `loop-unswitch.c' and `loop-unroll.c'.
6833      Replacing of the exit condition of loops by special
6834      machine-dependent instructions is handled by `loop-doloop.c'.
6836    * Jump bypassing
6838      This pass is an aggressive form of GCSE that transforms the control
6839      flow graph of a function by propagating constants into conditional
6840      branch instructions.  The source file for this pass is `gcse.c'.
6842    * If conversion
6844      This pass attempts to replace conditional branches and surrounding
6845      assignments with arithmetic, boolean value producing comparison
6846      instructions, and conditional move instructions.  In the very last
6847      invocation after reload, it will generate predicated instructions
6848      when supported by the target.  The code is located in `ifcvt.c'.
6850    * Web construction
6852      This pass splits independent uses of each pseudo-register.  This
6853      can improve effect of the other transformation, such as CSE or
6854      register allocation.  The code for this pass is located in `web.c'.
6856    * Instruction combination
6858      This pass attempts to combine groups of two or three instructions
6859      that are related by data flow into single instructions.  It
6860      combines the RTL expressions for the instructions by substitution,
6861      simplifies the result using algebra, and then attempts to match
6862      the result against the machine description.  The code is located
6863      in `combine.c'.
6865    * Register movement
6867      This pass looks for cases where matching constraints would force an
6868      instruction to need a reload, and this reload would be a
6869      register-to-register move.  It then attempts to change the
6870      registers used by the instruction to avoid the move instruction.
6871      The code is located in `regmove.c'.
6873    * Mode switching optimization
6875      This pass looks for instructions that require the processor to be
6876      in a specific "mode" and minimizes the number of mode changes
6877      required to satisfy all users.  What these modes are, and what
6878      they apply to are completely target-specific.  The code for this
6879      pass is located in `mode-switching.c'.
6881    * Modulo scheduling
6883      This pass looks at innermost loops and reorders their instructions
6884      by overlapping different iterations.  Modulo scheduling is
6885      performed immediately before instruction scheduling.  The code for
6886      this pass is located in `modulo-sched.c'.
6888    * Instruction scheduling
6890      This pass looks for instructions whose output will not be
6891      available by the time that it is used in subsequent instructions.
6892      Memory loads and floating point instructions often have this
6893      behavior on RISC machines.  It re-orders instructions within a
6894      basic block to try to separate the definition and use of items
6895      that otherwise would cause pipeline stalls.  This pass is
6896      performed twice, before and after register allocation.  The code
6897      for this pass is located in `haifa-sched.c', `sched-deps.c',
6898      `sched-ebb.c', `sched-rgn.c' and `sched-vis.c'.
6900    * Register allocation
6902      These passes make sure that all occurrences of pseudo registers are
6903      eliminated, either by allocating them to a hard register, replacing
6904      them by an equivalent expression (e.g. a constant) or by placing
6905      them on the stack.  This is done in several subpasses:
6907         * Register move optimizations.  This pass makes some simple RTL
6908           code transformations which improve the subsequent register
6909           allocation.  The source file is `regmove.c'.
6911         * The integrated register allocator (IRA).  It is called
6912           integrated because coalescing, register live range splitting,
6913           and hard register preferencing are done on-the-fly during
6914           coloring.  It also has better integration with the reload
6915           pass.  Pseudo-registers spilled by the allocator or the
6916           reload have still a chance to get hard-registers if the
6917           reload evicts some pseudo-registers from hard-registers.  The
6918           allocator helps to choose better pseudos for spilling based
6919           on their live ranges and to coalesce stack slots allocated
6920           for the spilled pseudo-registers.  IRA is a regional register
6921           allocator which is transformed into Chaitin-Briggs allocator
6922           if there is one region.  By default, IRA chooses regions using
6923           register pressure but the user can force it to use one region
6924           or regions corresponding to all loops.
6926           Source files of the allocator are `ira.c', `ira-build.c',
6927           `ira-costs.c', `ira-conflicts.c', `ira-color.c',
6928           `ira-emit.c', `ira-lives', plus header files `ira.h' and
6929           `ira-int.h' used for the communication between the allocator
6930           and the rest of the compiler and between the IRA files.
6932         * Reloading.  This pass renumbers pseudo registers with the
6933           hardware registers numbers they were allocated.  Pseudo
6934           registers that did not get hard registers are replaced with
6935           stack slots.  Then it finds instructions that are invalid
6936           because a value has failed to end up in a register, or has
6937           ended up in a register of the wrong kind.  It fixes up these
6938           instructions by reloading the problematical values
6939           temporarily into registers.  Additional instructions are
6940           generated to do the copying.
6942           The reload pass also optionally eliminates the frame pointer
6943           and inserts instructions to save and restore call-clobbered
6944           registers around calls.
6946           Source files are `reload.c' and `reload1.c', plus the header
6947           `reload.h' used for communication between them.
6949    * Basic block reordering
6951      This pass implements profile guided code positioning.  If profile
6952      information is not available, various types of static analysis are
6953      performed to make the predictions normally coming from the profile
6954      feedback (IE execution frequency, branch probability, etc).  It is
6955      implemented in the file `bb-reorder.c', and the various prediction
6956      routines are in `predict.c'.
6958    * Variable tracking
6960      This pass computes where the variables are stored at each position
6961      in code and generates notes describing the variable locations to
6962      RTL code.  The location lists are then generated according to these
6963      notes to debug information if the debugging information format
6964      supports location lists.  The code is located in `var-tracking.c'.
6966    * Delayed branch scheduling
6968      This optional pass attempts to find instructions that can go into
6969      the delay slots of other instructions, usually jumps and calls.
6970      The code for this pass is located in `reorg.c'.
6972    * Branch shortening
6974      On many RISC machines, branch instructions have a limited range.
6975      Thus, longer sequences of instructions must be used for long
6976      branches.  In this pass, the compiler figures out what how far
6977      each instruction will be from each other instruction, and
6978      therefore whether the usual instructions, or the longer sequences,
6979      must be used for each branch.  The code for this pass is located
6980      in `final.c'.
6982    * Register-to-stack conversion
6984      Conversion from usage of some hard registers to usage of a register
6985      stack may be done at this point.  Currently, this is supported only
6986      for the floating-point registers of the Intel 80387 coprocessor.
6987      The code for this pass is located in `reg-stack.c'.
6989    * Final
6991      This pass outputs the assembler code for the function.  The source
6992      files are `final.c' plus `insn-output.c'; the latter is generated
6993      automatically from the machine description by the tool `genoutput'.
6994      The header file `conditions.h' is used for communication between
6995      these files.  If mudflap is enabled, the queue of deferred
6996      declarations and any addressed constants (e.g., string literals)
6997      is processed by `mudflap_finish_file' into a synthetic constructor
6998      function containing calls into the mudflap runtime.
7000    * Debugging information output
7002      This is run after final because it must output the stack slot
7003      offsets for pseudo registers that did not get hard registers.
7004      Source files are `dbxout.c' for DBX symbol table format,
7005      `sdbout.c' for SDB symbol table format, `dwarfout.c' for DWARF
7006      symbol table format, files `dwarf2out.c' and `dwarf2asm.c' for
7007      DWARF2 symbol table format, and `vmsdbgout.c' for VMS debug symbol
7008      table format.
7011 \x1f
7012 File: gccint.info,  Node: RTL,  Next: Control Flow,  Prev: Tree SSA,  Up: Top
7014 10 RTL Representation
7015 *********************
7017 The last part of the compiler work is done on a low-level intermediate
7018 representation called Register Transfer Language.  In this language, the
7019 instructions to be output are described, pretty much one by one, in an
7020 algebraic form that describes what the instruction does.
7022  RTL is inspired by Lisp lists.  It has both an internal form, made up
7023 of structures that point at other structures, and a textual form that
7024 is used in the machine description and in printed debugging dumps.  The
7025 textual form uses nested parentheses to indicate the pointers in the
7026 internal form.
7028 * Menu:
7030 * RTL Objects::       Expressions vs vectors vs strings vs integers.
7031 * RTL Classes::       Categories of RTL expression objects, and their structure.
7032 * Accessors::         Macros to access expression operands or vector elts.
7033 * Special Accessors:: Macros to access specific annotations on RTL.
7034 * Flags::             Other flags in an RTL expression.
7035 * Machine Modes::     Describing the size and format of a datum.
7036 * Constants::         Expressions with constant values.
7037 * Regs and Memory::   Expressions representing register contents or memory.
7038 * Arithmetic::        Expressions representing arithmetic on other expressions.
7039 * Comparisons::       Expressions representing comparison of expressions.
7040 * Bit-Fields::        Expressions representing bit-fields in memory or reg.
7041 * Vector Operations:: Expressions involving vector datatypes.
7042 * Conversions::       Extending, truncating, floating or fixing.
7043 * RTL Declarations::  Declaring volatility, constancy, etc.
7044 * Side Effects::      Expressions for storing in registers, etc.
7045 * Incdec::            Embedded side-effects for autoincrement addressing.
7046 * Assembler::         Representing `asm' with operands.
7047 * Debug Information:: Expressions representing debugging information.
7048 * Insns::             Expression types for entire insns.
7049 * Calls::             RTL representation of function call insns.
7050 * Sharing::           Some expressions are unique; others *must* be copied.
7051 * Reading RTL::       Reading textual RTL from a file.
7053 \x1f
7054 File: gccint.info,  Node: RTL Objects,  Next: RTL Classes,  Up: RTL
7056 10.1 RTL Object Types
7057 =====================
7059 RTL uses five kinds of objects: expressions, integers, wide integers,
7060 strings and vectors.  Expressions are the most important ones.  An RTL
7061 expression ("RTX", for short) is a C structure, but it is usually
7062 referred to with a pointer; a type that is given the typedef name `rtx'.
7064  An integer is simply an `int'; their written form uses decimal digits.
7065 A wide integer is an integral object whose type is `HOST_WIDE_INT';
7066 their written form uses decimal digits.
7068  A string is a sequence of characters.  In core it is represented as a
7069 `char *' in usual C fashion, and it is written in C syntax as well.
7070 However, strings in RTL may never be null.  If you write an empty
7071 string in a machine description, it is represented in core as a null
7072 pointer rather than as a pointer to a null character.  In certain
7073 contexts, these null pointers instead of strings are valid.  Within RTL
7074 code, strings are most commonly found inside `symbol_ref' expressions,
7075 but they appear in other contexts in the RTL expressions that make up
7076 machine descriptions.
7078  In a machine description, strings are normally written with double
7079 quotes, as you would in C.  However, strings in machine descriptions may
7080 extend over many lines, which is invalid C, and adjacent string
7081 constants are not concatenated as they are in C.  Any string constant
7082 may be surrounded with a single set of parentheses.  Sometimes this
7083 makes the machine description easier to read.
7085  There is also a special syntax for strings, which can be useful when C
7086 code is embedded in a machine description.  Wherever a string can
7087 appear, it is also valid to write a C-style brace block.  The entire
7088 brace block, including the outermost pair of braces, is considered to be
7089 the string constant.  Double quote characters inside the braces are not
7090 special.  Therefore, if you write string constants in the C code, you
7091 need not escape each quote character with a backslash.
7093  A vector contains an arbitrary number of pointers to expressions.  The
7094 number of elements in the vector is explicitly present in the vector.
7095 The written form of a vector consists of square brackets (`[...]')
7096 surrounding the elements, in sequence and with whitespace separating
7097 them.  Vectors of length zero are not created; null pointers are used
7098 instead.
7100  Expressions are classified by "expression codes" (also called RTX
7101 codes).  The expression code is a name defined in `rtl.def', which is
7102 also (in uppercase) a C enumeration constant.  The possible expression
7103 codes and their meanings are machine-independent.  The code of an RTX
7104 can be extracted with the macro `GET_CODE (X)' and altered with
7105 `PUT_CODE (X, NEWCODE)'.
7107  The expression code determines how many operands the expression
7108 contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
7109 cannot tell by looking at an operand what kind of object it is.
7110 Instead, you must know from its context--from the expression code of
7111 the containing expression.  For example, in an expression of code
7112 `subreg', the first operand is to be regarded as an expression and the
7113 second operand as an integer.  In an expression of code `plus', there
7114 are two operands, both of which are to be regarded as expressions.  In
7115 a `symbol_ref' expression, there is one operand, which is to be
7116 regarded as a string.
7118  Expressions are written as parentheses containing the name of the
7119 expression type, its flags and machine mode if any, and then the
7120 operands of the expression (separated by spaces).
7122  Expression code names in the `md' file are written in lowercase, but
7123 when they appear in C code they are written in uppercase.  In this
7124 manual, they are shown as follows: `const_int'.
7126  In a few contexts a null pointer is valid where an expression is
7127 normally wanted.  The written form of this is `(nil)'.
7129 \x1f
7130 File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL
7132 10.2 RTL Classes and Formats
7133 ============================
7135 The various expression codes are divided into several "classes", which
7136 are represented by single characters.  You can determine the class of
7137 an RTX code with the macro `GET_RTX_CLASS (CODE)'.  Currently,
7138 `rtl.def' defines these classes:
7140 `RTX_OBJ'
7141      An RTX code that represents an actual object, such as a register
7142      (`REG') or a memory location (`MEM', `SYMBOL_REF').  `LO_SUM') is
7143      also included; instead, `SUBREG' and `STRICT_LOW_PART' are not in
7144      this class, but in class `x'.
7146 `RTX_CONST_OBJ'
7147      An RTX code that represents a constant object.  `HIGH' is also
7148      included in this class.
7150 `RTX_COMPARE'
7151      An RTX code for a non-symmetric comparison, such as `GEU' or `LT'.
7153 `RTX_COMM_COMPARE'
7154      An RTX code for a symmetric (commutative) comparison, such as `EQ'
7155      or `ORDERED'.
7157 `RTX_UNARY'
7158      An RTX code for a unary arithmetic operation, such as `NEG',
7159      `NOT', or `ABS'.  This category also includes value extension
7160      (sign or zero) and conversions between integer and floating point.
7162 `RTX_COMM_ARITH'
7163      An RTX code for a commutative binary operation, such as `PLUS' or
7164      `AND'.  `NE' and `EQ' are comparisons, so they have class `<'.
7166 `RTX_BIN_ARITH'
7167      An RTX code for a non-commutative binary operation, such as
7168      `MINUS', `DIV', or `ASHIFTRT'.
7170 `RTX_BITFIELD_OPS'
7171      An RTX code for a bit-field operation.  Currently only
7172      `ZERO_EXTRACT' and `SIGN_EXTRACT'.  These have three inputs and
7173      are lvalues (so they can be used for insertion as well).  *Note
7174      Bit-Fields::.
7176 `RTX_TERNARY'
7177      An RTX code for other three input operations.  Currently only
7178      `IF_THEN_ELSE' and `VEC_MERGE'.
7180 `RTX_INSN'
7181      An RTX code for an entire instruction:  `INSN', `JUMP_INSN', and
7182      `CALL_INSN'.  *Note Insns::.
7184 `RTX_MATCH'
7185      An RTX code for something that matches in insns, such as
7186      `MATCH_DUP'.  These only occur in machine descriptions.
7188 `RTX_AUTOINC'
7189      An RTX code for an auto-increment addressing mode, such as
7190      `POST_INC'.
7192 `RTX_EXTRA'
7193      All other RTX codes.  This category includes the remaining codes
7194      used only in machine descriptions (`DEFINE_*', etc.).  It also
7195      includes all the codes describing side effects (`SET', `USE',
7196      `CLOBBER', etc.) and the non-insns that may appear on an insn
7197      chain, such as `NOTE', `BARRIER', and `CODE_LABEL'.  `SUBREG' is
7198      also part of this class.
7200  For each expression code, `rtl.def' specifies the number of contained
7201 objects and their kinds using a sequence of characters called the
7202 "format" of the expression code.  For example, the format of `subreg'
7203 is `ei'.
7205  These are the most commonly used format characters:
7208      An expression (actually a pointer to an expression).
7211      An integer.
7214      A wide integer.
7217      A string.
7220      A vector of expressions.
7222  A few other format characters are used occasionally:
7225      `u' is equivalent to `e' except that it is printed differently in
7226      debugging dumps.  It is used for pointers to insns.
7229      `n' is equivalent to `i' except that it is printed differently in
7230      debugging dumps.  It is used for the line number or code number of
7231      a `note' insn.
7234      `S' indicates a string which is optional.  In the RTL objects in
7235      core, `S' is equivalent to `s', but when the object is read, from
7236      an `md' file, the string value of this operand may be omitted.  An
7237      omitted string is taken to be the null string.
7240      `V' indicates a vector which is optional.  In the RTL objects in
7241      core, `V' is equivalent to `E', but when the object is read from
7242      an `md' file, the vector value of this operand may be omitted.  An
7243      omitted vector is effectively the same as a vector of no elements.
7246      `B' indicates a pointer to basic block structure.
7249      `0' means a slot whose contents do not fit any normal category.
7250      `0' slots are not printed at all in dumps, and are often used in
7251      special ways by small parts of the compiler.
7253  There are macros to get the number of operands and the format of an
7254 expression code:
7256 `GET_RTX_LENGTH (CODE)'
7257      Number of operands of an RTX of code CODE.
7259 `GET_RTX_FORMAT (CODE)'
7260      The format of an RTX of code CODE, as a C string.
7262  Some classes of RTX codes always have the same format.  For example, it
7263 is safe to assume that all comparison operations have format `ee'.
7266      All codes of this class have format `e'.
7271      All codes of these classes have format `ee'.
7275      All codes of these classes have format `eee'.
7278      All codes of this class have formats that begin with `iuueiee'.
7279      *Note Insns::.  Note that not all RTL objects linked onto an insn
7280      chain are of class `i'.
7285      You can make no assumptions about the format of these codes.
7287 \x1f
7288 File: gccint.info,  Node: Accessors,  Next: Special Accessors,  Prev: RTL Classes,  Up: RTL
7290 10.3 Access to Operands
7291 =======================
7293 Operands of expressions are accessed using the macros `XEXP', `XINT',
7294 `XWINT' and `XSTR'.  Each of these macros takes two arguments: an
7295 expression-pointer (RTX) and an operand number (counting from zero).
7296 Thus,
7298      XEXP (X, 2)
7300 accesses operand 2 of expression X, as an expression.
7302      XINT (X, 2)
7304 accesses the same operand as an integer.  `XSTR', used in the same
7305 fashion, would access it as a string.
7307  Any operand can be accessed as an integer, as an expression or as a
7308 string.  You must choose the correct method of access for the kind of
7309 value actually stored in the operand.  You would do this based on the
7310 expression code of the containing expression.  That is also how you
7311 would know how many operands there are.
7313  For example, if X is a `subreg' expression, you know that it has two
7314 operands which can be correctly accessed as `XEXP (X, 0)' and `XINT (X,
7315 1)'.  If you did `XINT (X, 0)', you would get the address of the
7316 expression operand but cast as an integer; that might occasionally be
7317 useful, but it would be cleaner to write `(int) XEXP (X, 0)'.  `XEXP
7318 (X, 1)' would also compile without error, and would return the second,
7319 integer operand cast as an expression pointer, which would probably
7320 result in a crash when accessed.  Nothing stops you from writing `XEXP
7321 (X, 28)' either, but this will access memory past the end of the
7322 expression with unpredictable results.
7324  Access to operands which are vectors is more complicated.  You can use
7325 the macro `XVEC' to get the vector-pointer itself, or the macros
7326 `XVECEXP' and `XVECLEN' to access the elements and length of a vector.
7328 `XVEC (EXP, IDX)'
7329      Access the vector-pointer which is operand number IDX in EXP.
7331 `XVECLEN (EXP, IDX)'
7332      Access the length (number of elements) in the vector which is in
7333      operand number IDX in EXP.  This value is an `int'.
7335 `XVECEXP (EXP, IDX, ELTNUM)'
7336      Access element number ELTNUM in the vector which is in operand
7337      number IDX in EXP.  This value is an RTX.
7339      It is up to you to make sure that ELTNUM is not negative and is
7340      less than `XVECLEN (EXP, IDX)'.
7342  All the macros defined in this section expand into lvalues and
7343 therefore can be used to assign the operands, lengths and vector
7344 elements as well as to access them.
7346 \x1f
7347 File: gccint.info,  Node: Special Accessors,  Next: Flags,  Prev: Accessors,  Up: RTL
7349 10.4 Access to Special Operands
7350 ===============================
7352 Some RTL nodes have special annotations associated with them.
7354 `MEM'
7356     `MEM_ALIAS_SET (X)'
7357           If 0, X is not in any alias set, and may alias anything.
7358           Otherwise, X can only alias `MEM's in a conflicting alias
7359           set.  This value is set in a language-dependent manner in the
7360           front-end, and should not be altered in the back-end.  In
7361           some front-ends, these numbers may correspond in some way to
7362           types, or other language-level entities, but they need not,
7363           and the back-end makes no such assumptions.  These set
7364           numbers are tested with `alias_sets_conflict_p'.
7366     `MEM_EXPR (X)'
7367           If this register is known to hold the value of some user-level
7368           declaration, this is that tree node.  It may also be a
7369           `COMPONENT_REF', in which case this is some field reference,
7370           and `TREE_OPERAND (X, 0)' contains the declaration, or
7371           another `COMPONENT_REF', or null if there is no compile-time
7372           object associated with the reference.
7374     `MEM_OFFSET (X)'
7375           The offset from the start of `MEM_EXPR' as a `CONST_INT' rtx.
7377     `MEM_SIZE (X)'
7378           The size in bytes of the memory reference as a `CONST_INT'
7379           rtx.  This is mostly relevant for `BLKmode' references as
7380           otherwise the size is implied by the mode.
7382     `MEM_ALIGN (X)'
7383           The known alignment in bits of the memory reference.
7385     `MEM_ADDR_SPACE (X)'
7386           The address space of the memory reference.  This will
7387           commonly be zero for the generic address space.
7389 `REG'
7391     `ORIGINAL_REGNO (X)'
7392           This field holds the number the register "originally" had;
7393           for a pseudo register turned into a hard reg this will hold
7394           the old pseudo register number.
7396     `REG_EXPR (X)'
7397           If this register is known to hold the value of some user-level
7398           declaration, this is that tree node.
7400     `REG_OFFSET (X)'
7401           If this register is known to hold the value of some user-level
7402           declaration, this is the offset into that logical storage.
7404 `SYMBOL_REF'
7406     `SYMBOL_REF_DECL (X)'
7407           If the `symbol_ref' X was created for a `VAR_DECL' or a
7408           `FUNCTION_DECL', that tree is recorded here.  If this value is
7409           null, then X was created by back end code generation routines,
7410           and there is no associated front end symbol table entry.
7412           `SYMBOL_REF_DECL' may also point to a tree of class `'c'',
7413           that is, some sort of constant.  In this case, the
7414           `symbol_ref' is an entry in the per-file constant pool;
7415           again, there is no associated front end symbol table entry.
7417     `SYMBOL_REF_CONSTANT (X)'
7418           If `CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant
7419           pool entry for X.  It is null otherwise.
7421     `SYMBOL_REF_DATA (X)'
7422           A field of opaque type used to store `SYMBOL_REF_DECL' or
7423           `SYMBOL_REF_CONSTANT'.
7425     `SYMBOL_REF_FLAGS (X)'
7426           In a `symbol_ref', this is used to communicate various
7427           predicates about the symbol.  Some of these are common enough
7428           to be computed by common code, some are specific to the
7429           target.  The common bits are:
7431          `SYMBOL_FLAG_FUNCTION'
7432                Set if the symbol refers to a function.
7434          `SYMBOL_FLAG_LOCAL'
7435                Set if the symbol is local to this "module".  See
7436                `TARGET_BINDS_LOCAL_P'.
7438          `SYMBOL_FLAG_EXTERNAL'
7439                Set if this symbol is not defined in this translation
7440                unit.  Note that this is not the inverse of
7441                `SYMBOL_FLAG_LOCAL'.
7443          `SYMBOL_FLAG_SMALL'
7444                Set if the symbol is located in the small data section.
7445                See `TARGET_IN_SMALL_DATA_P'.
7447          `SYMBOL_REF_TLS_MODEL (X)'
7448                This is a multi-bit field accessor that returns the
7449                `tls_model' to be used for a thread-local storage
7450                symbol.  It returns zero for non-thread-local symbols.
7452          `SYMBOL_FLAG_HAS_BLOCK_INFO'
7453                Set if the symbol has `SYMBOL_REF_BLOCK' and
7454                `SYMBOL_REF_BLOCK_OFFSET' fields.
7456          `SYMBOL_FLAG_ANCHOR'
7457                Set if the symbol is used as a section anchor.  "Section
7458                anchors" are symbols that have a known position within
7459                an `object_block' and that can be used to access nearby
7460                members of that block.  They are used to implement
7461                `-fsection-anchors'.
7463                If this flag is set, then `SYMBOL_FLAG_HAS_BLOCK_INFO'
7464                will be too.
7466           Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for
7467           the target's use.
7469 `SYMBOL_REF_BLOCK (X)'
7470      If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the `object_block'
7471      structure to which the symbol belongs, or `NULL' if it has not
7472      been assigned a block.
7474 `SYMBOL_REF_BLOCK_OFFSET (X)'
7475      If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from
7476      the first object in `SYMBOL_REF_BLOCK (X)'.  The value is negative
7477      if X has not yet been assigned to a block, or it has not been
7478      given an offset within that block.
7480 \x1f
7481 File: gccint.info,  Node: Flags,  Next: Machine Modes,  Prev: Special Accessors,  Up: RTL
7483 10.5 Flags in an RTL Expression
7484 ===============================
7486 RTL expressions contain several flags (one-bit bit-fields) that are
7487 used in certain types of expression.  Most often they are accessed with
7488 the following macros, which expand into lvalues.
7490 `CONSTANT_POOL_ADDRESS_P (X)'
7491      Nonzero in a `symbol_ref' if it refers to part of the current
7492      function's constant pool.  For most targets these addresses are in
7493      a `.rodata' section entirely separate from the function, but for
7494      some targets the addresses are close to the beginning of the
7495      function.  In either case GCC assumes these addresses can be
7496      addressed directly, perhaps with the help of base registers.
7497      Stored in the `unchanging' field and printed as `/u'.
7499 `RTL_CONST_CALL_P (X)'
7500      In a `call_insn' indicates that the insn represents a call to a
7501      const function.  Stored in the `unchanging' field and printed as
7502      `/u'.
7504 `RTL_PURE_CALL_P (X)'
7505      In a `call_insn' indicates that the insn represents a call to a
7506      pure function.  Stored in the `return_val' field and printed as
7507      `/i'.
7509 `RTL_CONST_OR_PURE_CALL_P (X)'
7510      In a `call_insn', true if `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P'
7511      is true.
7513 `RTL_LOOPING_CONST_OR_PURE_CALL_P (X)'
7514      In a `call_insn' indicates that the insn represents a possibly
7515      infinite looping call to a const or pure function.  Stored in the
7516      `call' field and printed as `/c'.  Only true if one of
7517      `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P' is true.
7519 `INSN_ANNULLED_BRANCH_P (X)'
7520      In a `jump_insn', `call_insn', or `insn' indicates that the branch
7521      is an annulling one.  See the discussion under `sequence' below.
7522      Stored in the `unchanging' field and printed as `/u'.
7524 `INSN_DELETED_P (X)'
7525      In an `insn', `call_insn', `jump_insn', `code_label', `barrier',
7526      or `note', nonzero if the insn has been deleted.  Stored in the
7527      `volatil' field and printed as `/v'.
7529 `INSN_FROM_TARGET_P (X)'
7530      In an `insn' or `jump_insn' or `call_insn' in a delay slot of a
7531      branch, indicates that the insn is from the target of the branch.
7532      If the branch insn has `INSN_ANNULLED_BRANCH_P' set, this insn
7533      will only be executed if the branch is taken.  For annulled
7534      branches with `INSN_FROM_TARGET_P' clear, the insn will be
7535      executed only if the branch is not taken.  When
7536      `INSN_ANNULLED_BRANCH_P' is not set, this insn will always be
7537      executed.  Stored in the `in_struct' field and printed as `/s'.
7539 `LABEL_PRESERVE_P (X)'
7540      In a `code_label' or `note', indicates that the label is
7541      referenced by code or data not visible to the RTL of a given
7542      function.  Labels referenced by a non-local goto will have this
7543      bit set.  Stored in the `in_struct' field and printed as `/s'.
7545 `LABEL_REF_NONLOCAL_P (X)'
7546      In `label_ref' and `reg_label' expressions, nonzero if this is a
7547      reference to a non-local label.  Stored in the `volatil' field and
7548      printed as `/v'.
7550 `MEM_IN_STRUCT_P (X)'
7551      In `mem' expressions, nonzero for reference to an entire structure,
7552      union or array, or to a component of one.  Zero for references to a
7553      scalar variable or through a pointer to a scalar.  If both this
7554      flag and `MEM_SCALAR_P' are clear, then we don't know whether this
7555      `mem' is in a structure or not.  Both flags should never be
7556      simultaneously set.  Stored in the `in_struct' field and printed
7557      as `/s'.
7559 `MEM_KEEP_ALIAS_SET_P (X)'
7560      In `mem' expressions, 1 if we should keep the alias set for this
7561      mem unchanged when we access a component.  Set to 1, for example,
7562      when we are already in a non-addressable component of an aggregate.
7563      Stored in the `jump' field and printed as `/j'.
7565 `MEM_SCALAR_P (X)'
7566      In `mem' expressions, nonzero for reference to a scalar known not
7567      to be a member of a structure, union, or array.  Zero for such
7568      references and for indirections through pointers, even pointers
7569      pointing to scalar types.  If both this flag and `MEM_IN_STRUCT_P'
7570      are clear, then we don't know whether this `mem' is in a structure
7571      or not.  Both flags should never be simultaneously set.  Stored in
7572      the `return_val' field and printed as `/i'.
7574 `MEM_VOLATILE_P (X)'
7575      In `mem', `asm_operands', and `asm_input' expressions, nonzero for
7576      volatile memory references.  Stored in the `volatil' field and
7577      printed as `/v'.
7579 `MEM_NOTRAP_P (X)'
7580      In `mem', nonzero for memory references that will not trap.
7581      Stored in the `call' field and printed as `/c'.
7583 `MEM_POINTER (X)'
7584      Nonzero in a `mem' if the memory reference holds a pointer.
7585      Stored in the `frame_related' field and printed as `/f'.
7587 `REG_FUNCTION_VALUE_P (X)'
7588      Nonzero in a `reg' if it is the place in which this function's
7589      value is going to be returned.  (This happens only in a hard
7590      register.)  Stored in the `return_val' field and printed as `/i'.
7592 `REG_POINTER (X)'
7593      Nonzero in a `reg' if the register holds a pointer.  Stored in the
7594      `frame_related' field and printed as `/f'.
7596 `REG_USERVAR_P (X)'
7597      In a `reg', nonzero if it corresponds to a variable present in the
7598      user's source code.  Zero for temporaries generated internally by
7599      the compiler.  Stored in the `volatil' field and printed as `/v'.
7601      The same hard register may be used also for collecting the values
7602      of functions called by this one, but `REG_FUNCTION_VALUE_P' is zero
7603      in this kind of use.
7605 `RTX_FRAME_RELATED_P (X)'
7606      Nonzero in an `insn', `call_insn', `jump_insn', `barrier', or
7607      `set' which is part of a function prologue and sets the stack
7608      pointer, sets the frame pointer, or saves a register.  This flag
7609      should also be set on an instruction that sets up a temporary
7610      register to use in place of the frame pointer.  Stored in the
7611      `frame_related' field and printed as `/f'.
7613      In particular, on RISC targets where there are limits on the sizes
7614      of immediate constants, it is sometimes impossible to reach the
7615      register save area directly from the stack pointer.  In that case,
7616      a temporary register is used that is near enough to the register
7617      save area, and the Canonical Frame Address, i.e., DWARF2's logical
7618      frame pointer, register must (temporarily) be changed to be this
7619      temporary register.  So, the instruction that sets this temporary
7620      register must be marked as `RTX_FRAME_RELATED_P'.
7622      If the marked instruction is overly complex (defined in terms of
7623      what `dwarf2out_frame_debug_expr' can handle), you will also have
7624      to create a `REG_FRAME_RELATED_EXPR' note and attach it to the
7625      instruction.  This note should contain a simple expression of the
7626      computation performed by this instruction, i.e., one that
7627      `dwarf2out_frame_debug_expr' can handle.
7629      This flag is required for exception handling support on targets
7630      with RTL prologues.
7632 `MEM_READONLY_P (X)'
7633      Nonzero in a `mem', if the memory is statically allocated and
7634      read-only.
7636      Read-only in this context means never modified during the lifetime
7637      of the program, not necessarily in ROM or in write-disabled pages.
7638      A common example of the later is a shared library's global offset
7639      table.  This table is initialized by the runtime loader, so the
7640      memory is technically writable, but after control is transfered
7641      from the runtime loader to the application, this memory will never
7642      be subsequently modified.
7644      Stored in the `unchanging' field and printed as `/u'.
7646 `SCHED_GROUP_P (X)'
7647      During instruction scheduling, in an `insn', `call_insn' or
7648      `jump_insn', indicates that the previous insn must be scheduled
7649      together with this insn.  This is used to ensure that certain
7650      groups of instructions will not be split up by the instruction
7651      scheduling pass, for example, `use' insns before a `call_insn' may
7652      not be separated from the `call_insn'.  Stored in the `in_struct'
7653      field and printed as `/s'.
7655 `SET_IS_RETURN_P (X)'
7656      For a `set', nonzero if it is for a return.  Stored in the `jump'
7657      field and printed as `/j'.
7659 `SIBLING_CALL_P (X)'
7660      For a `call_insn', nonzero if the insn is a sibling call.  Stored
7661      in the `jump' field and printed as `/j'.
7663 `STRING_POOL_ADDRESS_P (X)'
7664      For a `symbol_ref' expression, nonzero if it addresses this
7665      function's string constant pool.  Stored in the `frame_related'
7666      field and printed as `/f'.
7668 `SUBREG_PROMOTED_UNSIGNED_P (X)'
7669      Returns a value greater then zero for a `subreg' that has
7670      `SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
7671      kept zero-extended, zero if it is kept sign-extended, and less
7672      then zero if it is extended some other way via the `ptr_extend'
7673      instruction.  Stored in the `unchanging' field and `volatil'
7674      field, printed as `/u' and `/v'.  This macro may only be used to
7675      get the value it may not be used to change the value.  Use
7676      `SUBREG_PROMOTED_UNSIGNED_SET' to change the value.
7678 `SUBREG_PROMOTED_UNSIGNED_SET (X)'
7679      Set the `unchanging' and `volatil' fields in a `subreg' to reflect
7680      zero, sign, or other extension.  If `volatil' is zero, then
7681      `unchanging' as nonzero means zero extension and as zero means
7682      sign extension.  If `volatil' is nonzero then some other type of
7683      extension was done via the `ptr_extend' instruction.
7685 `SUBREG_PROMOTED_VAR_P (X)'
7686      Nonzero in a `subreg' if it was made when accessing an object that
7687      was promoted to a wider mode in accord with the `PROMOTED_MODE'
7688      machine description macro (*note Storage Layout::).  In this case,
7689      the mode of the `subreg' is the declared mode of the object and
7690      the mode of `SUBREG_REG' is the mode of the register that holds
7691      the object.  Promoted variables are always either sign- or
7692      zero-extended to the wider mode on every assignment.  Stored in
7693      the `in_struct' field and printed as `/s'.
7695 `SYMBOL_REF_USED (X)'
7696      In a `symbol_ref', indicates that X has been used.  This is
7697      normally only used to ensure that X is only declared external
7698      once.  Stored in the `used' field.
7700 `SYMBOL_REF_WEAK (X)'
7701      In a `symbol_ref', indicates that X has been declared weak.
7702      Stored in the `return_val' field and printed as `/i'.
7704 `SYMBOL_REF_FLAG (X)'
7705      In a `symbol_ref', this is used as a flag for machine-specific
7706      purposes.  Stored in the `volatil' field and printed as `/v'.
7708      Most uses of `SYMBOL_REF_FLAG' are historic and may be subsumed by
7709      `SYMBOL_REF_FLAGS'.  Certainly use of `SYMBOL_REF_FLAGS' is
7710      mandatory if the target requires more than one bit of storage.
7712 `PREFETCH_SCHEDULE_BARRIER_P (X)'
7713      In a `prefetch', indicates that the prefetch is a scheduling
7714      barrier.  No other INSNs will be moved over it.  Stored in the
7715      `volatil' field and printed as `/v'.
7717  These are the fields to which the above macros refer:
7719 `call'
7720      In a `mem', 1 means that the memory reference will not trap.
7722      In a `call', 1 means that this pure or const call may possibly
7723      infinite loop.
7725      In an RTL dump, this flag is represented as `/c'.
7727 `frame_related'
7728      In an `insn' or `set' expression, 1 means that it is part of a
7729      function prologue and sets the stack pointer, sets the frame
7730      pointer, saves a register, or sets up a temporary register to use
7731      in place of the frame pointer.
7733      In `reg' expressions, 1 means that the register holds a pointer.
7735      In `mem' expressions, 1 means that the memory reference holds a
7736      pointer.
7738      In `symbol_ref' expressions, 1 means that the reference addresses
7739      this function's string constant pool.
7741      In an RTL dump, this flag is represented as `/f'.
7743 `in_struct'
7744      In `mem' expressions, it is 1 if the memory datum referred to is
7745      all or part of a structure or array; 0 if it is (or might be) a
7746      scalar variable.  A reference through a C pointer has 0 because
7747      the pointer might point to a scalar variable.  This information
7748      allows the compiler to determine something about possible cases of
7749      aliasing.
7751      In `reg' expressions, it is 1 if the register has its entire life
7752      contained within the test expression of some loop.
7754      In `subreg' expressions, 1 means that the `subreg' is accessing an
7755      object that has had its mode promoted from a wider mode.
7757      In `label_ref' expressions, 1 means that the referenced label is
7758      outside the innermost loop containing the insn in which the
7759      `label_ref' was found.
7761      In `code_label' expressions, it is 1 if the label may never be
7762      deleted.  This is used for labels which are the target of
7763      non-local gotos.  Such a label that would have been deleted is
7764      replaced with a `note' of type `NOTE_INSN_DELETED_LABEL'.
7766      In an `insn' during dead-code elimination, 1 means that the insn is
7767      dead code.
7769      In an `insn' or `jump_insn' during reorg for an insn in the delay
7770      slot of a branch, 1 means that this insn is from the target of the
7771      branch.
7773      In an `insn' during instruction scheduling, 1 means that this insn
7774      must be scheduled as part of a group together with the previous
7775      insn.
7777      In an RTL dump, this flag is represented as `/s'.
7779 `return_val'
7780      In `reg' expressions, 1 means the register contains the value to
7781      be returned by the current function.  On machines that pass
7782      parameters in registers, the same register number may be used for
7783      parameters as well, but this flag is not set on such uses.
7785      In `mem' expressions, 1 means the memory reference is to a scalar
7786      known not to be a member of a structure, union, or array.
7788      In `symbol_ref' expressions, 1 means the referenced symbol is weak.
7790      In `call' expressions, 1 means the call is pure.
7792      In an RTL dump, this flag is represented as `/i'.
7794 `jump'
7795      In a `mem' expression, 1 means we should keep the alias set for
7796      this mem unchanged when we access a component.
7798      In a `set', 1 means it is for a return.
7800      In a `call_insn', 1 means it is a sibling call.
7802      In an RTL dump, this flag is represented as `/j'.
7804 `unchanging'
7805      In `reg' and `mem' expressions, 1 means that the value of the
7806      expression never changes.
7808      In `subreg' expressions, it is 1 if the `subreg' references an
7809      unsigned object whose mode has been promoted to a wider mode.
7811      In an `insn' or `jump_insn' in the delay slot of a branch
7812      instruction, 1 means an annulling branch should be used.
7814      In a `symbol_ref' expression, 1 means that this symbol addresses
7815      something in the per-function constant pool.
7817      In a `call_insn' 1 means that this instruction is a call to a const
7818      function.
7820      In an RTL dump, this flag is represented as `/u'.
7822 `used'
7823      This flag is used directly (without an access macro) at the end of
7824      RTL generation for a function, to count the number of times an
7825      expression appears in insns.  Expressions that appear more than
7826      once are copied, according to the rules for shared structure
7827      (*note Sharing::).
7829      For a `reg', it is used directly (without an access macro) by the
7830      leaf register renumbering code to ensure that each register is only
7831      renumbered once.
7833      In a `symbol_ref', it indicates that an external declaration for
7834      the symbol has already been written.
7836 `volatil'
7837      In a `mem', `asm_operands', or `asm_input' expression, it is 1 if
7838      the memory reference is volatile.  Volatile memory references may
7839      not be deleted, reordered or combined.
7841      In a `symbol_ref' expression, it is used for machine-specific
7842      purposes.
7844      In a `reg' expression, it is 1 if the value is a user-level
7845      variable.  0 indicates an internal compiler temporary.
7847      In an `insn', 1 means the insn has been deleted.
7849      In `label_ref' and `reg_label' expressions, 1 means a reference to
7850      a non-local label.
7852      In `prefetch' expressions, 1 means that the containing insn is a
7853      scheduling barrier.
7855      In an RTL dump, this flag is represented as `/v'.
7857 \x1f
7858 File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
7860 10.6 Machine Modes
7861 ==================
7863 A machine mode describes a size of data object and the representation
7864 used for it.  In the C code, machine modes are represented by an
7865 enumeration type, `enum machine_mode', defined in `machmode.def'.  Each
7866 RTL expression has room for a machine mode and so do certain kinds of
7867 tree expressions (declarations and types, to be precise).
7869  In debugging dumps and machine descriptions, the machine mode of an RTL
7870 expression is written after the expression code with a colon to separate
7871 them.  The letters `mode' which appear at the end of each machine mode
7872 name are omitted.  For example, `(reg:SI 38)' is a `reg' expression
7873 with machine mode `SImode'.  If the mode is `VOIDmode', it is not
7874 written at all.
7876  Here is a table of machine modes.  The term "byte" below refers to an
7877 object of `BITS_PER_UNIT' bits (*note Storage Layout::).
7879 `BImode'
7880      "Bit" mode represents a single bit, for predicate registers.
7882 `QImode'
7883      "Quarter-Integer" mode represents a single byte treated as an
7884      integer.
7886 `HImode'
7887      "Half-Integer" mode represents a two-byte integer.
7889 `PSImode'
7890      "Partial Single Integer" mode represents an integer which occupies
7891      four bytes but which doesn't really use all four.  On some
7892      machines, this is the right mode to use for pointers.
7894 `SImode'
7895      "Single Integer" mode represents a four-byte integer.
7897 `PDImode'
7898      "Partial Double Integer" mode represents an integer which occupies
7899      eight bytes but which doesn't really use all eight.  On some
7900      machines, this is the right mode to use for certain pointers.
7902 `DImode'
7903      "Double Integer" mode represents an eight-byte integer.
7905 `TImode'
7906      "Tetra Integer" (?) mode represents a sixteen-byte integer.
7908 `OImode'
7909      "Octa Integer" (?) mode represents a thirty-two-byte integer.
7911 `QFmode'
7912      "Quarter-Floating" mode represents a quarter-precision (single
7913      byte) floating point number.
7915 `HFmode'
7916      "Half-Floating" mode represents a half-precision (two byte)
7917      floating point number.
7919 `TQFmode'
7920      "Three-Quarter-Floating" (?) mode represents a
7921      three-quarter-precision (three byte) floating point number.
7923 `SFmode'
7924      "Single Floating" mode represents a four byte floating point
7925      number.  In the common case, of a processor with IEEE arithmetic
7926      and 8-bit bytes, this is a single-precision IEEE floating point
7927      number; it can also be used for double-precision (on processors
7928      with 16-bit bytes) and single-precision VAX and IBM types.
7930 `DFmode'
7931      "Double Floating" mode represents an eight byte floating point
7932      number.  In the common case, of a processor with IEEE arithmetic
7933      and 8-bit bytes, this is a double-precision IEEE floating point
7934      number.
7936 `XFmode'
7937      "Extended Floating" mode represents an IEEE extended floating point
7938      number.  This mode only has 80 meaningful bits (ten bytes).  Some
7939      processors require such numbers to be padded to twelve bytes,
7940      others to sixteen; this mode is used for either.
7942 `SDmode'
7943      "Single Decimal Floating" mode represents a four byte decimal
7944      floating point number (as distinct from conventional binary
7945      floating point).
7947 `DDmode'
7948      "Double Decimal Floating" mode represents an eight byte decimal
7949      floating point number.
7951 `TDmode'
7952      "Tetra Decimal Floating" mode represents a sixteen byte decimal
7953      floating point number all 128 of whose bits are meaningful.
7955 `TFmode'
7956      "Tetra Floating" mode represents a sixteen byte floating point
7957      number all 128 of whose bits are meaningful.  One common use is the
7958      IEEE quad-precision format.
7960 `QQmode'
7961      "Quarter-Fractional" mode represents a single byte treated as a
7962      signed fractional number.  The default format is "s.7".
7964 `HQmode'
7965      "Half-Fractional" mode represents a two-byte signed fractional
7966      number.  The default format is "s.15".
7968 `SQmode'
7969      "Single Fractional" mode represents a four-byte signed fractional
7970      number.  The default format is "s.31".
7972 `DQmode'
7973      "Double Fractional" mode represents an eight-byte signed
7974      fractional number.  The default format is "s.63".
7976 `TQmode'
7977      "Tetra Fractional" mode represents a sixteen-byte signed
7978      fractional number.  The default format is "s.127".
7980 `UQQmode'
7981      "Unsigned Quarter-Fractional" mode represents a single byte
7982      treated as an unsigned fractional number.  The default format is
7983      ".8".
7985 `UHQmode'
7986      "Unsigned Half-Fractional" mode represents a two-byte unsigned
7987      fractional number.  The default format is ".16".
7989 `USQmode'
7990      "Unsigned Single Fractional" mode represents a four-byte unsigned
7991      fractional number.  The default format is ".32".
7993 `UDQmode'
7994      "Unsigned Double Fractional" mode represents an eight-byte unsigned
7995      fractional number.  The default format is ".64".
7997 `UTQmode'
7998      "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
7999      fractional number.  The default format is ".128".
8001 `HAmode'
8002      "Half-Accumulator" mode represents a two-byte signed accumulator.
8003      The default format is "s8.7".
8005 `SAmode'
8006      "Single Accumulator" mode represents a four-byte signed
8007      accumulator.  The default format is "s16.15".
8009 `DAmode'
8010      "Double Accumulator" mode represents an eight-byte signed
8011      accumulator.  The default format is "s32.31".
8013 `TAmode'
8014      "Tetra Accumulator" mode represents a sixteen-byte signed
8015      accumulator.  The default format is "s64.63".
8017 `UHAmode'
8018      "Unsigned Half-Accumulator" mode represents a two-byte unsigned
8019      accumulator.  The default format is "8.8".
8021 `USAmode'
8022      "Unsigned Single Accumulator" mode represents a four-byte unsigned
8023      accumulator.  The default format is "16.16".
8025 `UDAmode'
8026      "Unsigned Double Accumulator" mode represents an eight-byte
8027      unsigned accumulator.  The default format is "32.32".
8029 `UTAmode'
8030      "Unsigned Tetra Accumulator" mode represents a sixteen-byte
8031      unsigned accumulator.  The default format is "64.64".
8033 `CCmode'
8034      "Condition Code" mode represents the value of a condition code,
8035      which is a machine-specific set of bits used to represent the
8036      result of a comparison operation.  Other machine-specific modes
8037      may also be used for the condition code.  These modes are not used
8038      on machines that use `cc0' (see *note Condition Code::).
8040 `BLKmode'
8041      "Block" mode represents values that are aggregates to which none of
8042      the other modes apply.  In RTL, only memory references can have
8043      this mode, and only if they appear in string-move or vector
8044      instructions.  On machines which have no such instructions,
8045      `BLKmode' will not appear in RTL.
8047 `VOIDmode'
8048      Void mode means the absence of a mode or an unspecified mode.  For
8049      example, RTL expressions of code `const_int' have mode `VOIDmode'
8050      because they can be taken to have whatever mode the context
8051      requires.  In debugging dumps of RTL, `VOIDmode' is expressed by
8052      the absence of any mode.
8054 `QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
8055      These modes stand for a complex number represented as a pair of
8056      floating point values.  The floating point values are in `QFmode',
8057      `HFmode', `SFmode', `DFmode', `XFmode', and `TFmode', respectively.
8059 `CQImode, CHImode, CSImode, CDImode, CTImode, COImode'
8060      These modes stand for a complex number represented as a pair of
8061      integer values.  The integer values are in `QImode', `HImode',
8062      `SImode', `DImode', `TImode', and `OImode', respectively.
8064  The machine description defines `Pmode' as a C macro which expands
8065 into the machine mode used for addresses.  Normally this is the mode
8066 whose size is `BITS_PER_WORD', `SImode' on 32-bit machines.
8068  The only modes which a machine description must support are `QImode',
8069 and the modes corresponding to `BITS_PER_WORD', `FLOAT_TYPE_SIZE' and
8070 `DOUBLE_TYPE_SIZE'.  The compiler will attempt to use `DImode' for
8071 8-byte structures and unions, but this can be prevented by overriding
8072 the definition of `MAX_FIXED_MODE_SIZE'.  Alternatively, you can have
8073 the compiler use `TImode' for 16-byte structures and unions.  Likewise,
8074 you can arrange for the C type `short int' to avoid using `HImode'.
8076  Very few explicit references to machine modes remain in the compiler
8077 and these few references will soon be removed.  Instead, the machine
8078 modes are divided into mode classes.  These are represented by the
8079 enumeration type `enum mode_class' defined in `machmode.h'.  The
8080 possible mode classes are:
8082 `MODE_INT'
8083      Integer modes.  By default these are `BImode', `QImode', `HImode',
8084      `SImode', `DImode', `TImode', and `OImode'.
8086 `MODE_PARTIAL_INT'
8087      The "partial integer" modes, `PQImode', `PHImode', `PSImode' and
8088      `PDImode'.
8090 `MODE_FLOAT'
8091      Floating point modes.  By default these are `QFmode', `HFmode',
8092      `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'.
8094 `MODE_DECIMAL_FLOAT'
8095      Decimal floating point modes.  By default these are `SDmode',
8096      `DDmode' and `TDmode'.
8098 `MODE_FRACT'
8099      Signed fractional modes.  By default these are `QQmode', `HQmode',
8100      `SQmode', `DQmode' and `TQmode'.
8102 `MODE_UFRACT'
8103      Unsigned fractional modes.  By default these are `UQQmode',
8104      `UHQmode', `USQmode', `UDQmode' and `UTQmode'.
8106 `MODE_ACCUM'
8107      Signed accumulator modes.  By default these are `HAmode',
8108      `SAmode', `DAmode' and `TAmode'.
8110 `MODE_UACCUM'
8111      Unsigned accumulator modes.  By default these are `UHAmode',
8112      `USAmode', `UDAmode' and `UTAmode'.
8114 `MODE_COMPLEX_INT'
8115      Complex integer modes.  (These are not currently implemented).
8117 `MODE_COMPLEX_FLOAT'
8118      Complex floating point modes.  By default these are `QCmode',
8119      `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'.
8121 `MODE_FUNCTION'
8122      Algol or Pascal function variables including a static chain.
8123      (These are not currently implemented).
8125 `MODE_CC'
8126      Modes representing condition code values.  These are `CCmode' plus
8127      any `CC_MODE' modes listed in the `MACHINE-modes.def'.  *Note Jump
8128      Patterns::, also see *Note Condition Code::.
8130 `MODE_RANDOM'
8131      This is a catchall mode class for modes which don't fit into the
8132      above classes.  Currently `VOIDmode' and `BLKmode' are in
8133      `MODE_RANDOM'.
8135  Here are some C macros that relate to machine modes:
8137 `GET_MODE (X)'
8138      Returns the machine mode of the RTX X.
8140 `PUT_MODE (X, NEWMODE)'
8141      Alters the machine mode of the RTX X to be NEWMODE.
8143 `NUM_MACHINE_MODES'
8144      Stands for the number of machine modes available on the target
8145      machine.  This is one greater than the largest numeric value of any
8146      machine mode.
8148 `GET_MODE_NAME (M)'
8149      Returns the name of mode M as a string.
8151 `GET_MODE_CLASS (M)'
8152      Returns the mode class of mode M.
8154 `GET_MODE_WIDER_MODE (M)'
8155      Returns the next wider natural mode.  For example, the expression
8156      `GET_MODE_WIDER_MODE (QImode)' returns `HImode'.
8158 `GET_MODE_SIZE (M)'
8159      Returns the size in bytes of a datum of mode M.
8161 `GET_MODE_BITSIZE (M)'
8162      Returns the size in bits of a datum of mode M.
8164 `GET_MODE_IBIT (M)'
8165      Returns the number of integral bits of a datum of fixed-point mode
8166      M.
8168 `GET_MODE_FBIT (M)'
8169      Returns the number of fractional bits of a datum of fixed-point
8170      mode M.
8172 `GET_MODE_MASK (M)'
8173      Returns a bitmask containing 1 for all bits in a word that fit
8174      within mode M.  This macro can only be used for modes whose
8175      bitsize is less than or equal to `HOST_BITS_PER_INT'.
8177 `GET_MODE_ALIGNMENT (M)'
8178      Return the required alignment, in bits, for an object of mode M.
8180 `GET_MODE_UNIT_SIZE (M)'
8181      Returns the size in bytes of the subunits of a datum of mode M.
8182      This is the same as `GET_MODE_SIZE' except in the case of complex
8183      modes.  For them, the unit size is the size of the real or
8184      imaginary part.
8186 `GET_MODE_NUNITS (M)'
8187      Returns the number of units contained in a mode, i.e.,
8188      `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'.
8190 `GET_CLASS_NARROWEST_MODE (C)'
8191      Returns the narrowest mode in mode class C.
8193  The global variables `byte_mode' and `word_mode' contain modes whose
8194 classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or
8195 `BITS_PER_WORD', respectively.  On 32-bit machines, these are `QImode'
8196 and `SImode', respectively.
8198 \x1f
8199 File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
8201 10.7 Constant Expression Types
8202 ==============================
8204 The simplest RTL expressions are those that represent constant values.
8206 `(const_int I)'
8207      This type of expression represents the integer value I.  I is
8208      customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)',
8209      which is equivalent to `XWINT (EXP, 0)'.
8211      Constants generated for modes with fewer bits than `HOST_WIDE_INT'
8212      must be sign extended to full width (e.g., with `gen_int_mode').
8214      There is only one expression object for the integer value zero; it
8215      is the value of the variable `const0_rtx'.  Likewise, the only
8216      expression for integer value one is found in `const1_rtx', the only
8217      expression for integer value two is found in `const2_rtx', and the
8218      only expression for integer value negative one is found in
8219      `constm1_rtx'.  Any attempt to create an expression of code
8220      `const_int' and value zero, one, two or negative one will return
8221      `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as
8222      appropriate.
8224      Similarly, there is only one object for the integer whose value is
8225      `STORE_FLAG_VALUE'.  It is found in `const_true_rtx'.  If
8226      `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will
8227      point to the same object.  If `STORE_FLAG_VALUE' is -1,
8228      `const_true_rtx' and `constm1_rtx' will point to the same object.
8230 `(const_double:M I0 I1 ...)'
8231      Represents either a floating-point constant of mode M or an
8232      integer constant too large to fit into `HOST_BITS_PER_WIDE_INT'
8233      bits but small enough to fit within twice that number of bits (GCC
8234      does not provide a mechanism to represent even larger constants).
8235      In the latter case, M will be `VOIDmode'.
8237      If M is `VOIDmode', the bits of the value are stored in I0 and I1.
8238      I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and
8239      I1 with `CONST_DOUBLE_HIGH'.
8241      If the constant is floating point (regardless of its precision),
8242      then the number of integers used to store the value depends on the
8243      size of `REAL_VALUE_TYPE' (*note Floating Point::).  The integers
8244      represent a floating point number, but not precisely in the target
8245      machine's or host machine's floating point format.  To convert
8246      them to the precise bit pattern used by the target machine, use
8247      the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
8248      Output::).
8250 `(const_fixed:M ...)'
8251      Represents a fixed-point constant of mode M.  The operand is a
8252      data structure of type `struct fixed_value' and is accessed with
8253      the macro `CONST_FIXED_VALUE'.  The high part of data is accessed
8254      with `CONST_FIXED_VALUE_HIGH'; the low part is accessed with
8255      `CONST_FIXED_VALUE_LOW'.
8257 `(const_vector:M [X0 X1 ...])'
8258      Represents a vector constant.  The square brackets stand for the
8259      vector containing the constant elements.  X0, X1 and so on are the
8260      `const_int', `const_double' or `const_fixed' elements.
8262      The number of units in a `const_vector' is obtained with the macro
8263      `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'.
8265      Individual elements in a vector constant are accessed with the
8266      macro `CONST_VECTOR_ELT' as in `CONST_VECTOR_ELT (V, N)' where V
8267      is the vector constant and N is the element desired.
8269 `(const_string STR)'
8270      Represents a constant string with value STR.  Currently this is
8271      used only for insn attributes (*note Insn Attributes::) since
8272      constant strings in C are placed in memory.
8274 `(symbol_ref:MODE SYMBOL)'
8275      Represents the value of an assembler label for data.  SYMBOL is a
8276      string that describes the name of the assembler label.  If it
8277      starts with a `*', the label is the rest of SYMBOL not including
8278      the `*'.  Otherwise, the label is SYMBOL, usually prefixed with
8279      `_'.
8281      The `symbol_ref' contains a mode, which is usually `Pmode'.
8282      Usually that is the only mode for which a symbol is directly valid.
8284 `(label_ref:MODE LABEL)'
8285      Represents the value of an assembler label for code.  It contains
8286      one operand, an expression, which must be a `code_label' or a
8287      `note' of type `NOTE_INSN_DELETED_LABEL' that appears in the
8288      instruction sequence to identify the place where the label should
8289      go.
8291      The reason for using a distinct expression type for code label
8292      references is so that jump optimization can distinguish them.
8294      The `label_ref' contains a mode, which is usually `Pmode'.
8295      Usually that is the only mode for which a label is directly valid.
8297 `(const:M EXP)'
8298      Represents a constant that is the result of an assembly-time
8299      arithmetic computation.  The operand, EXP, is an expression that
8300      contains only constants (`const_int', `symbol_ref' and `label_ref'
8301      expressions) combined with `plus' and `minus'.  However, not all
8302      combinations are valid, since the assembler cannot do arbitrary
8303      arithmetic on relocatable symbols.
8305      M should be `Pmode'.
8307 `(high:M EXP)'
8308      Represents the high-order bits of EXP, usually a `symbol_ref'.
8309      The number of bits is machine-dependent and is normally the number
8310      of bits specified in an instruction that initializes the high
8311      order bits of a register.  It is used with `lo_sum' to represent
8312      the typical two-instruction sequence used in RISC machines to
8313      reference a global memory location.
8315      M should be `Pmode'.
8317  The macro `CONST0_RTX (MODE)' refers to an expression with value 0 in
8318 mode MODE.  If mode MODE is of mode class `MODE_INT', it returns
8319 `const0_rtx'.  If mode MODE is of mode class `MODE_FLOAT', it returns a
8320 `CONST_DOUBLE' expression in mode MODE.  Otherwise, it returns a
8321 `CONST_VECTOR' expression in mode MODE.  Similarly, the macro
8322 `CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE
8323 and similarly for `CONST2_RTX'.  The `CONST1_RTX' and `CONST2_RTX'
8324 macros are undefined for vector modes.
8326 \x1f
8327 File: gccint.info,  Node: Regs and Memory,  Next: Arithmetic,  Prev: Constants,  Up: RTL
8329 10.8 Registers and Memory
8330 =========================
8332 Here are the RTL expression types for describing access to machine
8333 registers and to main memory.
8335 `(reg:M N)'
8336      For small values of the integer N (those that are less than
8337      `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
8338      register number N: a "hard register".  For larger values of N, it
8339      stands for a temporary value or "pseudo register".  The compiler's
8340      strategy is to generate code assuming an unlimited number of such
8341      pseudo registers, and later convert them into hard registers or
8342      into memory references.
8344      M is the machine mode of the reference.  It is necessary because
8345      machines can generally refer to each register in more than one
8346      mode.  For example, a register may contain a full word but there
8347      may be instructions to refer to it as a half word or as a single
8348      byte, as well as instructions to refer to it as a floating point
8349      number of various precisions.
8351      Even for a register that the machine can access in only one mode,
8352      the mode must always be specified.
8354      The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
8355      description, since the number of hard registers on the machine is
8356      an invariant characteristic of the machine.  Note, however, that
8357      not all of the machine registers must be general registers.  All
8358      the machine registers that can be used for storage of data are
8359      given hard register numbers, even those that can be used only in
8360      certain instructions or can hold only certain types of data.
8362      A hard register may be accessed in various modes throughout one
8363      function, but each pseudo register is given a natural mode and is
8364      accessed only in that mode.  When it is necessary to describe an
8365      access to a pseudo register using a nonnatural mode, a `subreg'
8366      expression is used.
8368      A `reg' expression with a machine mode that specifies more than
8369      one word of data may actually stand for several consecutive
8370      registers.  If in addition the register number specifies a
8371      hardware register, then it actually represents several consecutive
8372      hardware registers starting with the specified one.
8374      Each pseudo register number used in a function's RTL code is
8375      represented by a unique `reg' expression.
8377      Some pseudo register numbers, those within the range of
8378      `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear
8379      during the RTL generation phase and are eliminated before the
8380      optimization phases.  These represent locations in the stack frame
8381      that cannot be determined until RTL generation for the function
8382      has been completed.  The following virtual register numbers are
8383      defined:
8385     `VIRTUAL_INCOMING_ARGS_REGNUM'
8386           This points to the first word of the incoming arguments
8387           passed on the stack.  Normally these arguments are placed
8388           there by the caller, but the callee may have pushed some
8389           arguments that were previously passed in registers.
8391           When RTL generation is complete, this virtual register is
8392           replaced by the sum of the register given by
8393           `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'.
8395     `VIRTUAL_STACK_VARS_REGNUM'
8396           If `FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this
8397           points to immediately above the first variable on the stack.
8398           Otherwise, it points to the first variable on the stack.
8400           `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
8401           register given by `FRAME_POINTER_REGNUM' and the value
8402           `STARTING_FRAME_OFFSET'.
8404     `VIRTUAL_STACK_DYNAMIC_REGNUM'
8405           This points to the location of dynamically allocated memory
8406           on the stack immediately after the stack pointer has been
8407           adjusted by the amount of memory desired.
8409           This virtual register is replaced by the sum of the register
8410           given by `STACK_POINTER_REGNUM' and the value
8411           `STACK_DYNAMIC_OFFSET'.
8413     `VIRTUAL_OUTGOING_ARGS_REGNUM'
8414           This points to the location in the stack at which outgoing
8415           arguments should be written when the stack is pre-pushed
8416           (arguments pushed using push insns should always use
8417           `STACK_POINTER_REGNUM').
8419           This virtual register is replaced by the sum of the register
8420           given by `STACK_POINTER_REGNUM' and the value
8421           `STACK_POINTER_OFFSET'.
8423 `(subreg:M1 REG:M2 BYTENUM)'
8424      `subreg' expressions are used to refer to a register in a machine
8425      mode other than its natural one, or to refer to one register of a
8426      multi-part `reg' that actually refers to several registers.
8428      Each pseudo register has a natural mode.  If it is necessary to
8429      operate on it in a different mode, the register must be enclosed
8430      in a `subreg'.
8432      There are currently three supported types for the first operand of
8433      a `subreg':
8434         * pseudo registers This is the most common case.  Most
8435           `subreg's have pseudo `reg's as their first operand.
8437         * mem `subreg's of `mem' were common in earlier versions of GCC
8438           and are still supported.  During the reload pass these are
8439           replaced by plain `mem's.  On machines that do not do
8440           instruction scheduling, use of `subreg's of `mem' are still
8441           used, but this is no longer recommended.  Such `subreg's are
8442           considered to be `register_operand's rather than
8443           `memory_operand's before and during reload.  Because of this,
8444           the scheduling passes cannot properly schedule instructions
8445           with `subreg's of `mem', so for machines that do scheduling,
8446           `subreg's of `mem' should never be used.  To support this,
8447           the combine and recog passes have explicit code to inhibit
8448           the creation of `subreg's of `mem' when `INSN_SCHEDULING' is
8449           defined.
8451           The use of `subreg's of `mem' after the reload pass is an area
8452           that is not well understood and should be avoided.  There is
8453           still some code in the compiler to support this, but this
8454           code has possibly rotted.  This use of `subreg's is
8455           discouraged and will most likely not be supported in the
8456           future.
8458         * hard registers It is seldom necessary to wrap hard registers
8459           in `subreg's; such registers would normally reduce to a
8460           single `reg' rtx.  This use of `subreg's is discouraged and
8461           may not be supported in the future.
8464      `subreg's of `subreg's are not supported.  Using
8465      `simplify_gen_subreg' is the recommended way to avoid this problem.
8467      `subreg's come in two distinct flavors, each having its own usage
8468      and rules:
8470     Paradoxical subregs
8471           When M1 is strictly wider than M2, the `subreg' expression is
8472           called "paradoxical".  The canonical test for this class of
8473           `subreg' is:
8475                GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2)
8477           Paradoxical `subreg's can be used as both lvalues and rvalues.
8478           When used as an lvalue, the low-order bits of the source value
8479           are stored in REG and the high-order bits are discarded.
8480           When used as an rvalue, the low-order bits of the `subreg' are
8481           taken from REG while the high-order bits may or may not be
8482           defined.
8484           The high-order bits of rvalues are in the following
8485           circumstances:
8487              * `subreg's of `mem' When M2 is smaller than a word, the
8488                macro `LOAD_EXTEND_OP', can control how the high-order
8489                bits are defined.
8491              * `subreg' of `reg's The upper bits are defined when
8492                `SUBREG_PROMOTED_VAR_P' is true.
8493                `SUBREG_PROMOTED_UNSIGNED_P' describes what the upper
8494                bits hold.  Such subregs usually represent local
8495                variables, register variables and parameter pseudo
8496                variables that have been promoted to a wider mode.
8499           BYTENUM is always zero for a paradoxical `subreg', even on
8500           big-endian targets.
8502           For example, the paradoxical `subreg':
8504                (set (subreg:SI (reg:HI X) 0) Y)
8506           stores the lower 2 bytes of Y in X and discards the upper 2
8507           bytes.  A subsequent:
8509                (set Z (subreg:SI (reg:HI X) 0))
8511           would set the lower two bytes of Z to Y and set the upper two
8512           bytes to an unknown value assuming `SUBREG_PROMOTED_VAR_P' is
8513           false.
8515     Normal subregs
8516           When M1 is at least as narrow as M2 the `subreg' expression
8517           is called "normal".
8519           Normal `subreg's restrict consideration to certain bits of
8520           REG.  There are two cases.  If M1 is smaller than a word, the
8521           `subreg' refers to the least-significant part (or "lowpart")
8522           of one word of REG.  If M1 is word-sized or greater, the
8523           `subreg' refers to one or more complete words.
8525           When used as an lvalue, `subreg' is a word-based accessor.
8526           Storing to a `subreg' modifies all the words of REG that
8527           overlap the `subreg', but it leaves the other words of REG
8528           alone.
8530           When storing to a normal `subreg' that is smaller than a word,
8531           the other bits of the referenced word are usually left in an
8532           undefined state.  This laxity makes it easier to generate
8533           efficient code for such instructions.  To represent an
8534           instruction that preserves all the bits outside of those in
8535           the `subreg', use `strict_low_part' or `zero_extract' around
8536           the `subreg'.
8538           BYTENUM must identify the offset of the first byte of the
8539           `subreg' from the start of REG, assuming that REG is laid out
8540           in memory order.  The memory order of bytes is defined by two
8541           target macros, `WORDS_BIG_ENDIAN' and `BYTES_BIG_ENDIAN':
8543              * `WORDS_BIG_ENDIAN', if set to 1, says that byte number
8544                zero is part of the most significant word; otherwise, it
8545                is part of the least significant word.
8547              * `BYTES_BIG_ENDIAN', if set to 1, says that byte number
8548                zero is the most significant byte within a word;
8549                otherwise, it is the least significant byte within a
8550                word.
8552           On a few targets, `FLOAT_WORDS_BIG_ENDIAN' disagrees with
8553           `WORDS_BIG_ENDIAN'.  However, most parts of the compiler treat
8554           floating point values as if they had the same endianness as
8555           integer values.  This works because they handle them solely
8556           as a collection of integer values, with no particular
8557           numerical value.  Only real.c and the runtime libraries care
8558           about `FLOAT_WORDS_BIG_ENDIAN'.
8560           Thus,
8562                (subreg:HI (reg:SI X) 2)
8564           on a `BYTES_BIG_ENDIAN', `UNITS_PER_WORD == 4' target is the
8565           same as
8567                (subreg:HI (reg:SI X) 0)
8569           on a little-endian, `UNITS_PER_WORD == 4' target.  Both
8570           `subreg's access the lower two bytes of register X.
8573      A `MODE_PARTIAL_INT' mode behaves as if it were as wide as the
8574      corresponding `MODE_INT' mode, except that it has an unknown
8575      number of undefined bits.  For example:
8577           (subreg:PSI (reg:SI 0) 0)
8579      accesses the whole of `(reg:SI 0)', but the exact relationship
8580      between the `PSImode' value and the `SImode' value is not defined.
8581      If we assume `UNITS_PER_WORD <= 4', then the following two
8582      `subreg's:
8584           (subreg:PSI (reg:DI 0) 0)
8585           (subreg:PSI (reg:DI 0) 4)
8587      represent independent 4-byte accesses to the two halves of
8588      `(reg:DI 0)'.  Both `subreg's have an unknown number of undefined
8589      bits.
8591      If `UNITS_PER_WORD <= 2' then these two `subreg's:
8593           (subreg:HI (reg:PSI 0) 0)
8594           (subreg:HI (reg:PSI 0) 2)
8596      represent independent 2-byte accesses that together span the whole
8597      of `(reg:PSI 0)'.  Storing to the first `subreg' does not affect
8598      the value of the second, and vice versa.  `(reg:PSI 0)' has an
8599      unknown number of undefined bits, so the assignment:
8601           (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
8603      does not guarantee that `(subreg:HI (reg:PSI 0) 0)' has the value
8604      `(reg:HI 4)'.
8606      The rules above apply to both pseudo REGs and hard REGs.  If the
8607      semantics are not correct for particular combinations of M1, M2
8608      and hard REG, the target-specific code must ensure that those
8609      combinations are never used.  For example:
8611           CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS)
8613      must be true for every class CLASS that includes REG.
8615      The first operand of a `subreg' expression is customarily accessed
8616      with the `SUBREG_REG' macro and the second operand is customarily
8617      accessed with the `SUBREG_BYTE' macro.
8619      It has been several years since a platform in which
8620      `BYTES_BIG_ENDIAN' not equal to `WORDS_BIG_ENDIAN' has been
8621      tested.  Anyone wishing to support such a platform in the future
8622      may be confronted with code rot.
8624 `(scratch:M)'
8625      This represents a scratch register that will be required for the
8626      execution of a single instruction and not used subsequently.  It is
8627      converted into a `reg' by either the local register allocator or
8628      the reload pass.
8630      `scratch' is usually present inside a `clobber' operation (*note
8631      Side Effects::).
8633 `(cc0)'
8634      This refers to the machine's condition code register.  It has no
8635      operands and may not have a machine mode.  There are two ways to
8636      use it:
8638         * To stand for a complete set of condition code flags.  This is
8639           best on most machines, where each comparison sets the entire
8640           series of flags.
8642           With this technique, `(cc0)' may be validly used in only two
8643           contexts: as the destination of an assignment (in test and
8644           compare instructions) and in comparison operators comparing
8645           against zero (`const_int' with value zero; that is to say,
8646           `const0_rtx').
8648         * To stand for a single flag that is the result of a single
8649           condition.  This is useful on machines that have only a
8650           single flag bit, and in which comparison instructions must
8651           specify the condition to test.
8653           With this technique, `(cc0)' may be validly used in only two
8654           contexts: as the destination of an assignment (in test and
8655           compare instructions) where the source is a comparison
8656           operator, and as the first operand of `if_then_else' (in a
8657           conditional branch).
8659      There is only one expression object of code `cc0'; it is the value
8660      of the variable `cc0_rtx'.  Any attempt to create an expression of
8661      code `cc0' will return `cc0_rtx'.
8663      Instructions can set the condition code implicitly.  On many
8664      machines, nearly all instructions set the condition code based on
8665      the value that they compute or store.  It is not necessary to
8666      record these actions explicitly in the RTL because the machine
8667      description includes a prescription for recognizing the
8668      instructions that do so (by means of the macro
8669      `NOTICE_UPDATE_CC').  *Note Condition Code::.  Only instructions
8670      whose sole purpose is to set the condition code, and instructions
8671      that use the condition code, need mention `(cc0)'.
8673      On some machines, the condition code register is given a register
8674      number and a `reg' is used instead of `(cc0)'.  This is usually the
8675      preferable approach if only a small subset of instructions modify
8676      the condition code.  Other machines store condition codes in
8677      general registers; in such cases a pseudo register should be used.
8679      Some machines, such as the SPARC and RS/6000, have two sets of
8680      arithmetic instructions, one that sets and one that does not set
8681      the condition code.  This is best handled by normally generating
8682      the instruction that does not set the condition code, and making a
8683      pattern that both performs the arithmetic and sets the condition
8684      code register (which would not be `(cc0)' in this case).  For
8685      examples, search for `addcc' and `andcc' in `sparc.md'.
8687 `(pc)'
8688      This represents the machine's program counter.  It has no operands
8689      and may not have a machine mode.  `(pc)' may be validly used only
8690      in certain specific contexts in jump instructions.
8692      There is only one expression object of code `pc'; it is the value
8693      of the variable `pc_rtx'.  Any attempt to create an expression of
8694      code `pc' will return `pc_rtx'.
8696      All instructions that do not jump alter the program counter
8697      implicitly by incrementing it, but there is no need to mention
8698      this in the RTL.
8700 `(mem:M ADDR ALIAS)'
8701      This RTX represents a reference to main memory at an address
8702      represented by the expression ADDR.  M specifies how large a unit
8703      of memory is accessed.  ALIAS specifies an alias set for the
8704      reference.  In general two items are in different alias sets if
8705      they cannot reference the same memory address.
8707      The construct `(mem:BLK (scratch))' is considered to alias all
8708      other memories.  Thus it may be used as a memory barrier in
8709      epilogue stack deallocation patterns.
8711 `(concatM RTX RTX)'
8712      This RTX represents the concatenation of two other RTXs.  This is
8713      used for complex values.  It should only appear in the RTL
8714      attached to declarations and during RTL generation.  It should not
8715      appear in the ordinary insn chain.
8717 `(concatnM [RTX ...])'
8718      This RTX represents the concatenation of all the RTX to make a
8719      single value.  Like `concat', this should only appear in
8720      declarations, and not in the insn chain.
8722 \x1f
8723 File: gccint.info,  Node: Arithmetic,  Next: Comparisons,  Prev: Regs and Memory,  Up: RTL
8725 10.9 RTL Expressions for Arithmetic
8726 ===================================
8728 Unless otherwise specified, all the operands of arithmetic expressions
8729 must be valid for mode M.  An operand is valid for mode M if it has
8730 mode M, or if it is a `const_int' or `const_double' and M is a mode of
8731 class `MODE_INT'.
8733  For commutative binary operations, constants should be placed in the
8734 second operand.
8736 `(plus:M X Y)'
8737 `(ss_plus:M X Y)'
8738 `(us_plus:M X Y)'
8739      These three expressions all represent the sum of the values
8740      represented by X and Y carried out in machine mode M.  They differ
8741      in their behavior on overflow of integer modes.  `plus' wraps
8742      round modulo the width of M; `ss_plus' saturates at the maximum
8743      signed value representable in M; `us_plus' saturates at the
8744      maximum unsigned value.
8746 `(lo_sum:M X Y)'
8747      This expression represents the sum of X and the low-order bits of
8748      Y.  It is used with `high' (*note Constants::) to represent the
8749      typical two-instruction sequence used in RISC machines to
8750      reference a global memory location.
8752      The number of low order bits is machine-dependent but is normally
8753      the number of bits in a `Pmode' item minus the number of bits set
8754      by `high'.
8756      M should be `Pmode'.
8758 `(minus:M X Y)'
8759 `(ss_minus:M X Y)'
8760 `(us_minus:M X Y)'
8761      These three expressions represent the result of subtracting Y from
8762      X, carried out in mode M.  Behavior on overflow is the same as for
8763      the three variants of `plus' (see above).
8765 `(compare:M X Y)'
8766      Represents the result of subtracting Y from X for purposes of
8767      comparison.  The result is computed without overflow, as if with
8768      infinite precision.
8770      Of course, machines can't really subtract with infinite precision.
8771      However, they can pretend to do so when only the sign of the
8772      result will be used, which is the case when the result is stored
8773      in the condition code.  And that is the _only_ way this kind of
8774      expression may validly be used: as a value to be stored in the
8775      condition codes, either `(cc0)' or a register.  *Note
8776      Comparisons::.
8778      The mode M is not related to the modes of X and Y, but instead is
8779      the mode of the condition code value.  If `(cc0)' is used, it is
8780      `VOIDmode'.  Otherwise it is some mode in class `MODE_CC', often
8781      `CCmode'.  *Note Condition Code::.  If M is `VOIDmode' or
8782      `CCmode', the operation returns sufficient information (in an
8783      unspecified format) so that any comparison operator can be applied
8784      to the result of the `COMPARE' operation.  For other modes in
8785      class `MODE_CC', the operation only returns a subset of this
8786      information.
8788      Normally, X and Y must have the same mode.  Otherwise, `compare'
8789      is valid only if the mode of X is in class `MODE_INT' and Y is a
8790      `const_int' or `const_double' with mode `VOIDmode'.  The mode of X
8791      determines what mode the comparison is to be done in; thus it must
8792      not be `VOIDmode'.
8794      If one of the operands is a constant, it should be placed in the
8795      second operand and the comparison code adjusted as appropriate.
8797      A `compare' specifying two `VOIDmode' constants is not valid since
8798      there is no way to know in what mode the comparison is to be
8799      performed; the comparison must either be folded during the
8800      compilation or the first operand must be loaded into a register
8801      while its mode is still known.
8803 `(neg:M X)'
8804 `(ss_neg:M X)'
8805 `(us_neg:M X)'
8806      These two expressions represent the negation (subtraction from
8807      zero) of the value represented by X, carried out in mode M.  They
8808      differ in the behavior on overflow of integer modes.  In the case
8809      of `neg', the negation of the operand may be a number not
8810      representable in mode M, in which case it is truncated to M.
8811      `ss_neg' and `us_neg' ensure that an out-of-bounds result
8812      saturates to the maximum or minimum signed or unsigned value.
8814 `(mult:M X Y)'
8815 `(ss_mult:M X Y)'
8816 `(us_mult:M X Y)'
8817      Represents the signed product of the values represented by X and Y
8818      carried out in machine mode M.  `ss_mult' and `us_mult' ensure
8819      that an out-of-bounds result saturates to the maximum or minimum
8820      signed or unsigned value.
8822      Some machines support a multiplication that generates a product
8823      wider than the operands.  Write the pattern for this as
8825           (mult:M (sign_extend:M X) (sign_extend:M Y))
8827      where M is wider than the modes of X and Y, which need not be the
8828      same.
8830      For unsigned widening multiplication, use the same idiom, but with
8831      `zero_extend' instead of `sign_extend'.
8833 `(div:M X Y)'
8834 `(ss_div:M X Y)'
8835      Represents the quotient in signed division of X by Y, carried out
8836      in machine mode M.  If M is a floating point mode, it represents
8837      the exact quotient; otherwise, the integerized quotient.  `ss_div'
8838      ensures that an out-of-bounds result saturates to the maximum or
8839      minimum signed value.
8841      Some machines have division instructions in which the operands and
8842      quotient widths are not all the same; you should represent such
8843      instructions using `truncate' and `sign_extend' as in,
8845           (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
8847 `(udiv:M X Y)'
8848 `(us_div:M X Y)'
8849      Like `div' but represents unsigned division.  `us_div' ensures
8850      that an out-of-bounds result saturates to the maximum or minimum
8851      unsigned value.
8853 `(mod:M X Y)'
8854 `(umod:M X Y)'
8855      Like `div' and `udiv' but represent the remainder instead of the
8856      quotient.
8858 `(smin:M X Y)'
8859 `(smax:M X Y)'
8860      Represents the smaller (for `smin') or larger (for `smax') of X
8861      and Y, interpreted as signed values in mode M.  When used with
8862      floating point, if both operands are zeros, or if either operand
8863      is `NaN', then it is unspecified which of the two operands is
8864      returned as the result.
8866 `(umin:M X Y)'
8867 `(umax:M X Y)'
8868      Like `smin' and `smax', but the values are interpreted as unsigned
8869      integers.
8871 `(not:M X)'
8872      Represents the bitwise complement of the value represented by X,
8873      carried out in mode M, which must be a fixed-point machine mode.
8875 `(and:M X Y)'
8876      Represents the bitwise logical-and of the values represented by X
8877      and Y, carried out in machine mode M, which must be a fixed-point
8878      machine mode.
8880 `(ior:M X Y)'
8881      Represents the bitwise inclusive-or of the values represented by X
8882      and Y, carried out in machine mode M, which must be a fixed-point
8883      mode.
8885 `(xor:M X Y)'
8886      Represents the bitwise exclusive-or of the values represented by X
8887      and Y, carried out in machine mode M, which must be a fixed-point
8888      mode.
8890 `(ashift:M X C)'
8891 `(ss_ashift:M X C)'
8892 `(us_ashift:M X C)'
8893      These three expressions represent the result of arithmetically
8894      shifting X left by C places.  They differ in their behavior on
8895      overflow of integer modes.  An `ashift' operation is a plain shift
8896      with no special behavior in case of a change in the sign bit;
8897      `ss_ashift' and `us_ashift' saturates to the minimum or maximum
8898      representable value if any of the bits shifted out differs from
8899      the final sign bit.
8901      X have mode M, a fixed-point machine mode.  C be a fixed-point
8902      mode or be a constant with mode `VOIDmode'; which mode is
8903      determined by the mode called for in the machine description entry
8904      for the left-shift instruction.  For example, on the VAX, the mode
8905      of C is `QImode' regardless of M.
8907 `(lshiftrt:M X C)'
8908 `(ashiftrt:M X C)'
8909      Like `ashift' but for right shift.  Unlike the case for left shift,
8910      these two operations are distinct.
8912 `(rotate:M X C)'
8913 `(rotatert:M X C)'
8914      Similar but represent left and right rotate.  If C is a constant,
8915      use `rotate'.
8917 `(abs:M X)'
8919 `(ss_abs:M X)'
8920      Represents the absolute value of X, computed in mode M.  `ss_abs'
8921      ensures that an out-of-bounds result saturates to the maximum
8922      signed value.
8924 `(sqrt:M X)'
8925      Represents the square root of X, computed in mode M.  Most often M
8926      will be a floating point mode.
8928 `(ffs:M X)'
8929      Represents one plus the index of the least significant 1-bit in X,
8930      represented as an integer of mode M.  (The value is zero if X is
8931      zero.)  The mode of X need not be M; depending on the target
8932      machine, various mode combinations may be valid.
8934 `(clz:M X)'
8935      Represents the number of leading 0-bits in X, represented as an
8936      integer of mode M, starting at the most significant bit position.
8937      If X is zero, the value is determined by
8938      `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Note that this is one
8939      of the few expressions that is not invariant under widening.  The
8940      mode of X will usually be an integer mode.
8942 `(ctz:M X)'
8943      Represents the number of trailing 0-bits in X, represented as an
8944      integer of mode M, starting at the least significant bit position.
8945      If X is zero, the value is determined by
8946      `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::).  Except for this case,
8947      `ctz(x)' is equivalent to `ffs(X) - 1'.  The mode of X will
8948      usually be an integer mode.
8950 `(popcount:M X)'
8951      Represents the number of 1-bits in X, represented as an integer of
8952      mode M.  The mode of X will usually be an integer mode.
8954 `(parity:M X)'
8955      Represents the number of 1-bits modulo 2 in X, represented as an
8956      integer of mode M.  The mode of X will usually be an integer mode.
8958 `(bswap:M X)'
8959      Represents the value X with the order of bytes reversed, carried
8960      out in mode M, which must be a fixed-point machine mode.
8962 \x1f
8963 File: gccint.info,  Node: Comparisons,  Next: Bit-Fields,  Prev: Arithmetic,  Up: RTL
8965 10.10 Comparison Operations
8966 ===========================
8968 Comparison operators test a relation on two operands and are considered
8969 to represent a machine-dependent nonzero value described by, but not
8970 necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::) if the relation
8971 holds, or zero if it does not, for comparison operators whose results
8972 have a `MODE_INT' mode, `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
8973 relation holds, or zero if it does not, for comparison operators that
8974 return floating-point values, and a vector of either
8975 `VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
8976 zeros if it does not, for comparison operators that return vector
8977 results.  The mode of the comparison operation is independent of the
8978 mode of the data being compared.  If the comparison operation is being
8979 tested (e.g., the first operand of an `if_then_else'), the mode must be
8980 `VOIDmode'.
8982  There are two ways that comparison operations may be used.  The
8983 comparison operators may be used to compare the condition codes `(cc0)'
8984 against zero, as in `(eq (cc0) (const_int 0))'.  Such a construct
8985 actually refers to the result of the preceding instruction in which the
8986 condition codes were set.  The instruction setting the condition code
8987 must be adjacent to the instruction using the condition code; only
8988 `note' insns may separate them.
8990  Alternatively, a comparison operation may directly compare two data
8991 objects.  The mode of the comparison is determined by the operands; they
8992 must both be valid for a common machine mode.  A comparison with both
8993 operands constant would be invalid as the machine mode could not be
8994 deduced from it, but such a comparison should never exist in RTL due to
8995 constant folding.
8997  In the example above, if `(cc0)' were last set to `(compare X Y)', the
8998 comparison operation is identical to `(eq X Y)'.  Usually only one style
8999 of comparisons is supported on a particular machine, but the combine
9000 pass will try to merge the operations to produce the `eq' shown in case
9001 it exists in the context of the particular insn involved.
9003  Inequality comparisons come in two flavors, signed and unsigned.  Thus,
9004 there are distinct expression codes `gt' and `gtu' for signed and
9005 unsigned greater-than.  These can produce different results for the same
9006 pair of integer values: for example, 1 is signed greater-than -1 but not
9007 unsigned greater-than, because -1 when regarded as unsigned is actually
9008 `0xffffffff' which is greater than 1.
9010  The signed comparisons are also used for floating point values.
9011 Floating point comparisons are distinguished by the machine modes of
9012 the operands.
9014 `(eq:M X Y)'
9015      `STORE_FLAG_VALUE' if the values represented by X and Y are equal,
9016      otherwise 0.
9018 `(ne:M X Y)'
9019      `STORE_FLAG_VALUE' if the values represented by X and Y are not
9020      equal, otherwise 0.
9022 `(gt:M X Y)'
9023      `STORE_FLAG_VALUE' if the X is greater than Y.  If they are
9024      fixed-point, the comparison is done in a signed sense.
9026 `(gtu:M X Y)'
9027      Like `gt' but does unsigned comparison, on fixed-point numbers
9028      only.
9030 `(lt:M X Y)'
9031 `(ltu:M X Y)'
9032      Like `gt' and `gtu' but test for "less than".
9034 `(ge:M X Y)'
9035 `(geu:M X Y)'
9036      Like `gt' and `gtu' but test for "greater than or equal".
9038 `(le:M X Y)'
9039 `(leu:M X Y)'
9040      Like `gt' and `gtu' but test for "less than or equal".
9042 `(if_then_else COND THEN ELSE)'
9043      This is not a comparison operation but is listed here because it is
9044      always used in conjunction with a comparison operation.  To be
9045      precise, COND is a comparison expression.  This expression
9046      represents a choice, according to COND, between the value
9047      represented by THEN and the one represented by ELSE.
9049      On most machines, `if_then_else' expressions are valid only to
9050      express conditional jumps.
9052 `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
9053      Similar to `if_then_else', but more general.  Each of TEST1,
9054      TEST2, ... is performed in turn.  The result of this expression is
9055      the VALUE corresponding to the first nonzero test, or DEFAULT if
9056      none of the tests are nonzero expressions.
9058      This is currently not valid for instruction patterns and is
9059      supported only for insn attributes.  *Note Insn Attributes::.
9061 \x1f
9062 File: gccint.info,  Node: Bit-Fields,  Next: Vector Operations,  Prev: Comparisons,  Up: RTL
9064 10.11 Bit-Fields
9065 ================
9067 Special expression codes exist to represent bit-field instructions.
9069 `(sign_extract:M LOC SIZE POS)'
9070      This represents a reference to a sign-extended bit-field contained
9071      or starting in LOC (a memory or register reference).  The bit-field
9072      is SIZE bits wide and starts at bit POS.  The compilation option
9073      `BITS_BIG_ENDIAN' says which end of the memory unit POS counts
9074      from.
9076      If LOC is in memory, its mode must be a single-byte integer mode.
9077      If LOC is in a register, the mode to use is specified by the
9078      operand of the `insv' or `extv' pattern (*note Standard Names::)
9079      and is usually a full-word integer mode, which is the default if
9080      none is specified.
9082      The mode of POS is machine-specific and is also specified in the
9083      `insv' or `extv' pattern.
9085      The mode M is the same as the mode that would be used for LOC if
9086      it were a register.
9088      A `sign_extract' can not appear as an lvalue, or part thereof, in
9089      RTL.
9091 `(zero_extract:M LOC SIZE POS)'
9092      Like `sign_extract' but refers to an unsigned or zero-extended
9093      bit-field.  The same sequence of bits are extracted, but they are
9094      filled to an entire word with zeros instead of by sign-extension.
9096      Unlike `sign_extract', this type of expressions can be lvalues in
9097      RTL; they may appear on the left side of an assignment, indicating
9098      insertion of a value into the specified bit-field.
9100 \x1f
9101 File: gccint.info,  Node: Vector Operations,  Next: Conversions,  Prev: Bit-Fields,  Up: RTL
9103 10.12 Vector Operations
9104 =======================
9106 All normal RTL expressions can be used with vector modes; they are
9107 interpreted as operating on each part of the vector independently.
9108 Additionally, there are a few new expressions to describe specific
9109 vector operations.
9111 `(vec_merge:M VEC1 VEC2 ITEMS)'
9112      This describes a merge operation between two vectors.  The result
9113      is a vector of mode M; its elements are selected from either VEC1
9114      or VEC2.  Which elements are selected is described by ITEMS, which
9115      is a bit mask represented by a `const_int'; a zero bit indicates
9116      the corresponding element in the result vector is taken from VEC2
9117      while a set bit indicates it is taken from VEC1.
9119 `(vec_select:M VEC1 SELECTION)'
9120      This describes an operation that selects parts of a vector.  VEC1
9121      is the source vector, and SELECTION is a `parallel' that contains a
9122      `const_int' for each of the subparts of the result vector, giving
9123      the number of the source subpart that should be stored into it.
9124      The result mode M is either the submode for a single element of
9125      VEC1 (if only one subpart is selected), or another vector mode
9126      with that element submode (if multiple subparts are selected).
9128 `(vec_concat:M VEC1 VEC2)'
9129      Describes a vector concat operation.  The result is a
9130      concatenation of the vectors VEC1 and VEC2; its length is the sum
9131      of the lengths of the two inputs.
9133 `(vec_duplicate:M VEC)'
9134      This operation converts a small vector into a larger one by
9135      duplicating the input values.  The output vector mode must have
9136      the same submodes as the input vector mode, and the number of
9137      output parts must be an integer multiple of the number of input
9138      parts.
9141 \x1f
9142 File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL
9144 10.13 Conversions
9145 =================
9147 All conversions between machine modes must be represented by explicit
9148 conversion operations.  For example, an expression which is the sum of
9149 a byte and a full word cannot be written as `(plus:SI (reg:QI 34)
9150 (reg:SI 80))' because the `plus' operation requires two operands of the
9151 same machine mode.  Therefore, the byte-sized operand is enclosed in a
9152 conversion operation, as in
9154      (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
9156  The conversion operation is not a mere placeholder, because there may
9157 be more than one way of converting from a given starting mode to the
9158 desired final mode.  The conversion operation code says how to do it.
9160  For all conversion operations, X must not be `VOIDmode' because the
9161 mode in which to do the conversion would not be known.  The conversion
9162 must either be done at compile-time or X must be placed into a register.
9164 `(sign_extend:M X)'
9165      Represents the result of sign-extending the value X to machine
9166      mode M.  M must be a fixed-point mode and X a fixed-point value of
9167      a mode narrower than M.
9169 `(zero_extend:M X)'
9170      Represents the result of zero-extending the value X to machine
9171      mode M.  M must be a fixed-point mode and X a fixed-point value of
9172      a mode narrower than M.
9174 `(float_extend:M X)'
9175      Represents the result of extending the value X to machine mode M.
9176      M must be a floating point mode and X a floating point value of a
9177      mode narrower than M.
9179 `(truncate:M X)'
9180      Represents the result of truncating the value X to machine mode M.
9181      M must be a fixed-point mode and X a fixed-point value of a mode
9182      wider than M.
9184 `(ss_truncate:M X)'
9185      Represents the result of truncating the value X to machine mode M,
9186      using signed saturation in the case of overflow.  Both M and the
9187      mode of X must be fixed-point modes.
9189 `(us_truncate:M X)'
9190      Represents the result of truncating the value X to machine mode M,
9191      using unsigned saturation in the case of overflow.  Both M and the
9192      mode of X must be fixed-point modes.
9194 `(float_truncate:M X)'
9195      Represents the result of truncating the value X to machine mode M.
9196      M must be a floating point mode and X a floating point value of a
9197      mode wider than M.
9199 `(float:M X)'
9200      Represents the result of converting fixed point value X, regarded
9201      as signed, to floating point mode M.
9203 `(unsigned_float:M X)'
9204      Represents the result of converting fixed point value X, regarded
9205      as unsigned, to floating point mode M.
9207 `(fix:M X)'
9208      When M is a floating-point mode, represents the result of
9209      converting floating point value X (valid for mode M) to an
9210      integer, still represented in floating point mode M, by rounding
9211      towards zero.
9213      When M is a fixed-point mode, represents the result of converting
9214      floating point value X to mode M, regarded as signed.  How
9215      rounding is done is not specified, so this operation may be used
9216      validly in compiling C code only for integer-valued operands.
9218 `(unsigned_fix:M X)'
9219      Represents the result of converting floating point value X to
9220      fixed point mode M, regarded as unsigned.  How rounding is done is
9221      not specified.
9223 `(fract_convert:M X)'
9224      Represents the result of converting fixed-point value X to
9225      fixed-point mode M, signed integer value X to fixed-point mode M,
9226      floating-point value X to fixed-point mode M, fixed-point value X
9227      to integer mode M regarded as signed, or fixed-point value X to
9228      floating-point mode M.  When overflows or underflows happen, the
9229      results are undefined.
9231 `(sat_fract:M X)'
9232      Represents the result of converting fixed-point value X to
9233      fixed-point mode M, signed integer value X to fixed-point mode M,
9234      or floating-point value X to fixed-point mode M.  When overflows
9235      or underflows happen, the results are saturated to the maximum or
9236      the minimum.
9238 `(unsigned_fract_convert:M X)'
9239      Represents the result of converting fixed-point value X to integer
9240      mode M regarded as unsigned, or unsigned integer value X to
9241      fixed-point mode M.  When overflows or underflows happen, the
9242      results are undefined.
9244 `(unsigned_sat_fract:M X)'
9245      Represents the result of converting unsigned integer value X to
9246      fixed-point mode M.  When overflows or underflows happen, the
9247      results are saturated to the maximum or the minimum.
9249 \x1f
9250 File: gccint.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL
9252 10.14 Declarations
9253 ==================
9255 Declaration expression codes do not represent arithmetic operations but
9256 rather state assertions about their operands.
9258 `(strict_low_part (subreg:M (reg:N R) 0))'
9259      This expression code is used in only one context: as the
9260      destination operand of a `set' expression.  In addition, the
9261      operand of this expression must be a non-paradoxical `subreg'
9262      expression.
9264      The presence of `strict_low_part' says that the part of the
9265      register which is meaningful in mode N, but is not part of mode M,
9266      is not to be altered.  Normally, an assignment to such a subreg is
9267      allowed to have undefined effects on the rest of the register when
9268      M is less than a word.
9270 \x1f
9271 File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
9273 10.15 Side Effect Expressions
9274 =============================
9276 The expression codes described so far represent values, not actions.
9277 But machine instructions never produce values; they are meaningful only
9278 for their side effects on the state of the machine.  Special expression
9279 codes are used to represent side effects.
9281  The body of an instruction is always one of these side effect codes;
9282 the codes described above, which represent values, appear only as the
9283 operands of these.
9285 `(set LVAL X)'
9286      Represents the action of storing the value of X into the place
9287      represented by LVAL.  LVAL must be an expression representing a
9288      place that can be stored in: `reg' (or `subreg', `strict_low_part'
9289      or `zero_extract'), `mem', `pc', `parallel', or `cc0'.
9291      If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then
9292      X must be valid for that mode.
9294      If LVAL is a `reg' whose machine mode is less than the full width
9295      of the register, then it means that the part of the register
9296      specified by the machine mode is given the specified value and the
9297      rest of the register receives an undefined value.  Likewise, if
9298      LVAL is a `subreg' whose machine mode is narrower than the mode of
9299      the register, the rest of the register can be changed in an
9300      undefined way.
9302      If LVAL is a `strict_low_part' of a subreg, then the part of the
9303      register specified by the machine mode of the `subreg' is given
9304      the value X and the rest of the register is not changed.
9306      If LVAL is a `zero_extract', then the referenced part of the
9307      bit-field (a memory or register reference) specified by the
9308      `zero_extract' is given the value X and the rest of the bit-field
9309      is not changed.  Note that `sign_extract' can not appear in LVAL.
9311      If LVAL is `(cc0)', it has no machine mode, and X may be either a
9312      `compare' expression or a value that may have any mode.  The
9313      latter case represents a "test" instruction.  The expression `(set
9314      (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare (reg:M N)
9315      (const_int 0)))'.  Use the former expression to save space during
9316      the compilation.
9318      If LVAL is a `parallel', it is used to represent the case of a
9319      function returning a structure in multiple registers.  Each element
9320      of the `parallel' is an `expr_list' whose first operand is a `reg'
9321      and whose second operand is a `const_int' representing the offset
9322      (in bytes) into the structure at which the data in that register
9323      corresponds.  The first element may be null to indicate that the
9324      structure is also passed partly in memory.
9326      If LVAL is `(pc)', we have a jump instruction, and the
9327      possibilities for X are very limited.  It may be a `label_ref'
9328      expression (unconditional jump).  It may be an `if_then_else'
9329      (conditional jump), in which case either the second or the third
9330      operand must be `(pc)' (for the case which does not jump) and the
9331      other of the two must be a `label_ref' (for the case which does
9332      jump).  X may also be a `mem' or `(plus:SI (pc) Y)', where Y may
9333      be a `reg' or a `mem'; these unusual patterns are used to
9334      represent jumps through branch tables.
9336      If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not
9337      be `VOIDmode' and the mode of X must be valid for the mode of LVAL.
9339      LVAL is customarily accessed with the `SET_DEST' macro and X with
9340      the `SET_SRC' macro.
9342 `(return)'
9343      As the sole expression in a pattern, represents a return from the
9344      current function, on machines where this can be done with one
9345      instruction, such as VAXen.  On machines where a multi-instruction
9346      "epilogue" must be executed in order to return from the function,
9347      returning is done by jumping to a label which precedes the
9348      epilogue, and the `return' expression code is never used.
9350      Inside an `if_then_else' expression, represents the value to be
9351      placed in `pc' to return to the caller.
9353      Note that an insn pattern of `(return)' is logically equivalent to
9354      `(set (pc) (return))', but the latter form is never used.
9356 `(call FUNCTION NARGS)'
9357      Represents a function call.  FUNCTION is a `mem' expression whose
9358      address is the address of the function to be called.  NARGS is an
9359      expression which can be used for two purposes: on some machines it
9360      represents the number of bytes of stack argument; on others, it
9361      represents the number of argument registers.
9363      Each machine has a standard machine mode which FUNCTION must have.
9364      The machine description defines macro `FUNCTION_MODE' to expand
9365      into the requisite mode name.  The purpose of this mode is to
9366      specify what kind of addressing is allowed, on machines where the
9367      allowed kinds of addressing depend on the machine mode being
9368      addressed.
9370 `(clobber X)'
9371      Represents the storing or possible storing of an unpredictable,
9372      undescribed value into X, which must be a `reg', `scratch',
9373      `parallel' or `mem' expression.
9375      One place this is used is in string instructions that store
9376      standard values into particular hard registers.  It may not be
9377      worth the trouble to describe the values that are stored, but it
9378      is essential to inform the compiler that the registers will be
9379      altered, lest it attempt to keep data in them across the string
9380      instruction.
9382      If X is `(mem:BLK (const_int 0))' or `(mem:BLK (scratch))', it
9383      means that all memory locations must be presumed clobbered.  If X
9384      is a `parallel', it has the same meaning as a `parallel' in a
9385      `set' expression.
9387      Note that the machine description classifies certain hard
9388      registers as "call-clobbered".  All function call instructions are
9389      assumed by default to clobber these registers, so there is no need
9390      to use `clobber' expressions to indicate this fact.  Also, each
9391      function call is assumed to have the potential to alter any memory
9392      location, unless the function is declared `const'.
9394      If the last group of expressions in a `parallel' are each a
9395      `clobber' expression whose arguments are `reg' or `match_scratch'
9396      (*note RTL Template::) expressions, the combiner phase can add the
9397      appropriate `clobber' expressions to an insn it has constructed
9398      when doing so will cause a pattern to be matched.
9400      This feature can be used, for example, on a machine that whose
9401      multiply and add instructions don't use an MQ register but which
9402      has an add-accumulate instruction that does clobber the MQ
9403      register.  Similarly, a combined instruction might require a
9404      temporary register while the constituent instructions might not.
9406      When a `clobber' expression for a register appears inside a
9407      `parallel' with other side effects, the register allocator
9408      guarantees that the register is unoccupied both before and after
9409      that insn if it is a hard register clobber.  For pseudo-register
9410      clobber, the register allocator and the reload pass do not assign
9411      the same hard register to the clobber and the input operands if
9412      there is an insn alternative containing the `&' constraint (*note
9413      Modifiers::) for the clobber and the hard register is in register
9414      classes of the clobber in the alternative.  You can clobber either
9415      a specific hard register, a pseudo register, or a `scratch'
9416      expression; in the latter two cases, GCC will allocate a hard
9417      register that is available there for use as a temporary.
9419      For instructions that require a temporary register, you should use
9420      `scratch' instead of a pseudo-register because this will allow the
9421      combiner phase to add the `clobber' when required.  You do this by
9422      coding (`clobber' (`match_scratch' ...)).  If you do clobber a
9423      pseudo register, use one which appears nowhere else--generate a
9424      new one each time.  Otherwise, you may confuse CSE.
9426      There is one other known use for clobbering a pseudo register in a
9427      `parallel': when one of the input operands of the insn is also
9428      clobbered by the insn.  In this case, using the same pseudo
9429      register in the clobber and elsewhere in the insn produces the
9430      expected results.
9432 `(use X)'
9433      Represents the use of the value of X.  It indicates that the value
9434      in X at this point in the program is needed, even though it may
9435      not be apparent why this is so.  Therefore, the compiler will not
9436      attempt to delete previous instructions whose only effect is to
9437      store a value in X.  X must be a `reg' expression.
9439      In some situations, it may be tempting to add a `use' of a
9440      register in a `parallel' to describe a situation where the value
9441      of a special register will modify the behavior of the instruction.
9442      A hypothetical example might be a pattern for an addition that can
9443      either wrap around or use saturating addition depending on the
9444      value of a special control register:
9446           (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
9447                                                  (reg:SI 4)] 0))
9448                      (use (reg:SI 1))])
9450      This will not work, several of the optimizers only look at
9451      expressions locally; it is very likely that if you have multiple
9452      insns with identical inputs to the `unspec', they will be
9453      optimized away even if register 1 changes in between.
9455      This means that `use' can _only_ be used to describe that the
9456      register is live.  You should think twice before adding `use'
9457      statements, more often you will want to use `unspec' instead.  The
9458      `use' RTX is most commonly useful to describe that a fixed
9459      register is implicitly used in an insn.  It is also safe to use in
9460      patterns where the compiler knows for other reasons that the result
9461      of the whole pattern is variable, such as `movmemM' or `call'
9462      patterns.
9464      During the reload phase, an insn that has a `use' as pattern can
9465      carry a reg_equal note.  These `use' insns will be deleted before
9466      the reload phase exits.
9468      During the delayed branch scheduling phase, X may be an insn.
9469      This indicates that X previously was located at this place in the
9470      code and its data dependencies need to be taken into account.
9471      These `use' insns will be deleted before the delayed branch
9472      scheduling phase exits.
9474 `(parallel [X0 X1 ...])'
9475      Represents several side effects performed in parallel.  The square
9476      brackets stand for a vector; the operand of `parallel' is a vector
9477      of expressions.  X0, X1 and so on are individual side effect
9478      expressions--expressions of code `set', `call', `return',
9479      `clobber' or `use'.
9481      "In parallel" means that first all the values used in the
9482      individual side-effects are computed, and second all the actual
9483      side-effects are performed.  For example,
9485           (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
9486                      (set (mem:SI (reg:SI 1)) (reg:SI 1))])
9488      says unambiguously that the values of hard register 1 and the
9489      memory location addressed by it are interchanged.  In both places
9490      where `(reg:SI 1)' appears as a memory address it refers to the
9491      value in register 1 _before_ the execution of the insn.
9493      It follows that it is _incorrect_ to use `parallel' and expect the
9494      result of one `set' to be available for the next one.  For
9495      example, people sometimes attempt to represent a jump-if-zero
9496      instruction this way:
9498           (parallel [(set (cc0) (reg:SI 34))
9499                      (set (pc) (if_then_else
9500                                   (eq (cc0) (const_int 0))
9501                                   (label_ref ...)
9502                                   (pc)))])
9504      But this is incorrect, because it says that the jump condition
9505      depends on the condition code value _before_ this instruction, not
9506      on the new value that is set by this instruction.
9508      Peephole optimization, which takes place together with final
9509      assembly code output, can produce insns whose patterns consist of
9510      a `parallel' whose elements are the operands needed to output the
9511      resulting assembler code--often `reg', `mem' or constant
9512      expressions.  This would not be well-formed RTL at any other stage
9513      in compilation, but it is ok then because no further optimization
9514      remains to be done.  However, the definition of the macro
9515      `NOTICE_UPDATE_CC', if any, must deal with such insns if you
9516      define any peephole optimizations.
9518 `(cond_exec [COND EXPR])'
9519      Represents a conditionally executed expression.  The EXPR is
9520      executed only if the COND is nonzero.  The COND expression must
9521      not have side-effects, but the EXPR may very well have
9522      side-effects.
9524 `(sequence [INSNS ...])'
9525      Represents a sequence of insns.  Each of the INSNS that appears in
9526      the vector is suitable for appearing in the chain of insns, so it
9527      must be an `insn', `jump_insn', `call_insn', `code_label',
9528      `barrier' or `note'.
9530      A `sequence' RTX is never placed in an actual insn during RTL
9531      generation.  It represents the sequence of insns that result from a
9532      `define_expand' _before_ those insns are passed to `emit_insn' to
9533      insert them in the chain of insns.  When actually inserted, the
9534      individual sub-insns are separated out and the `sequence' is
9535      forgotten.
9537      After delay-slot scheduling is completed, an insn and all the
9538      insns that reside in its delay slots are grouped together into a
9539      `sequence'.  The insn requiring the delay slot is the first insn
9540      in the vector; subsequent insns are to be placed in the delay slot.
9542      `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
9543      indicate that a branch insn should be used that will conditionally
9544      annul the effect of the insns in the delay slots.  In such a case,
9545      `INSN_FROM_TARGET_P' indicates that the insn is from the target of
9546      the branch and should be executed only if the branch is taken;
9547      otherwise the insn should be executed only if the branch is not
9548      taken.  *Note Delay Slots::.
9550  These expression codes appear in place of a side effect, as the body of
9551 an insn, though strictly speaking they do not always describe side
9552 effects as such:
9554 `(asm_input S)'
9555      Represents literal assembler code as described by the string S.
9557 `(unspec [OPERANDS ...] INDEX)'
9558 `(unspec_volatile [OPERANDS ...] INDEX)'
9559      Represents a machine-specific operation on OPERANDS.  INDEX
9560      selects between multiple machine-specific operations.
9561      `unspec_volatile' is used for volatile operations and operations
9562      that may trap; `unspec' is used for other operations.
9564      These codes may appear inside a `pattern' of an insn, inside a
9565      `parallel', or inside an expression.
9567 `(addr_vec:M [LR0 LR1 ...])'
9568      Represents a table of jump addresses.  The vector elements LR0,
9569      etc., are `label_ref' expressions.  The mode M specifies how much
9570      space is given to each address; normally M would be `Pmode'.
9572 `(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
9573      Represents a table of jump addresses expressed as offsets from
9574      BASE.  The vector elements LR0, etc., are `label_ref' expressions
9575      and so is BASE.  The mode M specifies how much space is given to
9576      each address-difference.  MIN and MAX are set up by branch
9577      shortening and hold a label with a minimum and a maximum address,
9578      respectively.  FLAGS indicates the relative position of BASE, MIN
9579      and MAX to the containing insn and of MIN and MAX to BASE.  See
9580      rtl.def for details.
9582 `(prefetch:M ADDR RW LOCALITY)'
9583      Represents prefetch of memory at address ADDR.  Operand RW is 1 if
9584      the prefetch is for data to be written, 0 otherwise; targets that
9585      do not support write prefetches should treat this as a normal
9586      prefetch.  Operand LOCALITY specifies the amount of temporal
9587      locality; 0 if there is none or 1, 2, or 3 for increasing levels
9588      of temporal locality; targets that do not support locality hints
9589      should ignore this.
9591      This insn is used to minimize cache-miss latency by moving data
9592      into a cache before it is accessed.  It should use only
9593      non-faulting data prefetch instructions.
9595 \x1f
9596 File: gccint.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL
9598 10.16 Embedded Side-Effects on Addresses
9599 ========================================
9601 Six special side-effect expression codes appear as memory addresses.
9603 `(pre_dec:M X)'
9604      Represents the side effect of decrementing X by a standard amount
9605      and represents also the value that X has after being decremented.
9606      X must be a `reg' or `mem', but most machines allow only a `reg'.
9607      M must be the machine mode for pointers on the machine in use.
9608      The amount X is decremented by is the length in bytes of the
9609      machine mode of the containing memory reference of which this
9610      expression serves as the address.  Here is an example of its use:
9612           (mem:DF (pre_dec:SI (reg:SI 39)))
9614      This says to decrement pseudo register 39 by the length of a
9615      `DFmode' value and use the result to address a `DFmode' value.
9617 `(pre_inc:M X)'
9618      Similar, but specifies incrementing X instead of decrementing it.
9620 `(post_dec:M X)'
9621      Represents the same side effect as `pre_dec' but a different
9622      value.  The value represented here is the value X has before being
9623      decremented.
9625 `(post_inc:M X)'
9626      Similar, but specifies incrementing X instead of decrementing it.
9628 `(post_modify:M X Y)'
9629      Represents the side effect of setting X to Y and represents X
9630      before X is modified.  X must be a `reg' or `mem', but most
9631      machines allow only a `reg'.  M must be the machine mode for
9632      pointers on the machine in use.
9634      The expression Y must be one of three forms: `(plus:M X Z)',
9635      `(minus:M X Z)', or `(plus:M X I)', where Z is an index register
9636      and I is a constant.
9638      Here is an example of its use:
9640           (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
9641                                                     (reg:SI 48))))
9643      This says to modify pseudo register 42 by adding the contents of
9644      pseudo register 48 to it, after the use of what ever 42 points to.
9646 `(pre_modify:M X EXPR)'
9647      Similar except side effects happen before the use.
9649  These embedded side effect expressions must be used with care.
9650 Instruction patterns may not use them.  Until the `flow' pass of the
9651 compiler, they may occur only to represent pushes onto the stack.  The
9652 `flow' pass finds cases where registers are incremented or decremented
9653 in one instruction and used as an address shortly before or after;
9654 these cases are then transformed to use pre- or post-increment or
9655 -decrement.
9657  If a register used as the operand of these expressions is used in
9658 another address in an insn, the original value of the register is used.
9659 Uses of the register outside of an address are not permitted within the
9660 same insn as a use in an embedded side effect expression because such
9661 insns behave differently on different machines and hence must be treated
9662 as ambiguous and disallowed.
9664  An instruction that can be represented with an embedded side effect
9665 could also be represented using `parallel' containing an additional
9666 `set' to describe how the address register is altered.  This is not
9667 done because machines that allow these operations at all typically
9668 allow them wherever a memory address is called for.  Describing them as
9669 additional parallel stores would require doubling the number of entries
9670 in the machine description.
9672 \x1f
9673 File: gccint.info,  Node: Assembler,  Next: Debug Information,  Prev: Incdec,  Up: RTL
9675 10.17 Assembler Instructions as Expressions
9676 ===========================================
9678 The RTX code `asm_operands' represents a value produced by a
9679 user-specified assembler instruction.  It is used to represent an `asm'
9680 statement with arguments.  An `asm' statement with a single output
9681 operand, like this:
9683      asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
9685 is represented using a single `asm_operands' RTX which represents the
9686 value that is stored in `outputvar':
9688      (set RTX-FOR-OUTPUTVAR
9689           (asm_operands "foo %1,%2,%0" "a" 0
9690                         [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
9691                         [(asm_input:M1 "g")
9692                          (asm_input:M2 "di")]))
9694 Here the operands of the `asm_operands' RTX are the assembler template
9695 string, the output-operand's constraint, the index-number of the output
9696 operand among the output operands specified, a vector of input operand
9697 RTX's, and a vector of input-operand modes and constraints.  The mode
9698 M1 is the mode of the sum `x+y'; M2 is that of `*z'.
9700  When an `asm' statement has multiple output values, its insn has
9701 several such `set' RTX's inside of a `parallel'.  Each `set' contains
9702 an `asm_operands'; all of these share the same assembler template and
9703 vectors, but each contains the constraint for the respective output
9704 operand.  They are also distinguished by the output-operand index
9705 number, which is 0, 1, ... for successive output operands.
9707 \x1f
9708 File: gccint.info,  Node: Debug Information,  Next: Insns,  Prev: Assembler,  Up: RTL
9710 10.18 Variable Location Debug Information in RTL
9711 ================================================
9713 Variable tracking relies on `MEM_EXPR' and `REG_EXPR' annotations to
9714 determine what user variables memory and register references refer to.
9716  Variable tracking at assignments uses these notes only when they refer
9717 to variables that live at fixed locations (e.g., addressable variables,
9718 global non-automatic variables).  For variables whose location may
9719 vary, it relies on the following types of notes.
9721 `(var_location:MODE VAR EXP STAT)'
9722      Binds variable `var', a tree, to value EXP, an RTL expression.  It
9723      appears only in `NOTE_INSN_VAR_LOCATION' and `DEBUG_INSN's, with
9724      slightly different meanings.  MODE, if present, represents the
9725      mode of EXP, which is useful if it is a modeless expression.  STAT
9726      is only meaningful in notes, indicating whether the variable is
9727      known to be initialized or uninitialized.
9729 `(debug_expr:MODE DECL)'
9730      Stands for the value bound to the `DEBUG_EXPR_DECL' DECL, that
9731      points back to it, within value expressions in `VAR_LOCATION'
9732      nodes.
9735 \x1f
9736 File: gccint.info,  Node: Insns,  Next: Calls,  Prev: Debug Information,  Up: RTL
9738 10.19 Insns
9739 ===========
9741 The RTL representation of the code for a function is a doubly-linked
9742 chain of objects called "insns".  Insns are expressions with special
9743 codes that are used for no other purpose.  Some insns are actual
9744 instructions; others represent dispatch tables for `switch' statements;
9745 others represent labels to jump to or various sorts of declarative
9746 information.
9748  In addition to its own specific data, each insn must have a unique
9749 id-number that distinguishes it from all other insns in the current
9750 function (after delayed branch scheduling, copies of an insn with the
9751 same id-number may be present in multiple places in a function, but
9752 these copies will always be identical and will only appear inside a
9753 `sequence'), and chain pointers to the preceding and following insns.
9754 These three fields occupy the same position in every insn, independent
9755 of the expression code of the insn.  They could be accessed with `XEXP'
9756 and `XINT', but instead three special macros are always used:
9758 `INSN_UID (I)'
9759      Accesses the unique id of insn I.
9761 `PREV_INSN (I)'
9762      Accesses the chain pointer to the insn preceding I.  If I is the
9763      first insn, this is a null pointer.
9765 `NEXT_INSN (I)'
9766      Accesses the chain pointer to the insn following I.  If I is the
9767      last insn, this is a null pointer.
9769  The first insn in the chain is obtained by calling `get_insns'; the
9770 last insn is the result of calling `get_last_insn'.  Within the chain
9771 delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must
9772 always correspond: if INSN is not the first insn,
9774      NEXT_INSN (PREV_INSN (INSN)) == INSN
9776 is always true and if INSN is not the last insn,
9778      PREV_INSN (NEXT_INSN (INSN)) == INSN
9780 is always true.
9782  After delay slot scheduling, some of the insns in the chain might be
9783 `sequence' expressions, which contain a vector of insns.  The value of
9784 `NEXT_INSN' in all but the last of these insns is the next insn in the
9785 vector; the value of `NEXT_INSN' of the last insn in the vector is the
9786 same as the value of `NEXT_INSN' for the `sequence' in which it is
9787 contained.  Similar rules apply for `PREV_INSN'.
9789  This means that the above invariants are not necessarily true for insns
9790 inside `sequence' expressions.  Specifically, if INSN is the first insn
9791 in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn containing
9792 the `sequence' expression, as is the value of `PREV_INSN (NEXT_INSN
9793 (INSN))' if INSN is the last insn in the `sequence' expression.  You
9794 can use these expressions to find the containing `sequence' expression.
9796  Every insn has one of the following expression codes:
9798 `insn'
9799      The expression code `insn' is used for instructions that do not
9800      jump and do not do function calls.  `sequence' expressions are
9801      always contained in insns with code `insn' even if one of those
9802      insns should jump or do function calls.
9804      Insns with code `insn' have four additional fields beyond the three
9805      mandatory ones listed above.  These four are described in a table
9806      below.
9808 `jump_insn'
9809      The expression code `jump_insn' is used for instructions that may
9810      jump (or, more generally, may contain `label_ref' expressions to
9811      which `pc' can be set in that instruction).  If there is an
9812      instruction to return from the current function, it is recorded as
9813      a `jump_insn'.
9815      `jump_insn' insns have the same extra fields as `insn' insns,
9816      accessed in the same way and in addition contain a field
9817      `JUMP_LABEL' which is defined once jump optimization has completed.
9819      For simple conditional and unconditional jumps, this field contains
9820      the `code_label' to which this insn will (possibly conditionally)
9821      branch.  In a more complex jump, `JUMP_LABEL' records one of the
9822      labels that the insn refers to; other jump target labels are
9823      recorded as `REG_LABEL_TARGET' notes.  The exception is `addr_vec'
9824      and `addr_diff_vec', where `JUMP_LABEL' is `NULL_RTX' and the only
9825      way to find the labels is to scan the entire body of the insn.
9827      Return insns count as jumps, but since they do not refer to any
9828      labels, their `JUMP_LABEL' is `NULL_RTX'.
9830 `call_insn'
9831      The expression code `call_insn' is used for instructions that may
9832      do function calls.  It is important to distinguish these
9833      instructions because they imply that certain registers and memory
9834      locations may be altered unpredictably.
9836      `call_insn' insns have the same extra fields as `insn' insns,
9837      accessed in the same way and in addition contain a field
9838      `CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
9839      `expr_list' expressions) containing `use' and `clobber'
9840      expressions that denote hard registers and `MEM's used or
9841      clobbered by the called function.
9843      A `MEM' generally points to a stack slots in which arguments passed
9844      to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
9845      Register Arguments.) are stored.  If the argument is caller-copied
9846      (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
9847      will be mentioned in `CLOBBER' and `USE' entries; if it's
9848      callee-copied, only a `USE' will appear, and the `MEM' may point
9849      to addresses that are not stack slots.
9851      `CLOBBER'ed registers in this list augment registers specified in
9852      `CALL_USED_REGISTERS' (*note Register Basics::).
9854 `code_label'
9855      A `code_label' insn represents a label that a jump insn can jump
9856      to.  It contains two special fields of data in addition to the
9857      three standard ones.  `CODE_LABEL_NUMBER' is used to hold the
9858      "label number", a number that identifies this label uniquely among
9859      all the labels in the compilation (not just in the current
9860      function).  Ultimately, the label is represented in the assembler
9861      output as an assembler label, usually of the form `LN' where N is
9862      the label number.
9864      When a `code_label' appears in an RTL expression, it normally
9865      appears within a `label_ref' which represents the address of the
9866      label, as a number.
9868      Besides as a `code_label', a label can also be represented as a
9869      `note' of type `NOTE_INSN_DELETED_LABEL'.
9871      The field `LABEL_NUSES' is only defined once the jump optimization
9872      phase is completed.  It contains the number of times this label is
9873      referenced in the current function.
9875      The field `LABEL_KIND' differentiates four different types of
9876      labels: `LABEL_NORMAL', `LABEL_STATIC_ENTRY',
9877      `LABEL_GLOBAL_ENTRY', and `LABEL_WEAK_ENTRY'.  The only labels
9878      that do not have type `LABEL_NORMAL' are "alternate entry points"
9879      to the current function.  These may be static (visible only in the
9880      containing translation unit), global (exposed to all translation
9881      units), or weak (global, but can be overridden by another symbol
9882      with the same name).
9884      Much of the compiler treats all four kinds of label identically.
9885      Some of it needs to know whether or not a label is an alternate
9886      entry point; for this purpose, the macro `LABEL_ALT_ENTRY_P' is
9887      provided.  It is equivalent to testing whether `LABEL_KIND (label)
9888      == LABEL_NORMAL'.  The only place that cares about the distinction
9889      between static, global, and weak alternate entry points, besides
9890      the front-end code that creates them, is the function
9891      `output_alternate_entry_point', in `final.c'.
9893      To set the kind of a label, use the `SET_LABEL_KIND' macro.
9895 `barrier'
9896      Barriers are placed in the instruction stream when control cannot
9897      flow past them.  They are placed after unconditional jump
9898      instructions to indicate that the jumps are unconditional and
9899      after calls to `volatile' functions, which do not return (e.g.,
9900      `exit').  They contain no information beyond the three standard
9901      fields.
9903 `note'
9904      `note' insns are used to represent additional debugging and
9905      declarative information.  They contain two nonstandard fields, an
9906      integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
9907      string accessed with `NOTE_SOURCE_FILE'.
9909      If `NOTE_LINE_NUMBER' is positive, the note represents the
9910      position of a source line and `NOTE_SOURCE_FILE' is the source
9911      file name that the line came from.  These notes control generation
9912      of line number data in the assembler output.
9914      Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
9915      code with one of the following values (and `NOTE_SOURCE_FILE' must
9916      contain a null pointer):
9918     `NOTE_INSN_DELETED'
9919           Such a note is completely ignorable.  Some passes of the
9920           compiler delete insns by altering them into notes of this
9921           kind.
9923     `NOTE_INSN_DELETED_LABEL'
9924           This marks what used to be a `code_label', but was not used
9925           for other purposes than taking its address and was
9926           transformed to mark that no code jumps to it.
9928     `NOTE_INSN_BLOCK_BEG'
9929     `NOTE_INSN_BLOCK_END'
9930           These types of notes indicate the position of the beginning
9931           and end of a level of scoping of variable names.  They
9932           control the output of debugging information.
9934     `NOTE_INSN_EH_REGION_BEG'
9935     `NOTE_INSN_EH_REGION_END'
9936           These types of notes indicate the position of the beginning
9937           and end of a level of scoping for exception handling.
9938           `NOTE_BLOCK_NUMBER' identifies which `CODE_LABEL' or `note'
9939           of type `NOTE_INSN_DELETED_LABEL' is associated with the
9940           given region.
9942     `NOTE_INSN_LOOP_BEG'
9943     `NOTE_INSN_LOOP_END'
9944           These types of notes indicate the position of the beginning
9945           and end of a `while' or `for' loop.  They enable the loop
9946           optimizer to find loops quickly.
9948     `NOTE_INSN_LOOP_CONT'
9949           Appears at the place in a loop that `continue' statements
9950           jump to.
9952     `NOTE_INSN_LOOP_VTOP'
9953           This note indicates the place in a loop where the exit test
9954           begins for those loops in which the exit test has been
9955           duplicated.  This position becomes another virtual start of
9956           the loop when considering loop invariants.
9958     `NOTE_INSN_FUNCTION_BEG'
9959           Appears at the start of the function body, after the function
9960           prologue.
9962     `NOTE_INSN_VAR_LOCATION'
9963           This note is used to generate variable location debugging
9964           information.  It indicates that the user variable in its
9965           `VAR_LOCATION' operand is at the location given in the RTL
9966           expression, or holds a value that can be computed by
9967           evaluating the RTL expression from that static point in the
9968           program up to the next such note for the same user variable.
9971      These codes are printed symbolically when they appear in debugging
9972      dumps.
9974 `debug_insn'
9975      The expression code `debug_insn' is used for pseudo-instructions
9976      that hold debugging information for variable tracking at
9977      assignments (see `-fvar-tracking-assignments' option).  They are
9978      the RTL representation of `GIMPLE_DEBUG' statements (*Note
9979      `GIMPLE_DEBUG'::), with a `VAR_LOCATION' operand that binds a user
9980      variable tree to an RTL representation of the `value' in the
9981      corresponding statement.  A `DEBUG_EXPR' in it stands for the
9982      value bound to the corresponding `DEBUG_EXPR_DECL'.
9984      Throughout optimization passes, binding information is kept in
9985      pseudo-instruction form, so that, unlike notes, it gets the same
9986      treatment and adjustments that regular instructions would.  It is
9987      the variable tracking pass that turns these pseudo-instructions
9988      into var location notes, analyzing control flow, value
9989      equivalences and changes to registers and memory referenced in
9990      value expressions, propagating the values of debug temporaries and
9991      determining expressions that can be used to compute the value of
9992      each user variable at as many points (ranges, actually) in the
9993      program as possible.
9995      Unlike `NOTE_INSN_VAR_LOCATION', the value expression in an
9996      `INSN_VAR_LOCATION' denotes a value at that specific point in the
9997      program, rather than an expression that can be evaluated at any
9998      later point before an overriding `VAR_LOCATION' is encountered.
9999      E.g., if a user variable is bound to a `REG' and then a subsequent
10000      insn modifies the `REG', the note location would keep mapping the
10001      user variable to the register across the insn, whereas the insn
10002      location would keep the variable bound to the value, so that the
10003      variable tracking pass would emit another location note for the
10004      variable at the point in which the register is modified.
10007  The machine mode of an insn is normally `VOIDmode', but some phases
10008 use the mode for various purposes.
10010  The common subexpression elimination pass sets the mode of an insn to
10011 `QImode' when it is the first insn in a block that has already been
10012 processed.
10014  The second Haifa scheduling pass, for targets that can multiple issue,
10015 sets the mode of an insn to `TImode' when it is believed that the
10016 instruction begins an issue group.  That is, when the instruction
10017 cannot issue simultaneously with the previous.  This may be relied on
10018 by later passes, in particular machine-dependent reorg.
10020  Here is a table of the extra fields of `insn', `jump_insn' and
10021 `call_insn' insns:
10023 `PATTERN (I)'
10024      An expression for the side effect performed by this insn.  This
10025      must be one of the following codes: `set', `call', `use',
10026      `clobber', `return', `asm_input', `asm_output', `addr_vec',
10027      `addr_diff_vec', `trap_if', `unspec', `unspec_volatile',
10028      `parallel', `cond_exec', or `sequence'.  If it is a `parallel',
10029      each element of the `parallel' must be one these codes, except that
10030      `parallel' expressions cannot be nested and `addr_vec' and
10031      `addr_diff_vec' are not permitted inside a `parallel' expression.
10033 `INSN_CODE (I)'
10034      An integer that says which pattern in the machine description
10035      matches this insn, or -1 if the matching has not yet been
10036      attempted.
10038      Such matching is never attempted and this field remains -1 on an
10039      insn whose pattern consists of a single `use', `clobber',
10040      `asm_input', `addr_vec' or `addr_diff_vec' expression.
10042      Matching is also never attempted on insns that result from an `asm'
10043      statement.  These contain at least one `asm_operands' expression.
10044      The function `asm_noperands' returns a non-negative value for such
10045      insns.
10047      In the debugging output, this field is printed as a number
10048      followed by a symbolic representation that locates the pattern in
10049      the `md' file as some small positive or negative offset from a
10050      named pattern.
10052 `LOG_LINKS (I)'
10053      A list (chain of `insn_list' expressions) giving information about
10054      dependencies between instructions within a basic block.  Neither a
10055      jump nor a label may come between the related insns.  These are
10056      only used by the schedulers and by combine.  This is a deprecated
10057      data structure.  Def-use and use-def chains are now preferred.
10059 `REG_NOTES (I)'
10060      A list (chain of `expr_list' and `insn_list' expressions) giving
10061      miscellaneous information about the insn.  It is often information
10062      pertaining to the registers used in this insn.
10064  The `LOG_LINKS' field of an insn is a chain of `insn_list'
10065 expressions.  Each of these has two operands: the first is an insn, and
10066 the second is another `insn_list' expression (the next one in the
10067 chain).  The last `insn_list' in the chain has a null pointer as second
10068 operand.  The significant thing about the chain is which insns appear
10069 in it (as first operands of `insn_list' expressions).  Their order is
10070 not significant.
10072  This list is originally set up by the flow analysis pass; it is a null
10073 pointer until then.  Flow only adds links for those data dependencies
10074 which can be used for instruction combination.  For each insn, the flow
10075 analysis pass adds a link to insns which store into registers values
10076 that are used for the first time in this insn.
10078  The `REG_NOTES' field of an insn is a chain similar to the `LOG_LINKS'
10079 field but it includes `expr_list' expressions in addition to
10080 `insn_list' expressions.  There are several kinds of register notes,
10081 which are distinguished by the machine mode, which in a register note
10082 is really understood as being an `enum reg_note'.  The first operand OP
10083 of the note is data whose meaning depends on the kind of note.
10085  The macro `REG_NOTE_KIND (X)' returns the kind of register note.  Its
10086 counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
10087 register note type of X to be NEWKIND.
10089  Register notes are of three classes: They may say something about an
10090 input to an insn, they may say something about an output of an insn, or
10091 they may create a linkage between two insns.  There are also a set of
10092 values that are only used in `LOG_LINKS'.
10094  These register notes annotate inputs to an insn:
10096 `REG_DEAD'
10097      The value in OP dies in this insn; that is to say, altering the
10098      value immediately after this insn would not affect the future
10099      behavior of the program.
10101      It does not follow that the register OP has no useful value after
10102      this insn since OP is not necessarily modified by this insn.
10103      Rather, no subsequent instruction uses the contents of OP.
10105 `REG_UNUSED'
10106      The register OP being set by this insn will not be used in a
10107      subsequent insn.  This differs from a `REG_DEAD' note, which
10108      indicates that the value in an input will not be used subsequently.
10109      These two notes are independent; both may be present for the same
10110      register.
10112 `REG_INC'
10113      The register OP is incremented (or decremented; at this level
10114      there is no distinction) by an embedded side effect inside this
10115      insn.  This means it appears in a `post_inc', `pre_inc',
10116      `post_dec' or `pre_dec' expression.
10118 `REG_NONNEG'
10119      The register OP is known to have a nonnegative value when this
10120      insn is reached.  This is used so that decrement and branch until
10121      zero instructions, such as the m68k dbra, can be matched.
10123      The `REG_NONNEG' note is added to insns only if the machine
10124      description has a `decrement_and_branch_until_zero' pattern.
10126 `REG_LABEL_OPERAND'
10127      This insn uses OP, a `code_label' or a `note' of type
10128      `NOTE_INSN_DELETED_LABEL', but is not a `jump_insn', or it is a
10129      `jump_insn' that refers to the operand as an ordinary operand.
10130      The label may still eventually be a jump target, but if so in an
10131      indirect jump in a subsequent insn.  The presence of this note
10132      allows jump optimization to be aware that OP is, in fact, being
10133      used, and flow optimization to build an accurate flow graph.
10135 `REG_LABEL_TARGET'
10136      This insn is a `jump_insn' but not an `addr_vec' or
10137      `addr_diff_vec'.  It uses OP, a `code_label' as a direct or
10138      indirect jump target.  Its purpose is similar to that of
10139      `REG_LABEL_OPERAND'.  This note is only present if the insn has
10140      multiple targets; the last label in the insn (in the highest
10141      numbered insn-field) goes into the `JUMP_LABEL' field and does not
10142      have a `REG_LABEL_TARGET' note.  *Note JUMP_LABEL: Insns.
10144 `REG_CROSSING_JUMP'
10145      This insn is a branching instruction (either an unconditional jump
10146      or an indirect jump) which crosses between hot and cold sections,
10147      which could potentially be very far apart in the executable.  The
10148      presence of this note indicates to other optimizations that this
10149      branching instruction should not be "collapsed" into a simpler
10150      branching construct.  It is used when the optimization to
10151      partition basic blocks into hot and cold sections is turned on.
10153 `REG_SETJMP'
10154      Appears attached to each `CALL_INSN' to `setjmp' or a related
10155      function.
10157  The following notes describe attributes of outputs of an insn:
10159 `REG_EQUIV'
10160 `REG_EQUAL'
10161      This note is only valid on an insn that sets only one register and
10162      indicates that that register will be equal to OP at run time; the
10163      scope of this equivalence differs between the two types of notes.
10164      The value which the insn explicitly copies into the register may
10165      look different from OP, but they will be equal at run time.  If the
10166      output of the single `set' is a `strict_low_part' expression, the
10167      note refers to the register that is contained in `SUBREG_REG' of
10168      the `subreg' expression.
10170      For `REG_EQUIV', the register is equivalent to OP throughout the
10171      entire function, and could validly be replaced in all its
10172      occurrences by OP.  ("Validly" here refers to the data flow of the
10173      program; simple replacement may make some insns invalid.)  For
10174      example, when a constant is loaded into a register that is never
10175      assigned any other value, this kind of note is used.
10177      When a parameter is copied into a pseudo-register at entry to a
10178      function, a note of this kind records that the register is
10179      equivalent to the stack slot where the parameter was passed.
10180      Although in this case the register may be set by other insns, it
10181      is still valid to replace the register by the stack slot
10182      throughout the function.
10184      A `REG_EQUIV' note is also used on an instruction which copies a
10185      register parameter into a pseudo-register at entry to a function,
10186      if there is a stack slot where that parameter could be stored.
10187      Although other insns may set the pseudo-register, it is valid for
10188      the compiler to replace the pseudo-register by stack slot
10189      throughout the function, provided the compiler ensures that the
10190      stack slot is properly initialized by making the replacement in
10191      the initial copy instruction as well.  This is used on machines
10192      for which the calling convention allocates stack space for
10193      register parameters.  See `REG_PARM_STACK_SPACE' in *Note Stack
10194      Arguments::.
10196      In the case of `REG_EQUAL', the register that is set by this insn
10197      will be equal to OP at run time at the end of this insn but not
10198      necessarily elsewhere in the function.  In this case, OP is
10199      typically an arithmetic expression.  For example, when a sequence
10200      of insns such as a library call is used to perform an arithmetic
10201      operation, this kind of note is attached to the insn that produces
10202      or copies the final value.
10204      These two notes are used in different ways by the compiler passes.
10205      `REG_EQUAL' is used by passes prior to register allocation (such as
10206      common subexpression elimination and loop optimization) to tell
10207      them how to think of that value.  `REG_EQUIV' notes are used by
10208      register allocation to indicate that there is an available
10209      substitute expression (either a constant or a `mem' expression for
10210      the location of a parameter on the stack) that may be used in
10211      place of a register if insufficient registers are available.
10213      Except for stack homes for parameters, which are indicated by a
10214      `REG_EQUIV' note and are not useful to the early optimization
10215      passes and pseudo registers that are equivalent to a memory
10216      location throughout their entire life, which is not detected until
10217      later in the compilation, all equivalences are initially indicated
10218      by an attached `REG_EQUAL' note.  In the early stages of register
10219      allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note
10220      if OP is a constant and the insn represents the only set of its
10221      destination register.
10223      Thus, compiler passes prior to register allocation need only check
10224      for `REG_EQUAL' notes and passes subsequent to register allocation
10225      need only check for `REG_EQUIV' notes.
10227  These notes describe linkages between insns.  They occur in pairs: one
10228 insn has one of a pair of notes that points to a second insn, which has
10229 the inverse note pointing back to the first insn.
10231 `REG_CC_SETTER'
10232 `REG_CC_USER'
10233      On machines that use `cc0', the insns which set and use `cc0' set
10234      and use `cc0' are adjacent.  However, when branch delay slot
10235      filling is done, this may no longer be true.  In this case a
10236      `REG_CC_USER' note will be placed on the insn setting `cc0' to
10237      point to the insn using `cc0' and a `REG_CC_SETTER' note will be
10238      placed on the insn using `cc0' to point to the insn setting `cc0'.
10240  These values are only used in the `LOG_LINKS' field, and indicate the
10241 type of dependency that each link represents.  Links which indicate a
10242 data dependence (a read after write dependence) do not use any code,
10243 they simply have mode `VOIDmode', and are printed without any
10244 descriptive text.
10246 `REG_DEP_TRUE'
10247      This indicates a true dependence (a read after write dependence).
10249 `REG_DEP_OUTPUT'
10250      This indicates an output dependence (a write after write
10251      dependence).
10253 `REG_DEP_ANTI'
10254      This indicates an anti dependence (a write after read dependence).
10257  These notes describe information gathered from gcov profile data.  They
10258 are stored in the `REG_NOTES' field of an insn as an `expr_list'.
10260 `REG_BR_PROB'
10261      This is used to specify the ratio of branches to non-branches of a
10262      branch insn according to the profile data.  The value is stored as
10263      a value between 0 and REG_BR_PROB_BASE; larger values indicate a
10264      higher probability that the branch will be taken.
10266 `REG_BR_PRED'
10267      These notes are found in JUMP insns after delayed branch scheduling
10268      has taken place.  They indicate both the direction and the
10269      likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
10270      values.
10272 `REG_FRAME_RELATED_EXPR'
10273      This is used on an RTX_FRAME_RELATED_P insn wherein the attached
10274      expression is used in place of the actual insn pattern.  This is
10275      done in cases where the pattern is either complex or misleading.
10277  For convenience, the machine mode in an `insn_list' or `expr_list' is
10278 printed using these symbolic codes in debugging dumps.
10280  The only difference between the expression codes `insn_list' and
10281 `expr_list' is that the first operand of an `insn_list' is assumed to
10282 be an insn and is printed in debugging dumps as the insn's unique id;
10283 the first operand of an `expr_list' is printed in the ordinary way as
10284 an expression.
10286 \x1f
10287 File: gccint.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
10289 10.20 RTL Representation of Function-Call Insns
10290 ===============================================
10292 Insns that call subroutines have the RTL expression code `call_insn'.
10293 These insns must satisfy special rules, and their bodies must use a
10294 special RTL expression code, `call'.
10296  A `call' expression has two operands, as follows:
10298      (call (mem:FM ADDR) NBYTES)
10300 Here NBYTES is an operand that represents the number of bytes of
10301 argument data being passed to the subroutine, FM is a machine mode
10302 (which must equal as the definition of the `FUNCTION_MODE' macro in the
10303 machine description) and ADDR represents the address of the subroutine.
10305  For a subroutine that returns no value, the `call' expression as shown
10306 above is the entire body of the insn, except that the insn might also
10307 contain `use' or `clobber' expressions.
10309  For a subroutine that returns a value whose mode is not `BLKmode', the
10310 value is returned in a hard register.  If this register's number is R,
10311 then the body of the call insn looks like this:
10313      (set (reg:M R)
10314           (call (mem:FM ADDR) NBYTES))
10316 This RTL expression makes it clear (to the optimizer passes) that the
10317 appropriate register receives a useful value in this insn.
10319  When a subroutine returns a `BLKmode' value, it is handled by passing
10320 to the subroutine the address of a place to store the value.  So the
10321 call insn itself does not "return" any value, and it has the same RTL
10322 form as a call that returns nothing.
10324  On some machines, the call instruction itself clobbers some register,
10325 for example to contain the return address.  `call_insn' insns on these
10326 machines should have a body which is a `parallel' that contains both
10327 the `call' expression and `clobber' expressions that indicate which
10328 registers are destroyed.  Similarly, if the call instruction requires
10329 some register other than the stack pointer that is not explicitly
10330 mentioned in its RTL, a `use' subexpression should mention that
10331 register.
10333  Functions that are called are assumed to modify all registers listed in
10334 the configuration macro `CALL_USED_REGISTERS' (*note Register Basics::)
10335 and, with the exception of `const' functions and library calls, to
10336 modify all of memory.
10338  Insns containing just `use' expressions directly precede the
10339 `call_insn' insn to indicate which registers contain inputs to the
10340 function.  Similarly, if registers other than those in
10341 `CALL_USED_REGISTERS' are clobbered by the called function, insns
10342 containing a single `clobber' follow immediately after the call to
10343 indicate which registers.
10345 \x1f
10346 File: gccint.info,  Node: Sharing,  Next: Reading RTL,  Prev: Calls,  Up: RTL
10348 10.21 Structure Sharing Assumptions
10349 ===================================
10351 The compiler assumes that certain kinds of RTL expressions are unique;
10352 there do not exist two distinct objects representing the same value.
10353 In other cases, it makes an opposite assumption: that no RTL expression
10354 object of a certain kind appears in more than one place in the
10355 containing structure.
10357  These assumptions refer to a single function; except for the RTL
10358 objects that describe global variables and external functions, and a
10359 few standard objects such as small integer constants, no RTL objects
10360 are common to two functions.
10362    * Each pseudo-register has only a single `reg' object to represent
10363      it, and therefore only a single machine mode.
10365    * For any symbolic label, there is only one `symbol_ref' object
10366      referring to it.
10368    * All `const_int' expressions with equal values are shared.
10370    * There is only one `pc' expression.
10372    * There is only one `cc0' expression.
10374    * There is only one `const_double' expression with value 0 for each
10375      floating point mode.  Likewise for values 1 and 2.
10377    * There is only one `const_vector' expression with value 0 for each
10378      vector mode, be it an integer or a double constant vector.
10380    * No `label_ref' or `scratch' appears in more than one place in the
10381      RTL structure; in other words, it is safe to do a tree-walk of all
10382      the insns in the function and assume that each time a `label_ref'
10383      or `scratch' is seen it is distinct from all others that are seen.
10385    * Only one `mem' object is normally created for each static variable
10386      or stack slot, so these objects are frequently shared in all the
10387      places they appear.  However, separate but equal objects for these
10388      variables are occasionally made.
10390    * When a single `asm' statement has multiple output operands, a
10391      distinct `asm_operands' expression is made for each output operand.
10392      However, these all share the vector which contains the sequence of
10393      input operands.  This sharing is used later on to test whether two
10394      `asm_operands' expressions come from the same statement, so all
10395      optimizations must carefully preserve the sharing if they copy the
10396      vector at all.
10398    * No RTL object appears in more than one place in the RTL structure
10399      except as described above.  Many passes of the compiler rely on
10400      this by assuming that they can modify RTL objects in place without
10401      unwanted side-effects on other insns.
10403    * During initial RTL generation, shared structure is freely
10404      introduced.  After all the RTL for a function has been generated,
10405      all shared structure is copied by `unshare_all_rtl' in
10406      `emit-rtl.c', after which the above rules are guaranteed to be
10407      followed.
10409    * During the combiner pass, shared structure within an insn can exist
10410      temporarily.  However, the shared structure is copied before the
10411      combiner is finished with the insn.  This is done by calling
10412      `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'.
10414 \x1f
10415 File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
10417 10.22 Reading RTL
10418 =================
10420 To read an RTL object from a file, call `read_rtx'.  It takes one
10421 argument, a stdio stream, and returns a single RTL object.  This routine
10422 is defined in `read-rtl.c'.  It is not available in the compiler
10423 itself, only the various programs that generate the compiler back end
10424 from the machine description.
10426  People frequently have the idea of using RTL stored as text in a file
10427 as an interface between a language front end and the bulk of GCC.  This
10428 idea is not feasible.
10430  GCC was designed to use RTL internally only.  Correct RTL for a given
10431 program is very dependent on the particular target machine.  And the RTL
10432 does not contain all the information about the program.
10434  The proper way to interface GCC to a new language front end is with
10435 the "tree" data structure, described in the files `tree.h' and
10436 `tree.def'.  The documentation for this structure (*note GENERIC::) is
10437 incomplete.
10439 \x1f
10440 File: gccint.info,  Node: GENERIC,  Next: GIMPLE,  Prev: Passes,  Up: Top
10442 11 GENERIC
10443 **********
10445 The purpose of GENERIC is simply to provide a language-independent way
10446 of representing an entire function in trees.  To this end, it was
10447 necessary to add a few new tree codes to the back end, but most
10448 everything was already there.  If you can express it with the codes in
10449 `gcc/tree.def', it's GENERIC.
10451  Early on, there was a great deal of debate about how to think about
10452 statements in a tree IL.  In GENERIC, a statement is defined as any
10453 expression whose value, if any, is ignored.  A statement will always
10454 have `TREE_SIDE_EFFECTS' set (or it will be discarded), but a
10455 non-statement expression may also have side effects.  A `CALL_EXPR',
10456 for instance.
10458  It would be possible for some local optimizations to work on the
10459 GENERIC form of a function; indeed, the adapted tree inliner works fine
10460 on GENERIC, but the current compiler performs inlining after lowering
10461 to GIMPLE (a restricted form described in the next section). Indeed,
10462 currently the frontends perform this lowering before handing off to
10463 `tree_rest_of_compilation', but this seems inelegant.
10465 * Menu:
10467 * Deficiencies::                Topics net yet covered in this document.
10468 * Tree overview::               All about `tree's.
10469 * Types::                       Fundamental and aggregate types.
10470 * Declarations::                Type declarations and variables.
10471 * Attributes::                  Declaration and type attributes.
10472 * Expressions: Expression trees.            Operating on data.
10473 * Statements::                  Control flow and related trees.
10474 * Functions::                   Function bodies, linkage, and other aspects.
10475 * Language-dependent trees::    Topics and trees specific to language front ends.
10476 * C and C++ Trees::             Trees specific to C and C++.
10477 * Java Trees::                  Trees specific to Java.
10479 \x1f
10480 File: gccint.info,  Node: Deficiencies,  Next: Tree overview,  Up: GENERIC
10482 11.1 Deficiencies
10483 =================
10485 There are many places in which this document is incomplet and incorrekt.
10486 It is, as of yet, only _preliminary_ documentation.
10488 \x1f
10489 File: gccint.info,  Node: Tree overview,  Next: Types,  Prev: Deficiencies,  Up: GENERIC
10491 11.2 Overview
10492 =============
10494 The central data structure used by the internal representation is the
10495 `tree'.  These nodes, while all of the C type `tree', are of many
10496 varieties.  A `tree' is a pointer type, but the object to which it
10497 points may be of a variety of types.  From this point forward, we will
10498 refer to trees in ordinary type, rather than in `this font', except
10499 when talking about the actual C type `tree'.
10501  You can tell what kind of node a particular tree is by using the
10502 `TREE_CODE' macro.  Many, many macros take trees as input and return
10503 trees as output.  However, most macros require a certain kind of tree
10504 node as input.  In other words, there is a type-system for trees, but
10505 it is not reflected in the C type-system.
10507  For safety, it is useful to configure GCC with `--enable-checking'.
10508 Although this results in a significant performance penalty (since all
10509 tree types are checked at run-time), and is therefore inappropriate in a
10510 release version, it is extremely helpful during the development process.
10512  Many macros behave as predicates.  Many, although not all, of these
10513 predicates end in `_P'.  Do not rely on the result type of these macros
10514 being of any particular type.  You may, however, rely on the fact that
10515 the type can be compared to `0', so that statements like
10516      if (TEST_P (t) && !TEST_P (y))
10517        x = 1;
10518  and
10519      int i = (TEST_P (t) != 0);
10520  are legal.  Macros that return `int' values now may be changed to
10521 return `tree' values, or other pointers in the future.  Even those that
10522 continue to return `int' may return multiple nonzero codes where
10523 previously they returned only zero and one.  Therefore, you should not
10524 write code like
10525      if (TEST_P (t) == 1)
10526  as this code is not guaranteed to work correctly in the future.
10528  You should not take the address of values returned by the macros or
10529 functions described here.  In particular, no guarantee is given that the
10530 values are lvalues.
10532  In general, the names of macros are all in uppercase, while the names
10533 of functions are entirely in lowercase.  There are rare exceptions to
10534 this rule.  You should assume that any macro or function whose name is
10535 made up entirely of uppercase letters may evaluate its arguments more
10536 than once.  You may assume that a macro or function whose name is made
10537 up entirely of lowercase letters will evaluate its arguments only once.
10539  The `error_mark_node' is a special tree.  Its tree code is
10540 `ERROR_MARK', but since there is only ever one node with that code, the
10541 usual practice is to compare the tree against `error_mark_node'.  (This
10542 test is just a test for pointer equality.)  If an error has occurred
10543 during front-end processing the flag `errorcount' will be set.  If the
10544 front end has encountered code it cannot handle, it will issue a
10545 message to the user and set `sorrycount'.  When these flags are set,
10546 any macro or function which normally returns a tree of a particular
10547 kind may instead return the `error_mark_node'.  Thus, if you intend to
10548 do any processing of erroneous code, you must be prepared to deal with
10549 the `error_mark_node'.
10551  Occasionally, a particular tree slot (like an operand to an expression,
10552 or a particular field in a declaration) will be referred to as
10553 "reserved for the back end".  These slots are used to store RTL when
10554 the tree is converted to RTL for use by the GCC back end.  However, if
10555 that process is not taking place (e.g., if the front end is being hooked
10556 up to an intelligent editor), then those slots may be used by the back
10557 end presently in use.
10559  If you encounter situations that do not match this documentation, such
10560 as tree nodes of types not mentioned here, or macros documented to
10561 return entities of a particular kind that instead return entities of
10562 some different kind, you have found a bug, either in the front end or in
10563 the documentation.  Please report these bugs as you would any other bug.
10565 * Menu:
10567 * Macros and Functions::Macros and functions that can be used with all trees.
10568 * Identifiers::         The names of things.
10569 * Containers::          Lists and vectors.
10571 \x1f
10572 File: gccint.info,  Node: Macros and Functions,  Next: Identifiers,  Up: Tree overview
10574 11.2.1 Trees
10575 ------------
10577 All GENERIC trees have two fields in common.  First, `TREE_CHAIN' is a
10578 pointer that can be used as a singly-linked list to other trees.  The
10579 other is `TREE_TYPE'.  Many trees store the type of an expression or
10580 declaration in this field.
10582  These are some other functions for handling trees:
10584 `tree_size'
10585      Return the number of bytes a tree takes.
10587 `build0'
10588 `build1'
10589 `build2'
10590 `build3'
10591 `build4'
10592 `build5'
10593 `build6'
10594      These functions build a tree and supply values to put in each
10595      parameter.  The basic signature is `code, type, [operands]'.
10596      `code' is the `TREE_CODE', and `type' is a tree representing the
10597      `TREE_TYPE'.  These are followed by the operands, each of which is
10598      also a tree.
10601 \x1f
10602 File: gccint.info,  Node: Identifiers,  Next: Containers,  Prev: Macros and Functions,  Up: Tree overview
10604 11.2.2 Identifiers
10605 ------------------
10607 An `IDENTIFIER_NODE' represents a slightly more general concept that
10608 the standard C or C++ concept of identifier.  In particular, an
10609 `IDENTIFIER_NODE' may contain a `$', or other extraordinary characters.
10611  There are never two distinct `IDENTIFIER_NODE's representing the same
10612 identifier.  Therefore, you may use pointer equality to compare
10613 `IDENTIFIER_NODE's, rather than using a routine like `strcmp'.  Use
10614 `get_identifier' to obtain the unique `IDENTIFIER_NODE' for a supplied
10615 string.
10617  You can use the following macros to access identifiers:
10618 `IDENTIFIER_POINTER'
10619      The string represented by the identifier, represented as a
10620      `char*'.  This string is always `NUL'-terminated, and contains no
10621      embedded `NUL' characters.
10623 `IDENTIFIER_LENGTH'
10624      The length of the string returned by `IDENTIFIER_POINTER', not
10625      including the trailing `NUL'.  This value of `IDENTIFIER_LENGTH
10626      (x)' is always the same as `strlen (IDENTIFIER_POINTER (x))'.
10628 `IDENTIFIER_OPNAME_P'
10629      This predicate holds if the identifier represents the name of an
10630      overloaded operator.  In this case, you should not depend on the
10631      contents of either the `IDENTIFIER_POINTER' or the
10632      `IDENTIFIER_LENGTH'.
10634 `IDENTIFIER_TYPENAME_P'
10635      This predicate holds if the identifier represents the name of a
10636      user-defined conversion operator.  In this case, the `TREE_TYPE' of
10637      the `IDENTIFIER_NODE' holds the type to which the conversion
10638      operator converts.
10641 \x1f
10642 File: gccint.info,  Node: Containers,  Prev: Identifiers,  Up: Tree overview
10644 11.2.3 Containers
10645 -----------------
10647 Two common container data structures can be represented directly with
10648 tree nodes.  A `TREE_LIST' is a singly linked list containing two trees
10649 per node.  These are the `TREE_PURPOSE' and `TREE_VALUE' of each node.
10650 (Often, the `TREE_PURPOSE' contains some kind of tag, or additional
10651 information, while the `TREE_VALUE' contains the majority of the
10652 payload.  In other cases, the `TREE_PURPOSE' is simply `NULL_TREE',
10653 while in still others both the `TREE_PURPOSE' and `TREE_VALUE' are of
10654 equal stature.)  Given one `TREE_LIST' node, the next node is found by
10655 following the `TREE_CHAIN'.  If the `TREE_CHAIN' is `NULL_TREE', then
10656 you have reached the end of the list.
10658  A `TREE_VEC' is a simple vector.  The `TREE_VEC_LENGTH' is an integer
10659 (not a tree) giving the number of nodes in the vector.  The nodes
10660 themselves are accessed using the `TREE_VEC_ELT' macro, which takes two
10661 arguments.  The first is the `TREE_VEC' in question; the second is an
10662 integer indicating which element in the vector is desired.  The
10663 elements are indexed from zero.
10665 \x1f
10666 File: gccint.info,  Node: Types,  Next: Declarations,  Prev: Tree overview,  Up: GENERIC
10668 11.3 Types
10669 ==========
10671 All types have corresponding tree nodes.  However, you should not assume
10672 that there is exactly one tree node corresponding to each type.  There
10673 are often multiple nodes corresponding to the same type.
10675  For the most part, different kinds of types have different tree codes.
10676 (For example, pointer types use a `POINTER_TYPE' code while arrays use
10677 an `ARRAY_TYPE' code.)  However, pointers to member functions use the
10678 `RECORD_TYPE' code.  Therefore, when writing a `switch' statement that
10679 depends on the code associated with a particular type, you should take
10680 care to handle pointers to member functions under the `RECORD_TYPE'
10681 case label.
10683  The following functions and macros deal with cv-qualification of types:
10684 `TYPE_MAIN_VARIANT'
10685      This macro returns the unqualified version of a type.  It may be
10686      applied to an unqualified type, but it is not always the identity
10687      function in that case.
10689  A few other macros and functions are usable with all types:
10690 `TYPE_SIZE'
10691      The number of bits required to represent the type, represented as
10692      an `INTEGER_CST'.  For an incomplete type, `TYPE_SIZE' will be
10693      `NULL_TREE'.
10695 `TYPE_ALIGN'
10696      The alignment of the type, in bits, represented as an `int'.
10698 `TYPE_NAME'
10699      This macro returns a declaration (in the form of a `TYPE_DECL') for
10700      the type.  (Note this macro does _not_ return an
10701      `IDENTIFIER_NODE', as you might expect, given its name!)  You can
10702      look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual
10703      name of the type.  The `TYPE_NAME' will be `NULL_TREE' for a type
10704      that is not a built-in type, the result of a typedef, or a named
10705      class type.
10707 `TYPE_CANONICAL'
10708      This macro returns the "canonical" type for the given type node.
10709      Canonical types are used to improve performance in the C++ and
10710      Objective-C++ front ends by allowing efficient comparison between
10711      two type nodes in `same_type_p': if the `TYPE_CANONICAL' values of
10712      the types are equal, the types are equivalent; otherwise, the types
10713      are not equivalent. The notion of equivalence for canonical types
10714      is the same as the notion of type equivalence in the language
10715      itself. For instance,
10717      When `TYPE_CANONICAL' is `NULL_TREE', there is no canonical type
10718      for the given type node. In this case, comparison between this
10719      type and any other type requires the compiler to perform a deep,
10720      "structural" comparison to see if the two type nodes have the same
10721      form and properties.
10723      The canonical type for a node is always the most fundamental type
10724      in the equivalence class of types. For instance, `int' is its own
10725      canonical type. A typedef `I' of `int' will have `int' as its
10726      canonical type. Similarly, `I*' and a typedef `IP' (defined to
10727      `I*') will has `int*' as their canonical type. When building a new
10728      type node, be sure to set `TYPE_CANONICAL' to the appropriate
10729      canonical type. If the new type is a compound type (built from
10730      other types), and any of those other types require structural
10731      equality, use `SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the
10732      new type also requires structural equality. Finally, if for some
10733      reason you cannot guarantee that `TYPE_CANONICAL' will point to
10734      the canonical type, use `SET_TYPE_STRUCTURAL_EQUALITY' to make
10735      sure that the new type-and any type constructed based on
10736      it-requires structural equality. If you suspect that the canonical
10737      type system is miscomparing types, pass `--param
10738      verify-canonical-types=1' to the compiler or configure with
10739      `--enable-checking' to force the compiler to verify its
10740      canonical-type comparisons against the structural comparisons; the
10741      compiler will then print any warnings if the canonical types
10742      miscompare.
10744 `TYPE_STRUCTURAL_EQUALITY_P'
10745      This predicate holds when the node requires structural equality
10746      checks, e.g., when `TYPE_CANONICAL' is `NULL_TREE'.
10748 `SET_TYPE_STRUCTURAL_EQUALITY'
10749      This macro states that the type node it is given requires
10750      structural equality checks, e.g., it sets `TYPE_CANONICAL' to
10751      `NULL_TREE'.
10753 `same_type_p'
10754      This predicate takes two types as input, and holds if they are the
10755      same type.  For example, if one type is a `typedef' for the other,
10756      or both are `typedef's for the same type.  This predicate also
10757      holds if the two trees given as input are simply copies of one
10758      another; i.e., there is no difference between them at the source
10759      level, but, for whatever reason, a duplicate has been made in the
10760      representation.  You should never use `==' (pointer equality) to
10761      compare types; always use `same_type_p' instead.
10763  Detailed below are the various kinds of types, and the macros that can
10764 be used to access them.  Although other kinds of types are used
10765 elsewhere in G++, the types described here are the only ones that you
10766 will encounter while examining the intermediate representation.
10768 `VOID_TYPE'
10769      Used to represent the `void' type.
10771 `INTEGER_TYPE'
10772      Used to represent the various integral types, including `char',
10773      `short', `int', `long', and `long long'.  This code is not used
10774      for enumeration types, nor for the `bool' type.  The
10775      `TYPE_PRECISION' is the number of bits used in the representation,
10776      represented as an `unsigned int'.  (Note that in the general case
10777      this is not the same value as `TYPE_SIZE'; suppose that there were
10778      a 24-bit integer type, but that alignment requirements for the ABI
10779      required 32-bit alignment.  Then, `TYPE_SIZE' would be an
10780      `INTEGER_CST' for 32, while `TYPE_PRECISION' would be 24.)  The
10781      integer type is unsigned if `TYPE_UNSIGNED' holds; otherwise, it
10782      is signed.
10784      The `TYPE_MIN_VALUE' is an `INTEGER_CST' for the smallest integer
10785      that may be represented by this type.  Similarly, the
10786      `TYPE_MAX_VALUE' is an `INTEGER_CST' for the largest integer that
10787      may be represented by this type.
10789 `REAL_TYPE'
10790      Used to represent the `float', `double', and `long double' types.
10791      The number of bits in the floating-point representation is given
10792      by `TYPE_PRECISION', as in the `INTEGER_TYPE' case.
10794 `FIXED_POINT_TYPE'
10795      Used to represent the `short _Fract', `_Fract', `long _Fract',
10796      `long long _Fract', `short _Accum', `_Accum', `long _Accum', and
10797      `long long _Accum' types.  The number of bits in the fixed-point
10798      representation is given by `TYPE_PRECISION', as in the
10799      `INTEGER_TYPE' case.  There may be padding bits, fractional bits
10800      and integral bits.  The number of fractional bits is given by
10801      `TYPE_FBIT', and the number of integral bits is given by
10802      `TYPE_IBIT'.  The fixed-point type is unsigned if `TYPE_UNSIGNED'
10803      holds; otherwise, it is signed.  The fixed-point type is
10804      saturating if `TYPE_SATURATING' holds; otherwise, it is not
10805      saturating.
10807 `COMPLEX_TYPE'
10808      Used to represent GCC built-in `__complex__' data types.  The
10809      `TREE_TYPE' is the type of the real and imaginary parts.
10811 `ENUMERAL_TYPE'
10812      Used to represent an enumeration type.  The `TYPE_PRECISION' gives
10813      (as an `int'), the number of bits used to represent the type.  If
10814      there are no negative enumeration constants, `TYPE_UNSIGNED' will
10815      hold.  The minimum and maximum enumeration constants may be
10816      obtained with `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE', respectively;
10817      each of these macros returns an `INTEGER_CST'.
10819      The actual enumeration constants themselves may be obtained by
10820      looking at the `TYPE_VALUES'.  This macro will return a
10821      `TREE_LIST', containing the constants.  The `TREE_PURPOSE' of each
10822      node will be an `IDENTIFIER_NODE' giving the name of the constant;
10823      the `TREE_VALUE' will be an `INTEGER_CST' giving the value
10824      assigned to that constant.  These constants will appear in the
10825      order in which they were declared.  The `TREE_TYPE' of each of
10826      these constants will be the type of enumeration type itself.
10828 `BOOLEAN_TYPE'
10829      Used to represent the `bool' type.
10831 `POINTER_TYPE'
10832      Used to represent pointer types, and pointer to data member types.
10833      The `TREE_TYPE' gives the type to which this type points.
10835 `REFERENCE_TYPE'
10836      Used to represent reference types.  The `TREE_TYPE' gives the type
10837      to which this type refers.
10839 `FUNCTION_TYPE'
10840      Used to represent the type of non-member functions and of static
10841      member functions.  The `TREE_TYPE' gives the return type of the
10842      function.  The `TYPE_ARG_TYPES' are a `TREE_LIST' of the argument
10843      types.  The `TREE_VALUE' of each node in this list is the type of
10844      the corresponding argument; the `TREE_PURPOSE' is an expression
10845      for the default argument value, if any.  If the last node in the
10846      list is `void_list_node' (a `TREE_LIST' node whose `TREE_VALUE' is
10847      the `void_type_node'), then functions of this type do not take
10848      variable arguments.  Otherwise, they do take a variable number of
10849      arguments.
10851      Note that in C (but not in C++) a function declared like `void f()'
10852      is an unprototyped function taking a variable number of arguments;
10853      the `TYPE_ARG_TYPES' of such a function will be `NULL'.
10855 `METHOD_TYPE'
10856      Used to represent the type of a non-static member function.  Like a
10857      `FUNCTION_TYPE', the return type is given by the `TREE_TYPE'.  The
10858      type of `*this', i.e., the class of which functions of this type
10859      are a member, is given by the `TYPE_METHOD_BASETYPE'.  The
10860      `TYPE_ARG_TYPES' is the parameter list, as for a `FUNCTION_TYPE',
10861      and includes the `this' argument.
10863 `ARRAY_TYPE'
10864      Used to represent array types.  The `TREE_TYPE' gives the type of
10865      the elements in the array.  If the array-bound is present in the
10866      type, the `TYPE_DOMAIN' is an `INTEGER_TYPE' whose
10867      `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE' will be the lower and upper
10868      bounds of the array, respectively.  The `TYPE_MIN_VALUE' will
10869      always be an `INTEGER_CST' for zero, while the `TYPE_MAX_VALUE'
10870      will be one less than the number of elements in the array, i.e.,
10871      the highest value which may be used to index an element in the
10872      array.
10874 `RECORD_TYPE'
10875      Used to represent `struct' and `class' types, as well as pointers
10876      to member functions and similar constructs in other languages.
10877      `TYPE_FIELDS' contains the items contained in this type, each of
10878      which can be a `FIELD_DECL', `VAR_DECL', `CONST_DECL', or
10879      `TYPE_DECL'.  You may not make any assumptions about the ordering
10880      of the fields in the type or whether one or more of them overlap.
10882 `UNION_TYPE'
10883      Used to represent `union' types.  Similar to `RECORD_TYPE' except
10884      that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position
10885      zero.
10887 `QUAL_UNION_TYPE'
10888      Used to represent part of a variant record in Ada.  Similar to
10889      `UNION_TYPE' except that each `FIELD_DECL' has a `DECL_QUALIFIER'
10890      field, which contains a boolean expression that indicates whether
10891      the field is present in the object.  The type will only have one
10892      field, so each field's `DECL_QUALIFIER' is only evaluated if none
10893      of the expressions in the previous fields in `TYPE_FIELDS' are
10894      nonzero.  Normally these expressions will reference a field in the
10895      outer object using a `PLACEHOLDER_EXPR'.
10897 `LANG_TYPE'
10898      This node is used to represent a language-specific type.  The front
10899      end must handle it.
10901 `OFFSET_TYPE'
10902      This node is used to represent a pointer-to-data member.  For a
10903      data member `X::m' the `TYPE_OFFSET_BASETYPE' is `X' and the
10904      `TREE_TYPE' is the type of `m'.
10907  There are variables whose values represent some of the basic types.
10908 These include:
10909 `void_type_node'
10910      A node for `void'.
10912 `integer_type_node'
10913      A node for `int'.
10915 `unsigned_type_node.'
10916      A node for `unsigned int'.
10918 `char_type_node.'
10919      A node for `char'.
10920  It may sometimes be useful to compare one of these variables with a
10921 type in hand, using `same_type_p'.
10923 \x1f
10924 File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Types,  Up: GENERIC
10926 11.4 Declarations
10927 =================
10929 This section covers the various kinds of declarations that appear in the
10930 internal representation, except for declarations of functions
10931 (represented by `FUNCTION_DECL' nodes), which are described in *Note
10932 Functions::.
10934 * Menu:
10936 * Working with declarations::  Macros and functions that work on
10937 declarations.
10938 * Internal structure:: How declaration nodes are represented.
10940 \x1f
10941 File: gccint.info,  Node: Working with declarations,  Next: Internal structure,  Up: Declarations
10943 11.4.1 Working with declarations
10944 --------------------------------
10946 Some macros can be used with any kind of declaration.  These include:
10947 `DECL_NAME'
10948      This macro returns an `IDENTIFIER_NODE' giving the name of the
10949      entity.
10951 `TREE_TYPE'
10952      This macro returns the type of the entity declared.
10954 `EXPR_FILENAME'
10955      This macro returns the name of the file in which the entity was
10956      declared, as a `char*'.  For an entity declared implicitly by the
10957      compiler (like `__builtin_memcpy'), this will be the string
10958      `"<internal>"'.
10960 `EXPR_LINENO'
10961      This macro returns the line number at which the entity was
10962      declared, as an `int'.
10964 `DECL_ARTIFICIAL'
10965      This predicate holds if the declaration was implicitly generated
10966      by the compiler.  For example, this predicate will hold of an
10967      implicitly declared member function, or of the `TYPE_DECL'
10968      implicitly generated for a class type.  Recall that in C++ code
10969      like:
10970           struct S {};
10971      is roughly equivalent to C code like:
10972           struct S {};
10973           typedef struct S S;
10974      The implicitly generated `typedef' declaration is represented by a
10975      `TYPE_DECL' for which `DECL_ARTIFICIAL' holds.
10978  The various kinds of declarations include:
10979 `LABEL_DECL'
10980      These nodes are used to represent labels in function bodies.  For
10981      more information, see *Note Functions::.  These nodes only appear
10982      in block scopes.
10984 `CONST_DECL'
10985      These nodes are used to represent enumeration constants.  The
10986      value of the constant is given by `DECL_INITIAL' which will be an
10987      `INTEGER_CST' with the same type as the `TREE_TYPE' of the
10988      `CONST_DECL', i.e., an `ENUMERAL_TYPE'.
10990 `RESULT_DECL'
10991      These nodes represent the value returned by a function.  When a
10992      value is assigned to a `RESULT_DECL', that indicates that the
10993      value should be returned, via bitwise copy, by the function.  You
10994      can use `DECL_SIZE' and `DECL_ALIGN' on a `RESULT_DECL', just as
10995      with a `VAR_DECL'.
10997 `TYPE_DECL'
10998      These nodes represent `typedef' declarations.  The `TREE_TYPE' is
10999      the type declared to have the name given by `DECL_NAME'.  In some
11000      cases, there is no associated name.
11002 `VAR_DECL'
11003      These nodes represent variables with namespace or block scope, as
11004      well as static data members.  The `DECL_SIZE' and `DECL_ALIGN' are
11005      analogous to `TYPE_SIZE' and `TYPE_ALIGN'.  For a declaration, you
11006      should always use the `DECL_SIZE' and `DECL_ALIGN' rather than the
11007      `TYPE_SIZE' and `TYPE_ALIGN' given by the `TREE_TYPE', since
11008      special attributes may have been applied to the variable to give
11009      it a particular size and alignment.  You may use the predicates
11010      `DECL_THIS_STATIC' or `DECL_THIS_EXTERN' to test whether the
11011      storage class specifiers `static' or `extern' were used to declare
11012      a variable.
11014      If this variable is initialized (but does not require a
11015      constructor), the `DECL_INITIAL' will be an expression for the
11016      initializer.  The initializer should be evaluated, and a bitwise
11017      copy into the variable performed.  If the `DECL_INITIAL' is the
11018      `error_mark_node', there is an initializer, but it is given by an
11019      explicit statement later in the code; no bitwise copy is required.
11021      GCC provides an extension that allows either automatic variables,
11022      or global variables, to be placed in particular registers.  This
11023      extension is being used for a particular `VAR_DECL' if
11024      `DECL_REGISTER' holds for the `VAR_DECL', and if
11025      `DECL_ASSEMBLER_NAME' is not equal to `DECL_NAME'.  In that case,
11026      `DECL_ASSEMBLER_NAME' is the name of the register into which the
11027      variable will be placed.
11029 `PARM_DECL'
11030      Used to represent a parameter to a function.  Treat these nodes
11031      similarly to `VAR_DECL' nodes.  These nodes only appear in the
11032      `DECL_ARGUMENTS' for a `FUNCTION_DECL'.
11034      The `DECL_ARG_TYPE' for a `PARM_DECL' is the type that will
11035      actually be used when a value is passed to this function.  It may
11036      be a wider type than the `TREE_TYPE' of the parameter; for
11037      example, the ordinary type might be `short' while the
11038      `DECL_ARG_TYPE' is `int'.
11040 `DEBUG_EXPR_DECL'
11041      Used to represent an anonymous debug-information temporary created
11042      to hold an expression as it is optimized away, so that its value
11043      can be referenced in debug bind statements.
11045 `FIELD_DECL'
11046      These nodes represent non-static data members.  The `DECL_SIZE' and
11047      `DECL_ALIGN' behave as for `VAR_DECL' nodes.  The position of the
11048      field within the parent record is specified by a combination of
11049      three attributes.  `DECL_FIELD_OFFSET' is the position, counting
11050      in bytes, of the `DECL_OFFSET_ALIGN'-bit sized word containing the
11051      bit of the field closest to the beginning of the structure.
11052      `DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the
11053      field within this word; this may be nonzero even for fields that
11054      are not bit-fields, since `DECL_OFFSET_ALIGN' may be greater than
11055      the natural alignment of the field's type.
11057      If `DECL_C_BIT_FIELD' holds, this field is a bit-field.  In a
11058      bit-field, `DECL_BIT_FIELD_TYPE' also contains the type that was
11059      originally specified for it, while DECL_TYPE may be a modified
11060      type with lesser precision, according to the size of the bit field.
11062 `NAMESPACE_DECL'
11063      Namespaces provide a name hierarchy for other declarations.  They
11064      appear in the `DECL_CONTEXT' of other `_DECL' nodes.
11067 \x1f
11068 File: gccint.info,  Node: Internal structure,  Prev: Working with declarations,  Up: Declarations
11070 11.4.2 Internal structure
11071 -------------------------
11073 `DECL' nodes are represented internally as a hierarchy of structures.
11075 * Menu:
11077 * Current structure hierarchy::  The current DECL node structure
11078 hierarchy.
11079 * Adding new DECL node types:: How to add a new DECL node to a
11080 frontend.
11082 \x1f
11083 File: gccint.info,  Node: Current structure hierarchy,  Next: Adding new DECL node types,  Up: Internal structure
11085 11.4.2.1 Current structure hierarchy
11086 ....................................
11088 `struct tree_decl_minimal'
11089      This is the minimal structure to inherit from in order for common
11090      `DECL' macros to work.  The fields it contains are a unique ID,
11091      source location, context, and name.
11093 `struct tree_decl_common'
11094      This structure inherits from `struct tree_decl_minimal'.  It
11095      contains fields that most `DECL' nodes need, such as a field to
11096      store alignment, machine mode, size, and attributes.
11098 `struct tree_field_decl'
11099      This structure inherits from `struct tree_decl_common'.  It is
11100      used to represent `FIELD_DECL'.
11102 `struct tree_label_decl'
11103      This structure inherits from `struct tree_decl_common'.  It is
11104      used to represent `LABEL_DECL'.
11106 `struct tree_translation_unit_decl'
11107      This structure inherits from `struct tree_decl_common'.  It is
11108      used to represent `TRANSLATION_UNIT_DECL'.
11110 `struct tree_decl_with_rtl'
11111      This structure inherits from `struct tree_decl_common'.  It
11112      contains a field to store the low-level RTL associated with a
11113      `DECL' node.
11115 `struct tree_result_decl'
11116      This structure inherits from `struct tree_decl_with_rtl'.  It is
11117      used to represent `RESULT_DECL'.
11119 `struct tree_const_decl'
11120      This structure inherits from `struct tree_decl_with_rtl'.  It is
11121      used to represent `CONST_DECL'.
11123 `struct tree_parm_decl'
11124      This structure inherits from `struct tree_decl_with_rtl'.  It is
11125      used to represent `PARM_DECL'.
11127 `struct tree_decl_with_vis'
11128      This structure inherits from `struct tree_decl_with_rtl'.  It
11129      contains fields necessary to store visibility information, as well
11130      as a section name and assembler name.
11132 `struct tree_var_decl'
11133      This structure inherits from `struct tree_decl_with_vis'.  It is
11134      used to represent `VAR_DECL'.
11136 `struct tree_function_decl'
11137      This structure inherits from `struct tree_decl_with_vis'.  It is
11138      used to represent `FUNCTION_DECL'.
11141 \x1f
11142 File: gccint.info,  Node: Adding new DECL node types,  Prev: Current structure hierarchy,  Up: Internal structure
11144 11.4.2.2 Adding new DECL node types
11145 ...................................
11147 Adding a new `DECL' tree consists of the following steps
11149 Add a new tree code for the `DECL' node
11150      For language specific `DECL' nodes, there is a `.def' file in each
11151      frontend directory where the tree code should be added.  For
11152      `DECL' nodes that are part of the middle-end, the code should be
11153      added to `tree.def'.
11155 Create a new structure type for the `DECL' node
11156      These structures should inherit from one of the existing
11157      structures in the language hierarchy by using that structure as
11158      the first member.
11160           struct tree_foo_decl
11161           {
11162              struct tree_decl_with_vis common;
11163           }
11165      Would create a structure name `tree_foo_decl' that inherits from
11166      `struct tree_decl_with_vis'.
11168      For language specific `DECL' nodes, this new structure type should
11169      go in the appropriate `.h' file.  For `DECL' nodes that are part
11170      of the middle-end, the structure type should go in `tree.h'.
11172 Add a member to the tree structure enumerator for the node
11173      For garbage collection and dynamic checking purposes, each `DECL'
11174      node structure type is required to have a unique enumerator value
11175      specified with it.  For language specific `DECL' nodes, this new
11176      enumerator value should go in the appropriate `.def' file.  For
11177      `DECL' nodes that are part of the middle-end, the enumerator
11178      values are specified in `treestruct.def'.
11180 Update `union tree_node'
11181      In order to make your new structure type usable, it must be added
11182      to `union tree_node'.  For language specific `DECL' nodes, a new
11183      entry should be added to the appropriate `.h' file of the form
11184             struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
11185      For `DECL' nodes that are part of the middle-end, the additional
11186      member goes directly into `union tree_node' in `tree.h'.
11188 Update dynamic checking info
11189      In order to be able to check whether accessing a named portion of
11190      `union tree_node' is legal, and whether a certain `DECL' node
11191      contains one of the enumerated `DECL' node structures in the
11192      hierarchy, a simple lookup table is used.  This lookup table needs
11193      to be kept up to date with the tree structure hierarchy, or else
11194      checking and containment macros will fail inappropriately.
11196      For language specific `DECL' nodes, their is an `init_ts' function
11197      in an appropriate `.c' file, which initializes the lookup table.
11198      Code setting up the table for new `DECL' nodes should be added
11199      there.  For each `DECL' tree code and enumerator value
11200      representing a member of the inheritance  hierarchy, the table
11201      should contain 1 if that tree code inherits (directly or
11202      indirectly) from that member.  Thus, a `FOO_DECL' node derived
11203      from `struct decl_with_rtl', and enumerator value `TS_FOO_DECL',
11204      would be set up as follows
11205           tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
11206           tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
11207           tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
11208           tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
11210      For `DECL' nodes that are part of the middle-end, the setup code
11211      goes into `tree.c'.
11213 Add macros to access any new fields and flags
11214      Each added field or flag should have a macro that is used to access
11215      it, that performs appropriate checking to ensure only the right
11216      type of `DECL' nodes access the field.
11218      These macros generally take the following form
11219           #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
11220      However, if the structure is simply a base class for further
11221      structures, something like the following should be used
11222           #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT)
11223           #define BASE_STRUCT_FIELDNAME(NODE) \
11224              (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname
11227 \x1f
11228 File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: GENERIC
11230 11.5 Attributes in trees
11231 ========================
11233 Attributes, as specified using the `__attribute__' keyword, are
11234 represented internally as a `TREE_LIST'.  The `TREE_PURPOSE' is the
11235 name of the attribute, as an `IDENTIFIER_NODE'.  The `TREE_VALUE' is a
11236 `TREE_LIST' of the arguments of the attribute, if any, or `NULL_TREE'
11237 if there are no arguments; the arguments are stored as the `TREE_VALUE'
11238 of successive entries in the list, and may be identifiers or
11239 expressions.  The `TREE_CHAIN' of the attribute is the next attribute
11240 in a list of attributes applying to the same declaration or type, or
11241 `NULL_TREE' if there are no further attributes in the list.
11243  Attributes may be attached to declarations and to types; these
11244 attributes may be accessed with the following macros.  All attributes
11245 are stored in this way, and many also cause other changes to the
11246 declaration or type or to other internal compiler data structures.
11248  -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
11249      This macro returns the attributes on the declaration DECL.
11251  -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
11252      This macro returns the attributes on the type TYPE.
11254 \x1f
11255 File: gccint.info,  Node: Expression trees,  Next: Statements,  Prev: Attributes,  Up: GENERIC
11257 11.6 Expressions
11258 ================
11260 The internal representation for expressions is for the most part quite
11261 straightforward.  However, there are a few facts that one must bear in
11262 mind.  In particular, the expression "tree" is actually a directed
11263 acyclic graph.  (For example there may be many references to the integer
11264 constant zero throughout the source program; many of these will be
11265 represented by the same expression node.)  You should not rely on
11266 certain kinds of node being shared, nor should you rely on certain
11267 kinds of nodes being unshared.
11269  The following macros can be used with all expression nodes:
11271 `TREE_TYPE'
11272      Returns the type of the expression.  This value may not be
11273      precisely the same type that would be given the expression in the
11274      original program.
11276  In what follows, some nodes that one might expect to always have type
11277 `bool' are documented to have either integral or boolean type.  At some
11278 point in the future, the C front end may also make use of this same
11279 intermediate representation, and at this point these nodes will
11280 certainly have integral type.  The previous sentence is not meant to
11281 imply that the C++ front end does not or will not give these nodes
11282 integral type.
11284  Below, we list the various kinds of expression nodes.  Except where
11285 noted otherwise, the operands to an expression are accessed using the
11286 `TREE_OPERAND' macro.  For example, to access the first operand to a
11287 binary plus expression `expr', use:
11289      TREE_OPERAND (expr, 0)
11290  As this example indicates, the operands are zero-indexed.
11292 * Menu:
11294 * Constants: Constant expressions.
11295 * Storage References::
11296 * Unary and Binary Expressions::
11297 * Vectors::
11299 \x1f
11300 File: gccint.info,  Node: Constant expressions,  Next: Storage References,  Up: Expression trees
11302 11.6.1 Constant expressions
11303 ---------------------------
11305 The table below begins with constants, moves on to unary expressions,
11306 then proceeds to binary expressions, and concludes with various other
11307 kinds of expressions:
11309 `INTEGER_CST'
11310      These nodes represent integer constants.  Note that the type of
11311      these constants is obtained with `TREE_TYPE'; they are not always
11312      of type `int'.  In particular, `char' constants are represented
11313      with `INTEGER_CST' nodes.  The value of the integer constant `e' is
11314      given by
11315           ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT)
11316           + TREE_INST_CST_LOW (e))
11317      HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms.
11318      Both `TREE_INT_CST_HIGH' and `TREE_INT_CST_LOW' return a
11319      `HOST_WIDE_INT'.  The value of an `INTEGER_CST' is interpreted as
11320      a signed or unsigned quantity depending on the type of the
11321      constant.  In general, the expression given above will overflow,
11322      so it should not be used to calculate the value of the constant.
11324      The variable `integer_zero_node' is an integer constant with value
11325      zero.  Similarly, `integer_one_node' is an integer constant with
11326      value one.  The `size_zero_node' and `size_one_node' variables are
11327      analogous, but have type `size_t' rather than `int'.
11329      The function `tree_int_cst_lt' is a predicate which holds if its
11330      first argument is less than its second.  Both constants are
11331      assumed to have the same signedness (i.e., either both should be
11332      signed or both should be unsigned.)  The full width of the
11333      constant is used when doing the comparison; the usual rules about
11334      promotions and conversions are ignored.  Similarly,
11335      `tree_int_cst_equal' holds if the two constants are equal.  The
11336      `tree_int_cst_sgn' function returns the sign of a constant.  The
11337      value is `1', `0', or `-1' according on whether the constant is
11338      greater than, equal to, or less than zero.  Again, the signedness
11339      of the constant's type is taken into account; an unsigned constant
11340      is never less than zero, no matter what its bit-pattern.
11342 `REAL_CST'
11343      FIXME: Talk about how to obtain representations of this constant,
11344      do comparisons, and so forth.
11346 `FIXED_CST'
11347      These nodes represent fixed-point constants.  The type of these
11348      constants is obtained with `TREE_TYPE'.  `TREE_FIXED_CST_PTR'
11349      points to a `struct fixed_value';  `TREE_FIXED_CST' returns the
11350      structure itself.  `struct fixed_value' contains `data' with the
11351      size of two `HOST_BITS_PER_WIDE_INT' and `mode' as the associated
11352      fixed-point machine mode for `data'.
11354 `COMPLEX_CST'
11355      These nodes are used to represent complex number constants, that
11356      is a `__complex__' whose parts are constant nodes.  The
11357      `TREE_REALPART' and `TREE_IMAGPART' return the real and the
11358      imaginary parts respectively.
11360 `VECTOR_CST'
11361      These nodes are used to represent vector constants, whose parts are
11362      constant nodes.  Each individual constant node is either an
11363      integer or a double constant node.  The first operand is a
11364      `TREE_LIST' of the constant nodes and is accessed through
11365      `TREE_VECTOR_CST_ELTS'.
11367 `STRING_CST'
11368      These nodes represent string-constants.  The `TREE_STRING_LENGTH'
11369      returns the length of the string, as an `int'.  The
11370      `TREE_STRING_POINTER' is a `char*' containing the string itself.
11371      The string may not be `NUL'-terminated, and it may contain
11372      embedded `NUL' characters.  Therefore, the `TREE_STRING_LENGTH'
11373      includes the trailing `NUL' if it is present.
11375      For wide string constants, the `TREE_STRING_LENGTH' is the number
11376      of bytes in the string, and the `TREE_STRING_POINTER' points to an
11377      array of the bytes of the string, as represented on the target
11378      system (that is, as integers in the target endianness).  Wide and
11379      non-wide string constants are distinguished only by the `TREE_TYPE'
11380      of the `STRING_CST'.
11382      FIXME: The formats of string constants are not well-defined when
11383      the target system bytes are not the same width as host system
11384      bytes.
11387 \x1f
11388 File: gccint.info,  Node: Storage References,  Next: Unary and Binary Expressions,  Prev: Constant expressions,  Up: Expression trees
11390 11.6.2 References to storage
11391 ----------------------------
11393 `ARRAY_REF'
11394      These nodes represent array accesses.  The first operand is the
11395      array; the second is the index.  To calculate the address of the
11396      memory accessed, you must scale the index by the size of the type
11397      of the array elements.  The type of these expressions must be the
11398      type of a component of the array.  The third and fourth operands
11399      are used after gimplification to represent the lower bound and
11400      component size but should not be used directly; call
11401      `array_ref_low_bound' and `array_ref_element_size' instead.
11403 `ARRAY_RANGE_REF'
11404      These nodes represent access to a range (or "slice") of an array.
11405      The operands are the same as that for `ARRAY_REF' and have the same
11406      meanings.  The type of these expressions must be an array whose
11407      component type is the same as that of the first operand.  The
11408      range of that array type determines the amount of data these
11409      expressions access.
11411 `TARGET_MEM_REF'
11412      These nodes represent memory accesses whose address directly map to
11413      an addressing mode of the target architecture.  The first argument
11414      is `TMR_SYMBOL' and must be a `VAR_DECL' of an object with a fixed
11415      address.  The second argument is `TMR_BASE' and the third one is
11416      `TMR_INDEX'.  The fourth argument is `TMR_STEP' and must be an
11417      `INTEGER_CST'.  The fifth argument is `TMR_OFFSET' and must be an
11418      `INTEGER_CST'.  Any of the arguments may be NULL if the
11419      appropriate component does not appear in the address.  Address of
11420      the `TARGET_MEM_REF' is determined in the following way.
11422           &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
11424      The sixth argument is the reference to the original memory access,
11425      which is preserved for the purposes of the RTL alias analysis.
11426      The seventh argument is a tag representing the results of tree
11427      level alias analysis.
11429 `ADDR_EXPR'
11430      These nodes are used to represent the address of an object.  (These
11431      expressions will always have pointer or reference type.)  The
11432      operand may be another expression, or it may be a declaration.
11434      As an extension, GCC allows users to take the address of a label.
11435      In this case, the operand of the `ADDR_EXPR' will be a
11436      `LABEL_DECL'.  The type of such an expression is `void*'.
11438      If the object addressed is not an lvalue, a temporary is created,
11439      and the address of the temporary is used.
11441 `INDIRECT_REF'
11442      These nodes are used to represent the object pointed to by a
11443      pointer.  The operand is the pointer being dereferenced; it will
11444      always have pointer or reference type.
11446 `COMPONENT_REF'
11447      These nodes represent non-static data member accesses.  The first
11448      operand is the object (rather than a pointer to it); the second
11449      operand is the `FIELD_DECL' for the data member.  The third
11450      operand represents the byte offset of the field, but should not be
11451      used directly; call `component_ref_field_offset' instead.
11454 \x1f
11455 File: gccint.info,  Node: Unary and Binary Expressions,  Next: Vectors,  Prev: Storage References,  Up: Expression trees
11457 11.6.3 Unary and Binary Expressions
11458 -----------------------------------
11460 `NEGATE_EXPR'
11461      These nodes represent unary negation of the single operand, for
11462      both integer and floating-point types.  The type of negation can be
11463      determined by looking at the type of the expression.
11465      The behavior of this operation on signed arithmetic overflow is
11466      controlled by the `flag_wrapv' and `flag_trapv' variables.
11468 `ABS_EXPR'
11469      These nodes represent the absolute value of the single operand, for
11470      both integer and floating-point types.  This is typically used to
11471      implement the `abs', `labs' and `llabs' builtins for integer
11472      types, and the `fabs', `fabsf' and `fabsl' builtins for floating
11473      point types.  The type of abs operation can be determined by
11474      looking at the type of the expression.
11476      This node is not used for complex types.  To represent the modulus
11477      or complex abs of a complex value, use the `BUILT_IN_CABS',
11478      `BUILT_IN_CABSF' or `BUILT_IN_CABSL' builtins, as used to
11479      implement the C99 `cabs', `cabsf' and `cabsl' built-in functions.
11481 `BIT_NOT_EXPR'
11482      These nodes represent bitwise complement, and will always have
11483      integral type.  The only operand is the value to be complemented.
11485 `TRUTH_NOT_EXPR'
11486      These nodes represent logical negation, and will always have
11487      integral (or boolean) type.  The operand is the value being
11488      negated.  The type of the operand and that of the result are
11489      always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
11491 `PREDECREMENT_EXPR'
11492 `PREINCREMENT_EXPR'
11493 `POSTDECREMENT_EXPR'
11494 `POSTINCREMENT_EXPR'
11495      These nodes represent increment and decrement expressions.  The
11496      value of the single operand is computed, and the operand
11497      incremented or decremented.  In the case of `PREDECREMENT_EXPR' and
11498      `PREINCREMENT_EXPR', the value of the expression is the value
11499      resulting after the increment or decrement; in the case of
11500      `POSTDECREMENT_EXPR' and `POSTINCREMENT_EXPR' is the value before
11501      the increment or decrement occurs.  The type of the operand, like
11502      that of the result, will be either integral, boolean, or
11503      floating-point.
11505 `FIX_TRUNC_EXPR'
11506      These nodes represent conversion of a floating-point value to an
11507      integer.  The single operand will have a floating-point type, while
11508      the complete expression will have an integral (or boolean) type.
11509      The operand is rounded towards zero.
11511 `FLOAT_EXPR'
11512      These nodes represent conversion of an integral (or boolean) value
11513      to a floating-point value.  The single operand will have integral
11514      type, while the complete expression will have a floating-point
11515      type.
11517      FIXME: How is the operand supposed to be rounded?  Is this
11518      dependent on `-mieee'?
11520 `COMPLEX_EXPR'
11521      These nodes are used to represent complex numbers constructed from
11522      two expressions of the same (integer or real) type.  The first
11523      operand is the real part and the second operand is the imaginary
11524      part.
11526 `CONJ_EXPR'
11527      These nodes represent the conjugate of their operand.
11529 `REALPART_EXPR'
11530 `IMAGPART_EXPR'
11531      These nodes represent respectively the real and the imaginary parts
11532      of complex numbers (their sole argument).
11534 `NON_LVALUE_EXPR'
11535      These nodes indicate that their one and only operand is not an
11536      lvalue.  A back end can treat these identically to the single
11537      operand.
11539 `NOP_EXPR'
11540      These nodes are used to represent conversions that do not require
11541      any code-generation.  For example, conversion of a `char*' to an
11542      `int*' does not require any code be generated; such a conversion is
11543      represented by a `NOP_EXPR'.  The single operand is the expression
11544      to be converted.  The conversion from a pointer to a reference is
11545      also represented with a `NOP_EXPR'.
11547 `CONVERT_EXPR'
11548      These nodes are similar to `NOP_EXPR's, but are used in those
11549      situations where code may need to be generated.  For example, if an
11550      `int*' is converted to an `int' code may need to be generated on
11551      some platforms.  These nodes are never used for C++-specific
11552      conversions, like conversions between pointers to different
11553      classes in an inheritance hierarchy.  Any adjustments that need to
11554      be made in such cases are always indicated explicitly.  Similarly,
11555      a user-defined conversion is never represented by a
11556      `CONVERT_EXPR'; instead, the function calls are made explicit.
11558 `FIXED_CONVERT_EXPR'
11559      These nodes are used to represent conversions that involve
11560      fixed-point values.  For example, from a fixed-point value to
11561      another fixed-point value, from an integer to a fixed-point value,
11562      from a fixed-point value to an integer, from a floating-point
11563      value to a fixed-point value, or from a fixed-point value to a
11564      floating-point value.
11566 `LSHIFT_EXPR'
11567 `RSHIFT_EXPR'
11568      These nodes represent left and right shifts, respectively.  The
11569      first operand is the value to shift; it will always be of integral
11570      type.  The second operand is an expression for the number of bits
11571      by which to shift.  Right shift should be treated as arithmetic,
11572      i.e., the high-order bits should be zero-filled when the
11573      expression has unsigned type and filled with the sign bit when the
11574      expression has signed type.  Note that the result is undefined if
11575      the second operand is larger than or equal to the first operand's
11576      type size.
11578 `BIT_IOR_EXPR'
11579 `BIT_XOR_EXPR'
11580 `BIT_AND_EXPR'
11581      These nodes represent bitwise inclusive or, bitwise exclusive or,
11582      and bitwise and, respectively.  Both operands will always have
11583      integral type.
11585 `TRUTH_ANDIF_EXPR'
11586 `TRUTH_ORIF_EXPR'
11587      These nodes represent logical "and" and logical "or", respectively.
11588      These operators are not strict; i.e., the second operand is
11589      evaluated only if the value of the expression is not determined by
11590      evaluation of the first operand.  The type of the operands and
11591      that of the result are always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
11593 `TRUTH_AND_EXPR'
11594 `TRUTH_OR_EXPR'
11595 `TRUTH_XOR_EXPR'
11596      These nodes represent logical and, logical or, and logical
11597      exclusive or.  They are strict; both arguments are always
11598      evaluated.  There are no corresponding operators in C or C++, but
11599      the front end will sometimes generate these expressions anyhow, if
11600      it can tell that strictness does not matter.  The type of the
11601      operands and that of the result are always of `BOOLEAN_TYPE' or
11602      `INTEGER_TYPE'.
11604 `POINTER_PLUS_EXPR'
11605      This node represents pointer arithmetic.  The first operand is
11606      always a pointer/reference type.  The second operand is always an
11607      unsigned integer type compatible with sizetype.  This is the only
11608      binary arithmetic operand that can operate on pointer types.
11610 `PLUS_EXPR'
11611 `MINUS_EXPR'
11612 `MULT_EXPR'
11613      These nodes represent various binary arithmetic operations.
11614      Respectively, these operations are addition, subtraction (of the
11615      second operand from the first) and multiplication.  Their operands
11616      may have either integral or floating type, but there will never be
11617      case in which one operand is of floating type and the other is of
11618      integral type.
11620      The behavior of these operations on signed arithmetic overflow is
11621      controlled by the `flag_wrapv' and `flag_trapv' variables.
11623 `RDIV_EXPR'
11624      This node represents a floating point division operation.
11626 `TRUNC_DIV_EXPR'
11627 `FLOOR_DIV_EXPR'
11628 `CEIL_DIV_EXPR'
11629 `ROUND_DIV_EXPR'
11630      These nodes represent integer division operations that return an
11631      integer result.  `TRUNC_DIV_EXPR' rounds towards zero,
11632      `FLOOR_DIV_EXPR' rounds towards negative infinity, `CEIL_DIV_EXPR'
11633      rounds towards positive infinity and `ROUND_DIV_EXPR' rounds to
11634      the closest integer.  Integer division in C and C++ is truncating,
11635      i.e. `TRUNC_DIV_EXPR'.
11637      The behavior of these operations on signed arithmetic overflow,
11638      when dividing the minimum signed integer by minus one, is
11639      controlled by the `flag_wrapv' and `flag_trapv' variables.
11641 `TRUNC_MOD_EXPR'
11642 `FLOOR_MOD_EXPR'
11643 `CEIL_MOD_EXPR'
11644 `ROUND_MOD_EXPR'
11645      These nodes represent the integer remainder or modulus operation.
11646      The integer modulus of two operands `a' and `b' is defined as `a -
11647      (a/b)*b' where the division calculated using the corresponding
11648      division operator.  Hence for `TRUNC_MOD_EXPR' this definition
11649      assumes division using truncation towards zero, i.e.
11650      `TRUNC_DIV_EXPR'.  Integer remainder in C and C++ uses truncating
11651      division, i.e. `TRUNC_MOD_EXPR'.
11653 `EXACT_DIV_EXPR'
11654      The `EXACT_DIV_EXPR' code is used to represent integer divisions
11655      where the numerator is known to be an exact multiple of the
11656      denominator.  This allows the backend to choose between the faster
11657      of `TRUNC_DIV_EXPR', `CEIL_DIV_EXPR' and `FLOOR_DIV_EXPR' for the
11658      current target.
11660 `LT_EXPR'
11661 `LE_EXPR'
11662 `GT_EXPR'
11663 `GE_EXPR'
11664 `EQ_EXPR'
11665 `NE_EXPR'
11666      These nodes represent the less than, less than or equal to, greater
11667      than, greater than or equal to, equal, and not equal comparison
11668      operators.  The first and second operand with either be both of
11669      integral type or both of floating type.  The result type of these
11670      expressions will always be of integral or boolean type.  These
11671      operations return the result type's zero value for false, and the
11672      result type's one value for true.
11674      For floating point comparisons, if we honor IEEE NaNs and either
11675      operand is NaN, then `NE_EXPR' always returns true and the
11676      remaining operators always return false.  On some targets,
11677      comparisons against an IEEE NaN, other than equality and
11678      inequality, may generate a floating point exception.
11680 `ORDERED_EXPR'
11681 `UNORDERED_EXPR'
11682      These nodes represent non-trapping ordered and unordered comparison
11683      operators.  These operations take two floating point operands and
11684      determine whether they are ordered or unordered relative to each
11685      other.  If either operand is an IEEE NaN, their comparison is
11686      defined to be unordered, otherwise the comparison is defined to be
11687      ordered.  The result type of these expressions will always be of
11688      integral or boolean type.  These operations return the result
11689      type's zero value for false, and the result type's one value for
11690      true.
11692 `UNLT_EXPR'
11693 `UNLE_EXPR'
11694 `UNGT_EXPR'
11695 `UNGE_EXPR'
11696 `UNEQ_EXPR'
11697 `LTGT_EXPR'
11698      These nodes represent the unordered comparison operators.  These
11699      operations take two floating point operands and determine whether
11700      the operands are unordered or are less than, less than or equal to,
11701      greater than, greater than or equal to, or equal respectively.  For
11702      example, `UNLT_EXPR' returns true if either operand is an IEEE NaN
11703      or the first operand is less than the second.  With the possible
11704      exception of `LTGT_EXPR', all of these operations are guaranteed
11705      not to generate a floating point exception.  The result type of
11706      these expressions will always be of integral or boolean type.
11707      These operations return the result type's zero value for false,
11708      and the result type's one value for true.
11710 `MODIFY_EXPR'
11711      These nodes represent assignment.  The left-hand side is the first
11712      operand; the right-hand side is the second operand.  The left-hand
11713      side will be a `VAR_DECL', `INDIRECT_REF', `COMPONENT_REF', or
11714      other lvalue.
11716      These nodes are used to represent not only assignment with `=' but
11717      also compound assignments (like `+='), by reduction to `='
11718      assignment.  In other words, the representation for `i += 3' looks
11719      just like that for `i = i + 3'.
11721 `INIT_EXPR'
11722      These nodes are just like `MODIFY_EXPR', but are used only when a
11723      variable is initialized, rather than assigned to subsequently.
11724      This means that we can assume that the target of the
11725      initialization is not used in computing its own value; any
11726      reference to the lhs in computing the rhs is undefined.
11728 `COMPOUND_EXPR'
11729      These nodes represent comma-expressions.  The first operand is an
11730      expression whose value is computed and thrown away prior to the
11731      evaluation of the second operand.  The value of the entire
11732      expression is the value of the second operand.
11734 `COND_EXPR'
11735      These nodes represent `?:' expressions.  The first operand is of
11736      boolean or integral type.  If it evaluates to a nonzero value, the
11737      second operand should be evaluated, and returned as the value of
11738      the expression.  Otherwise, the third operand is evaluated, and
11739      returned as the value of the expression.
11741      The second operand must have the same type as the entire
11742      expression, unless it unconditionally throws an exception or calls
11743      a noreturn function, in which case it should have void type.  The
11744      same constraints apply to the third operand.  This allows array
11745      bounds checks to be represented conveniently as `(i >= 0 && i <
11746      10) ? i : abort()'.
11748      As a GNU extension, the C language front-ends allow the second
11749      operand of the `?:' operator may be omitted in the source.  For
11750      example, `x ? : 3' is equivalent to `x ? x : 3', assuming that `x'
11751      is an expression without side-effects.  In the tree
11752      representation, however, the second operand is always present,
11753      possibly protected by `SAVE_EXPR' if the first argument does cause
11754      side-effects.
11756 `CALL_EXPR'
11757      These nodes are used to represent calls to functions, including
11758      non-static member functions.  `CALL_EXPR's are implemented as
11759      expression nodes with a variable number of operands.  Rather than
11760      using `TREE_OPERAND' to extract them, it is preferable to use the
11761      specialized accessor macros and functions that operate
11762      specifically on `CALL_EXPR' nodes.
11764      `CALL_EXPR_FN' returns a pointer to the function to call; it is
11765      always an expression whose type is a `POINTER_TYPE'.
11767      The number of arguments to the call is returned by
11768      `call_expr_nargs', while the arguments themselves can be accessed
11769      with the `CALL_EXPR_ARG' macro.  The arguments are zero-indexed
11770      and numbered left-to-right.  You can iterate over the arguments
11771      using `FOR_EACH_CALL_EXPR_ARG', as in:
11773           tree call, arg;
11774           call_expr_arg_iterator iter;
11775           FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
11776             /* arg is bound to successive arguments of call.  */
11777             ...;
11779      For non-static member functions, there will be an operand
11780      corresponding to the `this' pointer.  There will always be
11781      expressions corresponding to all of the arguments, even if the
11782      function is declared with default arguments and some arguments are
11783      not explicitly provided at the call sites.
11785      `CALL_EXPR's also have a `CALL_EXPR_STATIC_CHAIN' operand that is
11786      used to implement nested functions.  This operand is otherwise
11787      null.
11789 `CLEANUP_POINT_EXPR'
11790      These nodes represent full-expressions.  The single operand is an
11791      expression to evaluate.  Any destructor calls engendered by the
11792      creation of temporaries during the evaluation of that expression
11793      should be performed immediately after the expression is evaluated.
11795 `CONSTRUCTOR'
11796      These nodes represent the brace-enclosed initializers for a
11797      structure or array.  The first operand is reserved for use by the
11798      back end.  The second operand is a `TREE_LIST'.  If the
11799      `TREE_TYPE' of the `CONSTRUCTOR' is a `RECORD_TYPE' or
11800      `UNION_TYPE', then the `TREE_PURPOSE' of each node in the
11801      `TREE_LIST' will be a `FIELD_DECL' and the `TREE_VALUE' of each
11802      node will be the expression used to initialize that field.
11804      If the `TREE_TYPE' of the `CONSTRUCTOR' is an `ARRAY_TYPE', then
11805      the `TREE_PURPOSE' of each element in the `TREE_LIST' will be an
11806      `INTEGER_CST' or a `RANGE_EXPR' of two `INTEGER_CST's.  A single
11807      `INTEGER_CST' indicates which element of the array (indexed from
11808      zero) is being assigned to.  A `RANGE_EXPR' indicates an inclusive
11809      range of elements to initialize.  In both cases the `TREE_VALUE'
11810      is the corresponding initializer.  It is re-evaluated for each
11811      element of a `RANGE_EXPR'.  If the `TREE_PURPOSE' is `NULL_TREE',
11812      then the initializer is for the next available array element.
11814      In the front end, you should not depend on the fields appearing in
11815      any particular order.  However, in the middle end, fields must
11816      appear in declaration order.  You should not assume that all
11817      fields will be represented.  Unrepresented fields will be set to
11818      zero.
11820 `COMPOUND_LITERAL_EXPR'
11821      These nodes represent ISO C99 compound literals.  The
11822      `COMPOUND_LITERAL_EXPR_DECL_EXPR' is a `DECL_EXPR' containing an
11823      anonymous `VAR_DECL' for the unnamed object represented by the
11824      compound literal; the `DECL_INITIAL' of that `VAR_DECL' is a
11825      `CONSTRUCTOR' representing the brace-enclosed list of initializers
11826      in the compound literal.  That anonymous `VAR_DECL' can also be
11827      accessed directly by the `COMPOUND_LITERAL_EXPR_DECL' macro.
11829 `SAVE_EXPR'
11830      A `SAVE_EXPR' represents an expression (possibly involving
11831      side-effects) that is used more than once.  The side-effects should
11832      occur only the first time the expression is evaluated.  Subsequent
11833      uses should just reuse the computed value.  The first operand to
11834      the `SAVE_EXPR' is the expression to evaluate.  The side-effects
11835      should be executed where the `SAVE_EXPR' is first encountered in a
11836      depth-first preorder traversal of the expression tree.
11838 `TARGET_EXPR'
11839      A `TARGET_EXPR' represents a temporary object.  The first operand
11840      is a `VAR_DECL' for the temporary variable.  The second operand is
11841      the initializer for the temporary.  The initializer is evaluated
11842      and, if non-void, copied (bitwise) into the temporary.  If the
11843      initializer is void, that means that it will perform the
11844      initialization itself.
11846      Often, a `TARGET_EXPR' occurs on the right-hand side of an
11847      assignment, or as the second operand to a comma-expression which is
11848      itself the right-hand side of an assignment, etc.  In this case,
11849      we say that the `TARGET_EXPR' is "normal"; otherwise, we say it is
11850      "orphaned".  For a normal `TARGET_EXPR' the temporary variable
11851      should be treated as an alias for the left-hand side of the
11852      assignment, rather than as a new temporary variable.
11854      The third operand to the `TARGET_EXPR', if present, is a
11855      cleanup-expression (i.e., destructor call) for the temporary.  If
11856      this expression is orphaned, then this expression must be executed
11857      when the statement containing this expression is complete.  These
11858      cleanups must always be executed in the order opposite to that in
11859      which they were encountered.  Note that if a temporary is created
11860      on one branch of a conditional operator (i.e., in the second or
11861      third operand to a `COND_EXPR'), the cleanup must be run only if
11862      that branch is actually executed.
11864 `VA_ARG_EXPR'
11865      This node is used to implement support for the C/C++ variable
11866      argument-list mechanism.  It represents expressions like `va_arg
11867      (ap, type)'.  Its `TREE_TYPE' yields the tree representation for
11868      `type' and its sole argument yields the representation for `ap'.
11871 \x1f
11872 File: gccint.info,  Node: Vectors,  Prev: Unary and Binary Expressions,  Up: Expression trees
11874 11.6.4 Vectors
11875 --------------
11877 `VEC_LSHIFT_EXPR'
11878 `VEC_RSHIFT_EXPR'
11879      These nodes represent whole vector left and right shifts,
11880      respectively.  The first operand is the vector to shift; it will
11881      always be of vector type.  The second operand is an expression for
11882      the number of bits by which to shift.  Note that the result is
11883      undefined if the second operand is larger than or equal to the
11884      first operand's type size.
11886 `VEC_WIDEN_MULT_HI_EXPR'
11887 `VEC_WIDEN_MULT_LO_EXPR'
11888      These nodes represent widening vector multiplication of the high
11889      and low parts of the two input vectors, respectively.  Their
11890      operands are vectors that contain the same number of elements
11891      (`N') of the same integral type.  The result is a vector that
11892      contains half as many elements, of an integral type whose size is
11893      twice as wide.  In the case of `VEC_WIDEN_MULT_HI_EXPR' the high
11894      `N/2' elements of the two vector are multiplied to produce the
11895      vector of `N/2' products. In the case of `VEC_WIDEN_MULT_LO_EXPR'
11896      the low `N/2' elements of the two vector are multiplied to produce
11897      the vector of `N/2' products.
11899 `VEC_UNPACK_HI_EXPR'
11900 `VEC_UNPACK_LO_EXPR'
11901      These nodes represent unpacking of the high and low parts of the
11902      input vector, respectively.  The single operand is a vector that
11903      contains `N' elements of the same integral or floating point type.
11904      The result is a vector that contains half as many elements, of an
11905      integral or floating point type whose size is twice as wide.  In
11906      the case of `VEC_UNPACK_HI_EXPR' the high `N/2' elements of the
11907      vector are extracted and widened (promoted).  In the case of
11908      `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the vector are
11909      extracted and widened (promoted).
11911 `VEC_UNPACK_FLOAT_HI_EXPR'
11912 `VEC_UNPACK_FLOAT_LO_EXPR'
11913      These nodes represent unpacking of the high and low parts of the
11914      input vector, where the values are converted from fixed point to
11915      floating point.  The single operand is a vector that contains `N'
11916      elements of the same integral type.  The result is a vector that
11917      contains half as many elements of a floating point type whose size
11918      is twice as wide.  In the case of `VEC_UNPACK_HI_EXPR' the high
11919      `N/2' elements of the vector are extracted, converted and widened.
11920      In the case of `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the
11921      vector are extracted, converted and widened.
11923 `VEC_PACK_TRUNC_EXPR'
11924      This node represents packing of truncated elements of the two
11925      input vectors into the output vector.  Input operands are vectors
11926      that contain the same number of elements of the same integral or
11927      floating point type.  The result is a vector that contains twice
11928      as many elements of an integral or floating point type whose size
11929      is half as wide. The elements of the two vectors are demoted and
11930      merged (concatenated) to form the output vector.
11932 `VEC_PACK_SAT_EXPR'
11933      This node represents packing of elements of the two input vectors
11934      into the output vector using saturation.  Input operands are
11935      vectors that contain the same number of elements of the same
11936      integral type.  The result is a vector that contains twice as many
11937      elements of an integral type whose size is half as wide.  The
11938      elements of the two vectors are demoted and merged (concatenated)
11939      to form the output vector.
11941 `VEC_PACK_FIX_TRUNC_EXPR'
11942      This node represents packing of elements of the two input vectors
11943      into the output vector, where the values are converted from
11944      floating point to fixed point.  Input operands are vectors that
11945      contain the same number of elements of a floating point type.  The
11946      result is a vector that contains twice as many elements of an
11947      integral type whose size is half as wide.  The elements of the two
11948      vectors are merged (concatenated) to form the output vector.
11950 `VEC_EXTRACT_EVEN_EXPR'
11951 `VEC_EXTRACT_ODD_EXPR'
11952      These nodes represent extracting of the even/odd elements of the
11953      two input vectors, respectively. Their operands and result are
11954      vectors that contain the same number of elements of the same type.
11956 `VEC_INTERLEAVE_HIGH_EXPR'
11957 `VEC_INTERLEAVE_LOW_EXPR'
11958      These nodes represent merging and interleaving of the high/low
11959      elements of the two input vectors, respectively. The operands and
11960      the result are vectors that contain the same number of elements
11961      (`N') of the same type.  In the case of
11962      `VEC_INTERLEAVE_HIGH_EXPR', the high `N/2' elements of the first
11963      input vector are interleaved with the high `N/2' elements of the
11964      second input vector. In the case of `VEC_INTERLEAVE_LOW_EXPR', the
11965      low `N/2' elements of the first input vector are interleaved with
11966      the low `N/2' elements of the second input vector.
11969 \x1f
11970 File: gccint.info,  Node: Statements,  Next: Functions,  Prev: Expression trees,  Up: GENERIC
11972 11.7 Statements
11973 ===============
11975 Most statements in GIMPLE are assignment statements, represented by
11976 `GIMPLE_ASSIGN'.  No other C expressions can appear at statement level;
11977 a reference to a volatile object is converted into a `GIMPLE_ASSIGN'.
11979  There are also several varieties of complex statements.
11981 * Menu:
11983 * Basic Statements::
11984 * Blocks::
11985 * Statement Sequences::
11986 * Empty Statements::
11987 * Jumps::
11988 * Cleanups::
11989 * OpenMP::
11991 \x1f
11992 File: gccint.info,  Node: Basic Statements,  Next: Blocks,  Up: Statements
11994 11.7.1 Basic Statements
11995 -----------------------
11997 `ASM_EXPR'
11998      Used to represent an inline assembly statement.  For an inline
11999      assembly statement like:
12000           asm ("mov x, y");
12001      The `ASM_STRING' macro will return a `STRING_CST' node for `"mov
12002      x, y"'.  If the original statement made use of the
12003      extended-assembly syntax, then `ASM_OUTPUTS', `ASM_INPUTS', and
12004      `ASM_CLOBBERS' will be the outputs, inputs, and clobbers for the
12005      statement, represented as `STRING_CST' nodes.  The
12006      extended-assembly syntax looks like:
12007           asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
12008      The first string is the `ASM_STRING', containing the instruction
12009      template.  The next two strings are the output and inputs,
12010      respectively; this statement has no clobbers.  As this example
12011      indicates, "plain" assembly statements are merely a special case
12012      of extended assembly statements; they have no cv-qualifiers,
12013      outputs, inputs, or clobbers.  All of the strings will be
12014      `NUL'-terminated, and will contain no embedded `NUL'-characters.
12016      If the assembly statement is declared `volatile', or if the
12017      statement was not an extended assembly statement, and is therefore
12018      implicitly volatile, then the predicate `ASM_VOLATILE_P' will hold
12019      of the `ASM_EXPR'.
12021 `DECL_EXPR'
12022      Used to represent a local declaration.  The `DECL_EXPR_DECL' macro
12023      can be used to obtain the entity declared.  This declaration may
12024      be a `LABEL_DECL', indicating that the label declared is a local
12025      label.  (As an extension, GCC allows the declaration of labels
12026      with scope.)  In C, this declaration may be a `FUNCTION_DECL',
12027      indicating the use of the GCC nested function extension.  For more
12028      information, *note Functions::.
12030 `LABEL_EXPR'
12031      Used to represent a label.  The `LABEL_DECL' declared by this
12032      statement can be obtained with the `LABEL_EXPR_LABEL' macro.  The
12033      `IDENTIFIER_NODE' giving the name of the label can be obtained from
12034      the `LABEL_DECL' with `DECL_NAME'.
12036 `GOTO_EXPR'
12037      Used to represent a `goto' statement.  The `GOTO_DESTINATION' will
12038      usually be a `LABEL_DECL'.  However, if the "computed goto"
12039      extension has been used, the `GOTO_DESTINATION' will be an
12040      arbitrary expression indicating the destination.  This expression
12041      will always have pointer type.
12043 `RETURN_EXPR'
12044      Used to represent a `return' statement.  Operand 0 represents the
12045      value to return.  It should either be the `RESULT_DECL' for the
12046      containing function, or a `MODIFY_EXPR' or `INIT_EXPR' setting the
12047      function's `RESULT_DECL'.  It will be `NULL_TREE' if the statement
12048      was just
12049           return;
12051 `LOOP_EXPR'
12052      These nodes represent "infinite" loops.  The `LOOP_EXPR_BODY'
12053      represents the body of the loop.  It should be executed forever,
12054      unless an `EXIT_EXPR' is encountered.
12056 `EXIT_EXPR'
12057      These nodes represent conditional exits from the nearest enclosing
12058      `LOOP_EXPR'.  The single operand is the condition; if it is
12059      nonzero, then the loop should be exited.  An `EXIT_EXPR' will only
12060      appear within a `LOOP_EXPR'.
12062 `SWITCH_STMT'
12063      Used to represent a `switch' statement.  The `SWITCH_STMT_COND' is
12064      the expression on which the switch is occurring.  See the
12065      documentation for an `IF_STMT' for more information on the
12066      representation used for the condition.  The `SWITCH_STMT_BODY' is
12067      the body of the switch statement.   The `SWITCH_STMT_TYPE' is the
12068      original type of switch expression as given in the source, before
12069      any compiler conversions.
12071 `CASE_LABEL_EXPR'
12072      Use to represent a `case' label, range of `case' labels, or a
12073      `default' label.  If `CASE_LOW' is `NULL_TREE', then this is a
12074      `default' label.  Otherwise, if `CASE_HIGH' is `NULL_TREE', then
12075      this is an ordinary `case' label.  In this case, `CASE_LOW' is an
12076      expression giving the value of the label.  Both `CASE_LOW' and
12077      `CASE_HIGH' are `INTEGER_CST' nodes.  These values will have the
12078      same type as the condition expression in the switch statement.
12080      Otherwise, if both `CASE_LOW' and `CASE_HIGH' are defined, the
12081      statement is a range of case labels.  Such statements originate
12082      with the extension that allows users to write things of the form:
12083           case 2 ... 5:
12084      The first value will be `CASE_LOW', while the second will be
12085      `CASE_HIGH'.
12088 \x1f
12089 File: gccint.info,  Node: Blocks,  Next: Statement Sequences,  Prev: Basic Statements,  Up: Statements
12091 11.7.2 Blocks
12092 -------------
12094 Block scopes and the variables they declare in GENERIC are expressed
12095 using the `BIND_EXPR' code, which in previous versions of GCC was
12096 primarily used for the C statement-expression extension.
12098  Variables in a block are collected into `BIND_EXPR_VARS' in
12099 declaration order through their `TREE_CHAIN' field.  Any runtime
12100 initialization is moved out of `DECL_INITIAL' and into a statement in
12101 the controlled block.  When gimplifying from C or C++, this
12102 initialization replaces the `DECL_STMT'.  These variables will never
12103 require cleanups.  The scope of these variables is just the body
12105  Variable-length arrays (VLAs) complicate this process, as their size
12106 often refers to variables initialized earlier in the block.  To handle
12107 this, we currently split the block at that point, and move the VLA into
12108 a new, inner `BIND_EXPR'.  This strategy may change in the future.
12110  A C++ program will usually contain more `BIND_EXPR's than there are
12111 syntactic blocks in the source code, since several C++ constructs have
12112 implicit scopes associated with them.  On the other hand, although the
12113 C++ front end uses pseudo-scopes to handle cleanups for objects with
12114 destructors, these don't translate into the GIMPLE form; multiple
12115 declarations at the same level use the same `BIND_EXPR'.
12117 \x1f
12118 File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements
12120 11.7.3 Statement Sequences
12121 --------------------------
12123 Multiple statements at the same nesting level are collected into a
12124 `STATEMENT_LIST'.  Statement lists are modified and traversed using the
12125 interface in `tree-iterator.h'.
12127 \x1f
12128 File: gccint.info,  Node: Empty Statements,  Next: Jumps,  Prev: Statement Sequences,  Up: Statements
12130 11.7.4 Empty Statements
12131 -----------------------
12133 Whenever possible, statements with no effect are discarded.  But if
12134 they are nested within another construct which cannot be discarded for
12135 some reason, they are instead replaced with an empty statement,
12136 generated by `build_empty_stmt'.  Initially, all empty statements were
12137 shared, after the pattern of the Java front end, but this caused a lot
12138 of trouble in practice.
12140  An empty statement is represented as `(void)0'.
12142 \x1f
12143 File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Empty Statements,  Up: Statements
12145 11.7.5 Jumps
12146 ------------
12148 Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'.
12150  The operand of a `GOTO_EXPR' must be either a label or a variable
12151 containing the address to jump to.
12153  The operand of a `RETURN_EXPR' is either `NULL_TREE', `RESULT_DECL',
12154 or a `MODIFY_EXPR' which sets the return value.  It would be nice to
12155 move the `MODIFY_EXPR' into a separate statement, but the special
12156 return semantics in `expand_return' make that difficult.  It may still
12157 happen in the future, perhaps by moving most of that logic into
12158 `expand_assignment'.
12160 \x1f
12161 File: gccint.info,  Node: Cleanups,  Next: OpenMP,  Prev: Jumps,  Up: Statements
12163 11.7.6 Cleanups
12164 ---------------
12166 Destructors for local C++ objects and similar dynamic cleanups are
12167 represented in GIMPLE by a `TRY_FINALLY_EXPR'.  `TRY_FINALLY_EXPR' has
12168 two operands, both of which are a sequence of statements to execute.
12169 The first sequence is executed.  When it completes the second sequence
12170 is executed.
12172  The first sequence may complete in the following ways:
12174   1. Execute the last statement in the sequence and fall off the end.
12176   2. Execute a goto statement (`GOTO_EXPR') to an ordinary label
12177      outside the sequence.
12179   3. Execute a return statement (`RETURN_EXPR').
12181   4. Throw an exception.  This is currently not explicitly represented
12182      in GIMPLE.
12185  The second sequence is not executed if the first sequence completes by
12186 calling `setjmp' or `exit' or any other function that does not return.
12187 The second sequence is also not executed if the first sequence
12188 completes via a non-local goto or a computed goto (in general the
12189 compiler does not know whether such a goto statement exits the first
12190 sequence or not, so we assume that it doesn't).
12192  After the second sequence is executed, if it completes normally by
12193 falling off the end, execution continues wherever the first sequence
12194 would have continued, by falling off the end, or doing a goto, etc.
12196  `TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
12197 to appear on every edge out of the controlled block; this reduces the
12198 freedom to move code across these edges.  Therefore, the EH lowering
12199 pass which runs before most of the optimization passes eliminates these
12200 expressions by explicitly adding the cleanup to each edge.  Rethrowing
12201 the exception is represented using `RESX_EXPR'.
12203 \x1f
12204 File: gccint.info,  Node: OpenMP,  Prev: Cleanups,  Up: Statements
12206 11.7.7 OpenMP
12207 -------------
12209 All the statements starting with `OMP_' represent directives and
12210 clauses used by the OpenMP API `http://www.openmp.org/'.
12212 `OMP_PARALLEL'
12213      Represents `#pragma omp parallel [clause1 ... clauseN]'. It has
12214      four operands:
12216      Operand `OMP_PARALLEL_BODY' is valid while in GENERIC and High
12217      GIMPLE forms.  It contains the body of code to be executed by all
12218      the threads.  During GIMPLE lowering, this operand becomes `NULL'
12219      and the body is emitted linearly after `OMP_PARALLEL'.
12221      Operand `OMP_PARALLEL_CLAUSES' is the list of clauses associated
12222      with the directive.
12224      Operand `OMP_PARALLEL_FN' is created by `pass_lower_omp', it
12225      contains the `FUNCTION_DECL' for the function that will contain
12226      the body of the parallel region.
12228      Operand `OMP_PARALLEL_DATA_ARG' is also created by
12229      `pass_lower_omp'. If there are shared variables to be communicated
12230      to the children threads, this operand will contain the `VAR_DECL'
12231      that contains all the shared values and variables.
12233 `OMP_FOR'
12234      Represents `#pragma omp for [clause1 ... clauseN]'.  It has 5
12235      operands:
12237      Operand `OMP_FOR_BODY' contains the loop body.
12239      Operand `OMP_FOR_CLAUSES' is the list of clauses associated with
12240      the directive.
12242      Operand `OMP_FOR_INIT' is the loop initialization code of the form
12243      `VAR = N1'.
12245      Operand `OMP_FOR_COND' is the loop conditional expression of the
12246      form `VAR {<,>,<=,>=} N2'.
12248      Operand `OMP_FOR_INCR' is the loop index increment of the form
12249      `VAR {+=,-=} INCR'.
12251      Operand `OMP_FOR_PRE_BODY' contains side-effect code from operands
12252      `OMP_FOR_INIT', `OMP_FOR_COND' and `OMP_FOR_INC'.  These
12253      side-effects are part of the `OMP_FOR' block but must be evaluated
12254      before the start of loop body.
12256      The loop index variable `VAR' must be a signed integer variable,
12257      which is implicitly private to each thread.  Bounds `N1' and `N2'
12258      and the increment expression `INCR' are required to be loop
12259      invariant integer expressions that are evaluated without any
12260      synchronization. The evaluation order, frequency of evaluation and
12261      side-effects are unspecified by the standard.
12263 `OMP_SECTIONS'
12264      Represents `#pragma omp sections [clause1 ... clauseN]'.
12266      Operand `OMP_SECTIONS_BODY' contains the sections body, which in
12267      turn contains a set of `OMP_SECTION' nodes for each of the
12268      concurrent sections delimited by `#pragma omp section'.
12270      Operand `OMP_SECTIONS_CLAUSES' is the list of clauses associated
12271      with the directive.
12273 `OMP_SECTION'
12274      Section delimiter for `OMP_SECTIONS'.
12276 `OMP_SINGLE'
12277      Represents `#pragma omp single'.
12279      Operand `OMP_SINGLE_BODY' contains the body of code to be executed
12280      by a single thread.
12282      Operand `OMP_SINGLE_CLAUSES' is the list of clauses associated
12283      with the directive.
12285 `OMP_MASTER'
12286      Represents `#pragma omp master'.
12288      Operand `OMP_MASTER_BODY' contains the body of code to be executed
12289      by the master thread.
12291 `OMP_ORDERED'
12292      Represents `#pragma omp ordered'.
12294      Operand `OMP_ORDERED_BODY' contains the body of code to be
12295      executed in the sequential order dictated by the loop index
12296      variable.
12298 `OMP_CRITICAL'
12299      Represents `#pragma omp critical [name]'.
12301      Operand `OMP_CRITICAL_BODY' is the critical section.
12303      Operand `OMP_CRITICAL_NAME' is an optional identifier to label the
12304      critical section.
12306 `OMP_RETURN'
12307      This does not represent any OpenMP directive, it is an artificial
12308      marker to indicate the end of the body of an OpenMP. It is used by
12309      the flow graph (`tree-cfg.c') and OpenMP region building code
12310      (`omp-low.c').
12312 `OMP_CONTINUE'
12313      Similarly, this instruction does not represent an OpenMP
12314      directive, it is used by `OMP_FOR' and `OMP_SECTIONS' to mark the
12315      place where the code needs to loop to the next iteration (in the
12316      case of `OMP_FOR') or the next section (in the case of
12317      `OMP_SECTIONS').
12319      In some cases, `OMP_CONTINUE' is placed right before `OMP_RETURN'.
12320      But if there are cleanups that need to occur right after the
12321      looping body, it will be emitted between `OMP_CONTINUE' and
12322      `OMP_RETURN'.
12324 `OMP_ATOMIC'
12325      Represents `#pragma omp atomic'.
12327      Operand 0 is the address at which the atomic operation is to be
12328      performed.
12330      Operand 1 is the expression to evaluate.  The gimplifier tries
12331      three alternative code generation strategies.  Whenever possible,
12332      an atomic update built-in is used.  If that fails, a
12333      compare-and-swap loop is attempted.  If that also fails, a regular
12334      critical section around the expression is used.
12336 `OMP_CLAUSE'
12337      Represents clauses associated with one of the `OMP_' directives.
12338      Clauses are represented by separate sub-codes defined in `tree.h'.
12339      Clauses codes can be one of: `OMP_CLAUSE_PRIVATE',
12340      `OMP_CLAUSE_SHARED', `OMP_CLAUSE_FIRSTPRIVATE',
12341      `OMP_CLAUSE_LASTPRIVATE', `OMP_CLAUSE_COPYIN',
12342      `OMP_CLAUSE_COPYPRIVATE', `OMP_CLAUSE_IF',
12343      `OMP_CLAUSE_NUM_THREADS', `OMP_CLAUSE_SCHEDULE',
12344      `OMP_CLAUSE_NOWAIT', `OMP_CLAUSE_ORDERED', `OMP_CLAUSE_DEFAULT',
12345      and `OMP_CLAUSE_REDUCTION'.  Each code represents the
12346      corresponding OpenMP clause.
12348      Clauses associated with the same directive are chained together
12349      via `OMP_CLAUSE_CHAIN'. Those clauses that accept a list of
12350      variables are restricted to exactly one, accessed with
12351      `OMP_CLAUSE_VAR'.  Therefore, multiple variables under the same
12352      clause `C' need to be represented as multiple `C' clauses chained
12353      together.  This facilitates adding new clauses during compilation.
12356 \x1f
12357 File: gccint.info,  Node: Functions,  Next: Language-dependent trees,  Prev: Statements,  Up: GENERIC
12359 11.8 Functions
12360 ==============
12362 A function is represented by a `FUNCTION_DECL' node.  It stores the
12363 basic pieces of the function such as body, parameters, and return type
12364 as well as information on the surrounding context, visibility, and
12365 linkage.
12367 * Menu:
12369 * Function Basics::     Function names, body, and parameters.
12370 * Function Properties:: Context, linkage, etc.
12372 \x1f
12373 File: gccint.info,  Node: Function Basics,  Next: Function Properties,  Up: Functions
12375 11.8.1 Function Basics
12376 ----------------------
12378 A function has four core parts: the name, the parameters, the result,
12379 and the body.  The following macros and functions access these parts of
12380 a `FUNCTION_DECL' as well as other basic features:
12381 `DECL_NAME'
12382      This macro returns the unqualified name of the function, as an
12383      `IDENTIFIER_NODE'.  For an instantiation of a function template,
12384      the `DECL_NAME' is the unqualified name of the template, not
12385      something like `f<int>'.  The value of `DECL_NAME' is undefined
12386      when used on a constructor, destructor, overloaded operator, or
12387      type-conversion operator, or any function that is implicitly
12388      generated by the compiler.  See below for macros that can be used
12389      to distinguish these cases.
12391 `DECL_ASSEMBLER_NAME'
12392      This macro returns the mangled name of the function, also an
12393      `IDENTIFIER_NODE'.  This name does not contain leading underscores
12394      on systems that prefix all identifiers with underscores.  The
12395      mangled name is computed in the same way on all platforms; if
12396      special processing is required to deal with the object file format
12397      used on a particular platform, it is the responsibility of the
12398      back end to perform those modifications.  (Of course, the back end
12399      should not modify `DECL_ASSEMBLER_NAME' itself.)
12401      Using `DECL_ASSEMBLER_NAME' will cause additional memory to be
12402      allocated (for the mangled name of the entity) so it should be used
12403      only when emitting assembly code.  It should not be used within the
12404      optimizers to determine whether or not two declarations are the
12405      same, even though some of the existing optimizers do use it in
12406      that way.  These uses will be removed over time.
12408 `DECL_ARGUMENTS'
12409      This macro returns the `PARM_DECL' for the first argument to the
12410      function.  Subsequent `PARM_DECL' nodes can be obtained by
12411      following the `TREE_CHAIN' links.
12413 `DECL_RESULT'
12414      This macro returns the `RESULT_DECL' for the function.
12416 `DECL_SAVED_TREE'
12417      This macro returns the complete body of the function.
12419 `TREE_TYPE'
12420      This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the
12421      function.
12423 `DECL_INITIAL'
12424      A function that has a definition in the current translation unit
12425      will have a non-`NULL' `DECL_INITIAL'.  However, back ends should
12426      not make use of the particular value given by `DECL_INITIAL'.
12428      It should contain a tree of `BLOCK' nodes that mirrors the scopes
12429      that variables are bound in the function.  Each block contains a
12430      list of decls declared in a basic block, a pointer to a chain of
12431      blocks at the next lower scope level, then a pointer to the next
12432      block at the same level and a backpointer to the parent `BLOCK' or
12433      `FUNCTION_DECL'.  So given a function as follows:
12435           void foo()
12436           {
12437             int a;
12438             {
12439               int b;
12440             }
12441             int c;
12442           }
12444      you would get the following:
12446           tree foo = FUNCTION_DECL;
12447           tree decl_a = VAR_DECL;
12448           tree decl_b = VAR_DECL;
12449           tree decl_c = VAR_DECL;
12450           tree block_a = BLOCK;
12451           tree block_b = BLOCK;
12452           tree block_c = BLOCK;
12453           BLOCK_VARS(block_a) = decl_a;
12454           BLOCK_SUBBLOCKS(block_a) = block_b;
12455           BLOCK_CHAIN(block_a) = block_c;
12456           BLOCK_SUPERCONTEXT(block_a) = foo;
12457           BLOCK_VARS(block_b) = decl_b;
12458           BLOCK_SUPERCONTEXT(block_b) = block_a;
12459           BLOCK_VARS(block_c) = decl_c;
12460           BLOCK_SUPERCONTEXT(block_c) = foo;
12461           DECL_INITIAL(foo) = block_a;
12464 \x1f
12465 File: gccint.info,  Node: Function Properties,  Prev: Function Basics,  Up: Functions
12467 11.8.2 Function Properties
12468 --------------------------
12470 To determine the scope of a function, you can use the `DECL_CONTEXT'
12471 macro.  This macro will return the class (either a `RECORD_TYPE' or a
12472 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
12473 is a member.  For a virtual function, this macro returns the class in
12474 which the function was actually defined, not the base class in which
12475 the virtual declaration occurred.
12477  In C, the `DECL_CONTEXT' for a function maybe another function.  This
12478 representation indicates that the GNU nested function extension is in
12479 use.  For details on the semantics of nested functions, see the GCC
12480 Manual.  The nested function can refer to local variables in its
12481 containing function.  Such references are not explicitly marked in the
12482 tree structure; back ends must look at the `DECL_CONTEXT' for the
12483 referenced `VAR_DECL'.  If the `DECL_CONTEXT' for the referenced
12484 `VAR_DECL' is not the same as the function currently being processed,
12485 and neither `DECL_EXTERNAL' nor `TREE_STATIC' hold, then the reference
12486 is to a local variable in a containing function, and the back end must
12487 take appropriate action.
12489 `DECL_EXTERNAL'
12490      This predicate holds if the function is undefined.
12492 `TREE_PUBLIC'
12493      This predicate holds if the function has external linkage.
12495 `TREE_STATIC'
12496      This predicate holds if the function has been defined.
12498 `TREE_THIS_VOLATILE'
12499      This predicate holds if the function does not return normally.
12501 `TREE_READONLY'
12502      This predicate holds if the function can only read its arguments.
12504 `DECL_PURE_P'
12505      This predicate holds if the function can only read its arguments,
12506      but may also read global memory.
12508 `DECL_VIRTUAL_P'
12509      This predicate holds if the function is virtual.
12511 `DECL_ARTIFICIAL'
12512      This macro holds if the function was implicitly generated by the
12513      compiler, rather than explicitly declared.  In addition to
12514      implicitly generated class member functions, this macro holds for
12515      the special functions created to implement static initialization
12516      and destruction, to compute run-time type information, and so
12517      forth.
12519 `DECL_FUNCTION_SPECIFIC_TARGET'
12520      This macro returns a tree node that holds the target options that
12521      are to be used to compile this particular function or `NULL_TREE'
12522      if the function is to be compiled with the target options
12523      specified on the command line.
12525 `DECL_FUNCTION_SPECIFIC_OPTIMIZATION'
12526      This macro returns a tree node that holds the optimization options
12527      that are to be used to compile this particular function or
12528      `NULL_TREE' if the function is to be compiled with the
12529      optimization options specified on the command line.
12532 11.8.2.1 Statements
12533 ...................
12535 There are tree nodes corresponding to all of the source-level statement
12536 constructs, used within the C and C++ frontends.  These are enumerated
12537 here, together with a list of the various macros that can be used to
12538 obtain information about them.  There are a few macros that can be used
12539 with all statements:
12541 \x1f
12542 File: gccint.info,  Node: Language-dependent trees,  Next: C and C++ Trees,  Prev: Functions,  Up: GENERIC
12544 11.9 Language-dependent trees
12545 =============================
12547 Front ends may wish to keep some state associated with various GENERIC
12548 trees while parsing.  To support this, trees provide a set of flags
12549 that may be used by the front end.  They are accessed using
12550 `TREE_LANG_FLAG_n' where `n' is currently 0 through 6.
12552  If necessary, a front end can use some language-dependent tree codes
12553 in its GENERIC representation, so long as it provides a hook for
12554 converting them to GIMPLE and doesn't expect them to work with any
12555 (hypothetical) optimizers that run before the conversion to GIMPLE. The
12556 intermediate representation used while parsing C and C++ looks very
12557 little like GENERIC, but the C and C++ gimplifier hooks are perfectly
12558 happy to take it as input and spit out GIMPLE.
12560 \x1f
12561 File: gccint.info,  Node: C and C++ Trees,  Next: Java Trees,  Prev: Language-dependent trees,  Up: GENERIC
12563 11.10 C and C++ Trees
12564 =====================
12566 This section documents the internal representation used by GCC to
12567 represent C and C++ source programs.  When presented with a C or C++
12568 source program, GCC parses the program, performs semantic analysis
12569 (including the generation of error messages), and then produces the
12570 internal representation described here.  This representation contains a
12571 complete representation for the entire translation unit provided as
12572 input to the front end.  This representation is then typically processed
12573 by a code-generator in order to produce machine code, but could also be
12574 used in the creation of source browsers, intelligent editors, automatic
12575 documentation generators, interpreters, and any other programs needing
12576 the ability to process C or C++ code.
12578  This section explains the internal representation.  In particular, it
12579 documents the internal representation for C and C++ source constructs,
12580 and the macros, functions, and variables that can be used to access
12581 these constructs.  The C++ representation is largely a superset of the
12582 representation used in the C front end.  There is only one construct
12583 used in C that does not appear in the C++ front end and that is the GNU
12584 "nested function" extension.  Many of the macros documented here do not
12585 apply in C because the corresponding language constructs do not appear
12586 in C.
12588  The C and C++ front ends generate a mix of GENERIC trees and ones
12589 specific to C and C++.  These language-specific trees are higher-level
12590 constructs than the ones in GENERIC to make the parser's job easier.
12591 This section describes those trees that aren't part of GENERIC as well
12592 as aspects of GENERIC trees that are treated in a language-specific
12593 manner.
12595  If you are developing a "back end", be it is a code-generator or some
12596 other tool, that uses this representation, you may occasionally find
12597 that you need to ask questions not easily answered by the functions and
12598 macros available here.  If that situation occurs, it is quite likely
12599 that GCC already supports the functionality you desire, but that the
12600 interface is simply not documented here.  In that case, you should ask
12601 the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting
12602 the functionality you require.  Similarly, if you find yourself writing
12603 functions that do not deal directly with your back end, but instead
12604 might be useful to other people using the GCC front end, you should
12605 submit your patches for inclusion in GCC.
12607 * Menu:
12609 * Types for C++::               Fundamental and aggregate types.
12610 * Namespaces::                  Namespaces.
12611 * Classes::                     Classes.
12612 * Functions for C++::           Overloading and accessors for C++.
12613 * Statements for C++::          Statements specific to C and C++.
12614 * C++ Expressions::    From `typeid' to `throw'.
12616 \x1f
12617 File: gccint.info,  Node: Types for C++,  Next: Namespaces,  Up: C and C++ Trees
12619 11.10.1 Types for C++
12620 ---------------------
12622 In C++, an array type is not qualified; rather the type of the array
12623 elements is qualified.  This situation is reflected in the intermediate
12624 representation.  The macros described here will always examine the
12625 qualification of the underlying element type when applied to an array
12626 type.  (If the element type is itself an array, then the recursion
12627 continues until a non-array type is found, and the qualification of this
12628 type is examined.)  So, for example, `CP_TYPE_CONST_P' will hold of the
12629 type `const int ()[7]', denoting an array of seven `int's.
12631  The following functions and macros deal with cv-qualification of types:
12632 `CP_TYPE_QUALS'
12633      This macro returns the set of type qualifiers applied to this type.
12634      This value is `TYPE_UNQUALIFIED' if no qualifiers have been
12635      applied.  The `TYPE_QUAL_CONST' bit is set if the type is
12636      `const'-qualified.  The `TYPE_QUAL_VOLATILE' bit is set if the
12637      type is `volatile'-qualified.  The `TYPE_QUAL_RESTRICT' bit is set
12638      if the type is `restrict'-qualified.
12640 `CP_TYPE_CONST_P'
12641      This macro holds if the type is `const'-qualified.
12643 `CP_TYPE_VOLATILE_P'
12644      This macro holds if the type is `volatile'-qualified.
12646 `CP_TYPE_RESTRICT_P'
12647      This macro holds if the type is `restrict'-qualified.
12649 `CP_TYPE_CONST_NON_VOLATILE_P'
12650      This predicate holds for a type that is `const'-qualified, but
12651      _not_ `volatile'-qualified; other cv-qualifiers are ignored as
12652      well: only the `const'-ness is tested.
12655  A few other macros and functions are usable with all types:
12656 `TYPE_SIZE'
12657      The number of bits required to represent the type, represented as
12658      an `INTEGER_CST'.  For an incomplete type, `TYPE_SIZE' will be
12659      `NULL_TREE'.
12661 `TYPE_ALIGN'
12662      The alignment of the type, in bits, represented as an `int'.
12664 `TYPE_NAME'
12665      This macro returns a declaration (in the form of a `TYPE_DECL') for
12666      the type.  (Note this macro does _not_ return an
12667      `IDENTIFIER_NODE', as you might expect, given its name!)  You can
12668      look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual
12669      name of the type.  The `TYPE_NAME' will be `NULL_TREE' for a type
12670      that is not a built-in type, the result of a typedef, or a named
12671      class type.
12673 `CP_INTEGRAL_TYPE'
12674      This predicate holds if the type is an integral type.  Notice that
12675      in C++, enumerations are _not_ integral types.
12677 `ARITHMETIC_TYPE_P'
12678      This predicate holds if the type is an integral type (in the C++
12679      sense) or a floating point type.
12681 `CLASS_TYPE_P'
12682      This predicate holds for a class-type.
12684 `TYPE_BUILT_IN'
12685      This predicate holds for a built-in type.
12687 `TYPE_PTRMEM_P'
12688      This predicate holds if the type is a pointer to data member.
12690 `TYPE_PTR_P'
12691      This predicate holds if the type is a pointer type, and the
12692      pointee is not a data member.
12694 `TYPE_PTRFN_P'
12695      This predicate holds for a pointer to function type.
12697 `TYPE_PTROB_P'
12698      This predicate holds for a pointer to object type.  Note however
12699      that it does not hold for the generic pointer to object type `void
12700      *'.  You may use `TYPE_PTROBV_P' to test for a pointer to object
12701      type as well as `void *'.
12704  The table below describes types specific to C and C++ as well as
12705 language-dependent info about GENERIC types.
12707 `POINTER_TYPE'
12708      Used to represent pointer types, and pointer to data member types.
12709      If `TREE_TYPE' is a pointer to data member type, then
12710      `TYPE_PTRMEM_P' will hold.  For a pointer to data member type of
12711      the form `T X::*', `TYPE_PTRMEM_CLASS_TYPE' will be the type `X',
12712      while `TYPE_PTRMEM_POINTED_TO_TYPE' will be the type `T'.
12714 `RECORD_TYPE'
12715      Used to represent `struct' and `class' types in C and C++.  If
12716      `TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
12717      type.  In that case, the `TYPE_PTRMEMFUNC_FN_TYPE' is a
12718      `POINTER_TYPE' pointing to a `METHOD_TYPE'.  The `METHOD_TYPE' is
12719      the type of a function pointed to by the pointer-to-member
12720      function.  If `TYPE_PTRMEMFUNC_P' does not hold, this type is a
12721      class type.  For more information, see *note Classes::.
12723 `UNKNOWN_TYPE'
12724      This node is used to represent a type the knowledge of which is
12725      insufficient for a sound processing.
12727 `TYPENAME_TYPE'
12728      Used to represent a construct of the form `typename T::A'.  The
12729      `TYPE_CONTEXT' is `T'; the `TYPE_NAME' is an `IDENTIFIER_NODE' for
12730      `A'.  If the type is specified via a template-id, then
12731      `TYPENAME_TYPE_FULLNAME' yields a `TEMPLATE_ID_EXPR'.  The
12732      `TREE_TYPE' is non-`NULL' if the node is implicitly generated in
12733      support for the implicit typename extension; in which case the
12734      `TREE_TYPE' is a type node for the base-class.
12736 `TYPEOF_TYPE'
12737      Used to represent the `__typeof__' extension.  The `TYPE_FIELDS'
12738      is the expression the type of which is being represented.
12741 \x1f
12742 File: gccint.info,  Node: Namespaces,  Next: Classes,  Prev: Types for C++,  Up: C and C++ Trees
12744 11.10.2 Namespaces
12745 ------------------
12747 The root of the entire intermediate representation is the variable
12748 `global_namespace'.  This is the namespace specified with `::' in C++
12749 source code.  All other namespaces, types, variables, functions, and so
12750 forth can be found starting with this namespace.
12752  However, except for the fact that it is distinguished as the root of
12753 the representation, the global namespace is no different from any other
12754 namespace.  Thus, in what follows, we describe namespaces generally,
12755 rather than the global namespace in particular.
12757  A namespace is represented by a `NAMESPACE_DECL' node.
12759  The following macros and functions can be used on a `NAMESPACE_DECL':
12761 `DECL_NAME'
12762      This macro is used to obtain the `IDENTIFIER_NODE' corresponding to
12763      the unqualified name of the name of the namespace (*note
12764      Identifiers::).  The name of the global namespace is `::', even
12765      though in C++ the global namespace is unnamed.  However, you
12766      should use comparison with `global_namespace', rather than
12767      `DECL_NAME' to determine whether or not a namespace is the global
12768      one.  An unnamed namespace will have a `DECL_NAME' equal to
12769      `anonymous_namespace_name'.  Within a single translation unit, all
12770      unnamed namespaces will have the same name.
12772 `DECL_CONTEXT'
12773      This macro returns the enclosing namespace.  The `DECL_CONTEXT' for
12774      the `global_namespace' is `NULL_TREE'.
12776 `DECL_NAMESPACE_ALIAS'
12777      If this declaration is for a namespace alias, then
12778      `DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
12779      alias.
12781      Do not attempt to use `cp_namespace_decls' for a namespace which is
12782      an alias.  Instead, follow `DECL_NAMESPACE_ALIAS' links until you
12783      reach an ordinary, non-alias, namespace, and call
12784      `cp_namespace_decls' there.
12786 `DECL_NAMESPACE_STD_P'
12787      This predicate holds if the namespace is the special `::std'
12788      namespace.
12790 `cp_namespace_decls'
12791      This function will return the declarations contained in the
12792      namespace, including types, overloaded functions, other
12793      namespaces, and so forth.  If there are no declarations, this
12794      function will return `NULL_TREE'.  The declarations are connected
12795      through their `TREE_CHAIN' fields.
12797      Although most entries on this list will be declarations,
12798      `TREE_LIST' nodes may also appear.  In this case, the `TREE_VALUE'
12799      will be an `OVERLOAD'.  The value of the `TREE_PURPOSE' is
12800      unspecified; back ends should ignore this value.  As with the
12801      other kinds of declarations returned by `cp_namespace_decls', the
12802      `TREE_CHAIN' will point to the next declaration in this list.
12804      For more information on the kinds of declarations that can occur
12805      on this list, *Note Declarations::.  Some declarations will not
12806      appear on this list.  In particular, no `FIELD_DECL',
12807      `LABEL_DECL', or `PARM_DECL' nodes will appear here.
12809      This function cannot be used with namespaces that have
12810      `DECL_NAMESPACE_ALIAS' set.
12813 \x1f
12814 File: gccint.info,  Node: Classes,  Next: Functions for C++,  Prev: Namespaces,  Up: C and C++ Trees
12816 11.10.3 Classes
12817 ---------------
12819 Besides namespaces, the other high-level scoping construct in C++ is the
12820 class.  (Throughout this manual the term "class" is used to mean the
12821 types referred to in the ANSI/ISO C++ Standard as classes; these include
12822 types defined with the `class', `struct', and `union' keywords.)
12824  A class type is represented by either a `RECORD_TYPE' or a
12825 `UNION_TYPE'.  A class declared with the `union' tag is represented by
12826 a `UNION_TYPE', while classes declared with either the `struct' or the
12827 `class' tag are represented by `RECORD_TYPE's.  You can use the
12828 `CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
12829 type is a `class' as opposed to a `struct'.  This macro will be true
12830 only for classes declared with the `class' tag.
12832  Almost all non-function members are available on the `TYPE_FIELDS'
12833 list.  Given one member, the next can be found by following the
12834 `TREE_CHAIN'.  You should not depend in any way on the order in which
12835 fields appear on this list.  All nodes on this list will be `DECL'
12836 nodes.  A `FIELD_DECL' is used to represent a non-static data member, a
12837 `VAR_DECL' is used to represent a static data member, and a `TYPE_DECL'
12838 is used to represent a type.  Note that the `CONST_DECL' for an
12839 enumeration constant will appear on this list, if the enumeration type
12840 was declared in the class.  (Of course, the `TYPE_DECL' for the
12841 enumeration type will appear here as well.)  There are no entries for
12842 base classes on this list.  In particular, there is no `FIELD_DECL' for
12843 the "base-class portion" of an object.
12845  The `TYPE_VFIELD' is a compiler-generated field used to point to
12846 virtual function tables.  It may or may not appear on the `TYPE_FIELDS'
12847 list.  However, back ends should handle the `TYPE_VFIELD' just like all
12848 the entries on the `TYPE_FIELDS' list.
12850  The function members are available on the `TYPE_METHODS' list.  Again,
12851 subsequent members are found by following the `TREE_CHAIN' field.  If a
12852 function is overloaded, each of the overloaded functions appears; no
12853 `OVERLOAD' nodes appear on the `TYPE_METHODS' list.  Implicitly
12854 declared functions (including default constructors, copy constructors,
12855 assignment operators, and destructors) will appear on this list as well.
12857  Every class has an associated "binfo", which can be obtained with
12858 `TYPE_BINFO'.  Binfos are used to represent base-classes.  The binfo
12859 given by `TYPE_BINFO' is the degenerate case, whereby every class is
12860 considered to be its own base-class.  The base binfos for a particular
12861 binfo are held in a vector, whose length is obtained with
12862 `BINFO_N_BASE_BINFOS'.  The base binfos themselves are obtained with
12863 `BINFO_BASE_BINFO' and `BINFO_BASE_ITERATE'.  To add a new binfo, use
12864 `BINFO_BASE_APPEND'.  The vector of base binfos can be obtained with
12865 `BINFO_BASE_BINFOS', but normally you do not need to use that.  The
12866 class type associated with a binfo is given by `BINFO_TYPE'.  It is not
12867 always the case that `BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
12868 and qualified types.  Neither is it the case that `TYPE_BINFO
12869 (BINFO_TYPE (y))' is the same binfo as `y'.  The reason is that if `y'
12870 is a binfo representing a base-class `B' of a derived class `D', then
12871 `BINFO_TYPE (y)' will be `B', and `TYPE_BINFO (BINFO_TYPE (y))' will be
12872 `B' as its own base-class, rather than as a base-class of `D'.
12874  The access to a base type can be found with `BINFO_BASE_ACCESS'.  This
12875 will produce `access_public_node', `access_private_node' or
12876 `access_protected_node'.  If bases are always public,
12877 `BINFO_BASE_ACCESSES' may be `NULL'.
12879  `BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
12880 virtually or not.  The other flags, `BINFO_MARKED_P' and `BINFO_FLAG_1'
12881 to `BINFO_FLAG_6' can be used for language specific use.
12883  The following macros can be used on a tree node representing a
12884 class-type.
12886 `LOCAL_CLASS_P'
12887      This predicate holds if the class is local class _i.e._ declared
12888      inside a function body.
12890 `TYPE_POLYMORPHIC_P'
12891      This predicate holds if the class has at least one virtual function
12892      (declared or inherited).
12894 `TYPE_HAS_DEFAULT_CONSTRUCTOR'
12895      This predicate holds whenever its argument represents a class-type
12896      with default constructor.
12898 `CLASSTYPE_HAS_MUTABLE'
12899 `TYPE_HAS_MUTABLE_P'
12900      These predicates hold for a class-type having a mutable data
12901      member.
12903 `CLASSTYPE_NON_POD_P'
12904      This predicate holds only for class-types that are not PODs.
12906 `TYPE_HAS_NEW_OPERATOR'
12907      This predicate holds for a class-type that defines `operator new'.
12909 `TYPE_HAS_ARRAY_NEW_OPERATOR'
12910      This predicate holds for a class-type for which `operator new[]'
12911      is defined.
12913 `TYPE_OVERLOADS_CALL_EXPR'
12914      This predicate holds for class-type for which the function call
12915      `operator()' is overloaded.
12917 `TYPE_OVERLOADS_ARRAY_REF'
12918      This predicate holds for a class-type that overloads `operator[]'
12920 `TYPE_OVERLOADS_ARROW'
12921      This predicate holds for a class-type for which `operator->' is
12922      overloaded.
12925 \x1f
12926 File: gccint.info,  Node: Functions for C++,  Next: Statements for C++,  Prev: Classes,  Up: C and C++ Trees
12928 11.10.4 Functions for C++
12929 -------------------------
12931 A function is represented by a `FUNCTION_DECL' node.  A set of
12932 overloaded functions is sometimes represented by an `OVERLOAD' node.
12934  An `OVERLOAD' node is not a declaration, so none of the `DECL_' macros
12935 should be used on an `OVERLOAD'.  An `OVERLOAD' node is similar to a
12936 `TREE_LIST'.  Use `OVL_CURRENT' to get the function associated with an
12937 `OVERLOAD' node; use `OVL_NEXT' to get the next `OVERLOAD' node in the
12938 list of overloaded functions.  The macros `OVL_CURRENT' and `OVL_NEXT'
12939 are actually polymorphic; you can use them to work with `FUNCTION_DECL'
12940 nodes as well as with overloads.  In the case of a `FUNCTION_DECL',
12941 `OVL_CURRENT' will always return the function itself, and `OVL_NEXT'
12942 will always be `NULL_TREE'.
12944  To determine the scope of a function, you can use the `DECL_CONTEXT'
12945 macro.  This macro will return the class (either a `RECORD_TYPE' or a
12946 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
12947 is a member.  For a virtual function, this macro returns the class in
12948 which the function was actually defined, not the base class in which
12949 the virtual declaration occurred.
12951  If a friend function is defined in a class scope, the
12952 `DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
12953 it was defined.  For example, in
12954      class C { friend void f() {} };
12955  the `DECL_CONTEXT' for `f' will be the `global_namespace', but the
12956 `DECL_FRIEND_CONTEXT' will be the `RECORD_TYPE' for `C'.
12958  The following macros and functions can be used on a `FUNCTION_DECL':
12959 `DECL_MAIN_P'
12960      This predicate holds for a function that is the program entry point
12961      `::code'.
12963 `DECL_LOCAL_FUNCTION_P'
12964      This predicate holds if the function was declared at block scope,
12965      even though it has a global scope.
12967 `DECL_ANTICIPATED'
12968      This predicate holds if the function is a built-in function but its
12969      prototype is not yet explicitly declared.
12971 `DECL_EXTERN_C_FUNCTION_P'
12972      This predicate holds if the function is declared as an ``extern
12973      "C"'' function.
12975 `DECL_LINKONCE_P'
12976      This macro holds if multiple copies of this function may be
12977      emitted in various translation units.  It is the responsibility of
12978      the linker to merge the various copies.  Template instantiations
12979      are the most common example of functions for which
12980      `DECL_LINKONCE_P' holds; G++ instantiates needed templates in all
12981      translation units which require them, and then relies on the
12982      linker to remove duplicate instantiations.
12984      FIXME: This macro is not yet implemented.
12986 `DECL_FUNCTION_MEMBER_P'
12987      This macro holds if the function is a member of a class, rather
12988      than a member of a namespace.
12990 `DECL_STATIC_FUNCTION_P'
12991      This predicate holds if the function a static member function.
12993 `DECL_NONSTATIC_MEMBER_FUNCTION_P'
12994      This macro holds for a non-static member function.
12996 `DECL_CONST_MEMFUNC_P'
12997      This predicate holds for a `const'-member function.
12999 `DECL_VOLATILE_MEMFUNC_P'
13000      This predicate holds for a `volatile'-member function.
13002 `DECL_CONSTRUCTOR_P'
13003      This macro holds if the function is a constructor.
13005 `DECL_NONCONVERTING_P'
13006      This predicate holds if the constructor is a non-converting
13007      constructor.
13009 `DECL_COMPLETE_CONSTRUCTOR_P'
13010      This predicate holds for a function which is a constructor for an
13011      object of a complete type.
13013 `DECL_BASE_CONSTRUCTOR_P'
13014      This predicate holds for a function which is a constructor for a
13015      base class sub-object.
13017 `DECL_COPY_CONSTRUCTOR_P'
13018      This predicate holds for a function which is a copy-constructor.
13020 `DECL_DESTRUCTOR_P'
13021      This macro holds if the function is a destructor.
13023 `DECL_COMPLETE_DESTRUCTOR_P'
13024      This predicate holds if the function is the destructor for an
13025      object a complete type.
13027 `DECL_OVERLOADED_OPERATOR_P'
13028      This macro holds if the function is an overloaded operator.
13030 `DECL_CONV_FN_P'
13031      This macro holds if the function is a type-conversion operator.
13033 `DECL_GLOBAL_CTOR_P'
13034      This predicate holds if the function is a file-scope initialization
13035      function.
13037 `DECL_GLOBAL_DTOR_P'
13038      This predicate holds if the function is a file-scope finalization
13039      function.
13041 `DECL_THUNK_P'
13042      This predicate holds if the function is a thunk.
13044      These functions represent stub code that adjusts the `this' pointer
13045      and then jumps to another function.  When the jumped-to function
13046      returns, control is transferred directly to the caller, without
13047      returning to the thunk.  The first parameter to the thunk is
13048      always the `this' pointer; the thunk should add `THUNK_DELTA' to
13049      this value.  (The `THUNK_DELTA' is an `int', not an `INTEGER_CST'.)
13051      Then, if `THUNK_VCALL_OFFSET' (an `INTEGER_CST') is nonzero the
13052      adjusted `this' pointer must be adjusted again.  The complete
13053      calculation is given by the following pseudo-code:
13055           this += THUNK_DELTA
13056           if (THUNK_VCALL_OFFSET)
13057             this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
13059      Finally, the thunk should jump to the location given by
13060      `DECL_INITIAL'; this will always be an expression for the address
13061      of a function.
13063 `DECL_NON_THUNK_FUNCTION_P'
13064      This predicate holds if the function is _not_ a thunk function.
13066 `GLOBAL_INIT_PRIORITY'
13067      If either `DECL_GLOBAL_CTOR_P' or `DECL_GLOBAL_DTOR_P' holds, then
13068      this gives the initialization priority for the function.  The
13069      linker will arrange that all functions for which
13070      `DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
13071      before `main' is called.  When the program exits, all functions for
13072      which `DECL_GLOBAL_DTOR_P' holds are run in the reverse order.
13074 `TYPE_RAISES_EXCEPTIONS'
13075      This macro returns the list of exceptions that a (member-)function
13076      can raise.  The returned list, if non `NULL', is comprised of nodes
13077      whose `TREE_VALUE' represents a type.
13079 `TYPE_NOTHROW_P'
13080      This predicate holds when the exception-specification of its
13081      arguments is of the form ``()''.
13083 `DECL_ARRAY_DELETE_OPERATOR_P'
13084      This predicate holds if the function an overloaded `operator
13085      delete[]'.
13088 \x1f
13089 File: gccint.info,  Node: Statements for C++,  Next: C++ Expressions,  Prev: Functions for C++,  Up: C and C++ Trees
13091 11.10.5 Statements for C++
13092 --------------------------
13094 A function that has a definition in the current translation unit will
13095 have a non-`NULL' `DECL_INITIAL'.  However, back ends should not make
13096 use of the particular value given by `DECL_INITIAL'.
13098  The `DECL_SAVED_TREE' macro will give the complete body of the
13099 function.
13101 11.10.5.1 Statements
13102 ....................
13104 There are tree nodes corresponding to all of the source-level statement
13105 constructs, used within the C and C++ frontends.  These are enumerated
13106 here, together with a list of the various macros that can be used to
13107 obtain information about them.  There are a few macros that can be used
13108 with all statements:
13110 `STMT_IS_FULL_EXPR_P'
13111      In C++, statements normally constitute "full expressions";
13112      temporaries created during a statement are destroyed when the
13113      statement is complete.  However, G++ sometimes represents
13114      expressions by statements; these statements will not have
13115      `STMT_IS_FULL_EXPR_P' set.  Temporaries created during such
13116      statements should be destroyed when the innermost enclosing
13117      statement with `STMT_IS_FULL_EXPR_P' set is exited.
13120  Here is the list of the various statement nodes, and the macros used to
13121 access them.  This documentation describes the use of these nodes in
13122 non-template functions (including instantiations of template functions).
13123 In template functions, the same nodes are used, but sometimes in
13124 slightly different ways.
13126  Many of the statements have substatements.  For example, a `while'
13127 loop will have a body, which is itself a statement.  If the substatement
13128 is `NULL_TREE', it is considered equivalent to a statement consisting
13129 of a single `;', i.e., an expression statement in which the expression
13130 has been omitted.  A substatement may in fact be a list of statements,
13131 connected via their `TREE_CHAIN's.  So, you should always process the
13132 statement tree by looping over substatements, like this:
13133      void process_stmt (stmt)
13134           tree stmt;
13135      {
13136        while (stmt)
13137          {
13138            switch (TREE_CODE (stmt))
13139              {
13140              case IF_STMT:
13141                process_stmt (THEN_CLAUSE (stmt));
13142                /* More processing here.  */
13143                break;
13145              ...
13146              }
13148            stmt = TREE_CHAIN (stmt);
13149          }
13150      }
13151  In other words, while the `then' clause of an `if' statement in C++
13152 can be only one statement (although that one statement may be a
13153 compound statement), the intermediate representation will sometimes use
13154 several statements chained together.
13156 `BREAK_STMT'
13157      Used to represent a `break' statement.  There are no additional
13158      fields.
13160 `CLEANUP_STMT'
13161      Used to represent an action that should take place upon exit from
13162      the enclosing scope.  Typically, these actions are calls to
13163      destructors for local objects, but back ends cannot rely on this
13164      fact.  If these nodes are in fact representing such destructors,
13165      `CLEANUP_DECL' will be the `VAR_DECL' destroyed.  Otherwise,
13166      `CLEANUP_DECL' will be `NULL_TREE'.  In any case, the
13167      `CLEANUP_EXPR' is the expression to execute.  The cleanups
13168      executed on exit from a scope should be run in the reverse order
13169      of the order in which the associated `CLEANUP_STMT's were
13170      encountered.
13172 `CONTINUE_STMT'
13173      Used to represent a `continue' statement.  There are no additional
13174      fields.
13176 `CTOR_STMT'
13177      Used to mark the beginning (if `CTOR_BEGIN_P' holds) or end (if
13178      `CTOR_END_P' holds of the main body of a constructor.  See also
13179      `SUBOBJECT' for more information on how to use these nodes.
13181 `DO_STMT'
13182      Used to represent a `do' loop.  The body of the loop is given by
13183      `DO_BODY' while the termination condition for the loop is given by
13184      `DO_COND'.  The condition for a `do'-statement is always an
13185      expression.
13187 `EMPTY_CLASS_EXPR'
13188      Used to represent a temporary object of a class with no data whose
13189      address is never taken.  (All such objects are interchangeable.)
13190      The `TREE_TYPE' represents the type of the object.
13192 `EXPR_STMT'
13193      Used to represent an expression statement.  Use `EXPR_STMT_EXPR' to
13194      obtain the expression.
13196 `FOR_STMT'
13197      Used to represent a `for' statement.  The `FOR_INIT_STMT' is the
13198      initialization statement for the loop.  The `FOR_COND' is the
13199      termination condition.  The `FOR_EXPR' is the expression executed
13200      right before the `FOR_COND' on each loop iteration; often, this
13201      expression increments a counter.  The body of the loop is given by
13202      `FOR_BODY'.  Note that `FOR_INIT_STMT' and `FOR_BODY' return
13203      statements, while `FOR_COND' and `FOR_EXPR' return expressions.
13205 `HANDLER'
13206      Used to represent a C++ `catch' block.  The `HANDLER_TYPE' is the
13207      type of exception that will be caught by this handler; it is equal
13208      (by pointer equality) to `NULL' if this handler is for all types.
13209      `HANDLER_PARMS' is the `DECL_STMT' for the catch parameter, and
13210      `HANDLER_BODY' is the code for the block itself.
13212 `IF_STMT'
13213      Used to represent an `if' statement.  The `IF_COND' is the
13214      expression.
13216      If the condition is a `TREE_LIST', then the `TREE_PURPOSE' is a
13217      statement (usually a `DECL_STMT').  Each time the condition is
13218      evaluated, the statement should be executed.  Then, the
13219      `TREE_VALUE' should be used as the conditional expression itself.
13220      This representation is used to handle C++ code like this:
13222      C++ distinguishes between this and `COND_EXPR' for handling
13223      templates.
13225           if (int i = 7) ...
13227      where there is a new local variable (or variables) declared within
13228      the condition.
13230      The `THEN_CLAUSE' represents the statement given by the `then'
13231      condition, while the `ELSE_CLAUSE' represents the statement given
13232      by the `else' condition.
13234 `SUBOBJECT'
13235      In a constructor, these nodes are used to mark the point at which a
13236      subobject of `this' is fully constructed.  If, after this point, an
13237      exception is thrown before a `CTOR_STMT' with `CTOR_END_P' set is
13238      encountered, the `SUBOBJECT_CLEANUP' must be executed.  The
13239      cleanups must be executed in the reverse order in which they
13240      appear.
13242 `SWITCH_STMT'
13243      Used to represent a `switch' statement.  The `SWITCH_STMT_COND' is
13244      the expression on which the switch is occurring.  See the
13245      documentation for an `IF_STMT' for more information on the
13246      representation used for the condition.  The `SWITCH_STMT_BODY' is
13247      the body of the switch statement.   The `SWITCH_STMT_TYPE' is the
13248      original type of switch expression as given in the source, before
13249      any compiler conversions.
13251 `TRY_BLOCK'
13252      Used to represent a `try' block.  The body of the try block is
13253      given by `TRY_STMTS'.  Each of the catch blocks is a `HANDLER'
13254      node.  The first handler is given by `TRY_HANDLERS'.  Subsequent
13255      handlers are obtained by following the `TREE_CHAIN' link from one
13256      handler to the next.  The body of the handler is given by
13257      `HANDLER_BODY'.
13259      If `CLEANUP_P' holds of the `TRY_BLOCK', then the `TRY_HANDLERS'
13260      will not be a `HANDLER' node.  Instead, it will be an expression
13261      that should be executed if an exception is thrown in the try
13262      block.  It must rethrow the exception after executing that code.
13263      And, if an exception is thrown while the expression is executing,
13264      `terminate' must be called.
13266 `USING_STMT'
13267      Used to represent a `using' directive.  The namespace is given by
13268      `USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL.  This node
13269      is needed inside template functions, to implement using directives
13270      during instantiation.
13272 `WHILE_STMT'
13273      Used to represent a `while' loop.  The `WHILE_COND' is the
13274      termination condition for the loop.  See the documentation for an
13275      `IF_STMT' for more information on the representation used for the
13276      condition.
13278      The `WHILE_BODY' is the body of the loop.
13281 \x1f
13282 File: gccint.info,  Node: C++ Expressions,  Prev: Statements for C++,  Up: C and C++ Trees
13284 11.10.6 C++ Expressions
13285 -----------------------
13287 This section describes expressions specific to the C and C++ front ends.
13289 `TYPEID_EXPR'
13290      Used to represent a `typeid' expression.
13292 `NEW_EXPR'
13293 `VEC_NEW_EXPR'
13294      Used to represent a call to `new' and `new[]' respectively.
13296 `DELETE_EXPR'
13297 `VEC_DELETE_EXPR'
13298      Used to represent a call to `delete' and `delete[]' respectively.
13300 `MEMBER_REF'
13301      Represents a reference to a member of a class.
13303 `THROW_EXPR'
13304      Represents an instance of `throw' in the program.  Operand 0,
13305      which is the expression to throw, may be `NULL_TREE'.
13307 `AGGR_INIT_EXPR'
13308      An `AGGR_INIT_EXPR' represents the initialization as the return
13309      value of a function call, or as the result of a constructor.  An
13310      `AGGR_INIT_EXPR' will only appear as a full-expression, or as the
13311      second operand of a `TARGET_EXPR'.  `AGGR_INIT_EXPR's have a
13312      representation similar to that of `CALL_EXPR's.  You can use the
13313      `AGGR_INIT_EXPR_FN' and `AGGR_INIT_EXPR_ARG' macros to access the
13314      function to call and the arguments to pass.
13316      If `AGGR_INIT_VIA_CTOR_P' holds of the `AGGR_INIT_EXPR', then the
13317      initialization is via a constructor call.  The address of the
13318      `AGGR_INIT_EXPR_SLOT' operand, which is always a `VAR_DECL', is
13319      taken, and this value replaces the first argument in the argument
13320      list.
13322      In either case, the expression is void.
13325 \x1f
13326 File: gccint.info,  Node: Java Trees,  Prev: C and C++ Trees,  Up: GENERIC
13328 11.11 Java Trees
13329 ================
13331 \x1f
13332 File: gccint.info,  Node: GIMPLE,  Next: Tree SSA,  Prev: GENERIC,  Up: Top
13334 12 GIMPLE
13335 *********
13337 GIMPLE is a three-address representation derived from GENERIC by
13338 breaking down GENERIC expressions into tuples of no more than 3
13339 operands (with some exceptions like function calls).  GIMPLE was
13340 heavily influenced by the SIMPLE IL used by the McCAT compiler project
13341 at McGill University, though we have made some different choices.  For
13342 one thing, SIMPLE doesn't support `goto'.
13344  Temporaries are introduced to hold intermediate values needed to
13345 compute complex expressions. Additionally, all the control structures
13346 used in GENERIC are lowered into conditional jumps, lexical scopes are
13347 removed and exception regions are converted into an on the side
13348 exception region tree.
13350  The compiler pass which converts GENERIC into GIMPLE is referred to as
13351 the `gimplifier'.  The gimplifier works recursively, generating GIMPLE
13352 tuples out of the original GENERIC expressions.
13354  One of the early implementation strategies used for the GIMPLE
13355 representation was to use the same internal data structures used by
13356 front ends to represent parse trees. This simplified implementation
13357 because we could leverage existing functionality and interfaces.
13358 However, GIMPLE is a much more restrictive representation than abstract
13359 syntax trees (AST), therefore it does not require the full structural
13360 complexity provided by the main tree data structure.
13362  The GENERIC representation of a function is stored in the
13363 `DECL_SAVED_TREE' field of the associated `FUNCTION_DECL' tree node.
13364 It is converted to GIMPLE by a call to `gimplify_function_tree'.
13366  If a front end wants to include language-specific tree codes in the
13367 tree representation which it provides to the back end, it must provide a
13368 definition of `LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
13369 front end trees to GIMPLE.  Usually such a hook will involve much of
13370 the same code for expanding front end trees to RTL.  This function can
13371 return fully lowered GIMPLE, or it can return GENERIC trees and let the
13372 main gimplifier lower them the rest of the way; this is often simpler.
13373 GIMPLE that is not fully lowered is known as "High GIMPLE" and consists
13374 of the IL before the pass `pass_lower_cf'.  High GIMPLE contains some
13375 container statements like lexical scopes (represented by `GIMPLE_BIND')
13376 and nested expressions (e.g., `GIMPLE_TRY'), while "Low GIMPLE" exposes
13377 all of the implicit jumps for control and exception expressions
13378 directly in the IL and EH region trees.
13380  The C and C++ front ends currently convert directly from front end
13381 trees to GIMPLE, and hand that off to the back end rather than first
13382 converting to GENERIC.  Their gimplifier hooks know about all the
13383 `_STMT' nodes and how to convert them to GENERIC forms.  There was some
13384 work done on a genericization pass which would run first, but the
13385 existence of `STMT_EXPR' meant that in order to convert all of the C
13386 statements into GENERIC equivalents would involve walking the entire
13387 tree anyway, so it was simpler to lower all the way.  This might change
13388 in the future if someone writes an optimization pass which would work
13389 better with higher-level trees, but currently the optimizers all expect
13390 GIMPLE.
13392  You can request to dump a C-like representation of the GIMPLE form
13393 with the flag `-fdump-tree-gimple'.
13395 * Menu:
13397 * Tuple representation::
13398 * GIMPLE instruction set::
13399 * GIMPLE Exception Handling::
13400 * Temporaries::
13401 * Operands::
13402 * Manipulating GIMPLE statements::
13403 * Tuple specific accessors::
13404 * GIMPLE sequences::
13405 * Sequence iterators::
13406 * Adding a new GIMPLE statement code::
13407 * Statement and operand traversals::
13409 \x1f
13410 File: gccint.info,  Node: Tuple representation,  Next: GIMPLE instruction set,  Up: GIMPLE
13412 12.1 Tuple representation
13413 =========================
13415 GIMPLE instructions are tuples of variable size divided in two groups:
13416 a header describing the instruction and its locations, and a variable
13417 length body with all the operands. Tuples are organized into a
13418 hierarchy with 3 main classes of tuples.
13420 12.1.1 `gimple_statement_base' (gsbase)
13421 ---------------------------------------
13423 This is the root of the hierarchy, it holds basic information needed by
13424 most GIMPLE statements. There are some fields that may not be relevant
13425 to every GIMPLE statement, but those were moved into the base structure
13426 to take advantage of holes left by other fields (thus making the
13427 structure more compact).  The structure takes 4 words (32 bytes) on 64
13428 bit hosts:
13430 Field                   Size (bits)
13431 `code'                  8
13432 `subcode'               16
13433 `no_warning'            1
13434 `visited'               1
13435 `nontemporal_move'      1
13436 `plf'                   2
13437 `modified'              1
13438 `has_volatile_ops'      1
13439 `references_memory_p'   1
13440 `uid'                   32
13441 `location'              32
13442 `num_ops'               32
13443 `bb'                    64
13444 `block'                 63
13445 Total size              32 bytes
13447    * `code' Main identifier for a GIMPLE instruction.
13449    * `subcode' Used to distinguish different variants of the same basic
13450      instruction or provide flags applicable to a given code. The
13451      `subcode' flags field has different uses depending on the code of
13452      the instruction, but mostly it distinguishes instructions of the
13453      same family. The most prominent use of this field is in
13454      assignments, where subcode indicates the operation done on the RHS
13455      of the assignment. For example, a = b + c is encoded as
13456      `GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'.
13458    * `no_warning' Bitflag to indicate whether a warning has already
13459      been issued on this statement.
13461    * `visited' General purpose "visited" marker. Set and cleared by
13462      each pass when needed.
13464    * `nontemporal_move' Bitflag used in assignments that represent
13465      non-temporal moves.  Although this bitflag is only used in
13466      assignments, it was moved into the base to take advantage of the
13467      bit holes left by the previous fields.
13469    * `plf' Pass Local Flags. This 2-bit mask can be used as general
13470      purpose markers by any pass. Passes are responsible for clearing
13471      and setting these two flags accordingly.
13473    * `modified' Bitflag to indicate whether the statement has been
13474      modified.  Used mainly by the operand scanner to determine when to
13475      re-scan a statement for operands.
13477    * `has_volatile_ops' Bitflag to indicate whether this statement
13478      contains operands that have been marked volatile.
13480    * `references_memory_p' Bitflag to indicate whether this statement
13481      contains memory references (i.e., its operands are either global
13482      variables, or pointer dereferences or anything that must reside in
13483      memory).
13485    * `uid' This is an unsigned integer used by passes that want to
13486      assign IDs to every statement. These IDs must be assigned and used
13487      by each pass.
13489    * `location' This is a `location_t' identifier to specify source code
13490      location for this statement. It is inherited from the front end.
13492    * `num_ops' Number of operands that this statement has. This
13493      specifies the size of the operand vector embedded in the tuple.
13494      Only used in some tuples, but it is declared in the base tuple to
13495      take advantage of the 32-bit hole left by the previous fields.
13497    * `bb' Basic block holding the instruction.
13499    * `block' Lexical block holding this statement.  Also used for debug
13500      information generation.
13502 12.1.2 `gimple_statement_with_ops'
13503 ----------------------------------
13505 This tuple is actually split in two: `gimple_statement_with_ops_base'
13506 and `gimple_statement_with_ops'. This is needed to accommodate the way
13507 the operand vector is allocated. The operand vector is defined to be an
13508 array of 1 element. So, to allocate a dynamic number of operands, the
13509 memory allocator (`gimple_alloc') simply allocates enough memory to
13510 hold the structure itself plus `N - 1' operands which run "off the end"
13511 of the structure. For example, to allocate space for a tuple with 3
13512 operands, `gimple_alloc' reserves `sizeof (struct
13513 gimple_statement_with_ops) + 2 * sizeof (tree)' bytes.
13515  On the other hand, several fields in this tuple need to be shared with
13516 the `gimple_statement_with_memory_ops' tuple. So, these common fields
13517 are placed in `gimple_statement_with_ops_base' which is then inherited
13518 from the other two tuples.
13520 `gsbase'            256
13521 `addresses_taken'   64
13522 `def_ops'           64
13523 `use_ops'           64
13524 `op'                `num_ops' * 64
13525 Total size          56 + 8 * `num_ops' bytes
13527    * `gsbase' Inherited from `struct gimple_statement_base'.
13529    * `addresses_taken' Bitmap holding the UIDs of all the `VAR_DECL's
13530      whose addresses are taken by this statement. For example, a
13531      statement of the form `p = &b' will have the UID for symbol `b' in
13532      this set.
13534    * `def_ops' Array of pointers into the operand array indicating all
13535      the slots that contain a variable written-to by the statement.
13536      This array is also used for immediate use chaining. Note that it
13537      would be possible to not rely on this array, but the changes
13538      required to implement this are pretty invasive.
13540    * `use_ops' Similar to `def_ops' but for variables read by the
13541      statement.
13543    * `op' Array of trees with `num_ops' slots.
13545 12.1.3 `gimple_statement_with_memory_ops'
13546 -----------------------------------------
13548 This tuple is essentially identical to `gimple_statement_with_ops',
13549 except that it contains 4 additional fields to hold vectors related
13550 memory stores and loads.  Similar to the previous case, the structure
13551 is split in two to accommodate for the operand vector
13552 (`gimple_statement_with_memory_ops_base' and
13553 `gimple_statement_with_memory_ops').
13555 Field               Size (bits)
13556 `gsbase'            256
13557 `addresses_taken'   64
13558 `def_ops'           64
13559 `use_ops'           64
13560 `vdef_ops'          64
13561 `vuse_ops'          64
13562 `stores'            64
13563 `loads'             64
13564 `op'                `num_ops' * 64
13565 Total size          88 + 8 * `num_ops' bytes
13567    * `vdef_ops' Similar to `def_ops' but for `VDEF' operators. There is
13568      one entry per memory symbol written by this statement. This is
13569      used to maintain the memory SSA use-def and def-def chains.
13571    * `vuse_ops' Similar to `use_ops' but for `VUSE' operators. There is
13572      one entry per memory symbol loaded by this statement. This is used
13573      to maintain the memory SSA use-def chains.
13575    * `stores' Bitset with all the UIDs for the symbols written-to by the
13576      statement.  This is different than `vdef_ops' in that all the
13577      affected symbols are mentioned in this set.  If memory
13578      partitioning is enabled, the `vdef_ops' vector will refer to memory
13579      partitions. Furthermore, no SSA information is stored in this set.
13581    * `loads' Similar to `stores', but for memory loads. (Note that there
13582      is some amount of redundancy here, it should be possible to reduce
13583      memory utilization further by removing these sets).
13585  All the other tuples are defined in terms of these three basic ones.
13586 Each tuple will add some fields. The main gimple type is defined to be
13587 the union of all these structures (`GTY' markers elided for clarity):
13589      union gimple_statement_d
13590      {
13591        struct gimple_statement_base gsbase;
13592        struct gimple_statement_with_ops gsops;
13593        struct gimple_statement_with_memory_ops gsmem;
13594        struct gimple_statement_omp omp;
13595        struct gimple_statement_bind gimple_bind;
13596        struct gimple_statement_catch gimple_catch;
13597        struct gimple_statement_eh_filter gimple_eh_filter;
13598        struct gimple_statement_phi gimple_phi;
13599        struct gimple_statement_resx gimple_resx;
13600        struct gimple_statement_try gimple_try;
13601        struct gimple_statement_wce gimple_wce;
13602        struct gimple_statement_asm gimple_asm;
13603        struct gimple_statement_omp_critical gimple_omp_critical;
13604        struct gimple_statement_omp_for gimple_omp_for;
13605        struct gimple_statement_omp_parallel gimple_omp_parallel;
13606        struct gimple_statement_omp_task gimple_omp_task;
13607        struct gimple_statement_omp_sections gimple_omp_sections;
13608        struct gimple_statement_omp_single gimple_omp_single;
13609        struct gimple_statement_omp_continue gimple_omp_continue;
13610        struct gimple_statement_omp_atomic_load gimple_omp_atomic_load;
13611        struct gimple_statement_omp_atomic_store gimple_omp_atomic_store;
13612      };
13614 \x1f
13615 File: gccint.info,  Node: GIMPLE instruction set,  Next: GIMPLE Exception Handling,  Prev: Tuple representation,  Up: GIMPLE
13617 12.2 GIMPLE instruction set
13618 ===========================
13620 The following table briefly describes the GIMPLE instruction set.
13622 Instruction                    High GIMPLE   Low GIMPLE
13623 `GIMPLE_ASM'                   x             x
13624 `GIMPLE_ASSIGN'                x             x
13625 `GIMPLE_BIND'                  x             
13626 `GIMPLE_CALL'                  x             x
13627 `GIMPLE_CATCH'                 x             
13628 `GIMPLE_COND'                  x             x
13629 `GIMPLE_DEBUG'                 x             x
13630 `GIMPLE_EH_FILTER'             x             
13631 `GIMPLE_GOTO'                  x             x
13632 `GIMPLE_LABEL'                 x             x
13633 `GIMPLE_NOP'                   x             x
13634 `GIMPLE_OMP_ATOMIC_LOAD'       x             x
13635 `GIMPLE_OMP_ATOMIC_STORE'      x             x
13636 `GIMPLE_OMP_CONTINUE'          x             x
13637 `GIMPLE_OMP_CRITICAL'          x             x
13638 `GIMPLE_OMP_FOR'               x             x
13639 `GIMPLE_OMP_MASTER'            x             x
13640 `GIMPLE_OMP_ORDERED'           x             x
13641 `GIMPLE_OMP_PARALLEL'          x             x
13642 `GIMPLE_OMP_RETURN'            x             x
13643 `GIMPLE_OMP_SECTION'           x             x
13644 `GIMPLE_OMP_SECTIONS'          x             x
13645 `GIMPLE_OMP_SECTIONS_SWITCH'   x             x
13646 `GIMPLE_OMP_SINGLE'            x             x
13647 `GIMPLE_PHI'                                 x
13648 `GIMPLE_RESX'                                x
13649 `GIMPLE_RETURN'                x             x
13650 `GIMPLE_SWITCH'                x             x
13651 `GIMPLE_TRY'                   x             
13653 \x1f
13654 File: gccint.info,  Node: GIMPLE Exception Handling,  Next: Temporaries,  Prev: GIMPLE instruction set,  Up: GIMPLE
13656 12.3 Exception Handling
13657 =======================
13659 Other exception handling constructs are represented using
13660 `GIMPLE_TRY_CATCH'.  `GIMPLE_TRY_CATCH' has two operands.  The first
13661 operand is a sequence of statements to execute.  If executing these
13662 statements does not throw an exception, then the second operand is
13663 ignored.  Otherwise, if an exception is thrown, then the second operand
13664 of the `GIMPLE_TRY_CATCH' is checked.  The second operand may have the
13665 following forms:
13667   1. A sequence of statements to execute.  When an exception occurs,
13668      these statements are executed, and then the exception is rethrown.
13670   2. A sequence of `GIMPLE_CATCH' statements.  Each `GIMPLE_CATCH' has
13671      a list of applicable exception types and handler code.  If the
13672      thrown exception matches one of the caught types, the associated
13673      handler code is executed.  If the handler code falls off the
13674      bottom, execution continues after the original `GIMPLE_TRY_CATCH'.
13676   3. A `GIMPLE_EH_FILTER' statement.  This has a list of permitted
13677      exception types, and code to handle a match failure.  If the
13678      thrown exception does not match one of the allowed types, the
13679      associated match failure code is executed.  If the thrown exception
13680      does match, it continues unwinding the stack looking for the next
13681      handler.
13684  Currently throwing an exception is not directly represented in GIMPLE,
13685 since it is implemented by calling a function.  At some point in the
13686 future we will want to add some way to express that the call will throw
13687 an exception of a known type.
13689  Just before running the optimizers, the compiler lowers the high-level
13690 EH constructs above into a set of `goto's, magic labels, and EH
13691 regions.  Continuing to unwind at the end of a cleanup is represented
13692 with a `GIMPLE_RESX'.
13694 \x1f
13695 File: gccint.info,  Node: Temporaries,  Next: Operands,  Prev: GIMPLE Exception Handling,  Up: GIMPLE
13697 12.4 Temporaries
13698 ================
13700 When gimplification encounters a subexpression that is too complex, it
13701 creates a new temporary variable to hold the value of the
13702 subexpression, and adds a new statement to initialize it before the
13703 current statement. These special temporaries are known as `expression
13704 temporaries', and are allocated using `get_formal_tmp_var'.  The
13705 compiler tries to always evaluate identical expressions into the same
13706 temporary, to simplify elimination of redundant calculations.
13708  We can only use expression temporaries when we know that it will not
13709 be reevaluated before its value is used, and that it will not be
13710 otherwise modified(1). Other temporaries can be allocated using
13711 `get_initialized_tmp_var' or `create_tmp_var'.
13713  Currently, an expression like `a = b + 5' is not reduced any further.
13714 We tried converting it to something like
13715        T1 = b + 5;
13716        a = T1;
13717  but this bloated the representation for minimal benefit.  However, a
13718 variable which must live in memory cannot appear in an expression; its
13719 value is explicitly loaded into a temporary first.  Similarly, storing
13720 the value of an expression to a memory variable goes through a
13721 temporary.
13723  ---------- Footnotes ----------
13725  (1) These restrictions are derived from those in Morgan 4.8.
13727 \x1f
13728 File: gccint.info,  Node: Operands,  Next: Manipulating GIMPLE statements,  Prev: Temporaries,  Up: GIMPLE
13730 12.5 Operands
13731 =============
13733 In general, expressions in GIMPLE consist of an operation and the
13734 appropriate number of simple operands; these operands must either be a
13735 GIMPLE rvalue (`is_gimple_val'), i.e. a constant or a register
13736 variable.  More complex operands are factored out into temporaries, so
13737 that
13738        a = b + c + d
13739  becomes
13740        T1 = b + c;
13741        a = T1 + d;
13743  The same rule holds for arguments to a `GIMPLE_CALL'.
13745  The target of an assignment is usually a variable, but can also be an
13746 `INDIRECT_REF' or a compound lvalue as described below.
13748 * Menu:
13750 * Compound Expressions::
13751 * Compound Lvalues::
13752 * Conditional Expressions::
13753 * Logical Operators::
13755 \x1f
13756 File: gccint.info,  Node: Compound Expressions,  Next: Compound Lvalues,  Up: Operands
13758 12.5.1 Compound Expressions
13759 ---------------------------
13761 The left-hand side of a C comma expression is simply moved into a
13762 separate statement.
13764 \x1f
13765 File: gccint.info,  Node: Compound Lvalues,  Next: Conditional Expressions,  Prev: Compound Expressions,  Up: Operands
13767 12.5.2 Compound Lvalues
13768 -----------------------
13770 Currently compound lvalues involving array and structure field
13771 references are not broken down; an expression like `a.b[2] = 42' is not
13772 reduced any further (though complex array subscripts are).  This
13773 restriction is a workaround for limitations in later optimizers; if we
13774 were to convert this to
13776        T1 = &a.b;
13777        T1[2] = 42;
13779  alias analysis would not remember that the reference to `T1[2]' came
13780 by way of `a.b', so it would think that the assignment could alias
13781 another member of `a'; this broke `struct-alias-1.c'.  Future optimizer
13782 improvements may make this limitation unnecessary.
13784 \x1f
13785 File: gccint.info,  Node: Conditional Expressions,  Next: Logical Operators,  Prev: Compound Lvalues,  Up: Operands
13787 12.5.3 Conditional Expressions
13788 ------------------------------
13790 A C `?:' expression is converted into an `if' statement with each
13791 branch assigning to the same temporary.  So,
13793        a = b ? c : d;
13794  becomes
13795        if (b == 1)
13796          T1 = c;
13797        else
13798          T1 = d;
13799        a = T1;
13801  The GIMPLE level if-conversion pass re-introduces `?:' expression, if
13802 appropriate. It is used to vectorize loops with conditions using vector
13803 conditional operations.
13805  Note that in GIMPLE, `if' statements are represented using
13806 `GIMPLE_COND', as described below.
13808 \x1f
13809 File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: Operands
13811 12.5.4 Logical Operators
13812 ------------------------
13814 Except when they appear in the condition operand of a `GIMPLE_COND',
13815 logical `and' and `or' operators are simplified as follows: `a = b &&
13816 c' becomes
13818        T1 = (bool)b;
13819        if (T1 == true)
13820          T1 = (bool)c;
13821        a = T1;
13823  Note that `T1' in this example cannot be an expression temporary,
13824 because it has two different assignments.
13826 12.5.5 Manipulating operands
13827 ----------------------------
13829 All gimple operands are of type `tree'.  But only certain types of
13830 trees are allowed to be used as operand tuples.  Basic validation is
13831 controlled by the function `get_gimple_rhs_class', which given a tree
13832 code, returns an `enum' with the following values of type `enum
13833 gimple_rhs_class'
13835    * `GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand.
13837    * `GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation.
13839    * `GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation.
13841    * `GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be
13842      split into simpler operands (for instance, `SSA_NAME', `VAR_DECL',
13843      `COMPONENT_REF', etc).
13845      This operand class also acts as an escape hatch for tree nodes
13846      that may be flattened out into the operand vector, but would need
13847      more than two slots on the RHS.  For instance, a `COND_EXPR'
13848      expression of the form `(a op b) ? x : y' could be flattened out
13849      on the operand vector using 4 slots, but it would also require
13850      additional processing to distinguish `c = a op b' from `c = a op b
13851      ? x : y'.  Something similar occurs with `ASSERT_EXPR'.   In time,
13852      these special case tree expressions should be flattened into the
13853      operand vector.
13855  For tree nodes in the categories `GIMPLE_BINARY_RHS' and
13856 `GIMPLE_UNARY_RHS', they cannot be stored inside tuples directly.  They
13857 first need to be flattened and separated into individual components.
13858 For instance, given the GENERIC expression
13860      a = b + c
13862  its tree representation is:
13864      MODIFY_EXPR <VAR_DECL  <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>
13866  In this case, the GIMPLE form for this statement is logically
13867 identical to its GENERIC form but in GIMPLE, the `PLUS_EXPR' on the RHS
13868 of the assignment is not represented as a tree, instead the two
13869 operands are taken out of the `PLUS_EXPR' sub-tree and flattened into
13870 the GIMPLE tuple as follows:
13872      GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>
13874 12.5.6 Operand vector allocation
13875 --------------------------------
13877 The operand vector is stored at the bottom of the three tuple
13878 structures that accept operands. This means, that depending on the code
13879 of a given statement, its operand vector will be at different offsets
13880 from the base of the structure.  To access tuple operands use the
13881 following accessors
13883  -- GIMPLE function: unsigned gimple_num_ops (gimple g)
13884      Returns the number of operands in statement G.
13886  -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
13887      Returns operand `I' from statement `G'.
13889  -- GIMPLE function: tree *gimple_ops (gimple g)
13890      Returns a pointer into the operand vector for statement `G'.  This
13891      is computed using an internal table called `gimple_ops_offset_'[].
13892      This table is indexed by the gimple code of `G'.
13894      When the compiler is built, this table is filled-in using the
13895      sizes of the structures used by each statement code defined in
13896      gimple.def.  Since the operand vector is at the bottom of the
13897      structure, for a gimple code `C' the offset is computed as sizeof
13898      (struct-of `C') - sizeof (tree).
13900      This mechanism adds one memory indirection to every access when
13901      using `gimple_op'(), if this becomes a bottleneck, a pass can
13902      choose to memoize the result from `gimple_ops'() and use that to
13903      access the operands.
13905 12.5.7 Operand validation
13906 -------------------------
13908 When adding a new operand to a gimple statement, the operand will be
13909 validated according to what each tuple accepts in its operand vector.
13910 These predicates are called by the `gimple_<name>_set_...()'.  Each
13911 tuple will use one of the following predicates (Note, this list is not
13912 exhaustive):
13914  -- GIMPLE function: is_gimple_operand (tree t)
13915      This is the most permissive of the predicates.  It essentially
13916      checks whether t has a `gimple_rhs_class' of `GIMPLE_SINGLE_RHS'.
13918  -- GIMPLE function: is_gimple_val (tree t)
13919      Returns true if t is a "GIMPLE value", which are all the
13920      non-addressable stack variables (variables for which
13921      `is_gimple_reg' returns true) and constants (expressions for which
13922      `is_gimple_min_invariant' returns true).
13924  -- GIMPLE function: is_gimple_addressable (tree t)
13925      Returns true if t is a symbol or memory reference whose address
13926      can be taken.
13928  -- GIMPLE function: is_gimple_asm_val (tree t)
13929      Similar to `is_gimple_val' but it also accepts hard registers.
13931  -- GIMPLE function: is_gimple_call_addr (tree t)
13932      Return true if t is a valid expression to use as the function
13933      called by a `GIMPLE_CALL'.
13935  -- GIMPLE function: is_gimple_constant (tree t)
13936      Return true if t is a valid gimple constant.
13938  -- GIMPLE function: is_gimple_min_invariant (tree t)
13939      Return true if t is a valid minimal invariant.  This is different
13940      from constants, in that the specific value of t may not be known
13941      at compile time, but it is known that it doesn't change (e.g., the
13942      address of a function local variable).
13944  -- GIMPLE function: is_gimple_min_invariant_address (tree t)
13945      Return true if t is an `ADDR_EXPR' that does not change once a
13946      function is running.
13948  -- GIMPLE function: is_gimple_ip_invariant (tree t)
13949      Return true if t is an interprocedural invariant.  This means that
13950      t is a valid invariant in all functions (e.g. it can be an address
13951      of a global variable but not of a local one).
13953  -- GIMPLE function: is_gimple_ip_invariant_address (tree t)
13954      Return true if t is an `ADDR_EXPR' that does not change once the
13955      program is running (and which is valid in all functions).
13957 12.5.8 Statement validation
13958 ---------------------------
13960  -- GIMPLE function: is_gimple_assign (gimple g)
13961      Return true if the code of g is `GIMPLE_ASSIGN'.
13963  -- GIMPLE function: is_gimple_call (gimple g)
13964      Return true if the code of g is `GIMPLE_CALL'.
13966  -- GIMPLE function: is_gimple_debug (gimple g)
13967      Return true if the code of g is `GIMPLE_DEBUG'.
13969  -- GIMPLE function: gimple_assign_cast_p (gimple g)
13970      Return true if g is a `GIMPLE_ASSIGN' that performs a type cast
13971      operation.
13973  -- GIMPLE function: gimple_debug_bind_p (gimple g)
13974      Return true if g is a `GIMPLE_DEBUG' that binds the value of an
13975      expression to a variable.
13977 \x1f
13978 File: gccint.info,  Node: Manipulating GIMPLE statements,  Next: Tuple specific accessors,  Prev: Operands,  Up: GIMPLE
13980 12.6 Manipulating GIMPLE statements
13981 ===================================
13983 This section documents all the functions available to handle each of
13984 the GIMPLE instructions.
13986 12.6.1 Common accessors
13987 -----------------------
13989 The following are common accessors for gimple statements.
13991  -- GIMPLE function: enum gimple_code gimple_code (gimple g)
13992      Return the code for statement `G'.
13994  -- GIMPLE function: basic_block gimple_bb (gimple g)
13995      Return the basic block to which statement `G' belongs to.
13997  -- GIMPLE function: tree gimple_block (gimple g)
13998      Return the lexical scope block holding statement `G'.
14000  -- GIMPLE function: tree gimple_expr_type (gimple stmt)
14001      Return the type of the main expression computed by `STMT'. Return
14002      `void_type_node' if `STMT' computes nothing. This will only return
14003      something meaningful for `GIMPLE_ASSIGN', `GIMPLE_COND' and
14004      `GIMPLE_CALL'.  For all other tuple codes, it will return
14005      `void_type_node'.
14007  -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt)
14008      Return the tree code for the expression computed by `STMT'.  This
14009      is only meaningful for `GIMPLE_CALL', `GIMPLE_ASSIGN' and
14010      `GIMPLE_COND'.  If `STMT' is `GIMPLE_CALL', it will return
14011      `CALL_EXPR'.  For `GIMPLE_COND', it returns the code of the
14012      comparison predicate.  For `GIMPLE_ASSIGN' it returns the code of
14013      the operation performed by the `RHS' of the assignment.
14015  -- GIMPLE function: void gimple_set_block (gimple g, tree block)
14016      Set the lexical scope block of `G' to `BLOCK'.
14018  -- GIMPLE function: location_t gimple_locus (gimple g)
14019      Return locus information for statement `G'.
14021  -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus)
14022      Set locus information for statement `G'.
14024  -- GIMPLE function: bool gimple_locus_empty_p (gimple g)
14025      Return true if `G' does not have locus information.
14027  -- GIMPLE function: bool gimple_no_warning_p (gimple stmt)
14028      Return true if no warnings should be emitted for statement `STMT'.
14030  -- GIMPLE function: void gimple_set_visited (gimple stmt, bool
14031           visited_p)
14032      Set the visited status on statement `STMT' to `VISITED_P'.
14034  -- GIMPLE function: bool gimple_visited_p (gimple stmt)
14035      Return the visited status on statement `STMT'.
14037  -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask
14038           plf, bool val_p)
14039      Set pass local flag `PLF' on statement `STMT' to `VAL_P'.
14041  -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum
14042           plf_mask plf)
14043      Return the value of pass local flag `PLF' on statement `STMT'.
14045  -- GIMPLE function: bool gimple_has_ops (gimple g)
14046      Return true if statement `G' has register or memory operands.
14048  -- GIMPLE function: bool gimple_has_mem_ops (gimple g)
14049      Return true if statement `G' has memory operands.
14051  -- GIMPLE function: unsigned gimple_num_ops (gimple g)
14052      Return the number of operands for statement `G'.
14054  -- GIMPLE function: tree *gimple_ops (gimple g)
14055      Return the array of operands for statement `G'.
14057  -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
14058      Return operand `I' for statement `G'.
14060  -- GIMPLE function: tree *gimple_op_ptr (gimple g, unsigned i)
14061      Return a pointer to operand `I' for statement `G'.
14063  -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op)
14064      Set operand `I' of statement `G' to `OP'.
14066  -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt)
14067      Return the set of symbols that have had their address taken by
14068      `STMT'.
14070  -- GIMPLE function: struct def_optype_d *gimple_def_ops (gimple g)
14071      Return the set of `DEF' operands for statement `G'.
14073  -- GIMPLE function: void gimple_set_def_ops (gimple g, struct
14074           def_optype_d *def)
14075      Set `DEF' to be the set of `DEF' operands for statement `G'.
14077  -- GIMPLE function: struct use_optype_d *gimple_use_ops (gimple g)
14078      Return the set of `USE' operands for statement `G'.
14080  -- GIMPLE function: void gimple_set_use_ops (gimple g, struct
14081           use_optype_d *use)
14082      Set `USE' to be the set of `USE' operands for statement `G'.
14084  -- GIMPLE function: struct voptype_d *gimple_vuse_ops (gimple g)
14085      Return the set of `VUSE' operands for statement `G'.
14087  -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct
14088           voptype_d *ops)
14089      Set `OPS' to be the set of `VUSE' operands for statement `G'.
14091  -- GIMPLE function: struct voptype_d *gimple_vdef_ops (gimple g)
14092      Return the set of `VDEF' operands for statement `G'.
14094  -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct
14095           voptype_d *ops)
14096      Set `OPS' to be the set of `VDEF' operands for statement `G'.
14098  -- GIMPLE function: bitmap gimple_loaded_syms (gimple g)
14099      Return the set of symbols loaded by statement `G'.  Each element of
14100      the set is the `DECL_UID' of the corresponding symbol.
14102  -- GIMPLE function: bitmap gimple_stored_syms (gimple g)
14103      Return the set of symbols stored by statement `G'.  Each element of
14104      the set is the `DECL_UID' of the corresponding symbol.
14106  -- GIMPLE function: bool gimple_modified_p (gimple g)
14107      Return true if statement `G' has operands and the modified field
14108      has been set.
14110  -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt)
14111      Return true if statement `STMT' contains volatile operands.
14113  -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt,
14114           bool volatilep)
14115      Return true if statement `STMT' contains volatile operands.
14117  -- GIMPLE function: void update_stmt (gimple s)
14118      Mark statement `S' as modified, and update it.
14120  -- GIMPLE function: void update_stmt_if_modified (gimple s)
14121      Update statement `S' if it has been marked modified.
14123  -- GIMPLE function: gimple gimple_copy (gimple stmt)
14124      Return a deep copy of statement `STMT'.
14126 \x1f
14127 File: gccint.info,  Node: Tuple specific accessors,  Next: GIMPLE sequences,  Prev: Manipulating GIMPLE statements,  Up: GIMPLE
14129 12.7 Tuple specific accessors
14130 =============================
14132 * Menu:
14134 * `GIMPLE_ASM'::
14135 * `GIMPLE_ASSIGN'::
14136 * `GIMPLE_BIND'::
14137 * `GIMPLE_CALL'::
14138 * `GIMPLE_CATCH'::
14139 * `GIMPLE_COND'::
14140 * `GIMPLE_DEBUG'::
14141 * `GIMPLE_EH_FILTER'::
14142 * `GIMPLE_LABEL'::
14143 * `GIMPLE_NOP'::
14144 * `GIMPLE_OMP_ATOMIC_LOAD'::
14145 * `GIMPLE_OMP_ATOMIC_STORE'::
14146 * `GIMPLE_OMP_CONTINUE'::
14147 * `GIMPLE_OMP_CRITICAL'::
14148 * `GIMPLE_OMP_FOR'::
14149 * `GIMPLE_OMP_MASTER'::
14150 * `GIMPLE_OMP_ORDERED'::
14151 * `GIMPLE_OMP_PARALLEL'::
14152 * `GIMPLE_OMP_RETURN'::
14153 * `GIMPLE_OMP_SECTION'::
14154 * `GIMPLE_OMP_SECTIONS'::
14155 * `GIMPLE_OMP_SINGLE'::
14156 * `GIMPLE_PHI'::
14157 * `GIMPLE_RESX'::
14158 * `GIMPLE_RETURN'::
14159 * `GIMPLE_SWITCH'::
14160 * `GIMPLE_TRY'::
14161 * `GIMPLE_WITH_CLEANUP_EXPR'::
14163 \x1f
14164 File: gccint.info,  Node: `GIMPLE_ASM',  Next: `GIMPLE_ASSIGN',  Up: Tuple specific accessors
14166 12.7.1 `GIMPLE_ASM'
14167 -------------------
14169  -- GIMPLE function: gimple gimple_build_asm (const char *string,
14170           ninputs, noutputs, nclobbers, ...)
14171      Build a `GIMPLE_ASM' statement.  This statement is used for
14172      building in-line assembly constructs.  `STRING' is the assembly
14173      code.  `NINPUT' is the number of register inputs.  `NOUTPUT' is the
14174      number of register outputs.  `NCLOBBERS' is the number of clobbered
14175      registers.  The rest of the arguments trees for each input,
14176      output, and clobbered registers.
14178  -- GIMPLE function: gimple gimple_build_asm_vec (const char *,
14179           VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *)
14180      Identical to gimple_build_asm, but the arguments are passed in
14181      VECs.
14183  -- GIMPLE function: gimple_asm_ninputs (gimple g)
14184      Return the number of input operands for `GIMPLE_ASM' `G'.
14186  -- GIMPLE function: gimple_asm_noutputs (gimple g)
14187      Return the number of output operands for `GIMPLE_ASM' `G'.
14189  -- GIMPLE function: gimple_asm_nclobbers (gimple g)
14190      Return the number of clobber operands for `GIMPLE_ASM' `G'.
14192  -- GIMPLE function: tree gimple_asm_input_op (gimple g, unsigned index)
14193      Return input operand `INDEX' of `GIMPLE_ASM' `G'.
14195  -- GIMPLE function: void gimple_asm_set_input_op (gimple g, unsigned
14196           index, tree in_op)
14197      Set `IN_OP' to be input operand `INDEX' in `GIMPLE_ASM' `G'.
14199  -- GIMPLE function: tree gimple_asm_output_op (gimple g, unsigned
14200           index)
14201      Return output operand `INDEX' of `GIMPLE_ASM' `G'.
14203  -- GIMPLE function: void gimple_asm_set_output_op (gimple g, unsigned
14204           index, tree out_op)
14205      Set `OUT_OP' to be output operand `INDEX' in `GIMPLE_ASM' `G'.
14207  -- GIMPLE function: tree gimple_asm_clobber_op (gimple g, unsigned
14208           index)
14209      Return clobber operand `INDEX' of `GIMPLE_ASM' `G'.
14211  -- GIMPLE function: void gimple_asm_set_clobber_op (gimple g, unsigned
14212           index, tree clobber_op)
14213      Set `CLOBBER_OP' to be clobber operand `INDEX' in `GIMPLE_ASM' `G'.
14215  -- GIMPLE function: const char *gimple_asm_string (gimple g)
14216      Return the string representing the assembly instruction in
14217      `GIMPLE_ASM' `G'.
14219  -- GIMPLE function: bool gimple_asm_volatile_p (gimple g)
14220      Return true if `G' is an asm statement marked volatile.
14222  -- GIMPLE function: void gimple_asm_set_volatile (gimple g)
14223      Mark asm statement `G' as volatile.
14225  -- GIMPLE function: void gimple_asm_clear_volatile (gimple g)
14226      Remove volatile marker from asm statement `G'.
14228 \x1f
14229 File: gccint.info,  Node: `GIMPLE_ASSIGN',  Next: `GIMPLE_BIND',  Prev: `GIMPLE_ASM',  Up: Tuple specific accessors
14231 12.7.2 `GIMPLE_ASSIGN'
14232 ----------------------
14234  -- GIMPLE function: gimple gimple_build_assign (tree lhs, tree rhs)
14235      Build a `GIMPLE_ASSIGN' statement.  The left-hand side is an lvalue
14236      passed in lhs.  The right-hand side can be either a unary or
14237      binary tree expression.  The expression tree rhs will be flattened
14238      and its operands assigned to the corresponding operand slots in
14239      the new statement.  This function is useful when you already have
14240      a tree expression that you want to convert into a tuple.  However,
14241      try to avoid building expression trees for the sole purpose of
14242      calling this function.  If you already have the operands in
14243      separate trees, it is better to use `gimple_build_assign_with_ops'.
14245  -- GIMPLE function: gimple gimplify_assign (tree dst, tree src,
14246           gimple_seq *seq_p)
14247      Build a new `GIMPLE_ASSIGN' tuple and append it to the end of
14248      `*SEQ_P'.
14250  `DST'/`SRC' are the destination and source respectively.  You can pass
14251 ungimplified trees in `DST' or `SRC', in which case they will be
14252 converted to a gimple operand if necessary.
14254  This function returns the newly created `GIMPLE_ASSIGN' tuple.
14256  -- GIMPLE function: gimple gimple_build_assign_with_ops (enum
14257           tree_code subcode, tree lhs, tree op1, tree op2)
14258      This function is similar to `gimple_build_assign', but is used to
14259      build a `GIMPLE_ASSIGN' statement when the operands of the
14260      right-hand side of the assignment are already split into different
14261      operands.
14263      The left-hand side is an lvalue passed in lhs.  Subcode is the
14264      `tree_code' for the right-hand side of the assignment.  Op1 and op2
14265      are the operands.  If op2 is null, subcode must be a `tree_code'
14266      for a unary expression.
14268  -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g)
14269      Return the code of the expression computed on the `RHS' of
14270      assignment statement `G'.
14272  -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class
14273           (gimple g)
14274      Return the gimple rhs class of the code for the expression
14275      computed on the rhs of assignment statement `G'.  This will never
14276      return `GIMPLE_INVALID_RHS'.
14278  -- GIMPLE function: tree gimple_assign_lhs (gimple g)
14279      Return the `LHS' of assignment statement `G'.
14281  -- GIMPLE function: tree *gimple_assign_lhs_ptr (gimple g)
14282      Return a pointer to the `LHS' of assignment statement `G'.
14284  -- GIMPLE function: tree gimple_assign_rhs1 (gimple g)
14285      Return the first operand on the `RHS' of assignment statement `G'.
14287  -- GIMPLE function: tree *gimple_assign_rhs1_ptr (gimple g)
14288      Return the address of the first operand on the `RHS' of assignment
14289      statement `G'.
14291  -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
14292      Return the second operand on the `RHS' of assignment statement `G'.
14294  -- GIMPLE function: tree *gimple_assign_rhs2_ptr (gimple g)
14295      Return the address of the second operand on the `RHS' of assignment
14296      statement `G'.
14298  -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs)
14299      Set `LHS' to be the `LHS' operand of assignment statement `G'.
14301  -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs)
14302      Set `RHS' to be the first operand on the `RHS' of assignment
14303      statement `G'.
14305  -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
14306      Return the second operand on the `RHS' of assignment statement `G'.
14308  -- GIMPLE function: tree *gimple_assign_rhs2_ptr (gimple g)
14309      Return a pointer to the second operand on the `RHS' of assignment
14310      statement `G'.
14312  -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs)
14313      Set `RHS' to be the second operand on the `RHS' of assignment
14314      statement `G'.
14316  -- GIMPLE function: bool gimple_assign_cast_p (gimple s)
14317      Return true if `S' is a type-cast assignment.
14319 \x1f
14320 File: gccint.info,  Node: `GIMPLE_BIND',  Next: `GIMPLE_CALL',  Prev: `GIMPLE_ASSIGN',  Up: Tuple specific accessors
14322 12.7.3 `GIMPLE_BIND'
14323 --------------------
14325  -- GIMPLE function: gimple gimple_build_bind (tree vars, gimple_seq
14326           body)
14327      Build a `GIMPLE_BIND' statement with a list of variables in `VARS'
14328      and a body of statements in sequence `BODY'.
14330  -- GIMPLE function: tree gimple_bind_vars (gimple g)
14331      Return the variables declared in the `GIMPLE_BIND' statement `G'.
14333  -- GIMPLE function: void gimple_bind_set_vars (gimple g, tree vars)
14334      Set `VARS' to be the set of variables declared in the `GIMPLE_BIND'
14335      statement `G'.
14337  -- GIMPLE function: void gimple_bind_append_vars (gimple g, tree vars)
14338      Append `VARS' to the set of variables declared in the `GIMPLE_BIND'
14339      statement `G'.
14341  -- GIMPLE function: gimple_seq gimple_bind_body (gimple g)
14342      Return the GIMPLE sequence contained in the `GIMPLE_BIND' statement
14343      `G'.
14345  -- GIMPLE function: void gimple_bind_set_body (gimple g, gimple_seq
14346           seq)
14347      Set `SEQ' to be sequence contained in the `GIMPLE_BIND' statement
14348      `G'.
14350  -- GIMPLE function: void gimple_bind_add_stmt (gimple gs, gimple stmt)
14351      Append a statement to the end of a `GIMPLE_BIND''s body.
14353  -- GIMPLE function: void gimple_bind_add_seq (gimple gs, gimple_seq
14354           seq)
14355      Append a sequence of statements to the end of a `GIMPLE_BIND''s
14356      body.
14358  -- GIMPLE function: tree gimple_bind_block (gimple g)
14359      Return the `TREE_BLOCK' node associated with `GIMPLE_BIND'
14360      statement `G'. This is analogous to the `BIND_EXPR_BLOCK' field in
14361      trees.
14363  -- GIMPLE function: void gimple_bind_set_block (gimple g, tree block)
14364      Set `BLOCK' to be the `TREE_BLOCK' node associated with
14365      `GIMPLE_BIND' statement `G'.
14367 \x1f
14368 File: gccint.info,  Node: `GIMPLE_CALL',  Next: `GIMPLE_CATCH',  Prev: `GIMPLE_BIND',  Up: Tuple specific accessors
14370 12.7.4 `GIMPLE_CALL'
14371 --------------------
14373  -- GIMPLE function: gimple gimple_build_call (tree fn, unsigned nargs,
14374           ...)
14375      Build a `GIMPLE_CALL' statement to function `FN'.  The argument
14376      `FN' must be either a `FUNCTION_DECL' or a gimple call address as
14377      determined by `is_gimple_call_addr'.  `NARGS' are the number of
14378      arguments.  The rest of the arguments follow the argument `NARGS',
14379      and must be trees that are valid as rvalues in gimple (i.e., each
14380      operand is validated with `is_gimple_operand').
14382  -- GIMPLE function: gimple gimple_build_call_from_tree (tree call_expr)
14383      Build a `GIMPLE_CALL' from a `CALL_EXPR' node.  The arguments and
14384      the function are taken from the expression directly.  This routine
14385      assumes that `call_expr' is already in GIMPLE form.  That is, its
14386      operands are GIMPLE values and the function call needs no further
14387      simplification.  All the call flags in `call_expr' are copied over
14388      to the new `GIMPLE_CALL'.
14390  -- GIMPLE function: gimple gimple_build_call_vec (tree fn, `VEC'(tree,
14391           heap) *args)
14392      Identical to `gimple_build_call' but the arguments are stored in a
14393      `VEC'().
14395  -- GIMPLE function: tree gimple_call_lhs (gimple g)
14396      Return the `LHS' of call statement `G'.
14398  -- GIMPLE function: tree *gimple_call_lhs_ptr (gimple g)
14399      Return a pointer to the `LHS' of call statement `G'.
14401  -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)
14402      Set `LHS' to be the `LHS' operand of call statement `G'.
14404  -- GIMPLE function: tree gimple_call_fn (gimple g)
14405      Return the tree node representing the function called by call
14406      statement `G'.
14408  -- GIMPLE function: void gimple_call_set_fn (gimple g, tree fn)
14409      Set `FN' to be the function called by call statement `G'.  This has
14410      to be a gimple value specifying the address of the called function.
14412  -- GIMPLE function: tree gimple_call_fndecl (gimple g)
14413      If a given `GIMPLE_CALL''s callee is a `FUNCTION_DECL', return it.
14414      Otherwise return `NULL'.  This function is analogous to
14415      `get_callee_fndecl' in `GENERIC'.
14417  -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)
14418      Set the called function to `FNDECL'.
14420  -- GIMPLE function: tree gimple_call_return_type (gimple g)
14421      Return the type returned by call statement `G'.
14423  -- GIMPLE function: tree gimple_call_chain (gimple g)
14424      Return the static chain for call statement `G'.
14426  -- GIMPLE function: void gimple_call_set_chain (gimple g, tree chain)
14427      Set `CHAIN' to be the static chain for call statement `G'.
14429  -- GIMPLE function: gimple_call_num_args (gimple g)
14430      Return the number of arguments used by call statement `G'.
14432  -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)
14433      Return the argument at position `INDEX' for call statement `G'.
14434      The first argument is 0.
14436  -- GIMPLE function: tree *gimple_call_arg_ptr (gimple g, unsigned
14437           index)
14438      Return a pointer to the argument at position `INDEX' for call
14439      statement `G'.
14441  -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned
14442           index, tree arg)
14443      Set `ARG' to be the argument at position `INDEX' for call statement
14444      `G'.
14446  -- GIMPLE function: void gimple_call_set_tail (gimple s)
14447      Mark call statement `S' as being a tail call (i.e., a call just
14448      before the exit of a function). These calls are candidate for tail
14449      call optimization.
14451  -- GIMPLE function: bool gimple_call_tail_p (gimple s)
14452      Return true if `GIMPLE_CALL' `S' is marked as a tail call.
14454  -- GIMPLE function: void gimple_call_mark_uninlinable (gimple s)
14455      Mark `GIMPLE_CALL' `S' as being uninlinable.
14457  -- GIMPLE function: bool gimple_call_cannot_inline_p (gimple s)
14458      Return true if `GIMPLE_CALL' `S' cannot be inlined.
14460  -- GIMPLE function: bool gimple_call_noreturn_p (gimple s)
14461      Return true if `S' is a noreturn call.
14463  -- GIMPLE function: gimple gimple_call_copy_skip_args (gimple stmt,
14464           bitmap args_to_skip)
14465      Build a `GIMPLE_CALL' identical to `STMT' but skipping the
14466      arguments in the positions marked by the set `ARGS_TO_SKIP'.
14468 \x1f
14469 File: gccint.info,  Node: `GIMPLE_CATCH',  Next: `GIMPLE_COND',  Prev: `GIMPLE_CALL',  Up: Tuple specific accessors
14471 12.7.5 `GIMPLE_CATCH'
14472 ---------------------
14474  -- GIMPLE function: gimple gimple_build_catch (tree types, gimple_seq
14475           handler)
14476      Build a `GIMPLE_CATCH' statement.  `TYPES' are the tree types this
14477      catch handles.  `HANDLER' is a sequence of statements with the code
14478      for the handler.
14480  -- GIMPLE function: tree gimple_catch_types (gimple g)
14481      Return the types handled by `GIMPLE_CATCH' statement `G'.
14483  -- GIMPLE function: tree *gimple_catch_types_ptr (gimple g)
14484      Return a pointer to the types handled by `GIMPLE_CATCH' statement
14485      `G'.
14487  -- GIMPLE function: gimple_seq gimple_catch_handler (gimple g)
14488      Return the GIMPLE sequence representing the body of the handler of
14489      `GIMPLE_CATCH' statement `G'.
14491  -- GIMPLE function: void gimple_catch_set_types (gimple g, tree t)
14492      Set `T' to be the set of types handled by `GIMPLE_CATCH' `G'.
14494  -- GIMPLE function: void gimple_catch_set_handler (gimple g,
14495           gimple_seq handler)
14496      Set `HANDLER' to be the body of `GIMPLE_CATCH' `G'.
14498 \x1f
14499 File: gccint.info,  Node: `GIMPLE_COND',  Next: `GIMPLE_DEBUG',  Prev: `GIMPLE_CATCH',  Up: Tuple specific accessors
14501 12.7.6 `GIMPLE_COND'
14502 --------------------
14504  -- GIMPLE function: gimple gimple_build_cond (enum tree_code
14505           pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
14506      Build a `GIMPLE_COND' statement.  `A' `GIMPLE_COND' statement
14507      compares `LHS' and `RHS' and if the condition in `PRED_CODE' is
14508      true, jump to the label in `t_label', otherwise jump to the label
14509      in `f_label'.  `PRED_CODE' are relational operator tree codes like
14510      `EQ_EXPR', `LT_EXPR', `LE_EXPR', `NE_EXPR', etc.
14512  -- GIMPLE function: gimple gimple_build_cond_from_tree (tree cond,
14513           tree t_label, tree f_label)
14514      Build a `GIMPLE_COND' statement from the conditional expression
14515      tree `COND'.  `T_LABEL' and `F_LABEL' are as in
14516      `gimple_build_cond'.
14518  -- GIMPLE function: enum tree_code gimple_cond_code (gimple g)
14519      Return the code of the predicate computed by conditional statement
14520      `G'.
14522  -- GIMPLE function: void gimple_cond_set_code (gimple g, enum
14523           tree_code code)
14524      Set `CODE' to be the predicate code for the conditional statement
14525      `G'.
14527  -- GIMPLE function: tree gimple_cond_lhs (gimple g)
14528      Return the `LHS' of the predicate computed by conditional statement
14529      `G'.
14531  -- GIMPLE function: void gimple_cond_set_lhs (gimple g, tree lhs)
14532      Set `LHS' to be the `LHS' operand of the predicate computed by
14533      conditional statement `G'.
14535  -- GIMPLE function: tree gimple_cond_rhs (gimple g)
14536      Return the `RHS' operand of the predicate computed by conditional
14537      `G'.
14539  -- GIMPLE function: void gimple_cond_set_rhs (gimple g, tree rhs)
14540      Set `RHS' to be the `RHS' operand of the predicate computed by
14541      conditional statement `G'.
14543  -- GIMPLE function: tree gimple_cond_true_label (gimple g)
14544      Return the label used by conditional statement `G' when its
14545      predicate evaluates to true.
14547  -- GIMPLE function: void gimple_cond_set_true_label (gimple g, tree
14548           label)
14549      Set `LABEL' to be the label used by conditional statement `G' when
14550      its predicate evaluates to true.
14552  -- GIMPLE function: void gimple_cond_set_false_label (gimple g, tree
14553           label)
14554      Set `LABEL' to be the label used by conditional statement `G' when
14555      its predicate evaluates to false.
14557  -- GIMPLE function: tree gimple_cond_false_label (gimple g)
14558      Return the label used by conditional statement `G' when its
14559      predicate evaluates to false.
14561  -- GIMPLE function: void gimple_cond_make_false (gimple g)
14562      Set the conditional `COND_STMT' to be of the form 'if (1 == 0)'.
14564  -- GIMPLE function: void gimple_cond_make_true (gimple g)
14565      Set the conditional `COND_STMT' to be of the form 'if (1 == 1)'.
14567 \x1f
14568 File: gccint.info,  Node: `GIMPLE_DEBUG',  Next: `GIMPLE_EH_FILTER',  Prev: `GIMPLE_COND',  Up: Tuple specific accessors
14570 12.7.7 `GIMPLE_DEBUG'
14571 ---------------------
14573  -- GIMPLE function: gimple gimple_build_debug_bind (tree var, tree
14574           value, gimple stmt)
14575      Build a `GIMPLE_DEBUG' statement with `GIMPLE_DEBUG_BIND' of
14576      `subcode'.  The effect of this statement is to tell debug
14577      information generation machinery that the value of user variable
14578      `var' is given by `value' at that point, and to remain with that
14579      value until `var' runs out of scope, a dynamically-subsequent
14580      debug bind statement overrides the binding, or conflicting values
14581      reach a control flow merge point.  Even if components of the
14582      `value' expression change afterwards, the variable is supposed to
14583      retain the same value, though not necessarily the same location.
14585      It is expected that `var' be most often a tree for automatic user
14586      variables (`VAR_DECL' or `PARM_DECL') that satisfy the
14587      requirements for gimple registers, but it may also be a tree for a
14588      scalarized component of a user variable (`ARRAY_REF',
14589      `COMPONENT_REF'), or a debug temporary (`DEBUG_EXPR_DECL').
14591      As for `value', it can be an arbitrary tree expression, but it is
14592      recommended that it be in a suitable form for a gimple assignment
14593      `RHS'.  It is not expected that user variables that could appear
14594      as `var' ever appear in `value', because in the latter we'd have
14595      their `SSA_NAME's instead, but even if they were not in SSA form,
14596      user variables appearing in `value' are to be regarded as part of
14597      the executable code space, whereas those in `var' are to be
14598      regarded as part of the source code space.  There is no way to
14599      refer to the value bound to a user variable within a `value'
14600      expression.
14602      If `value' is `GIMPLE_DEBUG_BIND_NOVALUE', debug information
14603      generation machinery is informed that the variable `var' is
14604      unbound, i.e., that its value is indeterminate, which sometimes
14605      means it is really unavailable, and other times that the compiler
14606      could not keep track of it.
14608      Block and location information for the newly-created stmt are
14609      taken from `stmt', if given.
14611  -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt)
14612      Return the user variable VAR that is bound at `stmt'.
14614  -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt)
14615      Return the value expression that is bound to a user variable at
14616      `stmt'.
14618  -- GIMPLE function: tree *gimple_debug_bind_get_value_ptr (gimple stmt)
14619      Return a pointer to the value expression that is bound to a user
14620      variable at `stmt'.
14622  -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree
14623           var)
14624      Modify the user variable bound at `stmt' to VAR.
14626  -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt,
14627           tree var)
14628      Modify the value bound to the user variable bound at `stmt' to
14629      VALUE.
14631  -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt)
14632      Modify the value bound to the user variable bound at `stmt' so
14633      that the variable becomes unbound.
14635  -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt)
14636      Return `TRUE' if `stmt' binds a user variable to a value, and
14637      `FALSE' if it unbinds the variable.
14639 \x1f
14640 File: gccint.info,  Node: `GIMPLE_EH_FILTER',  Next: `GIMPLE_LABEL',  Prev: `GIMPLE_DEBUG',  Up: Tuple specific accessors
14642 12.7.8 `GIMPLE_EH_FILTER'
14643 -------------------------
14645  -- GIMPLE function: gimple gimple_build_eh_filter (tree types,
14646           gimple_seq failure)
14647      Build a `GIMPLE_EH_FILTER' statement.  `TYPES' are the filter's
14648      types.  `FAILURE' is a sequence with the filter's failure action.
14650  -- GIMPLE function: tree gimple_eh_filter_types (gimple g)
14651      Return the types handled by `GIMPLE_EH_FILTER' statement `G'.
14653  -- GIMPLE function: tree *gimple_eh_filter_types_ptr (gimple g)
14654      Return a pointer to the types handled by `GIMPLE_EH_FILTER'
14655      statement `G'.
14657  -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g)
14658      Return the sequence of statement to execute when `GIMPLE_EH_FILTER'
14659      statement fails.
14661  -- GIMPLE function: void gimple_eh_filter_set_types (gimple g, tree
14662           types)
14663      Set `TYPES' to be the set of types handled by `GIMPLE_EH_FILTER'
14664      `G'.
14666  -- GIMPLE function: void gimple_eh_filter_set_failure (gimple g,
14667           gimple_seq failure)
14668      Set `FAILURE' to be the sequence of statements to execute on
14669      failure for `GIMPLE_EH_FILTER' `G'.
14671  -- GIMPLE function: bool gimple_eh_filter_must_not_throw (gimple g)
14672      Return the `EH_FILTER_MUST_NOT_THROW' flag.
14674  -- GIMPLE function: void gimple_eh_filter_set_must_not_throw (gimple
14675           g, bool mntp)
14676      Set the `EH_FILTER_MUST_NOT_THROW' flag.
14678 \x1f
14679 File: gccint.info,  Node: `GIMPLE_LABEL',  Next: `GIMPLE_NOP',  Prev: `GIMPLE_EH_FILTER',  Up: Tuple specific accessors
14681 12.7.9 `GIMPLE_LABEL'
14682 ---------------------
14684  -- GIMPLE function: gimple gimple_build_label (tree label)
14685      Build a `GIMPLE_LABEL' statement with corresponding to the tree
14686      label, `LABEL'.
14688  -- GIMPLE function: tree gimple_label_label (gimple g)
14689      Return the `LABEL_DECL' node used by `GIMPLE_LABEL' statement `G'.
14691  -- GIMPLE function: void gimple_label_set_label (gimple g, tree label)
14692      Set `LABEL' to be the `LABEL_DECL' node used by `GIMPLE_LABEL'
14693      statement `G'.
14695  -- GIMPLE function: gimple gimple_build_goto (tree dest)
14696      Build a `GIMPLE_GOTO' statement to label `DEST'.
14698  -- GIMPLE function: tree gimple_goto_dest (gimple g)
14699      Return the destination of the unconditional jump `G'.
14701  -- GIMPLE function: void gimple_goto_set_dest (gimple g, tree dest)
14702      Set `DEST' to be the destination of the unconditional jump `G'.
14704 \x1f
14705 File: gccint.info,  Node: `GIMPLE_NOP',  Next: `GIMPLE_OMP_ATOMIC_LOAD',  Prev: `GIMPLE_LABEL',  Up: Tuple specific accessors
14707 12.7.10 `GIMPLE_NOP'
14708 --------------------
14710  -- GIMPLE function: gimple gimple_build_nop (void)
14711      Build a `GIMPLE_NOP' statement.
14713  -- GIMPLE function: bool gimple_nop_p (gimple g)
14714      Returns `TRUE' if statement `G' is a `GIMPLE_NOP'.
14716 \x1f
14717 File: gccint.info,  Node: `GIMPLE_OMP_ATOMIC_LOAD',  Next: `GIMPLE_OMP_ATOMIC_STORE',  Prev: `GIMPLE_NOP',  Up: Tuple specific accessors
14719 12.7.11 `GIMPLE_OMP_ATOMIC_LOAD'
14720 --------------------------------
14722  -- GIMPLE function: gimple gimple_build_omp_atomic_load (tree lhs,
14723           tree rhs)
14724      Build a `GIMPLE_OMP_ATOMIC_LOAD' statement.  `LHS' is the left-hand
14725      side of the assignment.  `RHS' is the right-hand side of the
14726      assignment.
14728  -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (gimple g,
14729           tree lhs)
14730      Set the `LHS' of an atomic load.
14732  -- GIMPLE function: tree gimple_omp_atomic_load_lhs (gimple g)
14733      Get the `LHS' of an atomic load.
14735  -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (gimple g,
14736           tree rhs)
14737      Set the `RHS' of an atomic set.
14739  -- GIMPLE function: tree gimple_omp_atomic_load_rhs (gimple g)
14740      Get the `RHS' of an atomic set.
14742 \x1f
14743 File: gccint.info,  Node: `GIMPLE_OMP_ATOMIC_STORE',  Next: `GIMPLE_OMP_CONTINUE',  Prev: `GIMPLE_OMP_ATOMIC_LOAD',  Up: Tuple specific accessors
14745 12.7.12 `GIMPLE_OMP_ATOMIC_STORE'
14746 ---------------------------------
14748  -- GIMPLE function: gimple gimple_build_omp_atomic_store (tree val)
14749      Build a `GIMPLE_OMP_ATOMIC_STORE' statement. `VAL' is the value to
14750      be stored.
14752  -- GIMPLE function: void gimple_omp_atomic_store_set_val (gimple g,
14753           tree val)
14754      Set the value being stored in an atomic store.
14756  -- GIMPLE function: tree gimple_omp_atomic_store_val (gimple g)
14757      Return the value being stored in an atomic store.
14759 \x1f
14760 File: gccint.info,  Node: `GIMPLE_OMP_CONTINUE',  Next: `GIMPLE_OMP_CRITICAL',  Prev: `GIMPLE_OMP_ATOMIC_STORE',  Up: Tuple specific accessors
14762 12.7.13 `GIMPLE_OMP_CONTINUE'
14763 -----------------------------
14765  -- GIMPLE function: gimple gimple_build_omp_continue (tree
14766           control_def, tree control_use)
14767      Build a `GIMPLE_OMP_CONTINUE' statement.  `CONTROL_DEF' is the
14768      definition of the control variable.  `CONTROL_USE' is the use of
14769      the control variable.
14771  -- GIMPLE function: tree gimple_omp_continue_control_def (gimple s)
14772      Return the definition of the control variable on a
14773      `GIMPLE_OMP_CONTINUE' in `S'.
14775  -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (gimple s)
14776      Same as above, but return the pointer.
14778  -- GIMPLE function: tree gimple_omp_continue_set_control_def (gimple s)
14779      Set the control variable definition for a `GIMPLE_OMP_CONTINUE'
14780      statement in `S'.
14782  -- GIMPLE function: tree gimple_omp_continue_control_use (gimple s)
14783      Return the use of the control variable on a `GIMPLE_OMP_CONTINUE'
14784      in `S'.
14786  -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (gimple s)
14787      Same as above, but return the pointer.
14789  -- GIMPLE function: tree gimple_omp_continue_set_control_use (gimple s)
14790      Set the control variable use for a `GIMPLE_OMP_CONTINUE' statement
14791      in `S'.
14793 \x1f
14794 File: gccint.info,  Node: `GIMPLE_OMP_CRITICAL',  Next: `GIMPLE_OMP_FOR',  Prev: `GIMPLE_OMP_CONTINUE',  Up: Tuple specific accessors
14796 12.7.14 `GIMPLE_OMP_CRITICAL'
14797 -----------------------------
14799  -- GIMPLE function: gimple gimple_build_omp_critical (gimple_seq body,
14800           tree name)
14801      Build a `GIMPLE_OMP_CRITICAL' statement. `BODY' is the sequence of
14802      statements for which only one thread can execute.  `NAME' is an
14803      optional identifier for this critical block.
14805  -- GIMPLE function: tree gimple_omp_critical_name (gimple g)
14806      Return the name associated with `OMP_CRITICAL' statement `G'.
14808  -- GIMPLE function: tree *gimple_omp_critical_name_ptr (gimple g)
14809      Return a pointer to the name associated with `OMP' critical
14810      statement `G'.
14812  -- GIMPLE function: void gimple_omp_critical_set_name (gimple g, tree
14813           name)
14814      Set `NAME' to be the name associated with `OMP' critical statement
14815      `G'.
14817 \x1f
14818 File: gccint.info,  Node: `GIMPLE_OMP_FOR',  Next: `GIMPLE_OMP_MASTER',  Prev: `GIMPLE_OMP_CRITICAL',  Up: Tuple specific accessors
14820 12.7.15 `GIMPLE_OMP_FOR'
14821 ------------------------
14823  -- GIMPLE function: gimple gimple_build_omp_for (gimple_seq body, tree
14824           clauses, tree index, tree initial, tree final, tree incr,
14825           gimple_seq pre_body, enum tree_code omp_for_cond)
14826      Build a `GIMPLE_OMP_FOR' statement. `BODY' is sequence of
14827      statements inside the for loop.  `CLAUSES', are any of the `OMP'
14828      loop construct's clauses: private, firstprivate,  lastprivate,
14829      reductions, ordered, schedule, and nowait.  `PRE_BODY' is the
14830      sequence of statements that are loop invariant.  `INDEX' is the
14831      index variable.  `INITIAL' is the initial value of `INDEX'.
14832      `FINAL' is final value of `INDEX'.  OMP_FOR_COND is the predicate
14833      used to compare `INDEX' and `FINAL'.  `INCR' is the increment
14834      expression.
14836  -- GIMPLE function: tree gimple_omp_for_clauses (gimple g)
14837      Return the clauses associated with `OMP_FOR' `G'.
14839  -- GIMPLE function: tree *gimple_omp_for_clauses_ptr (gimple g)
14840      Return a pointer to the `OMP_FOR' `G'.
14842  -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree
14843           clauses)
14844      Set `CLAUSES' to be the list of clauses associated with `OMP_FOR'
14845      `G'.
14847  -- GIMPLE function: tree gimple_omp_for_index (gimple g)
14848      Return the index variable for `OMP_FOR' `G'.
14850  -- GIMPLE function: tree *gimple_omp_for_index_ptr (gimple g)
14851      Return a pointer to the index variable for `OMP_FOR' `G'.
14853  -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree
14854           index)
14855      Set `INDEX' to be the index variable for `OMP_FOR' `G'.
14857  -- GIMPLE function: tree gimple_omp_for_initial (gimple g)
14858      Return the initial value for `OMP_FOR' `G'.
14860  -- GIMPLE function: tree *gimple_omp_for_initial_ptr (gimple g)
14861      Return a pointer to the initial value for `OMP_FOR' `G'.
14863  -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree
14864           initial)
14865      Set `INITIAL' to be the initial value for `OMP_FOR' `G'.
14867  -- GIMPLE function: tree gimple_omp_for_final (gimple g)
14868      Return the final value for `OMP_FOR' `G'.
14870  -- GIMPLE function: tree *gimple_omp_for_final_ptr (gimple g)
14871      turn a pointer to the final value for `OMP_FOR' `G'.
14873  -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree
14874           final)
14875      Set `FINAL' to be the final value for `OMP_FOR' `G'.
14877  -- GIMPLE function: tree gimple_omp_for_incr (gimple g)
14878      Return the increment value for `OMP_FOR' `G'.
14880  -- GIMPLE function: tree *gimple_omp_for_incr_ptr (gimple g)
14881      Return a pointer to the increment value for `OMP_FOR' `G'.
14883  -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr)
14884      Set `INCR' to be the increment value for `OMP_FOR' `G'.
14886  -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g)
14887      Return the sequence of statements to execute before the `OMP_FOR'
14888      statement `G' starts.
14890  -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g,
14891           gimple_seq pre_body)
14892      Set `PRE_BODY' to be the sequence of statements to execute before
14893      the `OMP_FOR' statement `G' starts.
14895  -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum
14896           tree_code cond)
14897      Set `COND' to be the condition code for `OMP_FOR' `G'.
14899  -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g)
14900      Return the condition code associated with `OMP_FOR' `G'.
14902 \x1f
14903 File: gccint.info,  Node: `GIMPLE_OMP_MASTER',  Next: `GIMPLE_OMP_ORDERED',  Prev: `GIMPLE_OMP_FOR',  Up: Tuple specific accessors
14905 12.7.16 `GIMPLE_OMP_MASTER'
14906 ---------------------------
14908  -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body)
14909      Build a `GIMPLE_OMP_MASTER' statement. `BODY' is the sequence of
14910      statements to be executed by just the master.
14912 \x1f
14913 File: gccint.info,  Node: `GIMPLE_OMP_ORDERED',  Next: `GIMPLE_OMP_PARALLEL',  Prev: `GIMPLE_OMP_MASTER',  Up: Tuple specific accessors
14915 12.7.17 `GIMPLE_OMP_ORDERED'
14916 ----------------------------
14918  -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body)
14919      Build a `GIMPLE_OMP_ORDERED' statement.
14921  `BODY' is the sequence of statements inside a loop that will executed
14922 in sequence.
14924 \x1f
14925 File: gccint.info,  Node: `GIMPLE_OMP_PARALLEL',  Next: `GIMPLE_OMP_RETURN',  Prev: `GIMPLE_OMP_ORDERED',  Up: Tuple specific accessors
14927 12.7.18 `GIMPLE_OMP_PARALLEL'
14928 -----------------------------
14930  -- GIMPLE function: gimple gimple_build_omp_parallel (gimple_seq body,
14931           tree clauses, tree child_fn, tree data_arg)
14932      Build a `GIMPLE_OMP_PARALLEL' statement.
14934  `BODY' is sequence of statements which are executed in parallel.
14935 `CLAUSES', are the `OMP' parallel construct's clauses.  `CHILD_FN' is
14936 the function created for the parallel threads to execute.  `DATA_ARG'
14937 are the shared data argument(s).
14939  -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g)
14940      Return true if `OMP' parallel statement `G' has the
14941      `GF_OMP_PARALLEL_COMBINED' flag set.
14943  -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g)
14944      Set the `GF_OMP_PARALLEL_COMBINED' field in `OMP' parallel
14945      statement `G'.
14947  -- GIMPLE function: gimple_seq gimple_omp_body (gimple g)
14948      Return the body for the `OMP' statement `G'.
14950  -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq
14951           body)
14952      Set `BODY' to be the body for the `OMP' statement `G'.
14954  -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g)
14955      Return the clauses associated with `OMP_PARALLEL' `G'.
14957  -- GIMPLE function: tree *gimple_omp_parallel_clauses_ptr (gimple g)
14958      Return a pointer to the clauses associated with `OMP_PARALLEL' `G'.
14960  -- GIMPLE function: void gimple_omp_parallel_set_clauses (gimple g,
14961           tree clauses)
14962      Set `CLAUSES' to be the list of clauses associated with
14963      `OMP_PARALLEL' `G'.
14965  -- GIMPLE function: tree gimple_omp_parallel_child_fn (gimple g)
14966      Return the child function used to hold the body of `OMP_PARALLEL'
14967      `G'.
14969  -- GIMPLE function: tree *gimple_omp_parallel_child_fn_ptr (gimple g)
14970      Return a pointer to the child function used to hold the body of
14971      `OMP_PARALLEL' `G'.
14973  -- GIMPLE function: void gimple_omp_parallel_set_child_fn (gimple g,
14974           tree child_fn)
14975      Set `CHILD_FN' to be the child function for `OMP_PARALLEL' `G'.
14977  -- GIMPLE function: tree gimple_omp_parallel_data_arg (gimple g)
14978      Return the artificial argument used to send variables and values
14979      from the parent to the children threads in `OMP_PARALLEL' `G'.
14981  -- GIMPLE function: tree *gimple_omp_parallel_data_arg_ptr (gimple g)
14982      Return a pointer to the data argument for `OMP_PARALLEL' `G'.
14984  -- GIMPLE function: void gimple_omp_parallel_set_data_arg (gimple g,
14985           tree data_arg)
14986      Set `DATA_ARG' to be the data argument for `OMP_PARALLEL' `G'.
14988  -- GIMPLE function: bool is_gimple_omp (gimple stmt)
14989      Returns true when the gimple statement `STMT' is any of the OpenMP
14990      types.
14992 \x1f
14993 File: gccint.info,  Node: `GIMPLE_OMP_RETURN',  Next: `GIMPLE_OMP_SECTION',  Prev: `GIMPLE_OMP_PARALLEL',  Up: Tuple specific accessors
14995 12.7.19 `GIMPLE_OMP_RETURN'
14996 ---------------------------
14998  -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p)
14999      Build a `GIMPLE_OMP_RETURN' statement. `WAIT_P' is true if this is
15000      a non-waiting return.
15002  -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s)
15003      Set the nowait flag on `GIMPLE_OMP_RETURN' statement `S'.
15005  -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g)
15006      Return true if `OMP' return statement `G' has the
15007      `GF_OMP_RETURN_NOWAIT' flag set.
15009 \x1f
15010 File: gccint.info,  Node: `GIMPLE_OMP_SECTION',  Next: `GIMPLE_OMP_SECTIONS',  Prev: `GIMPLE_OMP_RETURN',  Up: Tuple specific accessors
15012 12.7.20 `GIMPLE_OMP_SECTION'
15013 ----------------------------
15015  -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body)
15016      Build a `GIMPLE_OMP_SECTION' statement for a sections statement.
15018  `BODY' is the sequence of statements in the section.
15020  -- GIMPLE function: bool gimple_omp_section_last_p (gimple g)
15021      Return true if `OMP' section statement `G' has the
15022      `GF_OMP_SECTION_LAST' flag set.
15024  -- GIMPLE function: void gimple_omp_section_set_last (gimple g)
15025      Set the `GF_OMP_SECTION_LAST' flag on `G'.
15027 \x1f
15028 File: gccint.info,  Node: `GIMPLE_OMP_SECTIONS',  Next: `GIMPLE_OMP_SINGLE',  Prev: `GIMPLE_OMP_SECTION',  Up: Tuple specific accessors
15030 12.7.21 `GIMPLE_OMP_SECTIONS'
15031 -----------------------------
15033  -- GIMPLE function: gimple gimple_build_omp_sections (gimple_seq body,
15034           tree clauses)
15035      Build a `GIMPLE_OMP_SECTIONS' statement. `BODY' is a sequence of
15036      section statements.  `CLAUSES' are any of the `OMP' sections
15037      construct's clauses: private, firstprivate, lastprivate,
15038      reduction, and nowait.
15040  -- GIMPLE function: gimple gimple_build_omp_sections_switch (void)
15041      Build a `GIMPLE_OMP_SECTIONS_SWITCH' statement.
15043  -- GIMPLE function: tree gimple_omp_sections_control (gimple g)
15044      Return the control variable associated with the
15045      `GIMPLE_OMP_SECTIONS' in `G'.
15047  -- GIMPLE function: tree *gimple_omp_sections_control_ptr (gimple g)
15048      Return a pointer to the clauses associated with the
15049      `GIMPLE_OMP_SECTIONS' in `G'.
15051  -- GIMPLE function: void gimple_omp_sections_set_control (gimple g,
15052           tree control)
15053      Set `CONTROL' to be the set of clauses associated with the
15054      `GIMPLE_OMP_SECTIONS' in `G'.
15056  -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g)
15057      Return the clauses associated with `OMP_SECTIONS' `G'.
15059  -- GIMPLE function: tree *gimple_omp_sections_clauses_ptr (gimple g)
15060      Return a pointer to the clauses associated with `OMP_SECTIONS' `G'.
15062  -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g,
15063           tree clauses)
15064      Set `CLAUSES' to be the set of clauses associated with
15065      `OMP_SECTIONS' `G'.
15067 \x1f
15068 File: gccint.info,  Node: `GIMPLE_OMP_SINGLE',  Next: `GIMPLE_PHI',  Prev: `GIMPLE_OMP_SECTIONS',  Up: Tuple specific accessors
15070 12.7.22 `GIMPLE_OMP_SINGLE'
15071 ---------------------------
15073  -- GIMPLE function: gimple gimple_build_omp_single (gimple_seq body,
15074           tree clauses)
15075      Build a `GIMPLE_OMP_SINGLE' statement. `BODY' is the sequence of
15076      statements that will be executed once.  `CLAUSES' are any of the
15077      `OMP' single construct's clauses: private, firstprivate,
15078      copyprivate, nowait.
15080  -- GIMPLE function: tree gimple_omp_single_clauses (gimple g)
15081      Return the clauses associated with `OMP_SINGLE' `G'.
15083  -- GIMPLE function: tree *gimple_omp_single_clauses_ptr (gimple g)
15084      Return a pointer to the clauses associated with `OMP_SINGLE' `G'.
15086  -- GIMPLE function: void gimple_omp_single_set_clauses (gimple g, tree
15087           clauses)
15088      Set `CLAUSES' to be the clauses associated with `OMP_SINGLE' `G'.
15090 \x1f
15091 File: gccint.info,  Node: `GIMPLE_PHI',  Next: `GIMPLE_RESX',  Prev: `GIMPLE_OMP_SINGLE',  Up: Tuple specific accessors
15093 12.7.23 `GIMPLE_PHI'
15094 --------------------
15096  -- GIMPLE function: gimple make_phi_node (tree var, int len)
15097      Build a `PHI' node with len argument slots for variable var.
15099  -- GIMPLE function: unsigned gimple_phi_capacity (gimple g)
15100      Return the maximum number of arguments supported by `GIMPLE_PHI'
15101      `G'.
15103  -- GIMPLE function: unsigned gimple_phi_num_args (gimple g)
15104      Return the number of arguments in `GIMPLE_PHI' `G'. This must
15105      always be exactly the number of incoming edges for the basic block
15106      holding `G'.
15108  -- GIMPLE function: tree gimple_phi_result (gimple g)
15109      Return the `SSA' name created by `GIMPLE_PHI' `G'.
15111  -- GIMPLE function: tree *gimple_phi_result_ptr (gimple g)
15112      Return a pointer to the `SSA' name created by `GIMPLE_PHI' `G'.
15114  -- GIMPLE function: void gimple_phi_set_result (gimple g, tree result)
15115      Set `RESULT' to be the `SSA' name created by `GIMPLE_PHI' `G'.
15117  -- GIMPLE function: struct phi_arg_d *gimple_phi_arg (gimple g, index)
15118      Return the `PHI' argument corresponding to incoming edge `INDEX'
15119      for `GIMPLE_PHI' `G'.
15121  -- GIMPLE function: void gimple_phi_set_arg (gimple g, index, struct
15122           phi_arg_d * phiarg)
15123      Set `PHIARG' to be the argument corresponding to incoming edge
15124      `INDEX' for `GIMPLE_PHI' `G'.
15126 \x1f
15127 File: gccint.info,  Node: `GIMPLE_RESX',  Next: `GIMPLE_RETURN',  Prev: `GIMPLE_PHI',  Up: Tuple specific accessors
15129 12.7.24 `GIMPLE_RESX'
15130 ---------------------
15132  -- GIMPLE function: gimple gimple_build_resx (int region)
15133      Build a `GIMPLE_RESX' statement which is a statement.  This
15134      statement is a placeholder for _Unwind_Resume before we know if a
15135      function call or a branch is needed.  `REGION' is the exception
15136      region from which control is flowing.
15138  -- GIMPLE function: int gimple_resx_region (gimple g)
15139      Return the region number for `GIMPLE_RESX' `G'.
15141  -- GIMPLE function: void gimple_resx_set_region (gimple g, int region)
15142      Set `REGION' to be the region number for `GIMPLE_RESX' `G'.
15144 \x1f
15145 File: gccint.info,  Node: `GIMPLE_RETURN',  Next: `GIMPLE_SWITCH',  Prev: `GIMPLE_RESX',  Up: Tuple specific accessors
15147 12.7.25 `GIMPLE_RETURN'
15148 -----------------------
15150  -- GIMPLE function: gimple gimple_build_return (tree retval)
15151      Build a `GIMPLE_RETURN' statement whose return value is retval.
15153  -- GIMPLE function: tree gimple_return_retval (gimple g)
15154      Return the return value for `GIMPLE_RETURN' `G'.
15156  -- GIMPLE function: void gimple_return_set_retval (gimple g, tree
15157           retval)
15158      Set `RETVAL' to be the return value for `GIMPLE_RETURN' `G'.
15160 \x1f
15161 File: gccint.info,  Node: `GIMPLE_SWITCH',  Next: `GIMPLE_TRY',  Prev: `GIMPLE_RETURN',  Up: Tuple specific accessors
15163 12.7.26 `GIMPLE_SWITCH'
15164 -----------------------
15166  -- GIMPLE function: gimple gimple_build_switch ( nlabels, tree index,
15167           tree default_label, ...)
15168      Build a `GIMPLE_SWITCH' statement.  `NLABELS' are the number of
15169      labels excluding the default label.  The default label is passed
15170      in `DEFAULT_LABEL'.  The rest of the arguments are trees
15171      representing the labels.  Each label is a tree of code
15172      `CASE_LABEL_EXPR'.
15174  -- GIMPLE function: gimple gimple_build_switch_vec (tree index, tree
15175           default_label, `VEC'(tree,heap) *args)
15176      This function is an alternate way of building `GIMPLE_SWITCH'
15177      statements.  `INDEX' and `DEFAULT_LABEL' are as in
15178      gimple_build_switch.  `ARGS' is a vector of `CASE_LABEL_EXPR' trees
15179      that contain the labels.
15181  -- GIMPLE function: unsigned gimple_switch_num_labels (gimple g)
15182      Return the number of labels associated with the switch statement
15183      `G'.
15185  -- GIMPLE function: void gimple_switch_set_num_labels (gimple g,
15186           unsigned nlabels)
15187      Set `NLABELS' to be the number of labels for the switch statement
15188      `G'.
15190  -- GIMPLE function: tree gimple_switch_index (gimple g)
15191      Return the index variable used by the switch statement `G'.
15193  -- GIMPLE function: void gimple_switch_set_index (gimple g, tree index)
15194      Set `INDEX' to be the index variable for switch statement `G'.
15196  -- GIMPLE function: tree gimple_switch_label (gimple g, unsigned index)
15197      Return the label numbered `INDEX'. The default label is 0, followed
15198      by any labels in a switch statement.
15200  -- GIMPLE function: void gimple_switch_set_label (gimple g, unsigned
15201           index, tree label)
15202      Set the label number `INDEX' to `LABEL'. 0 is always the default
15203      label.
15205  -- GIMPLE function: tree gimple_switch_default_label (gimple g)
15206      Return the default label for a switch statement.
15208  -- GIMPLE function: void gimple_switch_set_default_label (gimple g,
15209           tree label)
15210      Set the default label for a switch statement.
15212 \x1f
15213 File: gccint.info,  Node: `GIMPLE_TRY',  Next: `GIMPLE_WITH_CLEANUP_EXPR',  Prev: `GIMPLE_SWITCH',  Up: Tuple specific accessors
15215 12.7.27 `GIMPLE_TRY'
15216 --------------------
15218  -- GIMPLE function: gimple gimple_build_try (gimple_seq eval,
15219           gimple_seq cleanup, unsigned int kind)
15220      Build a `GIMPLE_TRY' statement.  `EVAL' is a sequence with the
15221      expression to evaluate.  `CLEANUP' is a sequence of statements to
15222      run at clean-up time.  `KIND' is the enumeration value
15223      `GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct
15224      or `GIMPLE_TRY_FINALLY' if this statement denotes a try/finally
15225      construct.
15227  -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g)
15228      Return the kind of try block represented by `GIMPLE_TRY' `G'. This
15229      is either `GIMPLE_TRY_CATCH' or `GIMPLE_TRY_FINALLY'.
15231  -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g)
15232      Return the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
15234  -- GIMPLE function: gimple_seq gimple_try_eval (gimple g)
15235      Return the sequence of statements used as the body for `GIMPLE_TRY'
15236      `G'.
15238  -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g)
15239      Return the sequence of statements used as the cleanup body for
15240      `GIMPLE_TRY' `G'.
15242  -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g,
15243           bool catch_is_cleanup)
15244      Set the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
15246  -- GIMPLE function: void gimple_try_set_eval (gimple g, gimple_seq
15247           eval)
15248      Set `EVAL' to be the sequence of statements to use as the body for
15249      `GIMPLE_TRY' `G'.
15251  -- GIMPLE function: void gimple_try_set_cleanup (gimple g, gimple_seq
15252           cleanup)
15253      Set `CLEANUP' to be the sequence of statements to use as the
15254      cleanup body for `GIMPLE_TRY' `G'.
15256 \x1f
15257 File: gccint.info,  Node: `GIMPLE_WITH_CLEANUP_EXPR',  Prev: `GIMPLE_TRY',  Up: Tuple specific accessors
15259 12.7.28 `GIMPLE_WITH_CLEANUP_EXPR'
15260 ----------------------------------
15262  -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup)
15263      Build a `GIMPLE_WITH_CLEANUP_EXPR' statement.  `CLEANUP' is the
15264      clean-up expression.
15266  -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g)
15267      Return the cleanup sequence for cleanup statement `G'.
15269  -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq
15270           cleanup)
15271      Set `CLEANUP' to be the cleanup sequence for `G'.
15273  -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g)
15274      Return the `CLEANUP_EH_ONLY' flag for a `WCE' tuple.
15276  -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g,
15277           bool eh_only_p)
15278      Set the `CLEANUP_EH_ONLY' flag for a `WCE' tuple.
15280 \x1f
15281 File: gccint.info,  Node: GIMPLE sequences,  Next: Sequence iterators,  Prev: Tuple specific accessors,  Up: GIMPLE
15283 12.8 GIMPLE sequences
15284 =====================
15286 GIMPLE sequences are the tuple equivalent of `STATEMENT_LIST''s used in
15287 `GENERIC'.  They are used to chain statements together, and when used
15288 in conjunction with sequence iterators, provide a framework for
15289 iterating through statements.
15291  GIMPLE sequences are of type struct `gimple_sequence', but are more
15292 commonly passed by reference to functions dealing with sequences.  The
15293 type for a sequence pointer is `gimple_seq' which is the same as struct
15294 `gimple_sequence' *.  When declaring a local sequence, you can define a
15295 local variable of type struct `gimple_sequence'.  When declaring a
15296 sequence allocated on the garbage collected heap, use the function
15297 `gimple_seq_alloc' documented below.
15299  There are convenience functions for iterating through sequences in the
15300 section entitled Sequence Iterators.
15302  Below is a list of functions to manipulate and query sequences.
15304  -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple
15305           g)
15306      Link a gimple statement to the end of the sequence *`SEQ' if `G' is
15307      not `NULL'.  If *`SEQ' is `NULL', allocate a sequence before
15308      linking.
15310  -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest,
15311           gimple_seq src)
15312      Append sequence `SRC' to the end of sequence *`DEST' if `SRC' is
15313      not `NULL'.  If *`DEST' is `NULL', allocate a new sequence before
15314      appending.
15316  -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)
15317      Perform a deep copy of sequence `SRC' and return the result.
15319  -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)
15320      Reverse the order of the statements in the sequence `SEQ'.  Return
15321      `SEQ'.
15323  -- GIMPLE function: gimple gimple_seq_first (gimple_seq s)
15324      Return the first statement in sequence `S'.
15326  -- GIMPLE function: gimple gimple_seq_last (gimple_seq s)
15327      Return the last statement in sequence `S'.
15329  -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple
15330           last)
15331      Set the last statement in sequence `S' to the statement in `LAST'.
15333  -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple
15334           first)
15335      Set the first statement in sequence `S' to the statement in
15336      `FIRST'.
15338  -- GIMPLE function: void gimple_seq_init (gimple_seq s)
15339      Initialize sequence `S' to an empty sequence.
15341  -- GIMPLE function: gimple_seq gimple_seq_alloc (void)
15342      Allocate a new sequence in the garbage collected store and return
15343      it.
15345  -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq
15346           src)
15347      Copy the sequence `SRC' into the sequence `DEST'.
15349  -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)
15350      Return true if the sequence `S' is empty.
15352  -- GIMPLE function: gimple_seq bb_seq (basic_block bb)
15353      Returns the sequence of statements in `BB'.
15355  -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)
15356      Sets the sequence of statements in `BB' to `SEQ'.
15358  -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)
15359      Determine whether `SEQ' contains exactly one statement.
15361 \x1f
15362 File: gccint.info,  Node: Sequence iterators,  Next: Adding a new GIMPLE statement code,  Prev: GIMPLE sequences,  Up: GIMPLE
15364 12.9 Sequence iterators
15365 =======================
15367 Sequence iterators are convenience constructs for iterating through
15368 statements in a sequence.  Given a sequence `SEQ', here is a typical
15369 use of gimple sequence iterators:
15371      gimple_stmt_iterator gsi;
15373      for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
15374        {
15375          gimple g = gsi_stmt (gsi);
15376          /* Do something with gimple statement `G'.  */
15377        }
15379  Backward iterations are possible:
15381              for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))
15383  Forward and backward iterations on basic blocks are possible with
15384 `gsi_start_bb' and `gsi_last_bb'.
15386  In the documentation below we sometimes refer to enum
15387 `gsi_iterator_update'.  The valid options for this enumeration are:
15389    * `GSI_NEW_STMT' Only valid when a single statement is added.  Move
15390      the iterator to it.
15392    * `GSI_SAME_STMT' Leave the iterator at the same statement.
15394    * `GSI_CONTINUE_LINKING' Move iterator to whatever position is
15395      suitable for linking other statements in the same direction.
15397  Below is a list of the functions used to manipulate and use statement
15398 iterators.
15400  -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq)
15401      Return a new iterator pointing to the sequence `SEQ''s first
15402      statement.  If `SEQ' is empty, the iterator's basic block is
15403      `NULL'.  Use `gsi_start_bb' instead when the iterator needs to
15404      always have the correct basic block set.
15406  -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb)
15407      Return a new iterator pointing to the first statement in basic
15408      block `BB'.
15410  -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq)
15411      Return a new iterator initially pointing to the last statement of
15412      sequence `SEQ'.  If `SEQ' is empty, the iterator's basic block is
15413      `NULL'.  Use `gsi_last_bb' instead when the iterator needs to
15414      always have the correct basic block set.
15416  -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb)
15417      Return a new iterator pointing to the last statement in basic
15418      block `BB'.
15420  -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i)
15421      Return `TRUE' if at the end of `I'.
15423  -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i)
15424      Return `TRUE' if we're one statement before the end of `I'.
15426  -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i)
15427      Advance the iterator to the next gimple statement.
15429  -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i)
15430      Advance the iterator to the previous gimple statement.
15432  -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i)
15433      Return the current stmt.
15435  -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block
15436           bb)
15437      Return a block statement iterator that points to the first
15438      non-label statement in block `BB'.
15440  -- GIMPLE function: gimple *gsi_stmt_ptr (gimple_stmt_iterator *i)
15441      Return a pointer to the current stmt.
15443  -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i)
15444      Return the basic block associated with this iterator.
15446  -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i)
15447      Return the sequence associated with this iterator.
15449  -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool
15450           remove_eh_info)
15451      Remove the current stmt from the sequence.  The iterator is
15452      updated to point to the next statement.  When `REMOVE_EH_INFO' is
15453      true we remove the statement pointed to by iterator `I' from the
15454      `EH' tables.  Otherwise we do not modify the `EH' tables.
15455      Generally, `REMOVE_EH_INFO' should be true when the statement is
15456      going to be removed from the `IL' and not reinserted elsewhere.
15458  -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i,
15459           gimple_seq seq, enum gsi_iterator_update mode)
15460      Links the sequence of statements `SEQ' before the statement pointed
15461      by iterator `I'.  `MODE' indicates what to do with the iterator
15462      after insertion (see `enum gsi_iterator_update' above).
15464  -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i,
15465           gimple g, enum gsi_iterator_update mode)
15466      Links statement `G' before the statement pointed-to by iterator
15467      `I'.  Updates iterator `I' according to `MODE'.
15469  -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i,
15470           gimple_seq seq, enum gsi_iterator_update mode)
15471      Links sequence `SEQ' after the statement pointed-to by iterator
15472      `I'.  `MODE' is as in `gsi_insert_after'.
15474  -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i,
15475           gimple g, enum gsi_iterator_update mode)
15476      Links statement `G' after the statement pointed-to by iterator `I'.
15477      `MODE' is as in `gsi_insert_after'.
15479  -- GIMPLE function: gimple_seq gsi_split_seq_after
15480           (gimple_stmt_iterator i)
15481      Move all statements in the sequence after `I' to a new sequence.
15482      Return this new sequence.
15484  -- GIMPLE function: gimple_seq gsi_split_seq_before
15485           (gimple_stmt_iterator *i)
15486      Move all statements in the sequence before `I' to a new sequence.
15487      Return this new sequence.
15489  -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple
15490           stmt, bool update_eh_info)
15491      Replace the statement pointed-to by `I' to `STMT'.  If
15492      `UPDATE_EH_INFO' is true, the exception handling information of
15493      the original statement is moved to the new statement.
15495  -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i,
15496           gimple stmt, enum gsi_iterator_update mode)
15497      Insert statement `STMT' before the statement pointed-to by iterator
15498      `I', update `STMT''s basic block and scan it for new operands.
15499      `MODE' specifies how to update iterator `I' after insertion (see
15500      enum `gsi_iterator_update').
15502  -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator
15503           *i, gimple_seq seq, enum gsi_iterator_update mode)
15504      Like `gsi_insert_before', but for all the statements in `SEQ'.
15506  -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i,
15507           gimple stmt, enum gsi_iterator_update mode)
15508      Insert statement `STMT' after the statement pointed-to by iterator
15509      `I', update `STMT''s basic block and scan it for new operands.
15510      `MODE' specifies how to update iterator `I' after insertion (see
15511      enum `gsi_iterator_update').
15513  -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator
15514           *i, gimple_seq seq, enum gsi_iterator_update mode)
15515      Like `gsi_insert_after', but for all the statements in `SEQ'.
15517  -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt)
15518      Finds iterator for `STMT'.
15520  -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from,
15521           gimple_stmt_iterator *to)
15522      Move the statement at `FROM' so it comes right after the statement
15523      at `TO'.
15525  -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from,
15526           gimple_stmt_iterator *to)
15527      Move the statement at `FROM' so it comes right before the statement
15528      at `TO'.
15530  -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator
15531           *from, basic_block bb)
15532      Move the statement at `FROM' to the end of basic block `BB'.
15534  -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt)
15535      Add `STMT' to the pending list of edge `E'.  No actual insertion is
15536      made until a call to `gsi_commit_edge_inserts'() is made.
15538  -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq
15539           seq)
15540      Add the sequence of statements in `SEQ' to the pending list of edge
15541      `E'.  No actual insertion is made until a call to
15542      `gsi_commit_edge_inserts'() is made.
15544  -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e,
15545           gimple stmt)
15546      Similar to `gsi_insert_on_edge'+`gsi_commit_edge_inserts'.  If a
15547      new block has to be created, it is returned.
15549  -- GIMPLE function: void gsi_commit_one_edge_insert (edge e,
15550           basic_block *new_bb)
15551      Commit insertions pending at edge `E'.  If a new block is created,
15552      set `NEW_BB' to this block, otherwise set it to `NULL'.
15554  -- GIMPLE function: void gsi_commit_edge_inserts (void)
15555      This routine will commit all pending edge insertions, creating any
15556      new basic blocks which are necessary.
15558 \x1f
15559 File: gccint.info,  Node: Adding a new GIMPLE statement code,  Next: Statement and operand traversals,  Prev: Sequence iterators,  Up: GIMPLE
15561 12.10 Adding a new GIMPLE statement code
15562 ========================================
15564 The first step in adding a new GIMPLE statement code, is modifying the
15565 file `gimple.def', which contains all the GIMPLE codes.  Then you must
15566 add a corresponding structure, and an entry in `union
15567 gimple_statement_d', both of which are located in `gimple.h'.  This in
15568 turn, will require you to add a corresponding `GTY' tag in
15569 `gsstruct.def', and code to handle this tag in `gss_for_code' which is
15570 located in `gimple.c'.
15572  In order for the garbage collector to know the size of the structure
15573 you created in `gimple.h', you need to add a case to handle your new
15574 GIMPLE statement in `gimple_size' which is located in `gimple.c'.
15576  You will probably want to create a function to build the new gimple
15577 statement in `gimple.c'.  The function should be called
15578 `gimple_build_<`NEW_TUPLE_NAME'>', and should return the new tuple of
15579 type gimple.
15581  If your new statement requires accessors for any members or operands
15582 it may have, put simple inline accessors in `gimple.h' and any
15583 non-trivial accessors in `gimple.c' with a corresponding prototype in
15584 `gimple.h'.
15586 \x1f
15587 File: gccint.info,  Node: Statement and operand traversals,  Prev: Adding a new GIMPLE statement code,  Up: GIMPLE
15589 12.11 Statement and operand traversals
15590 ======================================
15592 There are two functions available for walking statements and sequences:
15593 `walk_gimple_stmt' and `walk_gimple_seq', accordingly, and a third
15594 function for walking the operands in a statement: `walk_gimple_op'.
15596  -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi,
15597           walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct
15598           walk_stmt_info *wi)
15599      This function is used to walk the current statement in `GSI',
15600      optionally using traversal state stored in `WI'.  If `WI' is
15601      `NULL', no state is kept during the traversal.
15603      The callback `CALLBACK_STMT' is called.  If `CALLBACK_STMT' returns
15604      true, it means that the callback function has handled all the
15605      operands of the statement and it is not necessary to walk its
15606      operands.
15608      If `CALLBACK_STMT' is `NULL' or it returns false, `CALLBACK_OP' is
15609      called on each operand of the statement via `walk_gimple_op'.  If
15610      `walk_gimple_op' returns non-`NULL' for any operand, the remaining
15611      operands are not scanned.
15613      The return value is that returned by the last call to
15614      `walk_gimple_op', or `NULL_TREE' if no `CALLBACK_OP' is specified.
15616  -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn
15617           callback_op, struct walk_stmt_info *wi)
15618      Use this function to walk the operands of statement `STMT'.  Every
15619      operand is walked via `walk_tree' with optional state information
15620      in `WI'.
15622      `CALLBACK_OP' is called on each operand of `STMT' via `walk_tree'.
15623      Additional parameters to `walk_tree' must be stored in `WI'.  For
15624      each operand `OP', `walk_tree' is called as:
15626               walk_tree (&`OP', `CALLBACK_OP', `WI', `WI'- `PSET')
15628      If `CALLBACK_OP' returns non-`NULL' for an operand, the remaining
15629      operands are not scanned.  The return value is that returned by
15630      the last call to `walk_tree', or `NULL_TREE' if no `CALLBACK_OP' is
15631      specified.
15633  -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn
15634           callback_stmt, walk_tree_fn callback_op, struct
15635           walk_stmt_info *wi)
15636      This function walks all the statements in the sequence `SEQ'
15637      calling `walk_gimple_stmt' on each one.  `WI' is as in
15638      `walk_gimple_stmt'.  If `walk_gimple_stmt' returns non-`NULL', the
15639      walk is stopped and the value returned.  Otherwise, all the
15640      statements are walked and `NULL_TREE' returned.
15642 \x1f
15643 File: gccint.info,  Node: Tree SSA,  Next: RTL,  Prev: GIMPLE,  Up: Top
15645 13 Analysis and Optimization of GIMPLE tuples
15646 *********************************************
15648 GCC uses three main intermediate languages to represent the program
15649 during compilation: GENERIC, GIMPLE and RTL.  GENERIC is a
15650 language-independent representation generated by each front end.  It is
15651 used to serve as an interface between the parser and optimizer.
15652 GENERIC is a common representation that is able to represent programs
15653 written in all the languages supported by GCC.
15655  GIMPLE and RTL are used to optimize the program.  GIMPLE is used for
15656 target and language independent optimizations (e.g., inlining, constant
15657 propagation, tail call elimination, redundancy elimination, etc).  Much
15658 like GENERIC, GIMPLE is a language independent, tree based
15659 representation.  However, it differs from GENERIC in that the GIMPLE
15660 grammar is more restrictive: expressions contain no more than 3
15661 operands (except function calls), it has no control flow structures and
15662 expressions with side-effects are only allowed on the right hand side
15663 of assignments.  See the chapter describing GENERIC and GIMPLE for more
15664 details.
15666  This chapter describes the data structures and functions used in the
15667 GIMPLE optimizers (also known as "tree optimizers" or "middle end").
15668 In particular, it focuses on all the macros, data structures, functions
15669 and programming constructs needed to implement optimization passes for
15670 GIMPLE.
15672 * Menu:
15674 * Annotations::         Attributes for variables.
15675 * SSA Operands::        SSA names referenced by GIMPLE statements.
15676 * SSA::                 Static Single Assignment representation.
15677 * Alias analysis::      Representing aliased loads and stores.
15678 * Memory model::        Memory model used by the middle-end.
15680 \x1f
15681 File: gccint.info,  Node: Annotations,  Next: SSA Operands,  Up: Tree SSA
15683 13.1 Annotations
15684 ================
15686 The optimizers need to associate attributes with variables during the
15687 optimization process.  For instance, we need to know whether a variable
15688 has aliases.  All these attributes are stored in data structures called
15689 annotations which are then linked to the field `ann' in `struct
15690 tree_common'.
15692  Presently, we define annotations for variables (`var_ann_t').
15693 Annotations are defined and documented in `tree-flow.h'.
15695 \x1f
15696 File: gccint.info,  Node: SSA Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA
15698 13.2 SSA Operands
15699 =================
15701 Almost every GIMPLE statement will contain a reference to a variable or
15702 memory location.  Since statements come in different shapes and sizes,
15703 their operands are going to be located at various spots inside the
15704 statement's tree.  To facilitate access to the statement's operands,
15705 they are organized into lists associated inside each statement's
15706 annotation.  Each element in an operand list is a pointer to a
15707 `VAR_DECL', `PARM_DECL' or `SSA_NAME' tree node.  This provides a very
15708 convenient way of examining and replacing operands.
15710  Data flow analysis and optimization is done on all tree nodes
15711 representing variables.  Any node for which `SSA_VAR_P' returns nonzero
15712 is considered when scanning statement operands.  However, not all
15713 `SSA_VAR_P' variables are processed in the same way.  For the purposes
15714 of optimization, we need to distinguish between references to local
15715 scalar variables and references to globals, statics, structures,
15716 arrays, aliased variables, etc.  The reason is simple, the compiler can
15717 gather complete data flow information for a local scalar.  On the other
15718 hand, a global variable may be modified by a function call, it may not
15719 be possible to keep track of all the elements of an array or the fields
15720 of a structure, etc.
15722  The operand scanner gathers two kinds of operands: "real" and
15723 "virtual".  An operand for which `is_gimple_reg' returns true is
15724 considered real, otherwise it is a virtual operand.  We also
15725 distinguish between uses and definitions.  An operand is used if its
15726 value is loaded by the statement (e.g., the operand at the RHS of an
15727 assignment).  If the statement assigns a new value to the operand, the
15728 operand is considered a definition (e.g., the operand at the LHS of an
15729 assignment).
15731  Virtual and real operands also have very different data flow
15732 properties.  Real operands are unambiguous references to the full
15733 object that they represent.  For instance, given
15735      {
15736        int a, b;
15737        a = b
15738      }
15740  Since `a' and `b' are non-aliased locals, the statement `a = b' will
15741 have one real definition and one real use because variable `a' is
15742 completely modified with the contents of variable `b'.  Real definition
15743 are also known as "killing definitions".  Similarly, the use of `b'
15744 reads all its bits.
15746  In contrast, virtual operands are used with variables that can have a
15747 partial or ambiguous reference.  This includes structures, arrays,
15748 globals, and aliased variables.  In these cases, we have two types of
15749 definitions.  For globals, structures, and arrays, we can determine from
15750 a statement whether a variable of these types has a killing definition.
15751 If the variable does, then the statement is marked as having a "must
15752 definition" of that variable.  However, if a statement is only defining
15753 a part of the variable (i.e. a field in a structure), or if we know
15754 that a statement might define the variable but we cannot say for sure,
15755 then we mark that statement as having a "may definition".  For
15756 instance, given
15758      {
15759        int a, b, *p;
15761        if (...)
15762          p = &a;
15763        else
15764          p = &b;
15765        *p = 5;
15766        return *p;
15767      }
15769  The assignment `*p = 5' may be a definition of `a' or `b'.  If we
15770 cannot determine statically where `p' is pointing to at the time of the
15771 store operation, we create virtual definitions to mark that statement
15772 as a potential definition site for `a' and `b'.  Memory loads are
15773 similarly marked with virtual use operands.  Virtual operands are shown
15774 in tree dumps right before the statement that contains them.  To
15775 request a tree dump with virtual operands, use the `-vops' option to
15776 `-fdump-tree':
15778      {
15779        int a, b, *p;
15781        if (...)
15782          p = &a;
15783        else
15784          p = &b;
15785        # a = VDEF <a>
15786        # b = VDEF <b>
15787        *p = 5;
15789        # VUSE <a>
15790        # VUSE <b>
15791        return *p;
15792      }
15794  Notice that `VDEF' operands have two copies of the referenced
15795 variable.  This indicates that this is not a killing definition of that
15796 variable.  In this case we refer to it as a "may definition" or
15797 "aliased store".  The presence of the second copy of the variable in
15798 the `VDEF' operand will become important when the function is converted
15799 into SSA form.  This will be used to link all the non-killing
15800 definitions to prevent optimizations from making incorrect assumptions
15801 about them.
15803  Operands are updated as soon as the statement is finished via a call
15804 to `update_stmt'.  If statement elements are changed via `SET_USE' or
15805 `SET_DEF', then no further action is required (i.e., those macros take
15806 care of updating the statement).  If changes are made by manipulating
15807 the statement's tree directly, then a call must be made to
15808 `update_stmt' when complete.  Calling one of the `bsi_insert' routines
15809 or `bsi_replace' performs an implicit call to `update_stmt'.
15811 13.2.1 Operand Iterators And Access Routines
15812 --------------------------------------------
15814 Operands are collected by `tree-ssa-operands.c'.  They are stored
15815 inside each statement's annotation and can be accessed through either
15816 the operand iterators or an access routine.
15818  The following access routines are available for examining operands:
15820   1. `SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return
15821      NULL unless there is exactly one operand matching the specified
15822      flags.  If there is exactly one operand, the operand is returned
15823      as either a `tree', `def_operand_p', or `use_operand_p'.
15825           tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
15826           use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
15827           def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
15829   2. `ZERO_SSA_OPERANDS': This macro returns true if there are no
15830      operands matching the specified flags.
15832           if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
15833             return;
15835   3. `NUM_SSA_OPERANDS': This macro Returns the number of operands
15836      matching 'flags'.  This actually executes a loop to perform the
15837      count, so only use this if it is really needed.
15839           int count = NUM_SSA_OPERANDS (stmt, flags)
15841  If you wish to iterate over some or all operands, use the
15842 `FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator.  For example, to print
15843 all the operands for a statement:
15845      void
15846      print_ops (tree stmt)
15847      {
15848        ssa_op_iter;
15849        tree var;
15851        FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
15852          print_generic_expr (stderr, var, TDF_SLIM);
15853      }
15855  How to choose the appropriate iterator:
15857   1. Determine whether you are need to see the operand pointers, or
15858      just the trees, and choose the appropriate macro:
15860           Need            Macro:
15861           ----            -------
15862           use_operand_p   FOR_EACH_SSA_USE_OPERAND
15863           def_operand_p   FOR_EACH_SSA_DEF_OPERAND
15864           tree            FOR_EACH_SSA_TREE_OPERAND
15866   2. You need to declare a variable of the type you are interested in,
15867      and an ssa_op_iter structure which serves as the loop controlling
15868      variable.
15870   3. Determine which operands you wish to use, and specify the flags of
15871      those you are interested in.  They are documented in
15872      `tree-ssa-operands.h':
15874           #define SSA_OP_USE              0x01    /* Real USE operands.  */
15875           #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
15876           #define SSA_OP_VUSE             0x04    /* VUSE operands.  */
15877           #define SSA_OP_VMAYUSE          0x08    /* USE portion of VDEFS.  */
15878           #define SSA_OP_VDEF             0x10    /* DEF portion of VDEFS.  */
15880           /* These are commonly grouped operand flags.  */
15881           #define SSA_OP_VIRTUAL_USES     (SSA_OP_VUSE | SSA_OP_VMAYUSE)
15882           #define SSA_OP_VIRTUAL_DEFS     (SSA_OP_VDEF)
15883           #define SSA_OP_ALL_USES         (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
15884           #define SSA_OP_ALL_DEFS         (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
15885           #define SSA_OP_ALL_OPERANDS     (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
15887  So if you want to look at the use pointers for all the `USE' and
15888 `VUSE' operands, you would do something like:
15890        use_operand_p use_p;
15891        ssa_op_iter iter;
15893        FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
15894          {
15895            process_use_ptr (use_p);
15896          }
15898  The `TREE' macro is basically the same as the `USE' and `DEF' macros,
15899 only with the use or def dereferenced via `USE_FROM_PTR (use_p)' and
15900 `DEF_FROM_PTR (def_p)'.  Since we aren't using operand pointers, use
15901 and defs flags can be mixed.
15903        tree var;
15904        ssa_op_iter iter;
15906        FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
15907          {
15908             print_generic_expr (stderr, var, TDF_SLIM);
15909          }
15911  `VDEF's are broken into two flags, one for the `DEF' portion
15912 (`SSA_OP_VDEF') and one for the USE portion (`SSA_OP_VMAYUSE').  If all
15913 you want to look at are the `VDEF's together, there is a fourth
15914 iterator macro for this, which returns both a def_operand_p and a
15915 use_operand_p for each `VDEF' in the statement.  Note that you don't
15916 need any flags for this one.
15918        use_operand_p use_p;
15919        def_operand_p def_p;
15920        ssa_op_iter iter;
15922        FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
15923          {
15924            my_code;
15925          }
15927  There are many examples in the code as well, as well as the
15928 documentation in `tree-ssa-operands.h'.
15930  There are also a couple of variants on the stmt iterators regarding PHI
15931 nodes.
15933  `FOR_EACH_PHI_ARG' Works exactly like `FOR_EACH_SSA_USE_OPERAND',
15934 except it works over `PHI' arguments instead of statement operands.
15936      /* Look at every virtual PHI use.  */
15937      FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
15938      {
15939         my_code;
15940      }
15942      /* Look at every real PHI use.  */
15943      FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES)
15944        my_code;
15946      /* Look at every PHI use.  */
15947      FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
15948        my_code;
15950  `FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like
15951 `FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a
15952 statement or a `PHI' node.  These should be used when it is appropriate
15953 but they are not quite as efficient as the individual `FOR_EACH_PHI'
15954 and `FOR_EACH_SSA' routines.
15956      FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
15957        {
15958           my_code;
15959        }
15961      FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags)
15962        {
15963           my_code;
15964        }
15966 13.2.2 Immediate Uses
15967 ---------------------
15969 Immediate use information is now always available.  Using the immediate
15970 use iterators, you may examine every use of any `SSA_NAME'. For
15971 instance, to change each use of `ssa_var' to `ssa_var2' and call
15972 fold_stmt on each stmt after that is done:
15974        use_operand_p imm_use_p;
15975        imm_use_iterator iterator;
15976        tree ssa_var, stmt;
15979        FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
15980          {
15981            FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
15982              SET_USE (imm_use_p, ssa_var_2);
15983            fold_stmt (stmt);
15984          }
15986  There are 2 iterators which can be used. `FOR_EACH_IMM_USE_FAST' is
15987 used when the immediate uses are not changed, i.e., you are looking at
15988 the uses, but not setting them.
15990  If they do get changed, then care must be taken that things are not
15991 changed under the iterators, so use the `FOR_EACH_IMM_USE_STMT' and
15992 `FOR_EACH_IMM_USE_ON_STMT' iterators.  They attempt to preserve the
15993 sanity of the use list by moving all the uses for a statement into a
15994 controlled position, and then iterating over those uses.  Then the
15995 optimization can manipulate the stmt when all the uses have been
15996 processed.  This is a little slower than the FAST version since it adds
15997 a placeholder element and must sort through the list a bit for each
15998 statement.  This placeholder element must be also be removed if the
15999 loop is terminated early.  The macro `BREAK_FROM_IMM_USE_SAFE' is
16000 provided to do this :
16002        FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
16003          {
16004            if (stmt == last_stmt)
16005              BREAK_FROM_SAFE_IMM_USE (iter);
16007            FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
16008              SET_USE (imm_use_p, ssa_var_2);
16009            fold_stmt (stmt);
16010          }
16012  There are checks in `verify_ssa' which verify that the immediate use
16013 list is up to date, as well as checking that an optimization didn't
16014 break from the loop without using this macro.  It is safe to simply
16015 'break'; from a `FOR_EACH_IMM_USE_FAST' traverse.
16017  Some useful functions and macros:
16018   1. `has_zero_uses (ssa_var)' : Returns true if there are no uses of
16019      `ssa_var'.
16021   2. `has_single_use (ssa_var)' : Returns true if there is only a
16022      single use of `ssa_var'.
16024   3. `single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' :
16025      Returns true if there is only a single use of `ssa_var', and also
16026      returns the use pointer and statement it occurs in, in the second
16027      and third parameters.
16029   4. `num_imm_uses (ssa_var)' : Returns the number of immediate uses of
16030      `ssa_var'. It is better not to use this if possible since it simply
16031      utilizes a loop to count the uses.
16033   5. `PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a `PHI'
16034      node, return the index number for the use.  An assert is triggered
16035      if the use isn't located in a `PHI' node.
16037   6. `USE_STMT (use_p)' : Return the statement a use occurs in.
16039  Note that uses are not put into an immediate use list until their
16040 statement is actually inserted into the instruction stream via a
16041 `bsi_*' routine.
16043  It is also still possible to utilize lazy updating of statements, but
16044 this should be used only when absolutely required.  Both alias analysis
16045 and the dominator optimizations currently do this.
16047  When lazy updating is being used, the immediate use information is out
16048 of date and cannot be used reliably.  Lazy updating is achieved by
16049 simply marking statements modified via calls to `mark_stmt_modified'
16050 instead of `update_stmt'.  When lazy updating is no longer required,
16051 all the modified statements must have `update_stmt' called in order to
16052 bring them up to date.  This must be done before the optimization is
16053 finished, or `verify_ssa' will trigger an abort.
16055  This is done with a simple loop over the instruction stream:
16056        block_stmt_iterator bsi;
16057        basic_block bb;
16058        FOR_EACH_BB (bb)
16059          {
16060            for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
16061              update_stmt_if_modified (bsi_stmt (bsi));
16062          }
16064 \x1f
16065 File: gccint.info,  Node: SSA,  Next: Alias analysis,  Prev: SSA Operands,  Up: Tree SSA
16067 13.3 Static Single Assignment
16068 =============================
16070 Most of the tree optimizers rely on the data flow information provided
16071 by the Static Single Assignment (SSA) form.  We implement the SSA form
16072 as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
16073 Zadeck.  Efficiently Computing Static Single Assignment Form and the
16074 Control Dependence Graph.  ACM Transactions on Programming Languages
16075 and Systems, 13(4):451-490, October 1991'.
16077  The SSA form is based on the premise that program variables are
16078 assigned in exactly one location in the program.  Multiple assignments
16079 to the same variable create new versions of that variable.  Naturally,
16080 actual programs are seldom in SSA form initially because variables tend
16081 to be assigned multiple times.  The compiler modifies the program
16082 representation so that every time a variable is assigned in the code, a
16083 new version of the variable is created.  Different versions of the same
16084 variable are distinguished by subscripting the variable name with its
16085 version number.  Variables used in the right-hand side of expressions
16086 are renamed so that their version number matches that of the most
16087 recent assignment.
16089  We represent variable versions using `SSA_NAME' nodes.  The renaming
16090 process in `tree-ssa.c' wraps every real and virtual operand with an
16091 `SSA_NAME' node which contains the version number and the statement
16092 that created the `SSA_NAME'.  Only definitions and virtual definitions
16093 may create new `SSA_NAME' nodes.
16095  Sometimes, flow of control makes it impossible to determine the most
16096 recent version of a variable.  In these cases, the compiler inserts an
16097 artificial definition for that variable called "PHI function" or "PHI
16098 node".  This new definition merges all the incoming versions of the
16099 variable to create a new name for it.  For instance,
16101      if (...)
16102        a_1 = 5;
16103      else if (...)
16104        a_2 = 2;
16105      else
16106        a_3 = 13;
16108      # a_4 = PHI <a_1, a_2, a_3>
16109      return a_4;
16111  Since it is not possible to determine which of the three branches will
16112 be taken at runtime, we don't know which of `a_1', `a_2' or `a_3' to
16113 use at the return statement.  So, the SSA renamer creates a new version
16114 `a_4' which is assigned the result of "merging" `a_1', `a_2' and `a_3'.
16115 Hence, PHI nodes mean "one of these operands.  I don't know which".
16117  The following macros can be used to examine PHI nodes
16119  -- Macro: PHI_RESULT (PHI)
16120      Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
16122  -- Macro: PHI_NUM_ARGS (PHI)
16123      Returns the number of arguments in PHI.  This number is exactly
16124      the number of incoming edges to the basic block holding PHI.
16126  -- Macro: PHI_ARG_ELT (PHI, I)
16127      Returns a tuple representing the Ith argument of PHI.  Each
16128      element of this tuple contains an `SSA_NAME' VAR and the incoming
16129      edge through which VAR flows.
16131  -- Macro: PHI_ARG_EDGE (PHI, I)
16132      Returns the incoming edge for the Ith argument of PHI.
16134  -- Macro: PHI_ARG_DEF (PHI, I)
16135      Returns the `SSA_NAME' for the Ith argument of PHI.
16137 13.3.1 Preserving the SSA form
16138 ------------------------------
16140 Some optimization passes make changes to the function that invalidate
16141 the SSA property.  This can happen when a pass has added new symbols or
16142 changed the program so that variables that were previously aliased
16143 aren't anymore.  Whenever something like this happens, the affected
16144 symbols must be renamed into SSA form again.  Transformations that emit
16145 new code or replicate existing statements will also need to update the
16146 SSA form.
16148  Since GCC implements two different SSA forms for register and virtual
16149 variables, keeping the SSA form up to date depends on whether you are
16150 updating register or virtual names.  In both cases, the general idea
16151 behind incremental SSA updates is similar: when new SSA names are
16152 created, they typically are meant to replace other existing names in
16153 the program.
16155  For instance, given the following code:
16157           1  L0:
16158           2  x_1 = PHI (0, x_5)
16159           3  if (x_1 < 10)
16160           4    if (x_1 > 7)
16161           5      y_2 = 0
16162           6    else
16163           7      y_3 = x_1 + x_7
16164           8    endif
16165           9    x_5 = x_1 + 1
16166           10   goto L0;
16167           11 endif
16169  Suppose that we insert new names `x_10' and `x_11' (lines `4' and `8').
16171           1  L0:
16172           2  x_1 = PHI (0, x_5)
16173           3  if (x_1 < 10)
16174           4    x_10 = ...
16175           5    if (x_1 > 7)
16176           6      y_2 = 0
16177           7    else
16178           8      x_11 = ...
16179           9      y_3 = x_1 + x_7
16180           10   endif
16181           11   x_5 = x_1 + 1
16182           12   goto L0;
16183           13 endif
16185  We want to replace all the uses of `x_1' with the new definitions of
16186 `x_10' and `x_11'.  Note that the only uses that should be replaced are
16187 those at lines `5', `9' and `11'.  Also, the use of `x_7' at line `9'
16188 should _not_ be replaced (this is why we cannot just mark symbol `x' for
16189 renaming).
16191  Additionally, we may need to insert a PHI node at line `11' because
16192 that is a merge point for `x_10' and `x_11'.  So the use of `x_1' at
16193 line `11' will be replaced with the new PHI node.  The insertion of PHI
16194 nodes is optional.  They are not strictly necessary to preserve the SSA
16195 form, and depending on what the caller inserted, they may not even be
16196 useful for the optimizers.
16198  Updating the SSA form is a two step process.  First, the pass has to
16199 identify which names need to be updated and/or which symbols need to be
16200 renamed into SSA form for the first time.  When new names are
16201 introduced to replace existing names in the program, the mapping
16202 between the old and the new names are registered by calling
16203 `register_new_name_mapping' (note that if your pass creates new code by
16204 duplicating basic blocks, the call to `tree_duplicate_bb' will set up
16205 the necessary mappings automatically).  On the other hand, if your pass
16206 exposes a new symbol that should be put in SSA form for the first time,
16207 the new symbol should be registered with `mark_sym_for_renaming'.
16209  After the replacement mappings have been registered and new symbols
16210 marked for renaming, a call to `update_ssa' makes the registered
16211 changes.  This can be done with an explicit call or by creating `TODO'
16212 flags in the `tree_opt_pass' structure for your pass.  There are
16213 several `TODO' flags that control the behavior of `update_ssa':
16215    * `TODO_update_ssa'.  Update the SSA form inserting PHI nodes for
16216      newly exposed symbols and virtual names marked for updating.  When
16217      updating real names, only insert PHI nodes for a real name `O_j'
16218      in blocks reached by all the new and old definitions for `O_j'.
16219      If the iterated dominance frontier for `O_j' is not pruned, we may
16220      end up inserting PHI nodes in blocks that have one or more edges
16221      with no incoming definition for `O_j'.  This would lead to
16222      uninitialized warnings for `O_j''s symbol.
16224    * `TODO_update_ssa_no_phi'.  Update the SSA form without inserting
16225      any new PHI nodes at all.  This is used by passes that have either
16226      inserted all the PHI nodes themselves or passes that need only to
16227      patch use-def and def-def chains for virtuals (e.g., DCE).
16229    * `TODO_update_ssa_full_phi'.  Insert PHI nodes everywhere they are
16230      needed.  No pruning of the IDF is done.  This is used by passes
16231      that need the PHI nodes for `O_j' even if it means that some
16232      arguments will come from the default definition of `O_j''s symbol
16233      (e.g., `pass_linear_transform').
16235      WARNING: If you need to use this flag, chances are that your pass
16236      may be doing something wrong.  Inserting PHI nodes for an old name
16237      where not all edges carry a new replacement may lead to silent
16238      codegen errors or spurious uninitialized warnings.
16240    * `TODO_update_ssa_only_virtuals'.  Passes that update the SSA form
16241      on their own may want to delegate the updating of virtual names to
16242      the generic updater.  Since FUD chains are easier to maintain,
16243      this simplifies the work they need to do.  NOTE: If this flag is
16244      used, any OLD->NEW mappings for real names are explicitly
16245      destroyed and only the symbols marked for renaming are processed.
16247 13.3.2 Preserving the virtual SSA form
16248 --------------------------------------
16250 The virtual SSA form is harder to preserve than the non-virtual SSA form
16251 mainly because the set of virtual operands for a statement may change at
16252 what some would consider unexpected times.  In general, statement
16253 modifications should be bracketed between calls to `push_stmt_changes'
16254 and `pop_stmt_changes'.  For example,
16256          munge_stmt (tree stmt)
16257          {
16258             push_stmt_changes (&stmt);
16259             ... rewrite STMT ...
16260             pop_stmt_changes (&stmt);
16261          }
16263  The call to `push_stmt_changes' saves the current state of the
16264 statement operands and the call to `pop_stmt_changes' compares the
16265 saved state with the current one and does the appropriate symbol
16266 marking for the SSA renamer.
16268  It is possible to modify several statements at a time, provided that
16269 `push_stmt_changes' and `pop_stmt_changes' are called in LIFO order, as
16270 when processing a stack of statements.
16272  Additionally, if the pass discovers that it did not need to make
16273 changes to the statement after calling `push_stmt_changes', it can
16274 simply discard the topmost change buffer by calling
16275 `discard_stmt_changes'.  This will avoid the expensive operand re-scan
16276 operation and the buffer comparison that determines if symbols need to
16277 be marked for renaming.
16279 13.3.3 Examining `SSA_NAME' nodes
16280 ---------------------------------
16282 The following macros can be used to examine `SSA_NAME' nodes
16284  -- Macro: SSA_NAME_DEF_STMT (VAR)
16285      Returns the statement S that creates the `SSA_NAME' VAR.  If S is
16286      an empty statement (i.e., `IS_EMPTY_STMT (S)' returns `true'), it
16287      means that the first reference to this variable is a USE or a VUSE.
16289  -- Macro: SSA_NAME_VERSION (VAR)
16290      Returns the version number of the `SSA_NAME' object VAR.
16292 13.3.4 Walking use-def chains
16293 -----------------------------
16295  -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA)
16296      Walks use-def chains starting at the `SSA_NAME' node VAR.  Calls
16297      function FN at each reaching definition found.  Function FN takes
16298      three arguments: VAR, its defining statement (DEF_STMT) and a
16299      generic pointer to whatever state information that FN may want to
16300      maintain (DATA).  Function FN is able to stop the walk by
16301      returning `true', otherwise in order to continue the walk, FN
16302      should return `false'.
16304      Note, that if DEF_STMT is a `PHI' node, the semantics are slightly
16305      different.  For each argument ARG of the PHI node, this function
16306      will:
16308        1. Walk the use-def chains for ARG.
16310        2. Call `FN (ARG, PHI, DATA)'.
16312      Note how the first argument to FN is no longer the original
16313      variable VAR, but the PHI argument currently being examined.  If
16314      FN wants to get at VAR, it should call `PHI_RESULT' (PHI).
16316 13.3.5 Walking the dominator tree
16317 ---------------------------------
16319  -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB)
16320      This function walks the dominator tree for the current CFG calling
16321      a set of callback functions defined in STRUCT DOM_WALK_DATA in
16322      `domwalk.h'.  The call back functions you need to define give you
16323      hooks to execute custom code at various points during traversal:
16325        1. Once to initialize any local data needed while processing BB
16326           and its children.  This local data is pushed into an internal
16327           stack which is automatically pushed and popped as the walker
16328           traverses the dominator tree.
16330        2. Once before traversing all the statements in the BB.
16332        3. Once for every statement inside BB.
16334        4. Once after traversing all the statements and before recursing
16335           into BB's dominator children.
16337        5. It then recurses into all the dominator children of BB.
16339        6. After recursing into all the dominator children of BB it can,
16340           optionally, traverse every statement in BB again (i.e.,
16341           repeating steps 2 and 3).
16343        7. Once after walking the statements in BB and BB's dominator
16344           children.  At this stage, the block local data stack is
16345           popped.
16347 \x1f
16348 File: gccint.info,  Node: Alias analysis,  Next: Memory model,  Prev: SSA,  Up: Tree SSA
16350 13.4 Alias analysis
16351 ===================
16353 Alias analysis in GIMPLE SSA form consists of two pieces.  First the
16354 virtual SSA web ties conflicting memory accesses and provides a SSA
16355 use-def chain and SSA immediate-use chains for walking possibly
16356 dependent memory accesses.  Second an alias-oracle can be queried to
16357 disambiguate explicit and implicit memory references.
16359   1. Memory SSA form.
16361      All statements that may use memory have exactly one accompanied
16362      use of a virtual SSA name that represents the state of memory at
16363      the given point in the IL.
16365      All statements that may define memory have exactly one accompanied
16366      definition of a virtual SSA name using the previous state of memory
16367      and defining the new state of memory after the given point in the
16368      IL.
16370           int i;
16371           int foo (void)
16372           {
16373             # .MEM_3 = VDEF <.MEM_2(D)>
16374             i = 1;
16375             # VUSE <.MEM_3>
16376             return i;
16377           }
16379      The virtual SSA names in this case are `.MEM_2(D)' and `.MEM_3'.
16380      The store to the global variable `i' defines `.MEM_3' invalidating
16381      `.MEM_2(D)'.  The load from `i' uses that new state `.MEM_3'.
16383      The virtual SSA web serves as constraints to SSA optimizers
16384      preventing illegitimate code-motion and optimization.  It also
16385      provides a way to walk related memory statements.
16387   2. Points-to and escape analysis.
16389      Points-to analysis builds a set of constraints from the GIMPLE SSA
16390      IL representing all pointer operations and facts we do or do not
16391      know about pointers.  Solving this set of constraints yields a
16392      conservatively correct solution for each pointer variable in the
16393      program (though we are only interested in SSA name pointers) as to
16394      what it may possibly point to.
16396      This points-to solution for a given SSA name pointer is stored in
16397      the `pt_solution' sub-structure of the `SSA_NAME_PTR_INFO' record.
16398      The following accessor functions are available:
16400         * `pt_solution_includes'
16402         * `pt_solutions_intersect'
16404      Points-to analysis also computes the solution for two special set
16405      of pointers, `ESCAPED' and `CALLUSED'.  Those represent all memory
16406      that has escaped the scope of analysis or that is used by pure or
16407      nested const calls.
16409   3. Type-based alias analysis
16411      Type-based alias analysis is frontend dependent though generic
16412      support is provided by the middle-end in `alias.c'.  TBAA code is
16413      used by both tree optimizers and RTL optimizers.
16415      Every language that wishes to perform language-specific alias
16416      analysis should define a function that computes, given a `tree'
16417      node, an alias set for the node.  Nodes in different alias sets
16418      are not allowed to alias.  For an example, see the C front-end
16419      function `c_get_alias_set'.
16421   4. Tree alias-oracle
16423      The tree alias-oracle provides means to disambiguate two memory
16424      references and memory references against statements.  The following
16425      queries are available:
16427         * `refs_may_alias_p'
16429         * `ref_maybe_used_by_stmt_p'
16431         * `stmt_may_clobber_ref_p'
16433      In addition to those two kind of statement walkers are available
16434      walking statements related to a reference ref.
16435      `walk_non_aliased_vuses' walks over dominating memory defining
16436      statements and calls back if the statement does not clobber ref
16437      providing the non-aliased VUSE.  The walk stops at the first
16438      clobbering statement or if asked to.  `walk_aliased_vdefs' walks
16439      over dominating memory defining statements and calls back on each
16440      statement clobbering ref providing its aliasing VDEF.  The walk
16441      stops if asked to.
16444 \x1f
16445 File: gccint.info,  Node: Memory model,  Prev: Alias analysis,  Up: Tree SSA
16447 13.5 Memory model
16448 =================
16450 The memory model used by the middle-end models that of the C/C++
16451 languages.  The middle-end has the notion of an effective type of a
16452 memory region which is used for type-based alias analysis.
16454  The following is a refinement of ISO C99 6.5/6, clarifying the block
16455 copy case to follow common sense and extending the concept of a dynamic
16456 effective type to objects with a declared type as required for C++.
16458      The effective type of an object for an access to its stored value is
16459      the declared type of the object or the effective type determined by
16460      a previous store to it.  If a value is stored into an object through
16461      an lvalue having a type that is not a character type, then the
16462      type of the lvalue becomes the effective type of the object for that
16463      access and for subsequent accesses that do not modify the stored value.
16464      If a value is copied into an object using `memcpy' or `memmove',
16465      or is copied as an array of character type, then the effective type
16466      of the modified object for that access and for subsequent accesses that
16467      do not modify the value is undetermined.  For all other accesses to an
16468      object, the effective type of the object is simply the type of the
16469      lvalue used for the access.
16471 \x1f
16472 File: gccint.info,  Node: Loop Analysis and Representation,  Next: Machine Desc,  Prev: Control Flow,  Up: Top
16474 14 Analysis and Representation of Loops
16475 ***************************************
16477 GCC provides extensive infrastructure for work with natural loops, i.e.,
16478 strongly connected components of CFG with only one entry block.  This
16479 chapter describes representation of loops in GCC, both on GIMPLE and in
16480 RTL, as well as the interfaces to loop-related analyses (induction
16481 variable analysis and number of iterations analysis).
16483 * Menu:
16485 * Loop representation::         Representation and analysis of loops.
16486 * Loop querying::               Getting information about loops.
16487 * Loop manipulation::           Loop manipulation functions.
16488 * LCSSA::                       Loop-closed SSA form.
16489 * Scalar evolutions::           Induction variables on GIMPLE.
16490 * loop-iv::                     Induction variables on RTL.
16491 * Number of iterations::        Number of iterations analysis.
16492 * Dependency analysis::         Data dependency analysis.
16493 * Lambda::                      Linear loop transformations framework.
16494 * Omega::                       A solver for linear programming problems.
16496 \x1f
16497 File: gccint.info,  Node: Loop representation,  Next: Loop querying,  Up: Loop Analysis and Representation
16499 14.1 Loop representation
16500 ========================
16502 This chapter describes the representation of loops in GCC, and functions
16503 that can be used to build, modify and analyze this representation.  Most
16504 of the interfaces and data structures are declared in `cfgloop.h'.  At
16505 the moment, loop structures are analyzed and this information is
16506 updated only by the optimization passes that deal with loops, but some
16507 efforts are being made to make it available throughout most of the
16508 optimization passes.
16510  In general, a natural loop has one entry block (header) and possibly
16511 several back edges (latches) leading to the header from the inside of
16512 the loop.  Loops with several latches may appear if several loops share
16513 a single header, or if there is a branching in the middle of the loop.
16514 The representation of loops in GCC however allows only loops with a
16515 single latch.  During loop analysis, headers of such loops are split and
16516 forwarder blocks are created in order to disambiguate their structures.
16517 Heuristic based on profile information and structure of the induction
16518 variables in the loops is used to determine whether the latches
16519 correspond to sub-loops or to control flow in a single loop.  This means
16520 that the analysis sometimes changes the CFG, and if you run it in the
16521 middle of an optimization pass, you must be able to deal with the new
16522 blocks.  You may avoid CFG changes by passing
16523 `LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note
16524 however that most other loop manipulation functions will not work
16525 correctly for loops with multiple latch edges (the functions that only
16526 query membership of blocks to loops and subloop relationships, or
16527 enumerate and test loop exits, can be expected to work).
16529  Body of the loop is the set of blocks that are dominated by its header,
16530 and reachable from its latch against the direction of edges in CFG.  The
16531 loops are organized in a containment hierarchy (tree) such that all the
16532 loops immediately contained inside loop L are the children of L in the
16533 tree.  This tree is represented by the `struct loops' structure.  The
16534 root of this tree is a fake loop that contains all blocks in the
16535 function.  Each of the loops is represented in a `struct loop'
16536 structure.  Each loop is assigned an index (`num' field of the `struct
16537 loop' structure), and the pointer to the loop is stored in the
16538 corresponding field of the `larray' vector in the loops structure.  The
16539 indices do not have to be continuous, there may be empty (`NULL')
16540 entries in the `larray' created by deleting loops.  Also, there is no
16541 guarantee on the relative order of a loop and its subloops in the
16542 numbering.  The index of a loop never changes.
16544  The entries of the `larray' field should not be accessed directly.
16545 The function `get_loop' returns the loop description for a loop with
16546 the given index.  `number_of_loops' function returns number of loops in
16547 the function.  To traverse all loops, use `FOR_EACH_LOOP' macro.  The
16548 `flags' argument of the macro is used to determine the direction of
16549 traversal and the set of loops visited.  Each loop is guaranteed to be
16550 visited exactly once, regardless of the changes to the loop tree, and
16551 the loops may be removed during the traversal.  The newly created loops
16552 are never traversed, if they need to be visited, this must be done
16553 separately after their creation.  The `FOR_EACH_LOOP' macro allocates
16554 temporary variables.  If the `FOR_EACH_LOOP' loop were ended using
16555 break or goto, they would not be released; `FOR_EACH_LOOP_BREAK' macro
16556 must be used instead.
16558  Each basic block contains the reference to the innermost loop it
16559 belongs to (`loop_father').  For this reason, it is only possible to
16560 have one `struct loops' structure initialized at the same time for each
16561 CFG.  The global variable `current_loops' contains the `struct loops'
16562 structure.  Many of the loop manipulation functions assume that
16563 dominance information is up-to-date.
16565  The loops are analyzed through `loop_optimizer_init' function.  The
16566 argument of this function is a set of flags represented in an integer
16567 bitmask.  These flags specify what other properties of the loop
16568 structures should be calculated/enforced and preserved later:
16570    * `LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes
16571      to CFG will be performed in the loop analysis, in particular,
16572      loops with multiple latch edges will not be disambiguated.  If a
16573      loop has multiple latches, its latch block is set to NULL.  Most of
16574      the loop manipulation functions will not work for loops in this
16575      shape.  No other flags that require CFG changes can be passed to
16576      loop_optimizer_init.
16578    * `LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a
16579      way that each loop has only one entry edge, and additionally, the
16580      source block of this entry edge has only one successor.  This
16581      creates a natural place where the code can be moved out of the
16582      loop, and ensures that the entry edge of the loop leads from its
16583      immediate super-loop.
16585    * `LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force
16586      the latch block of each loop to have only one successor.  This
16587      ensures that the latch of the loop does not belong to any of its
16588      sub-loops, and makes manipulation with the loops significantly
16589      easier.  Most of the loop manipulation functions assume that the
16590      loops are in this shape.  Note that with this flag, the "normal"
16591      loop without any control flow inside and with one exit consists of
16592      two basic blocks.
16594    * `LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in
16595      the strongly connected components that are not natural loops (have
16596      more than one entry block) are marked with `BB_IRREDUCIBLE_LOOP'
16597      and `EDGE_IRREDUCIBLE_LOOP' flags.  The flag is not set for blocks
16598      and edges that belong to natural loops that are in such an
16599      irreducible region (but it is set for the entry and exit edges of
16600      such a loop, if they lead to/from this region).
16602    * `LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and
16603      updated for each loop.  This makes some functions (e.g.,
16604      `get_loop_exit_edges') more efficient.  Some functions (e.g.,
16605      `single_exit') can be used only if the lists of exits are recorded.
16607  These properties may also be computed/enforced later, using functions
16608 `create_preheaders', `force_single_succ_latches',
16609 `mark_irreducible_loops' and `record_loop_exits'.
16611  The memory occupied by the loops structures should be freed with
16612 `loop_optimizer_finalize' function.
16614  The CFG manipulation functions in general do not update loop
16615 structures.  Specialized versions that additionally do so are provided
16616 for the most common tasks.  On GIMPLE, `cleanup_tree_cfg_loop' function
16617 can be used to cleanup CFG while updating the loops structures if
16618 `current_loops' is set.
16620 \x1f
16621 File: gccint.info,  Node: Loop querying,  Next: Loop manipulation,  Prev: Loop representation,  Up: Loop Analysis and Representation
16623 14.2 Loop querying
16624 ==================
16626 The functions to query the information about loops are declared in
16627 `cfgloop.h'.  Some of the information can be taken directly from the
16628 structures.  `loop_father' field of each basic block contains the
16629 innermost loop to that the block belongs.  The most useful fields of
16630 loop structure (that are kept up-to-date at all times) are:
16632    * `header', `latch': Header and latch basic blocks of the loop.
16634    * `num_nodes': Number of basic blocks in the loop (including the
16635      basic blocks of the sub-loops).
16637    * `depth': The depth of the loop in the loops tree, i.e., the number
16638      of super-loops of the loop.
16640    * `outer', `inner', `next': The super-loop, the first sub-loop, and
16641      the sibling of the loop in the loops tree.
16643  There are other fields in the loop structures, many of them used only
16644 by some of the passes, or not updated during CFG changes; in general,
16645 they should not be accessed directly.
16647  The most important functions to query loop structures are:
16649    * `flow_loops_dump': Dumps the information about loops to a file.
16651    * `verify_loop_structure': Checks consistency of the loop structures.
16653    * `loop_latch_edge': Returns the latch edge of a loop.
16655    * `loop_preheader_edge': If loops have preheaders, returns the
16656      preheader edge of a loop.
16658    * `flow_loop_nested_p': Tests whether loop is a sub-loop of another
16659      loop.
16661    * `flow_bb_inside_loop_p': Tests whether a basic block belongs to a
16662      loop (including its sub-loops).
16664    * `find_common_loop': Finds the common super-loop of two loops.
16666    * `superloop_at_depth': Returns the super-loop of a loop with the
16667      given depth.
16669    * `tree_num_loop_insns', `num_loop_insns': Estimates the number of
16670      insns in the loop, on GIMPLE and on RTL.
16672    * `loop_exit_edge_p': Tests whether edge is an exit from a loop.
16674    * `mark_loop_exit_edges': Marks all exit edges of all loops with
16675      `EDGE_LOOP_EXIT' flag.
16677    * `get_loop_body', `get_loop_body_in_dom_order',
16678      `get_loop_body_in_bfs_order': Enumerates the basic blocks in the
16679      loop in depth-first search order in reversed CFG, ordered by
16680      dominance relation, and breath-first search order, respectively.
16682    * `single_exit': Returns the single exit edge of the loop, or `NULL'
16683      if the loop has more than one exit.  You can only use this
16684      function if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used.
16686    * `get_loop_exit_edges': Enumerates the exit edges of a loop.
16688    * `just_once_each_iteration_p': Returns true if the basic block is
16689      executed exactly once during each iteration of a loop (that is, it
16690      does not belong to a sub-loop, and it dominates the latch of the
16691      loop).
16693 \x1f
16694 File: gccint.info,  Node: Loop manipulation,  Next: LCSSA,  Prev: Loop querying,  Up: Loop Analysis and Representation
16696 14.3 Loop manipulation
16697 ======================
16699 The loops tree can be manipulated using the following functions:
16701    * `flow_loop_tree_node_add': Adds a node to the tree.
16703    * `flow_loop_tree_node_remove': Removes a node from the tree.
16705    * `add_bb_to_loop': Adds a basic block to a loop.
16707    * `remove_bb_from_loops': Removes a basic block from loops.
16709  Most low-level CFG functions update loops automatically.  The following
16710 functions handle some more complicated cases of CFG manipulations:
16712    * `remove_path': Removes an edge and all blocks it dominates.
16714    * `split_loop_exit_edge': Splits exit edge of the loop, ensuring
16715      that PHI node arguments remain in the loop (this ensures that
16716      loop-closed SSA form is preserved).  Only useful on GIMPLE.
16718  Finally, there are some higher-level loop transformations implemented.
16719 While some of them are written so that they should work on non-innermost
16720 loops, they are mostly untested in that case, and at the moment, they
16721 are only reliable for the innermost loops:
16723    * `create_iv': Creates a new induction variable.  Only works on
16724      GIMPLE.  `standard_iv_increment_position' can be used to find a
16725      suitable place for the iv increment.
16727    * `duplicate_loop_to_header_edge',
16728      `tree_duplicate_loop_to_header_edge': These functions (on RTL and
16729      on GIMPLE) duplicate the body of the loop prescribed number of
16730      times on one of the edges entering loop header, thus performing
16731      either loop unrolling or loop peeling.  `can_duplicate_loop_p'
16732      (`can_unroll_loop_p' on GIMPLE) must be true for the duplicated
16733      loop.
16735    * `loop_version', `tree_ssa_loop_version': These function create a
16736      copy of a loop, and a branch before them that selects one of them
16737      depending on the prescribed condition.  This is useful for
16738      optimizations that need to verify some assumptions in runtime (one
16739      of the copies of the loop is usually left unchanged, while the
16740      other one is transformed in some way).
16742    * `tree_unroll_loop': Unrolls the loop, including peeling the extra
16743      iterations to make the number of iterations divisible by unroll
16744      factor, updating the exit condition, and removing the exits that
16745      now cannot be taken.  Works only on GIMPLE.
16747 \x1f
16748 File: gccint.info,  Node: LCSSA,  Next: Scalar evolutions,  Prev: Loop manipulation,  Up: Loop Analysis and Representation
16750 14.4 Loop-closed SSA form
16751 =========================
16753 Throughout the loop optimizations on tree level, one extra condition is
16754 enforced on the SSA form:  No SSA name is used outside of the loop in
16755 that it is defined.  The SSA form satisfying this condition is called
16756 "loop-closed SSA form" - LCSSA.  To enforce LCSSA, PHI nodes must be
16757 created at the exits of the loops for the SSA names that are used
16758 outside of them.  Only the real operands (not virtual SSA names) are
16759 held in LCSSA, in order to save memory.
16761  There are various benefits of LCSSA:
16763    * Many optimizations (value range analysis, final value replacement)
16764      are interested in the values that are defined in the loop and used
16765      outside of it, i.e., exactly those for that we create new PHI
16766      nodes.
16768    * In induction variable analysis, it is not necessary to specify the
16769      loop in that the analysis should be performed - the scalar
16770      evolution analysis always returns the results with respect to the
16771      loop in that the SSA name is defined.
16773    * It makes updating of SSA form during loop transformations simpler.
16774      Without LCSSA, operations like loop unrolling may force creation
16775      of PHI nodes arbitrarily far from the loop, while in LCSSA, the
16776      SSA form can be updated locally.  However, since we only keep real
16777      operands in LCSSA, we cannot use this advantage (we could have
16778      local updating of real operands, but it is not much more efficient
16779      than to use generic SSA form updating for it as well; the amount
16780      of changes to SSA is the same).
16782  However, it also means LCSSA must be updated.  This is usually
16783 straightforward, unless you create a new value in loop and use it
16784 outside, or unless you manipulate loop exit edges (functions are
16785 provided to make these manipulations simple).
16786 `rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA,
16787 and `verify_loop_closed_ssa' to check that the invariant of LCSSA is
16788 preserved.
16790 \x1f
16791 File: gccint.info,  Node: Scalar evolutions,  Next: loop-iv,  Prev: LCSSA,  Up: Loop Analysis and Representation
16793 14.5 Scalar evolutions
16794 ======================
16796 Scalar evolutions (SCEV) are used to represent results of induction
16797 variable analysis on GIMPLE.  They enable us to represent variables with
16798 complicated behavior in a simple and consistent way (we only use it to
16799 express values of polynomial induction variables, but it is possible to
16800 extend it).  The interfaces to SCEV analysis are declared in
16801 `tree-scalar-evolution.h'.  To use scalar evolutions analysis,
16802 `scev_initialize' must be used.  To stop using SCEV, `scev_finalize'
16803 should be used.  SCEV analysis caches results in order to save time and
16804 memory.  This cache however is made invalid by most of the loop
16805 transformations, including removal of code.  If such a transformation
16806 is performed, `scev_reset' must be called to clean the caches.
16808  Given an SSA name, its behavior in loops can be analyzed using the
16809 `analyze_scalar_evolution' function.  The returned SCEV however does
16810 not have to be fully analyzed and it may contain references to other
16811 SSA names defined in the loop.  To resolve these (potentially
16812 recursive) references, `instantiate_parameters' or `resolve_mixers'
16813 functions must be used.  `instantiate_parameters' is useful when you
16814 use the results of SCEV only for some analysis, and when you work with
16815 whole nest of loops at once.  It will try replacing all SSA names by
16816 their SCEV in all loops, including the super-loops of the current loop,
16817 thus providing a complete information about the behavior of the
16818 variable in the loop nest.  `resolve_mixers' is useful if you work with
16819 only one loop at a time, and if you possibly need to create code based
16820 on the value of the induction variable.  It will only resolve the SSA
16821 names defined in the current loop, leaving the SSA names defined
16822 outside unchanged, even if their evolution in the outer loops is known.
16824  The SCEV is a normal tree expression, except for the fact that it may
16825 contain several special tree nodes.  One of them is `SCEV_NOT_KNOWN',
16826 used for SSA names whose value cannot be expressed.  The other one is
16827 `POLYNOMIAL_CHREC'.  Polynomial chrec has three arguments - base, step
16828 and loop (both base and step may contain further polynomial chrecs).
16829 Type of the expression and of base and step must be the same.  A
16830 variable has evolution `POLYNOMIAL_CHREC(base, step, loop)' if it is
16831 (in the specified loop) equivalent to `x_1' in the following example
16833      while (...)
16834        {
16835          x_1 = phi (base, x_2);
16836          x_2 = x_1 + step;
16837        }
16839  Note that this includes the language restrictions on the operations.
16840 For example, if we compile C code and `x' has signed type, then the
16841 overflow in addition would cause undefined behavior, and we may assume
16842 that this does not happen.  Hence, the value with this SCEV cannot
16843 overflow (which restricts the number of iterations of such a loop).
16845  In many cases, one wants to restrict the attention just to affine
16846 induction variables.  In this case, the extra expressive power of SCEV
16847 is not useful, and may complicate the optimizations.  In this case,
16848 `simple_iv' function may be used to analyze a value - the result is a
16849 loop-invariant base and step.
16851 \x1f
16852 File: gccint.info,  Node: loop-iv,  Next: Number of iterations,  Prev: Scalar evolutions,  Up: Loop Analysis and Representation
16854 14.6 IV analysis on RTL
16855 =======================
16857 The induction variable on RTL is simple and only allows analysis of
16858 affine induction variables, and only in one loop at once.  The interface
16859 is declared in `cfgloop.h'.  Before analyzing induction variables in a
16860 loop L, `iv_analysis_loop_init' function must be called on L.  After
16861 the analysis (possibly calling `iv_analysis_loop_init' for several
16862 loops) is finished, `iv_analysis_done' should be called.  The following
16863 functions can be used to access the results of the analysis:
16865    * `iv_analyze': Analyzes a single register used in the given insn.
16866      If no use of the register in this insn is found, the following
16867      insns are scanned, so that this function can be called on the insn
16868      returned by get_condition.
16870    * `iv_analyze_result': Analyzes result of the assignment in the
16871      given insn.
16873    * `iv_analyze_expr': Analyzes a more complicated expression.  All
16874      its operands are analyzed by `iv_analyze', and hence they must be
16875      used in the specified insn or one of the following insns.
16877  The description of the induction variable is provided in `struct
16878 rtx_iv'.  In order to handle subregs, the representation is a bit
16879 complicated; if the value of the `extend' field is not `UNKNOWN', the
16880 value of the induction variable in the i-th iteration is
16882      delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
16884  with the following exception:  if `first_special' is true, then the
16885 value in the first iteration (when `i' is zero) is `delta + mult *
16886 base'.  However, if `extend' is equal to `UNKNOWN', then
16887 `first_special' must be false, `delta' 0, `mult' 1 and the value in the
16888 i-th iteration is
16890      subreg_{mode} (base + i * step)
16892  The function `get_iv_value' can be used to perform these calculations.
16894 \x1f
16895 File: gccint.info,  Node: Number of iterations,  Next: Dependency analysis,  Prev: loop-iv,  Up: Loop Analysis and Representation
16897 14.7 Number of iterations analysis
16898 ==================================
16900 Both on GIMPLE and on RTL, there are functions available to determine
16901 the number of iterations of a loop, with a similar interface.  The
16902 number of iterations of a loop in GCC is defined as the number of
16903 executions of the loop latch.  In many cases, it is not possible to
16904 determine the number of iterations unconditionally - the determined
16905 number is correct only if some assumptions are satisfied.  The analysis
16906 tries to verify these conditions using the information contained in the
16907 program; if it fails, the conditions are returned together with the
16908 result.  The following information and conditions are provided by the
16909 analysis:
16911    * `assumptions': If this condition is false, the rest of the
16912      information is invalid.
16914    * `noloop_assumptions' on RTL, `may_be_zero' on GIMPLE: If this
16915      condition is true, the loop exits in the first iteration.
16917    * `infinite': If this condition is true, the loop is infinite.  This
16918      condition is only available on RTL.  On GIMPLE, conditions for
16919      finiteness of the loop are included in `assumptions'.
16921    * `niter_expr' on RTL, `niter' on GIMPLE: The expression that gives
16922      number of iterations.  The number of iterations is defined as the
16923      number of executions of the loop latch.
16925  Both on GIMPLE and on RTL, it necessary for the induction variable
16926 analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
16927 On GIMPLE, the results are stored to `struct tree_niter_desc'
16928 structure.  Number of iterations before the loop is exited through a
16929 given exit can be determined using `number_of_iterations_exit'
16930 function.  On RTL, the results are returned in `struct niter_desc'
16931 structure.  The corresponding function is named `check_simple_exit'.
16932 There are also functions that pass through all the exits of a loop and
16933 try to find one with easy to determine number of iterations -
16934 `find_loop_niter' on GIMPLE and `find_simple_exit' on RTL.  Finally,
16935 there are functions that provide the same information, but additionally
16936 cache it, so that repeated calls to number of iterations are not so
16937 costly - `number_of_latch_executions' on GIMPLE and
16938 `get_simple_loop_desc' on RTL.
16940  Note that some of these functions may behave slightly differently than
16941 others - some of them return only the expression for the number of
16942 iterations, and fail if there are some assumptions.  The function
16943 `number_of_latch_executions' works only for single-exit loops.  The
16944 function `number_of_cond_exit_executions' can be used to determine
16945 number of executions of the exit condition of a single-exit loop (i.e.,
16946 the `number_of_latch_executions' increased by one).
16948 \x1f
16949 File: gccint.info,  Node: Dependency analysis,  Next: Lambda,  Prev: Number of iterations,  Up: Loop Analysis and Representation
16951 14.8 Data Dependency Analysis
16952 =============================
16954 The code for the data dependence analysis can be found in
16955 `tree-data-ref.c' and its interface and data structures are described
16956 in `tree-data-ref.h'.  The function that computes the data dependences
16957 for all the array and pointer references for a given loop is
16958 `compute_data_dependences_for_loop'.  This function is currently used
16959 by the linear loop transform and the vectorization passes.  Before
16960 calling this function, one has to allocate two vectors: a first vector
16961 will contain the set of data references that are contained in the
16962 analyzed loop body, and the second vector will contain the dependence
16963 relations between the data references.  Thus if the vector of data
16964 references is of size `n', the vector containing the dependence
16965 relations will contain `n*n' elements.  However if the analyzed loop
16966 contains side effects, such as calls that potentially can interfere
16967 with the data references in the current analyzed loop, the analysis
16968 stops while scanning the loop body for data references, and inserts a
16969 single `chrec_dont_know' in the dependence relation array.
16971  The data references are discovered in a particular order during the
16972 scanning of the loop body: the loop body is analyzed in execution order,
16973 and the data references of each statement are pushed at the end of the
16974 data reference array.  Two data references syntactically occur in the
16975 program in the same order as in the array of data references.  This
16976 syntactic order is important in some classical data dependence tests,
16977 and mapping this order to the elements of this array avoids costly
16978 queries to the loop body representation.
16980  Three types of data references are currently handled: ARRAY_REF,
16981 INDIRECT_REF and COMPONENT_REF. The data structure for the data
16982 reference is `data_reference', where `data_reference_p' is a name of a
16983 pointer to the data reference structure. The structure contains the
16984 following elements:
16986    * `base_object_info': Provides information about the base object of
16987      the data reference and its access functions. These access functions
16988      represent the evolution of the data reference in the loop relative
16989      to its base, in keeping with the classical meaning of the data
16990      reference access function for the support of arrays. For example,
16991      for a reference `a.b[i][j]', the base object is `a.b' and the
16992      access functions, one for each array subscript, are: `{i_init, +
16993      i_step}_1, {j_init, +, j_step}_2'.
16995    * `first_location_in_loop': Provides information about the first
16996      location accessed by the data reference in the loop and about the
16997      access function used to represent evolution relative to this
16998      location. This data is used to support pointers, and is not used
16999      for arrays (for which we have base objects). Pointer accesses are
17000      represented as a one-dimensional access that starts from the first
17001      location accessed in the loop. For example:
17003                 for1 i
17004                    for2 j
17005                     *((int *)p + i + j) = a[i][j];
17007      The access function of the pointer access is `{0, + 4B}_for2'
17008      relative to `p + i'. The access functions of the array are
17009      `{i_init, + i_step}_for1' and `{j_init, +, j_step}_for2' relative
17010      to `a'.
17012      Usually, the object the pointer refers to is either unknown, or we
17013      can't prove that the access is confined to the boundaries of a
17014      certain object.
17016      Two data references can be compared only if at least one of these
17017      two representations has all its fields filled for both data
17018      references.
17020      The current strategy for data dependence tests is as follows: If
17021      both `a' and `b' are represented as arrays, compare
17022      `a.base_object' and `b.base_object'; if they are equal, apply
17023      dependence tests (use access functions based on base_objects).
17024      Else if both `a' and `b' are represented as pointers, compare
17025      `a.first_location' and `b.first_location'; if they are equal,
17026      apply dependence tests (use access functions based on first
17027      location).  However, if `a' and `b' are represented differently,
17028      only try to prove that the bases are definitely different.
17030    * Aliasing information.
17032    * Alignment information.
17034  The structure describing the relation between two data references is
17035 `data_dependence_relation' and the shorter name for a pointer to such a
17036 structure is `ddr_p'.  This structure contains:
17038    * a pointer to each data reference,
17040    * a tree node `are_dependent' that is set to `chrec_known' if the
17041      analysis has proved that there is no dependence between these two
17042      data references, `chrec_dont_know' if the analysis was not able to
17043      determine any useful result and potentially there could exist a
17044      dependence between these data references, and `are_dependent' is
17045      set to `NULL_TREE' if there exist a dependence relation between the
17046      data references, and the description of this dependence relation is
17047      given in the `subscripts', `dir_vects', and `dist_vects' arrays,
17049    * a boolean that determines whether the dependence relation can be
17050      represented by a classical distance vector,
17052    * an array `subscripts' that contains a description of each
17053      subscript of the data references.  Given two array accesses a
17054      subscript is the tuple composed of the access functions for a given
17055      dimension.  For example, given `A[f1][f2][f3]' and
17056      `B[g1][g2][g3]', there are three subscripts: `(f1, g1), (f2, g2),
17057      (f3, g3)'.
17059    * two arrays `dir_vects' and `dist_vects' that contain classical
17060      representations of the data dependences under the form of
17061      direction and distance dependence vectors,
17063    * an array of loops `loop_nest' that contains the loops to which the
17064      distance and direction vectors refer to.
17066  Several functions for pretty printing the information extracted by the
17067 data dependence analysis are available: `dump_ddrs' prints with a
17068 maximum verbosity the details of a data dependence relations array,
17069 `dump_dist_dir_vectors' prints only the classical distance and
17070 direction vectors for a data dependence relations array, and
17071 `dump_data_references' prints the details of the data references
17072 contained in a data reference array.
17074 \x1f
17075 File: gccint.info,  Node: Lambda,  Next: Omega,  Prev: Dependency analysis,  Up: Loop Analysis and Representation
17077 14.9 Linear loop transformations framework
17078 ==========================================
17080 Lambda is a framework that allows transformations of loops using
17081 non-singular matrix based transformations of the iteration space and
17082 loop bounds. This allows compositions of skewing, scaling, interchange,
17083 and reversal transformations.  These transformations are often used to
17084 improve cache behavior or remove inner loop dependencies to allow
17085 parallelization and vectorization to take place.
17087  To perform these transformations, Lambda requires that the loopnest be
17088 converted into an internal form that can be matrix transformed easily.
17089 To do this conversion, the function `gcc_loopnest_to_lambda_loopnest'
17090 is provided.  If the loop cannot be transformed using lambda, this
17091 function will return NULL.
17093  Once a `lambda_loopnest' is obtained from the conversion function, it
17094 can be transformed by using `lambda_loopnest_transform', which takes a
17095 transformation matrix to apply.  Note that it is up to the caller to
17096 verify that the transformation matrix is legal to apply to the loop
17097 (dependence respecting, etc).  Lambda simply applies whatever matrix it
17098 is told to provide.  It can be extended to make legal matrices out of
17099 any non-singular matrix, but this is not currently implemented.
17100 Legality of a matrix for a given loopnest can be verified using
17101 `lambda_transform_legal_p'.
17103  Given a transformed loopnest, conversion back into gcc IR is done by
17104 `lambda_loopnest_to_gcc_loopnest'.  This function will modify the loops
17105 so that they match the transformed loopnest.
17107 \x1f
17108 File: gccint.info,  Node: Omega,  Prev: Lambda,  Up: Loop Analysis and Representation
17110 14.10 Omega a solver for linear programming problems
17111 ====================================================
17113 The data dependence analysis contains several solvers triggered
17114 sequentially from the less complex ones to the more sophisticated.  For
17115 ensuring the consistency of the results of these solvers, a data
17116 dependence check pass has been implemented based on two different
17117 solvers.  The second method that has been integrated to GCC is based on
17118 the Omega dependence solver, written in the 1990's by William Pugh and
17119 David Wonnacott.  Data dependence tests can be formulated using a
17120 subset of the Presburger arithmetics that can be translated to linear
17121 constraint systems.  These linear constraint systems can then be solved
17122 using the Omega solver.
17124  The Omega solver is using Fourier-Motzkin's algorithm for variable
17125 elimination: a linear constraint system containing `n' variables is
17126 reduced to a linear constraint system with `n-1' variables.  The Omega
17127 solver can also be used for solving other problems that can be
17128 expressed under the form of a system of linear equalities and
17129 inequalities.  The Omega solver is known to have an exponential worst
17130 case, also known under the name of "omega nightmare" in the literature,
17131 but in practice, the omega test is known to be efficient for the common
17132 data dependence tests.
17134  The interface used by the Omega solver for describing the linear
17135 programming problems is described in `omega.h', and the solver is
17136 `omega_solve_problem'.
17138 \x1f
17139 File: gccint.info,  Node: Control Flow,  Next: Loop Analysis and Representation,  Prev: RTL,  Up: Top
17141 15 Control Flow Graph
17142 *********************
17144 A control flow graph (CFG) is a data structure built on top of the
17145 intermediate code representation (the RTL or `tree' instruction stream)
17146 abstracting the control flow behavior of a function that is being
17147 compiled.  The CFG is a directed graph where the vertices represent
17148 basic blocks and edges represent possible transfer of control flow from
17149 one basic block to another.  The data structures used to represent the
17150 control flow graph are defined in `basic-block.h'.
17152 * Menu:
17154 * Basic Blocks::           The definition and representation of basic blocks.
17155 * Edges::                  Types of edges and their representation.
17156 * Profile information::    Representation of frequencies and probabilities.
17157 * Maintaining the CFG::    Keeping the control flow graph and up to date.
17158 * Liveness information::   Using and maintaining liveness information.
17160 \x1f
17161 File: gccint.info,  Node: Basic Blocks,  Next: Edges,  Up: Control Flow
17163 15.1 Basic Blocks
17164 =================
17166 A basic block is a straight-line sequence of code with only one entry
17167 point and only one exit.  In GCC, basic blocks are represented using
17168 the `basic_block' data type.
17170  Two pointer members of the `basic_block' structure are the pointers
17171 `next_bb' and `prev_bb'.  These are used to keep doubly linked chain of
17172 basic blocks in the same order as the underlying instruction stream.
17173 The chain of basic blocks is updated transparently by the provided API
17174 for manipulating the CFG.  The macro `FOR_EACH_BB' can be used to visit
17175 all the basic blocks in lexicographical order.  Dominator traversals
17176 are also possible using `walk_dominator_tree'.  Given two basic blocks
17177 A and B, block A dominates block B if A is _always_ executed before B.
17179  The `BASIC_BLOCK' array contains all basic blocks in an unspecified
17180 order.  Each `basic_block' structure has a field that holds a unique
17181 integer identifier `index' that is the index of the block in the
17182 `BASIC_BLOCK' array.  The total number of basic blocks in the function
17183 is `n_basic_blocks'.  Both the basic block indices and the total number
17184 of basic blocks may vary during the compilation process, as passes
17185 reorder, create, duplicate, and destroy basic blocks.  The index for
17186 any block should never be greater than `last_basic_block'.
17188  Special basic blocks represent possible entry and exit points of a
17189 function.  These blocks are called `ENTRY_BLOCK_PTR' and
17190 `EXIT_BLOCK_PTR'.  These blocks do not contain any code, and are not
17191 elements of the `BASIC_BLOCK' array.  Therefore they have been assigned
17192 unique, negative index numbers.
17194  Each `basic_block' also contains pointers to the first instruction
17195 (the "head") and the last instruction (the "tail") or "end" of the
17196 instruction stream contained in a basic block.  In fact, since the
17197 `basic_block' data type is used to represent blocks in both major
17198 intermediate representations of GCC (`tree' and RTL), there are
17199 pointers to the head and end of a basic block for both representations.
17201  For RTL, these pointers are `rtx head, end'.  In the RTL function
17202 representation, the head pointer always points either to a
17203 `NOTE_INSN_BASIC_BLOCK' or to a `CODE_LABEL', if present.  In the RTL
17204 representation of a function, the instruction stream contains not only
17205 the "real" instructions, but also "notes".  Any function that moves or
17206 duplicates the basic blocks needs to take care of updating of these
17207 notes.  Many of these notes expect that the instruction stream consists
17208 of linear regions, making such updates difficult.   The
17209 `NOTE_INSN_BASIC_BLOCK' note is the only kind of note that may appear
17210 in the instruction stream contained in a basic block.  The instruction
17211 stream of a basic block always follows a `NOTE_INSN_BASIC_BLOCK',  but
17212 zero or more `CODE_LABEL' nodes can precede the block note.   A basic
17213 block ends by control flow instruction or last instruction before
17214 following `CODE_LABEL' or `NOTE_INSN_BASIC_BLOCK'.  A `CODE_LABEL'
17215 cannot appear in the instruction stream of a basic block.
17217  In addition to notes, the jump table vectors are also represented as
17218 "pseudo-instructions" inside the insn stream.  These vectors never
17219 appear in the basic block and should always be placed just after the
17220 table jump instructions referencing them.  After removing the
17221 table-jump it is often difficult to eliminate the code computing the
17222 address and referencing the vector, so cleaning up these vectors is
17223 postponed until after liveness analysis.   Thus the jump table vectors
17224 may appear in the insn stream unreferenced and without any purpose.
17225 Before any edge is made "fall-thru", the existence of such construct in
17226 the way needs to be checked by calling `can_fallthru' function.
17228  For the `tree' representation, the head and end of the basic block are
17229 being pointed to by the `stmt_list' field, but this special `tree'
17230 should never be referenced directly.  Instead, at the tree level
17231 abstract containers and iterators are used to access statements and
17232 expressions in basic blocks.  These iterators are called "block
17233 statement iterators" (BSIs).  Grep for `^bsi' in the various `tree-*'
17234 files.  The following snippet will pretty-print all the statements of
17235 the program in the GIMPLE representation.
17237      FOR_EACH_BB (bb)
17238        {
17239           block_stmt_iterator si;
17241           for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
17242             {
17243                tree stmt = bsi_stmt (si);
17244                print_generic_stmt (stderr, stmt, 0);
17245             }
17246        }
17248 \x1f
17249 File: gccint.info,  Node: Edges,  Next: Profile information,  Prev: Basic Blocks,  Up: Control Flow
17251 15.2 Edges
17252 ==========
17254 Edges represent possible control flow transfers from the end of some
17255 basic block A to the head of another basic block B.  We say that A is a
17256 predecessor of B, and B is a successor of A.  Edges are represented in
17257 GCC with the `edge' data type.  Each `edge' acts as a link between two
17258 basic blocks: the `src' member of an edge points to the predecessor
17259 basic block of the `dest' basic block.  The members `preds' and `succs'
17260 of the `basic_block' data type point to type-safe vectors of edges to
17261 the predecessors and successors of the block.
17263  When walking the edges in an edge vector, "edge iterators" should be
17264 used.  Edge iterators are constructed using the `edge_iterator' data
17265 structure and several methods are available to operate on them:
17267 `ei_start'
17268      This function initializes an `edge_iterator' that points to the
17269      first edge in a vector of edges.
17271 `ei_last'
17272      This function initializes an `edge_iterator' that points to the
17273      last edge in a vector of edges.
17275 `ei_end_p'
17276      This predicate is `true' if an `edge_iterator' represents the last
17277      edge in an edge vector.
17279 `ei_one_before_end_p'
17280      This predicate is `true' if an `edge_iterator' represents the
17281      second last edge in an edge vector.
17283 `ei_next'
17284      This function takes a pointer to an `edge_iterator' and makes it
17285      point to the next edge in the sequence.
17287 `ei_prev'
17288      This function takes a pointer to an `edge_iterator' and makes it
17289      point to the previous edge in the sequence.
17291 `ei_edge'
17292      This function returns the `edge' currently pointed to by an
17293      `edge_iterator'.
17295 `ei_safe_safe'
17296      This function returns the `edge' currently pointed to by an
17297      `edge_iterator', but returns `NULL' if the iterator is pointing at
17298      the end of the sequence.  This function has been provided for
17299      existing code makes the assumption that a `NULL' edge indicates
17300      the end of the sequence.
17303  The convenience macro `FOR_EACH_EDGE' can be used to visit all of the
17304 edges in a sequence of predecessor or successor edges.  It must not be
17305 used when an element might be removed during the traversal, otherwise
17306 elements will be missed.  Here is an example of how to use the macro:
17308      edge e;
17309      edge_iterator ei;
17311      FOR_EACH_EDGE (e, ei, bb->succs)
17312        {
17313           if (e->flags & EDGE_FALLTHRU)
17314             break;
17315        }
17317  There are various reasons why control flow may transfer from one block
17318 to another.  One possibility is that some instruction, for example a
17319 `CODE_LABEL', in a linearized instruction stream just always starts a
17320 new basic block.  In this case a "fall-thru" edge links the basic block
17321 to the first following basic block.  But there are several other
17322 reasons why edges may be created.  The `flags' field of the `edge' data
17323 type is used to store information about the type of edge we are dealing
17324 with.  Each edge is of one of the following types:
17326 _jump_
17327      No type flags are set for edges corresponding to jump instructions.
17328      These edges are used for unconditional or conditional jumps and in
17329      RTL also for table jumps.  They are the easiest to manipulate as
17330      they may be freely redirected when the flow graph is not in SSA
17331      form.
17333 _fall-thru_
17334      Fall-thru edges are present in case where the basic block may
17335      continue execution to the following one without branching.  These
17336      edges have the `EDGE_FALLTHRU' flag set.  Unlike other types of
17337      edges, these edges must come into the basic block immediately
17338      following in the instruction stream.  The function
17339      `force_nonfallthru' is available to insert an unconditional jump
17340      in the case that redirection is needed.  Note that this may
17341      require creation of a new basic block.
17343 _exception handling_
17344      Exception handling edges represent possible control transfers from
17345      a trapping instruction to an exception handler.  The definition of
17346      "trapping" varies.  In C++, only function calls can throw, but for
17347      Java, exceptions like division by zero or segmentation fault are
17348      defined and thus each instruction possibly throwing this kind of
17349      exception needs to be handled as control flow instruction.
17350      Exception edges have the `EDGE_ABNORMAL' and `EDGE_EH' flags set.
17352      When updating the instruction stream it is easy to change possibly
17353      trapping instruction to non-trapping, by simply removing the
17354      exception edge.  The opposite conversion is difficult, but should
17355      not happen anyway.  The edges can be eliminated via
17356      `purge_dead_edges' call.
17358      In the RTL representation, the destination of an exception edge is
17359      specified by `REG_EH_REGION' note attached to the insn.  In case
17360      of a trapping call the `EDGE_ABNORMAL_CALL' flag is set too.  In
17361      the `tree' representation, this extra flag is not set.
17363      In the RTL representation, the predicate `may_trap_p' may be used
17364      to check whether instruction still may trap or not.  For the tree
17365      representation, the `tree_could_trap_p' predicate is available,
17366      but this predicate only checks for possible memory traps, as in
17367      dereferencing an invalid pointer location.
17369 _sibling calls_
17370      Sibling calls or tail calls terminate the function in a
17371      non-standard way and thus an edge to the exit must be present.
17372      `EDGE_SIBCALL' and `EDGE_ABNORMAL' are set in such case.  These
17373      edges only exist in the RTL representation.
17375 _computed jumps_
17376      Computed jumps contain edges to all labels in the function
17377      referenced from the code.  All those edges have `EDGE_ABNORMAL'
17378      flag set.  The edges used to represent computed jumps often cause
17379      compile time performance problems, since functions consisting of
17380      many taken labels and many computed jumps may have _very_ dense
17381      flow graphs, so these edges need to be handled with special care.
17382      During the earlier stages of the compilation process, GCC tries to
17383      avoid such dense flow graphs by factoring computed jumps.  For
17384      example, given the following series of jumps,
17386             goto *x;
17387             [ ... ]
17389             goto *x;
17390             [ ... ]
17392             goto *x;
17393             [ ... ]
17395      factoring the computed jumps results in the following code sequence
17396      which has a much simpler flow graph:
17398             goto y;
17399             [ ... ]
17401             goto y;
17402             [ ... ]
17404             goto y;
17405             [ ... ]
17407           y:
17408             goto *x;
17410      However, the classic problem with this transformation is that it
17411      has a runtime cost in there resulting code: An extra jump.
17412      Therefore, the computed jumps are un-factored in the later passes
17413      of the compiler.  Be aware of that when you work on passes in that
17414      area.  There have been numerous examples already where the compile
17415      time for code with unfactored computed jumps caused some serious
17416      headaches.
17418 _nonlocal goto handlers_
17419      GCC allows nested functions to return into caller using a `goto'
17420      to a label passed to as an argument to the callee.  The labels
17421      passed to nested functions contain special code to cleanup after
17422      function call.  Such sections of code are referred to as "nonlocal
17423      goto receivers".  If a function contains such nonlocal goto
17424      receivers, an edge from the call to the label is created with the
17425      `EDGE_ABNORMAL' and `EDGE_ABNORMAL_CALL' flags set.
17427 _function entry points_
17428      By definition, execution of function starts at basic block 0, so
17429      there is always an edge from the `ENTRY_BLOCK_PTR' to basic block
17430      0.  There is no `tree' representation for alternate entry points at
17431      this moment.  In RTL, alternate entry points are specified by
17432      `CODE_LABEL' with `LABEL_ALTERNATE_NAME' defined.  This feature is
17433      currently used for multiple entry point prologues and is limited
17434      to post-reload passes only.  This can be used by back-ends to emit
17435      alternate prologues for functions called from different contexts.
17436      In future full support for multiple entry functions defined by
17437      Fortran 90 needs to be implemented.
17439 _function exits_
17440      In the pre-reload representation a function terminates after the
17441      last instruction in the insn chain and no explicit return
17442      instructions are used.  This corresponds to the fall-thru edge
17443      into exit block.  After reload, optimal RTL epilogues are used
17444      that use explicit (conditional) return instructions that are
17445      represented by edges with no flags set.
17448 \x1f
17449 File: gccint.info,  Node: Profile information,  Next: Maintaining the CFG,  Prev: Edges,  Up: Control Flow
17451 15.3 Profile information
17452 ========================
17454 In many cases a compiler must make a choice whether to trade speed in
17455 one part of code for speed in another, or to trade code size for code
17456 speed.  In such cases it is useful to know information about how often
17457 some given block will be executed.  That is the purpose for maintaining
17458 profile within the flow graph.  GCC can handle profile information
17459 obtained through "profile feedback", but it can also  estimate branch
17460 probabilities based on statics and heuristics.
17462  The feedback based profile is produced by compiling the program with
17463 instrumentation, executing it on a train run and reading the numbers of
17464 executions of basic blocks and edges back to the compiler while
17465 re-compiling the program to produce the final executable.  This method
17466 provides very accurate information about where a program spends most of
17467 its time on the train run.  Whether it matches the average run of
17468 course depends on the choice of train data set, but several studies
17469 have shown that the behavior of a program usually changes just
17470 marginally over different data sets.
17472  When profile feedback is not available, the compiler may be asked to
17473 attempt to predict the behavior of each branch in the program using a
17474 set of heuristics (see `predict.def' for details) and compute estimated
17475 frequencies of each basic block by propagating the probabilities over
17476 the graph.
17478  Each `basic_block' contains two integer fields to represent profile
17479 information: `frequency' and `count'.  The `frequency' is an estimation
17480 how often is basic block executed within a function.  It is represented
17481 as an integer scaled in the range from 0 to `BB_FREQ_BASE'.  The most
17482 frequently executed basic block in function is initially set to
17483 `BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
17484 During optimization, the frequency of the most frequent basic block can
17485 both decrease (for instance by loop unrolling) or grow (for instance by
17486 cross-jumping optimization), so scaling sometimes has to be performed
17487 multiple times.
17489  The `count' contains hard-counted numbers of execution measured during
17490 training runs and is nonzero only when profile feedback is available.
17491 This value is represented as the host's widest integer (typically a 64
17492 bit integer) of the special type `gcov_type'.
17494  Most optimization passes can use only the frequency information of a
17495 basic block, but a few passes may want to know hard execution counts.
17496 The frequencies should always match the counts after scaling, however
17497 during updating of the profile information numerical error may
17498 accumulate into quite large errors.
17500  Each edge also contains a branch probability field: an integer in the
17501 range from 0 to `REG_BR_PROB_BASE'.  It represents probability of
17502 passing control from the end of the `src' basic block to the `dest'
17503 basic block, i.e. the probability that control will flow along this
17504 edge.   The `EDGE_FREQUENCY' macro is available to compute how
17505 frequently a given edge is taken.  There is a `count' field for each
17506 edge as well, representing same information as for a basic block.
17508  The basic block frequencies are not represented in the instruction
17509 stream, but in the RTL representation the edge frequencies are
17510 represented for conditional jumps (via the `REG_BR_PROB' macro) since
17511 they are used when instructions are output to the assembly file and the
17512 flow graph is no longer maintained.
17514  The probability that control flow arrives via a given edge to its
17515 destination basic block is called "reverse probability" and is not
17516 directly represented, but it may be easily computed from frequencies of
17517 basic blocks.
17519  Updating profile information is a delicate task that can unfortunately
17520 not be easily integrated with the CFG manipulation API.  Many of the
17521 functions and hooks to modify the CFG, such as
17522 `redirect_edge_and_branch', do not have enough information to easily
17523 update the profile, so updating it is in the majority of cases left up
17524 to the caller.  It is difficult to uncover bugs in the profile updating
17525 code, because they manifest themselves only by producing worse code,
17526 and checking profile consistency is not possible because of numeric
17527 error accumulation.  Hence special attention needs to be given to this
17528 issue in each pass that modifies the CFG.
17530  It is important to point out that `REG_BR_PROB_BASE' and
17531 `BB_FREQ_BASE' are both set low enough to be possible to compute second
17532 power of any frequency or probability in the flow graph, it is not
17533 possible to even square the `count' field, as modern CPUs are fast
17534 enough to execute $2^32$ operations quickly.
17536 \x1f
17537 File: gccint.info,  Node: Maintaining the CFG,  Next: Liveness information,  Prev: Profile information,  Up: Control Flow
17539 15.4 Maintaining the CFG
17540 ========================
17542 An important task of each compiler pass is to keep both the control
17543 flow graph and all profile information up-to-date.  Reconstruction of
17544 the control flow graph after each pass is not an option, since it may be
17545 very expensive and lost profile information cannot be reconstructed at
17546 all.
17548  GCC has two major intermediate representations, and both use the
17549 `basic_block' and `edge' data types to represent control flow.  Both
17550 representations share as much of the CFG maintenance code as possible.
17551 For each representation, a set of "hooks" is defined so that each
17552 representation can provide its own implementation of CFG manipulation
17553 routines when necessary.  These hooks are defined in `cfghooks.h'.
17554 There are hooks for almost all common CFG manipulations, including
17555 block splitting and merging, edge redirection and creating and deleting
17556 basic blocks.  These hooks should provide everything you need to
17557 maintain and manipulate the CFG in both the RTL and `tree'
17558 representation.
17560  At the moment, the basic block boundaries are maintained transparently
17561 when modifying instructions, so there rarely is a need to move them
17562 manually (such as in case someone wants to output instruction outside
17563 basic block explicitly).  Often the CFG may be better viewed as
17564 integral part of instruction chain, than structure built on the top of
17565 it.  However, in principle the control flow graph for the `tree'
17566 representation is _not_ an integral part of the representation, in that
17567 a function tree may be expanded without first building a  flow graph
17568 for the `tree' representation at all.  This happens when compiling
17569 without any `tree' optimization enabled.  When the `tree' optimizations
17570 are enabled and the instruction stream is rewritten in SSA form, the
17571 CFG is very tightly coupled with the instruction stream.  In
17572 particular, statement insertion and removal has to be done with care.
17573 In fact, the whole `tree' representation can not be easily used or
17574 maintained without proper maintenance of the CFG simultaneously.
17576  In the RTL representation, each instruction has a `BLOCK_FOR_INSN'
17577 value that represents pointer to the basic block that contains the
17578 instruction.  In the `tree' representation, the function `bb_for_stmt'
17579 returns a pointer to the basic block containing the queried statement.
17581  When changes need to be applied to a function in its `tree'
17582 representation, "block statement iterators" should be used.  These
17583 iterators provide an integrated abstraction of the flow graph and the
17584 instruction stream.  Block statement iterators are constructed using
17585 the `block_stmt_iterator' data structure and several modifier are
17586 available, including the following:
17588 `bsi_start'
17589      This function initializes a `block_stmt_iterator' that points to
17590      the first non-empty statement in a basic block.
17592 `bsi_last'
17593      This function initializes a `block_stmt_iterator' that points to
17594      the last statement in a basic block.
17596 `bsi_end_p'
17597      This predicate is `true' if a `block_stmt_iterator' represents the
17598      end of a basic block.
17600 `bsi_next'
17601      This function takes a `block_stmt_iterator' and makes it point to
17602      its successor.
17604 `bsi_prev'
17605      This function takes a `block_stmt_iterator' and makes it point to
17606      its predecessor.
17608 `bsi_insert_after'
17609      This function inserts a statement after the `block_stmt_iterator'
17610      passed in.  The final parameter determines whether the statement
17611      iterator is updated to point to the newly inserted statement, or
17612      left pointing to the original statement.
17614 `bsi_insert_before'
17615      This function inserts a statement before the `block_stmt_iterator'
17616      passed in.  The final parameter determines whether the statement
17617      iterator is updated to point to the newly inserted statement, or
17618      left pointing to the original  statement.
17620 `bsi_remove'
17621      This function removes the `block_stmt_iterator' passed in and
17622      rechains the remaining statements in a basic block, if any.
17624  In the RTL representation, the macros `BB_HEAD' and `BB_END' may be
17625 used to get the head and end `rtx' of a basic block.  No abstract
17626 iterators are defined for traversing the insn chain, but you can just
17627 use `NEXT_INSN' and `PREV_INSN' instead.  *Note Insns::.
17629  Usually a code manipulating pass simplifies the instruction stream and
17630 the flow of control, possibly eliminating some edges.  This may for
17631 example happen when a conditional jump is replaced with an
17632 unconditional jump, but also when simplifying possibly trapping
17633 instruction to non-trapping while compiling Java.  Updating of edges is
17634 not transparent and each optimization pass is required to do so
17635 manually.  However only few cases occur in practice.  The pass may call
17636 `purge_dead_edges' on a given basic block to remove superfluous edges,
17637 if any.
17639  Another common scenario is redirection of branch instructions, but
17640 this is best modeled as redirection of edges in the control flow graph
17641 and thus use of `redirect_edge_and_branch' is preferred over more low
17642 level functions, such as `redirect_jump' that operate on RTL chain
17643 only.  The CFG hooks defined in `cfghooks.h' should provide the
17644 complete API required for manipulating and maintaining the CFG.
17646  It is also possible that a pass has to insert control flow instruction
17647 into the middle of a basic block, thus creating an entry point in the
17648 middle of the basic block, which is impossible by definition: The block
17649 must be split to make sure it only has one entry point, i.e. the head
17650 of the basic block.  The CFG hook `split_block' may be used when an
17651 instruction in the middle of a basic block has to become the target of
17652 a jump or branch instruction.
17654  For a global optimizer, a common operation is to split edges in the
17655 flow graph and insert instructions on them.  In the RTL representation,
17656 this can be easily done using the `insert_insn_on_edge' function that
17657 emits an instruction "on the edge", caching it for a later
17658 `commit_edge_insertions' call that will take care of moving the
17659 inserted instructions off the edge into the instruction stream
17660 contained in a basic block.  This includes the creation of new basic
17661 blocks where needed.  In the `tree' representation, the equivalent
17662 functions are `bsi_insert_on_edge' which inserts a block statement
17663 iterator on an edge, and `bsi_commit_edge_inserts' which flushes the
17664 instruction to actual instruction stream.
17666  While debugging the optimization pass, a `verify_flow_info' function
17667 may be useful to find bugs in the control flow graph updating code.
17669  Note that at present, the representation of control flow in the `tree'
17670 representation is discarded before expanding to RTL.  Long term the CFG
17671 should be maintained and "expanded" to the RTL representation along
17672 with the function `tree' itself.
17674 \x1f
17675 File: gccint.info,  Node: Liveness information,  Prev: Maintaining the CFG,  Up: Control Flow
17677 15.5 Liveness information
17678 =========================
17680 Liveness information is useful to determine whether some register is
17681 "live" at given point of program, i.e. that it contains a value that
17682 may be used at a later point in the program.  This information is used,
17683 for instance, during register allocation, as the pseudo registers only
17684 need to be assigned to a unique hard register or to a stack slot if
17685 they are live.  The hard registers and stack slots may be freely reused
17686 for other values when a register is dead.
17688  Liveness information is available in the back end starting with
17689 `pass_df_initialize' and ending with `pass_df_finish'.  Three flavors
17690 of live analysis are available: With `LR', it is possible to determine
17691 at any point `P' in the function if the register may be used on some
17692 path from `P' to the end of the function.  With `UR', it is possible to
17693 determine if there is a path from the beginning of the function to `P'
17694 that defines the variable.  `LIVE' is the intersection of the `LR' and
17695 `UR' and a variable is live at `P' if there is both an assignment that
17696 reaches it from the beginning of the function and a use that can be
17697 reached on some path from `P' to the end of the function.
17699  In general `LIVE' is the most useful of the three.  The macros
17700 `DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information.  The
17701 macros take a basic block number and return a bitmap that is indexed by
17702 the register number.  This information is only guaranteed to be up to
17703 date after calls are made to `df_analyze'.  See the file `df-core.c'
17704 for details on using the dataflow.
17706  The liveness information is stored partly in the RTL instruction stream
17707 and partly in the flow graph.  Local information is stored in the
17708 instruction stream: Each instruction may contain `REG_DEAD' notes
17709 representing that the value of a given register is no longer needed, or
17710 `REG_UNUSED' notes representing that the value computed by the
17711 instruction is never used.  The second is useful for instructions
17712 computing multiple values at once.
17714 \x1f
17715 File: gccint.info,  Node: Machine Desc,  Next: Target Macros,  Prev: Loop Analysis and Representation,  Up: Top
17717 16 Machine Descriptions
17718 ***********************
17720 A machine description has two parts: a file of instruction patterns
17721 (`.md' file) and a C header file of macro definitions.
17723  The `.md' file for a target machine contains a pattern for each
17724 instruction that the target machine supports (or at least each
17725 instruction that is worth telling the compiler about).  It may also
17726 contain comments.  A semicolon causes the rest of the line to be a
17727 comment, unless the semicolon is inside a quoted string.
17729  See the next chapter for information on the C header file.
17731 * Menu:
17733 * Overview::            How the machine description is used.
17734 * Patterns::            How to write instruction patterns.
17735 * Example::             An explained example of a `define_insn' pattern.
17736 * RTL Template::        The RTL template defines what insns match a pattern.
17737 * Output Template::     The output template says how to make assembler code
17738                         from such an insn.
17739 * Output Statement::    For more generality, write C code to output
17740                         the assembler code.
17741 * Predicates::          Controlling what kinds of operands can be used
17742                         for an insn.
17743 * Constraints::         Fine-tuning operand selection.
17744 * Standard Names::      Names mark patterns to use for code generation.
17745 * Pattern Ordering::    When the order of patterns makes a difference.
17746 * Dependent Patterns::  Having one pattern may make you need another.
17747 * Jump Patterns::       Special considerations for patterns for jump insns.
17748 * Looping Patterns::    How to define patterns for special looping insns.
17749 * Insn Canonicalizations::Canonicalization of Instructions
17750 * Expander Definitions::Generating a sequence of several RTL insns
17751                         for a standard operation.
17752 * Insn Splitting::      Splitting Instructions into Multiple Instructions.
17753 * Including Patterns::  Including Patterns in Machine Descriptions.
17754 * Peephole Definitions::Defining machine-specific peephole optimizations.
17755 * Insn Attributes::     Specifying the value of attributes for generated insns.
17756 * Conditional Execution::Generating `define_insn' patterns for
17757                          predication.
17758 * Constant Definitions::Defining symbolic constants that can be used in the
17759                         md file.
17760 * Iterators::           Using iterators to generate patterns from a template.
17762 \x1f
17763 File: gccint.info,  Node: Overview,  Next: Patterns,  Up: Machine Desc
17765 16.1 Overview of How the Machine Description is Used
17766 ====================================================
17768 There are three main conversions that happen in the compiler:
17770   1. The front end reads the source code and builds a parse tree.
17772   2. The parse tree is used to generate an RTL insn list based on named
17773      instruction patterns.
17775   3. The insn list is matched against the RTL templates to produce
17776      assembler code.
17779  For the generate pass, only the names of the insns matter, from either
17780 a named `define_insn' or a `define_expand'.  The compiler will choose
17781 the pattern with the right name and apply the operands according to the
17782 documentation later in this chapter, without regard for the RTL
17783 template or operand constraints.  Note that the names the compiler looks
17784 for are hard-coded in the compiler--it will ignore unnamed patterns and
17785 patterns with names it doesn't know about, but if you don't provide a
17786 named pattern it needs, it will abort.
17788  If a `define_insn' is used, the template given is inserted into the
17789 insn list.  If a `define_expand' is used, one of three things happens,
17790 based on the condition logic.  The condition logic may manually create
17791 new insns for the insn list, say via `emit_insn()', and invoke `DONE'.
17792 For certain named patterns, it may invoke `FAIL' to tell the compiler
17793 to use an alternate way of performing that task.  If it invokes neither
17794 `DONE' nor `FAIL', the template given in the pattern is inserted, as if
17795 the `define_expand' were a `define_insn'.
17797  Once the insn list is generated, various optimization passes convert,
17798 replace, and rearrange the insns in the insn list.  This is where the
17799 `define_split' and `define_peephole' patterns get used, for example.
17801  Finally, the insn list's RTL is matched up with the RTL templates in
17802 the `define_insn' patterns, and those patterns are used to emit the
17803 final assembly code.  For this purpose, each named `define_insn' acts
17804 like it's unnamed, since the names are ignored.
17806 \x1f
17807 File: gccint.info,  Node: Patterns,  Next: Example,  Prev: Overview,  Up: Machine Desc
17809 16.2 Everything about Instruction Patterns
17810 ==========================================
17812 Each instruction pattern contains an incomplete RTL expression, with
17813 pieces to be filled in later, operand constraints that restrict how the
17814 pieces can be filled in, and an output pattern or C code to generate
17815 the assembler output, all wrapped up in a `define_insn' expression.
17817  A `define_insn' is an RTL expression containing four or five operands:
17819   1. An optional name.  The presence of a name indicate that this
17820      instruction pattern can perform a certain standard job for the
17821      RTL-generation pass of the compiler.  This pass knows certain
17822      names and will use the instruction patterns with those names, if
17823      the names are defined in the machine description.
17825      The absence of a name is indicated by writing an empty string
17826      where the name should go.  Nameless instruction patterns are never
17827      used for generating RTL code, but they may permit several simpler
17828      insns to be combined later on.
17830      Names that are not thus known and used in RTL-generation have no
17831      effect; they are equivalent to no name at all.
17833      For the purpose of debugging the compiler, you may also specify a
17834      name beginning with the `*' character.  Such a name is used only
17835      for identifying the instruction in RTL dumps; it is entirely
17836      equivalent to having a nameless pattern for all other purposes.
17838   2. The "RTL template" (*note RTL Template::) is a vector of incomplete
17839      RTL expressions which show what the instruction should look like.
17840      It is incomplete because it may contain `match_operand',
17841      `match_operator', and `match_dup' expressions that stand for
17842      operands of the instruction.
17844      If the vector has only one element, that element is the template
17845      for the instruction pattern.  If the vector has multiple elements,
17846      then the instruction pattern is a `parallel' expression containing
17847      the elements described.
17849   3. A condition.  This is a string which contains a C expression that
17850      is the final test to decide whether an insn body matches this
17851      pattern.
17853      For a named pattern, the condition (if present) may not depend on
17854      the data in the insn being matched, but only the
17855      target-machine-type flags.  The compiler needs to test these
17856      conditions during initialization in order to learn exactly which
17857      named instructions are available in a particular run.
17859      For nameless patterns, the condition is applied only when matching
17860      an individual insn, and only after the insn has matched the
17861      pattern's recognition template.  The insn's operands may be found
17862      in the vector `operands'.  For an insn where the condition has
17863      once matched, it can't be used to control register allocation, for
17864      example by excluding certain hard registers or hard register
17865      combinations.
17867   4. The "output template": a string that says how to output matching
17868      insns as assembler code.  `%' in this string specifies where to
17869      substitute the value of an operand.  *Note Output Template::.
17871      When simple substitution isn't general enough, you can specify a
17872      piece of C code to compute the output.  *Note Output Statement::.
17874   5. Optionally, a vector containing the values of attributes for insns
17875      matching this pattern.  *Note Insn Attributes::.
17877 \x1f
17878 File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
17880 16.3 Example of `define_insn'
17881 =============================
17883 Here is an actual example of an instruction pattern, for the
17884 68000/68020.
17886      (define_insn "tstsi"
17887        [(set (cc0)
17888              (match_operand:SI 0 "general_operand" "rm"))]
17889        ""
17890        "*
17891      {
17892        if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
17893          return \"tstl %0\";
17894        return \"cmpl #0,%0\";
17895      }")
17897 This can also be written using braced strings:
17899      (define_insn "tstsi"
17900        [(set (cc0)
17901              (match_operand:SI 0 "general_operand" "rm"))]
17902        ""
17903      {
17904        if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
17905          return "tstl %0";
17906        return "cmpl #0,%0";
17907      })
17909  This is an instruction that sets the condition codes based on the
17910 value of a general operand.  It has no condition, so any insn whose RTL
17911 description has the form shown may be handled according to this
17912 pattern.  The name `tstsi' means "test a `SImode' value" and tells the
17913 RTL generation pass that, when it is necessary to test such a value, an
17914 insn to do so can be constructed using this pattern.
17916  The output control string is a piece of C code which chooses which
17917 output template to return based on the kind of operand and the specific
17918 type of CPU for which code is being generated.
17920  `"rm"' is an operand constraint.  Its meaning is explained below.
17922 \x1f
17923 File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
17925 16.4 RTL Template
17926 =================
17928 The RTL template is used to define which insns match the particular
17929 pattern and how to find their operands.  For named patterns, the RTL
17930 template also says how to construct an insn from specified operands.
17932  Construction involves substituting specified operands into a copy of
17933 the template.  Matching involves determining the values that serve as
17934 the operands in the insn being matched.  Both of these activities are
17935 controlled by special expression types that direct matching and
17936 substitution of the operands.
17938 `(match_operand:M N PREDICATE CONSTRAINT)'
17939      This expression is a placeholder for operand number N of the insn.
17940      When constructing an insn, operand number N will be substituted
17941      at this point.  When matching an insn, whatever appears at this
17942      position in the insn will be taken as operand number N; but it
17943      must satisfy PREDICATE or this instruction pattern will not match
17944      at all.
17946      Operand numbers must be chosen consecutively counting from zero in
17947      each instruction pattern.  There may be only one `match_operand'
17948      expression in the pattern for each operand number.  Usually
17949      operands are numbered in the order of appearance in `match_operand'
17950      expressions.  In the case of a `define_expand', any operand numbers
17951      used only in `match_dup' expressions have higher values than all
17952      other operand numbers.
17954      PREDICATE is a string that is the name of a function that accepts
17955      two arguments, an expression and a machine mode.  *Note
17956      Predicates::.  During matching, the function will be called with
17957      the putative operand as the expression and M as the mode argument
17958      (if M is not specified, `VOIDmode' will be used, which normally
17959      causes PREDICATE to accept any mode).  If it returns zero, this
17960      instruction pattern fails to match.  PREDICATE may be an empty
17961      string; then it means no test is to be done on the operand, so
17962      anything which occurs in this position is valid.
17964      Most of the time, PREDICATE will reject modes other than M--but
17965      not always.  For example, the predicate `address_operand' uses M
17966      as the mode of memory ref that the address should be valid for.
17967      Many predicates accept `const_int' nodes even though their mode is
17968      `VOIDmode'.
17970      CONSTRAINT controls reloading and the choice of the best register
17971      class to use for a value, as explained later (*note Constraints::).
17972      If the constraint would be an empty string, it can be omitted.
17974      People are often unclear on the difference between the constraint
17975      and the predicate.  The predicate helps decide whether a given
17976      insn matches the pattern.  The constraint plays no role in this
17977      decision; instead, it controls various decisions in the case of an
17978      insn which does match.
17980 `(match_scratch:M N CONSTRAINT)'
17981      This expression is also a placeholder for operand number N and
17982      indicates that operand must be a `scratch' or `reg' expression.
17984      When matching patterns, this is equivalent to
17986           (match_operand:M N "scratch_operand" PRED)
17988      but, when generating RTL, it produces a (`scratch':M) expression.
17990      If the last few expressions in a `parallel' are `clobber'
17991      expressions whose operands are either a hard register or
17992      `match_scratch', the combiner can add or delete them when
17993      necessary.  *Note Side Effects::.
17995 `(match_dup N)'
17996      This expression is also a placeholder for operand number N.  It is
17997      used when the operand needs to appear more than once in the insn.
17999      In construction, `match_dup' acts just like `match_operand': the
18000      operand is substituted into the insn being constructed.  But in
18001      matching, `match_dup' behaves differently.  It assumes that operand
18002      number N has already been determined by a `match_operand'
18003      appearing earlier in the recognition template, and it matches only
18004      an identical-looking expression.
18006      Note that `match_dup' should not be used to tell the compiler that
18007      a particular register is being used for two operands (example:
18008      `add' that adds one register to another; the second register is
18009      both an input operand and the output operand).  Use a matching
18010      constraint (*note Simple Constraints::) for those.  `match_dup' is
18011      for the cases where one operand is used in two places in the
18012      template, such as an instruction that computes both a quotient and
18013      a remainder, where the opcode takes two input operands but the RTL
18014      template has to refer to each of those twice; once for the
18015      quotient pattern and once for the remainder pattern.
18017 `(match_operator:M N PREDICATE [OPERANDS...])'
18018      This pattern is a kind of placeholder for a variable RTL expression
18019      code.
18021      When constructing an insn, it stands for an RTL expression whose
18022      expression code is taken from that of operand N, and whose
18023      operands are constructed from the patterns OPERANDS.
18025      When matching an expression, it matches an expression if the
18026      function PREDICATE returns nonzero on that expression _and_ the
18027      patterns OPERANDS match the operands of the expression.
18029      Suppose that the function `commutative_operator' is defined as
18030      follows, to match any expression whose operator is one of the
18031      commutative arithmetic operators of RTL and whose mode is MODE:
18033           int
18034           commutative_integer_operator (x, mode)
18035                rtx x;
18036                enum machine_mode mode;
18037           {
18038             enum rtx_code code = GET_CODE (x);
18039             if (GET_MODE (x) != mode)
18040               return 0;
18041             return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
18042                     || code == EQ || code == NE);
18043           }
18045      Then the following pattern will match any RTL expression consisting
18046      of a commutative operator applied to two general operands:
18048           (match_operator:SI 3 "commutative_operator"
18049             [(match_operand:SI 1 "general_operand" "g")
18050              (match_operand:SI 2 "general_operand" "g")])
18052      Here the vector `[OPERANDS...]' contains two patterns because the
18053      expressions to be matched all contain two operands.
18055      When this pattern does match, the two operands of the commutative
18056      operator are recorded as operands 1 and 2 of the insn.  (This is
18057      done by the two instances of `match_operand'.)  Operand 3 of the
18058      insn will be the entire commutative expression: use `GET_CODE
18059      (operands[3])' to see which commutative operator was used.
18061      The machine mode M of `match_operator' works like that of
18062      `match_operand': it is passed as the second argument to the
18063      predicate function, and that function is solely responsible for
18064      deciding whether the expression to be matched "has" that mode.
18066      When constructing an insn, argument 3 of the gen-function will
18067      specify the operation (i.e. the expression code) for the
18068      expression to be made.  It should be an RTL expression, whose
18069      expression code is copied into a new expression whose operands are
18070      arguments 1 and 2 of the gen-function.  The subexpressions of
18071      argument 3 are not used; only its expression code matters.
18073      When `match_operator' is used in a pattern for matching an insn,
18074      it usually best if the operand number of the `match_operator' is
18075      higher than that of the actual operands of the insn.  This improves
18076      register allocation because the register allocator often looks at
18077      operands 1 and 2 of insns to see if it can do register tying.
18079      There is no way to specify constraints in `match_operator'.  The
18080      operand of the insn which corresponds to the `match_operator'
18081      never has any constraints because it is never reloaded as a whole.
18082      However, if parts of its OPERANDS are matched by `match_operand'
18083      patterns, those parts may have constraints of their own.
18085 `(match_op_dup:M N[OPERANDS...])'
18086      Like `match_dup', except that it applies to operators instead of
18087      operands.  When constructing an insn, operand number N will be
18088      substituted at this point.  But in matching, `match_op_dup' behaves
18089      differently.  It assumes that operand number N has already been
18090      determined by a `match_operator' appearing earlier in the
18091      recognition template, and it matches only an identical-looking
18092      expression.
18094 `(match_parallel N PREDICATE [SUBPAT...])'
18095      This pattern is a placeholder for an insn that consists of a
18096      `parallel' expression with a variable number of elements.  This
18097      expression should only appear at the top level of an insn pattern.
18099      When constructing an insn, operand number N will be substituted at
18100      this point.  When matching an insn, it matches if the body of the
18101      insn is a `parallel' expression with at least as many elements as
18102      the vector of SUBPAT expressions in the `match_parallel', if each
18103      SUBPAT matches the corresponding element of the `parallel', _and_
18104      the function PREDICATE returns nonzero on the `parallel' that is
18105      the body of the insn.  It is the responsibility of the predicate
18106      to validate elements of the `parallel' beyond those listed in the
18107      `match_parallel'.
18109      A typical use of `match_parallel' is to match load and store
18110      multiple expressions, which can contain a variable number of
18111      elements in a `parallel'.  For example,
18113           (define_insn ""
18114             [(match_parallel 0 "load_multiple_operation"
18115                [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
18116                      (match_operand:SI 2 "memory_operand" "m"))
18117                 (use (reg:SI 179))
18118                 (clobber (reg:SI 179))])]
18119             ""
18120             "loadm 0,0,%1,%2")
18122      This example comes from `a29k.md'.  The function
18123      `load_multiple_operation' is defined in `a29k.c' and checks that
18124      subsequent elements in the `parallel' are the same as the `set' in
18125      the pattern, except that they are referencing subsequent registers
18126      and memory locations.
18128      An insn that matches this pattern might look like:
18130           (parallel
18131            [(set (reg:SI 20) (mem:SI (reg:SI 100)))
18132             (use (reg:SI 179))
18133             (clobber (reg:SI 179))
18134             (set (reg:SI 21)
18135                  (mem:SI (plus:SI (reg:SI 100)
18136                                   (const_int 4))))
18137             (set (reg:SI 22)
18138                  (mem:SI (plus:SI (reg:SI 100)
18139                                   (const_int 8))))])
18141 `(match_par_dup N [SUBPAT...])'
18142      Like `match_op_dup', but for `match_parallel' instead of
18143      `match_operator'.
18146 \x1f
18147 File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
18149 16.5 Output Templates and Operand Substitution
18150 ==============================================
18152 The "output template" is a string which specifies how to output the
18153 assembler code for an instruction pattern.  Most of the template is a
18154 fixed string which is output literally.  The character `%' is used to
18155 specify where to substitute an operand; it can also be used to identify
18156 places where different variants of the assembler require different
18157 syntax.
18159  In the simplest case, a `%' followed by a digit N says to output
18160 operand N at that point in the string.
18162  `%' followed by a letter and a digit says to output an operand in an
18163 alternate fashion.  Four letters have standard, built-in meanings
18164 described below.  The machine description macro `PRINT_OPERAND' can
18165 define additional letters with nonstandard meanings.
18167  `%cDIGIT' can be used to substitute an operand that is a constant
18168 value without the syntax that normally indicates an immediate operand.
18170  `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
18171 negated before printing.
18173  `%aDIGIT' can be used to substitute an operand as if it were a memory
18174 reference, with the actual operand treated as the address.  This may be
18175 useful when outputting a "load address" instruction, because often the
18176 assembler syntax for such an instruction requires you to write the
18177 operand as if it were a memory reference.
18179  `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
18181  `%=' outputs a number which is unique to each instruction in the
18182 entire compilation.  This is useful for making local labels to be
18183 referred to more than once in a single template that generates multiple
18184 assembler instructions.
18186  `%' followed by a punctuation character specifies a substitution that
18187 does not use an operand.  Only one case is standard: `%%' outputs a `%'
18188 into the assembler code.  Other nonstandard cases can be defined in the
18189 `PRINT_OPERAND' macro.  You must also define which punctuation
18190 characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
18192  The template may generate multiple assembler instructions.  Write the
18193 text for the instructions, with `\;' between them.
18195  When the RTL contains two operands which are required by constraint to
18196 match each other, the output template must refer only to the
18197 lower-numbered operand.  Matching operands are not always identical,
18198 and the rest of the compiler arranges to put the proper RTL expression
18199 for printing into the lower-numbered operand.
18201  One use of nonstandard letters or punctuation following `%' is to
18202 distinguish between different assembler languages for the same machine;
18203 for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
18204 syntax requires periods in most opcode names, while MIT syntax does
18205 not.  For example, the opcode `movel' in MIT syntax is `move.l' in
18206 Motorola syntax.  The same file of patterns is used for both kinds of
18207 output syntax, but the character sequence `%.' is used in each place
18208 where Motorola syntax wants a period.  The `PRINT_OPERAND' macro for
18209 Motorola syntax defines the sequence to output a period; the macro for
18210 MIT syntax defines it to do nothing.
18212  As a special case, a template consisting of the single character `#'
18213 instructs the compiler to first split the insn, and then output the
18214 resulting instructions separately.  This helps eliminate redundancy in
18215 the output templates.   If you have a `define_insn' that needs to emit
18216 multiple assembler instructions, and there is a matching `define_split'
18217 already defined, then you can simply use `#' as the output template
18218 instead of writing an output template that emits the multiple assembler
18219 instructions.
18221  If the macro `ASSEMBLER_DIALECT' is defined, you can use construct of
18222 the form `{option0|option1|option2}' in the templates.  These describe
18223 multiple variants of assembler language syntax.  *Note Instruction
18224 Output::.
18226 \x1f
18227 File: gccint.info,  Node: Output Statement,  Next: Predicates,  Prev: Output Template,  Up: Machine Desc
18229 16.6 C Statements for Assembler Output
18230 ======================================
18232 Often a single fixed template string cannot produce correct and
18233 efficient assembler code for all the cases that are recognized by a
18234 single instruction pattern.  For example, the opcodes may depend on the
18235 kinds of operands; or some unfortunate combinations of operands may
18236 require extra machine instructions.
18238  If the output control string starts with a `@', then it is actually a
18239 series of templates, each on a separate line.  (Blank lines and leading
18240 spaces and tabs are ignored.)  The templates correspond to the
18241 pattern's constraint alternatives (*note Multi-Alternative::).  For
18242 example, if a target machine has a two-address add instruction `addr'
18243 to add into a register and another `addm' to add a register to memory,
18244 you might write this pattern:
18246      (define_insn "addsi3"
18247        [(set (match_operand:SI 0 "general_operand" "=r,m")
18248              (plus:SI (match_operand:SI 1 "general_operand" "0,0")
18249                       (match_operand:SI 2 "general_operand" "g,r")))]
18250        ""
18251        "@
18252         addr %2,%0
18253         addm %2,%0")
18255  If the output control string starts with a `*', then it is not an
18256 output template but rather a piece of C program that should compute a
18257 template.  It should execute a `return' statement to return the
18258 template-string you want.  Most such templates use C string literals,
18259 which require doublequote characters to delimit them.  To include these
18260 doublequote characters in the string, prefix each one with `\'.
18262  If the output control string is written as a brace block instead of a
18263 double-quoted string, it is automatically assumed to be C code.  In that
18264 case, it is not necessary to put in a leading asterisk, or to escape the
18265 doublequotes surrounding C string literals.
18267  The operands may be found in the array `operands', whose C data type
18268 is `rtx []'.
18270  It is very common to select different ways of generating assembler code
18271 based on whether an immediate operand is within a certain range.  Be
18272 careful when doing this, because the result of `INTVAL' is an integer
18273 on the host machine.  If the host machine has more bits in an `int'
18274 than the target machine has in the mode in which the constant will be
18275 used, then some of the bits you get from `INTVAL' will be superfluous.
18276 For proper results, you must carefully disregard the values of those
18277 bits.
18279  It is possible to output an assembler instruction and then go on to
18280 output or compute more of them, using the subroutine `output_asm_insn'.
18281 This receives two arguments: a template-string and a vector of
18282 operands.  The vector may be `operands', or it may be another array of
18283 `rtx' that you declare locally and initialize yourself.
18285  When an insn pattern has multiple alternatives in its constraints,
18286 often the appearance of the assembler code is determined mostly by
18287 which alternative was matched.  When this is so, the C code can test
18288 the variable `which_alternative', which is the ordinal number of the
18289 alternative that was actually satisfied (0 for the first, 1 for the
18290 second alternative, etc.).
18292  For example, suppose there are two opcodes for storing zero, `clrreg'
18293 for registers and `clrmem' for memory locations.  Here is how a pattern
18294 could use `which_alternative' to choose between them:
18296      (define_insn ""
18297        [(set (match_operand:SI 0 "general_operand" "=r,m")
18298              (const_int 0))]
18299        ""
18300        {
18301        return (which_alternative == 0
18302                ? "clrreg %0" : "clrmem %0");
18303        })
18305  The example above, where the assembler code to generate was _solely_
18306 determined by the alternative, could also have been specified as
18307 follows, having the output control string start with a `@':
18309      (define_insn ""
18310        [(set (match_operand:SI 0 "general_operand" "=r,m")
18311              (const_int 0))]
18312        ""
18313        "@
18314         clrreg %0
18315         clrmem %0")
18317 \x1f
18318 File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Output Statement,  Up: Machine Desc
18320 16.7 Predicates
18321 ===============
18323 A predicate determines whether a `match_operand' or `match_operator'
18324 expression matches, and therefore whether the surrounding instruction
18325 pattern will be used for that combination of operands.  GCC has a
18326 number of machine-independent predicates, and you can define
18327 machine-specific predicates as needed.  By convention, predicates used
18328 with `match_operand' have names that end in `_operand', and those used
18329 with `match_operator' have names that end in `_operator'.
18331  All predicates are Boolean functions (in the mathematical sense) of
18332 two arguments: the RTL expression that is being considered at that
18333 position in the instruction pattern, and the machine mode that the
18334 `match_operand' or `match_operator' specifies.  In this section, the
18335 first argument is called OP and the second argument MODE.  Predicates
18336 can be called from C as ordinary two-argument functions; this can be
18337 useful in output templates or other machine-specific code.
18339  Operand predicates can allow operands that are not actually acceptable
18340 to the hardware, as long as the constraints give reload the ability to
18341 fix them up (*note Constraints::).  However, GCC will usually generate
18342 better code if the predicates specify the requirements of the machine
18343 instructions as closely as possible.  Reload cannot fix up operands
18344 that must be constants ("immediate operands"); you must use a predicate
18345 that allows only constants, or else enforce the requirement in the
18346 extra condition.
18348  Most predicates handle their MODE argument in a uniform manner.  If
18349 MODE is `VOIDmode' (unspecified), then OP can have any mode.  If MODE
18350 is anything else, then OP must have the same mode, unless OP is a
18351 `CONST_INT' or integer `CONST_DOUBLE'.  These RTL expressions always
18352 have `VOIDmode', so it would be counterproductive to check that their
18353 mode matches.  Instead, predicates that accept `CONST_INT' and/or
18354 integer `CONST_DOUBLE' check that the value stored in the constant will
18355 fit in the requested mode.
18357  Predicates with this behavior are called "normal".  `genrecog' can
18358 optimize the instruction recognizer based on knowledge of how normal
18359 predicates treat modes.  It can also diagnose certain kinds of common
18360 errors in the use of normal predicates; for instance, it is almost
18361 always an error to use a normal predicate without specifying a mode.
18363  Predicates that do something different with their MODE argument are
18364 called "special".  The generic predicates `address_operand' and
18365 `pmode_register_operand' are special predicates.  `genrecog' does not
18366 do any optimizations or diagnosis when special predicates are used.
18368 * Menu:
18370 * Machine-Independent Predicates::  Predicates available to all back ends.
18371 * Defining Predicates::             How to write machine-specific predicate
18372                                     functions.
18374 \x1f
18375 File: gccint.info,  Node: Machine-Independent Predicates,  Next: Defining Predicates,  Up: Predicates
18377 16.7.1 Machine-Independent Predicates
18378 -------------------------------------
18380 These are the generic predicates available to all back ends.  They are
18381 defined in `recog.c'.  The first category of predicates allow only
18382 constant, or "immediate", operands.
18384  -- Function: immediate_operand
18385      This predicate allows any sort of constant that fits in MODE.  It
18386      is an appropriate choice for instructions that take operands that
18387      must be constant.
18389  -- Function: const_int_operand
18390      This predicate allows any `CONST_INT' expression that fits in
18391      MODE.  It is an appropriate choice for an immediate operand that
18392      does not allow a symbol or label.
18394  -- Function: const_double_operand
18395      This predicate accepts any `CONST_DOUBLE' expression that has
18396      exactly MODE.  If MODE is `VOIDmode', it will also accept
18397      `CONST_INT'.  It is intended for immediate floating point
18398      constants.
18400 The second category of predicates allow only some kind of machine
18401 register.
18403  -- Function: register_operand
18404      This predicate allows any `REG' or `SUBREG' expression that is
18405      valid for MODE.  It is often suitable for arithmetic instruction
18406      operands on a RISC machine.
18408  -- Function: pmode_register_operand
18409      This is a slight variant on `register_operand' which works around
18410      a limitation in the machine-description reader.
18412           (match_operand N "pmode_register_operand" CONSTRAINT)
18414      means exactly what
18416           (match_operand:P N "register_operand" CONSTRAINT)
18418      would mean, if the machine-description reader accepted `:P' mode
18419      suffixes.  Unfortunately, it cannot, because `Pmode' is an alias
18420      for some other mode, and might vary with machine-specific options.
18421      *Note Misc::.
18423  -- Function: scratch_operand
18424      This predicate allows hard registers and `SCRATCH' expressions,
18425      but not pseudo-registers.  It is used internally by
18426      `match_scratch'; it should not be used directly.
18428 The third category of predicates allow only some kind of memory
18429 reference.
18431  -- Function: memory_operand
18432      This predicate allows any valid reference to a quantity of mode
18433      MODE in memory, as determined by the weak form of
18434      `GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).
18436  -- Function: address_operand
18437      This predicate is a little unusual; it allows any operand that is a
18438      valid expression for the _address_ of a quantity of mode MODE,
18439      again determined by the weak form of `GO_IF_LEGITIMATE_ADDRESS'.
18440      To first order, if `(mem:MODE (EXP))' is acceptable to
18441      `memory_operand', then EXP is acceptable to `address_operand'.
18442      Note that EXP does not necessarily have the mode MODE.
18444  -- Function: indirect_operand
18445      This is a stricter form of `memory_operand' which allows only
18446      memory references with a `general_operand' as the address
18447      expression.  New uses of this predicate are discouraged, because
18448      `general_operand' is very permissive, so it's hard to tell what an
18449      `indirect_operand' does or does not allow.  If a target has
18450      different requirements for memory operands for different
18451      instructions, it is better to define target-specific predicates
18452      which enforce the hardware's requirements explicitly.
18454  -- Function: push_operand
18455      This predicate allows a memory reference suitable for pushing a
18456      value onto the stack.  This will be a `MEM' which refers to
18457      `stack_pointer_rtx', with a side-effect in its address expression
18458      (*note Incdec::); which one is determined by the `STACK_PUSH_CODE'
18459      macro (*note Frame Layout::).
18461  -- Function: pop_operand
18462      This predicate allows a memory reference suitable for popping a
18463      value off the stack.  Again, this will be a `MEM' referring to
18464      `stack_pointer_rtx', with a side-effect in its address expression.
18465      However, this time `STACK_POP_CODE' is expected.
18467 The fourth category of predicates allow some combination of the above
18468 operands.
18470  -- Function: nonmemory_operand
18471      This predicate allows any immediate or register operand valid for
18472      MODE.
18474  -- Function: nonimmediate_operand
18475      This predicate allows any register or memory operand valid for
18476      MODE.
18478  -- Function: general_operand
18479      This predicate allows any immediate, register, or memory operand
18480      valid for MODE.
18482 Finally, there are two generic operator predicates.
18484  -- Function: comparison_operator
18485      This predicate matches any expression which performs an arithmetic
18486      comparison in MODE; that is, `COMPARISON_P' is true for the
18487      expression code.
18489  -- Function: ordered_comparison_operator
18490      This predicate matches any expression which performs an arithmetic
18491      comparison in MODE and whose expression code is valid for integer
18492      modes; that is, the expression code will be one of `eq', `ne',
18493      `lt', `ltu', `le', `leu', `gt', `gtu', `ge', `geu'.
18495 \x1f
18496 File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates
18498 16.7.2 Defining Machine-Specific Predicates
18499 -------------------------------------------
18501 Many machines have requirements for their operands that cannot be
18502 expressed precisely using the generic predicates.  You can define
18503 additional predicates using `define_predicate' and
18504 `define_special_predicate' expressions.  These expressions have three
18505 operands:
18507    * The name of the predicate, as it will be referred to in
18508      `match_operand' or `match_operator' expressions.
18510    * An RTL expression which evaluates to true if the predicate allows
18511      the operand OP, false if it does not.  This expression can only use
18512      the following RTL codes:
18514     `MATCH_OPERAND'
18515           When written inside a predicate expression, a `MATCH_OPERAND'
18516           expression evaluates to true if the predicate it names would
18517           allow OP.  The operand number and constraint are ignored.
18518           Due to limitations in `genrecog', you can only refer to
18519           generic predicates and predicates that have already been
18520           defined.
18522     `MATCH_CODE'
18523           This expression evaluates to true if OP or a specified
18524           subexpression of OP has one of a given list of RTX codes.
18526           The first operand of this expression is a string constant
18527           containing a comma-separated list of RTX code names (in lower
18528           case).  These are the codes for which the `MATCH_CODE' will
18529           be true.
18531           The second operand is a string constant which indicates what
18532           subexpression of OP to examine.  If it is absent or the empty
18533           string, OP itself is examined.  Otherwise, the string constant
18534           must be a sequence of digits and/or lowercase letters.  Each
18535           character indicates a subexpression to extract from the
18536           current expression; for the first character this is OP, for
18537           the second and subsequent characters it is the result of the
18538           previous character.  A digit N extracts `XEXP (E, N)'; a
18539           letter L extracts `XVECEXP (E, 0, N)' where N is the
18540           alphabetic ordinal of L (0 for `a', 1 for 'b', and so on).
18541           The `MATCH_CODE' then examines the RTX code of the
18542           subexpression extracted by the complete string.  It is not
18543           possible to extract components of an `rtvec' that is not at
18544           position 0 within its RTX object.
18546     `MATCH_TEST'
18547           This expression has one operand, a string constant containing
18548           a C expression.  The predicate's arguments, OP and MODE, are
18549           available with those names in the C expression.  The
18550           `MATCH_TEST' evaluates to true if the C expression evaluates
18551           to a nonzero value.  `MATCH_TEST' expressions must not have
18552           side effects.
18554     `AND'
18555     `IOR'
18556     `NOT'
18557     `IF_THEN_ELSE'
18558           The basic `MATCH_' expressions can be combined using these
18559           logical operators, which have the semantics of the C operators
18560           `&&', `||', `!', and `? :' respectively.  As in Common Lisp,
18561           you may give an `AND' or `IOR' expression an arbitrary number
18562           of arguments; this has exactly the same effect as writing a
18563           chain of two-argument `AND' or `IOR' expressions.
18565    * An optional block of C code, which should execute `return true' if
18566      the predicate is found to match and `return false' if it does not.
18567      It must not have any side effects.  The predicate arguments, OP
18568      and MODE, are available with those names.
18570      If a code block is present in a predicate definition, then the RTL
18571      expression must evaluate to true _and_ the code block must execute
18572      `return true' for the predicate to allow the operand.  The RTL
18573      expression is evaluated first; do not re-check anything in the
18574      code block that was checked in the RTL expression.
18576  The program `genrecog' scans `define_predicate' and
18577 `define_special_predicate' expressions to determine which RTX codes are
18578 possibly allowed.  You should always make this explicit in the RTL
18579 predicate expression, using `MATCH_OPERAND' and `MATCH_CODE'.
18581  Here is an example of a simple predicate definition, from the IA64
18582 machine description:
18584      ;; True if OP is a `SYMBOL_REF' which refers to the sdata section.
18585      (define_predicate "small_addr_symbolic_operand"
18586        (and (match_code "symbol_ref")
18587             (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
18589 And here is another, showing the use of the C block.
18591      ;; True if OP is a register operand that is (or could be) a GR reg.
18592      (define_predicate "gr_register_operand"
18593        (match_operand 0 "register_operand")
18594      {
18595        unsigned int regno;
18596        if (GET_CODE (op) == SUBREG)
18597          op = SUBREG_REG (op);
18599        regno = REGNO (op);
18600        return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
18601      })
18603  Predicates written with `define_predicate' automatically include a
18604 test that MODE is `VOIDmode', or OP has the same mode as MODE, or OP is
18605 a `CONST_INT' or `CONST_DOUBLE'.  They do _not_ check specifically for
18606 integer `CONST_DOUBLE', nor do they test that the value of either kind
18607 of constant fits in the requested mode.  This is because
18608 target-specific predicates that take constants usually have to do more
18609 stringent value checks anyway.  If you need the exact same treatment of
18610 `CONST_INT' or `CONST_DOUBLE' that the generic predicates provide, use
18611 a `MATCH_OPERAND' subexpression to call `const_int_operand',
18612 `const_double_operand', or `immediate_operand'.
18614  Predicates written with `define_special_predicate' do not get any
18615 automatic mode checks, and are treated as having special mode handling
18616 by `genrecog'.
18618  The program `genpreds' is responsible for generating code to test
18619 predicates.  It also writes a header file containing function
18620 declarations for all machine-specific predicates.  It is not necessary
18621 to declare these predicates in `CPU-protos.h'.
18623 \x1f
18624 File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc
18626 16.8 Operand Constraints
18627 ========================
18629 Each `match_operand' in an instruction pattern can specify constraints
18630 for the operands allowed.  The constraints allow you to fine-tune
18631 matching within the set of operands allowed by the predicate.
18633  Constraints can say whether an operand may be in a register, and which
18634 kinds of register; whether the operand can be a memory reference, and
18635 which kinds of address; whether the operand may be an immediate
18636 constant, and which possible values it may have.  Constraints can also
18637 require two operands to match.
18639 * Menu:
18641 * Simple Constraints::  Basic use of constraints.
18642 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
18643 * Class Preferences::   Constraints guide which hard register to put things in.
18644 * Modifiers::           More precise control over effects of constraints.
18645 * Disable Insn Alternatives:: Disable insn alternatives using the `enabled' attribute.
18646 * Machine Constraints:: Existing constraints for some particular machines.
18647 * Define Constraints::  How to define machine-specific constraints.
18648 * C Constraint Interface:: How to test constraints from C code.
18650 \x1f
18651 File: gccint.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
18653 16.8.1 Simple Constraints
18654 -------------------------
18656 The simplest kind of constraint is a string full of letters, each of
18657 which describes one kind of operand that is permitted.  Here are the
18658 letters that are allowed:
18660 whitespace
18661      Whitespace characters are ignored and can be inserted at any
18662      position except the first.  This enables each alternative for
18663      different operands to be visually aligned in the machine
18664      description even if they have different number of constraints and
18665      modifiers.
18668      A memory operand is allowed, with any kind of address that the
18669      machine supports in general.  Note that the letter used for the
18670      general memory constraint can be re-defined by a back end using
18671      the `TARGET_MEM_CONSTRAINT' macro.
18674      A memory operand is allowed, but only if the address is
18675      "offsettable".  This means that adding a small integer (actually,
18676      the width in bytes of the operand, as determined by its machine
18677      mode) may be added to the address and the result is also a valid
18678      memory address.
18680      For example, an address which is constant is offsettable; so is an
18681      address that is the sum of a register and a constant (as long as a
18682      slightly larger constant is also within the range of
18683      address-offsets supported by the machine); but an autoincrement or
18684      autodecrement address is not offsettable.  More complicated
18685      indirect/indexed addresses may or may not be offsettable depending
18686      on the other addressing modes that the machine supports.
18688      Note that in an output operand which can be matched by another
18689      operand, the constraint letter `o' is valid only when accompanied
18690      by both `<' (if the target machine has predecrement addressing)
18691      and `>' (if the target machine has preincrement addressing).
18694      A memory operand that is not offsettable.  In other words,
18695      anything that would fit the `m' constraint but not the `o'
18696      constraint.
18699      A memory operand with autodecrement addressing (either
18700      predecrement or postdecrement) is allowed.
18703      A memory operand with autoincrement addressing (either
18704      preincrement or postincrement) is allowed.
18707      A register operand is allowed provided that it is in a general
18708      register.
18711      An immediate integer operand (one with constant value) is allowed.
18712      This includes symbolic constants whose values will be known only at
18713      assembly time or later.
18716      An immediate integer operand with a known numeric value is allowed.
18717      Many systems cannot support assembly-time constants for operands
18718      less than a word wide.  Constraints for these operands should use
18719      `n' rather than `i'.
18721 `I', `J', `K', ... `P'
18722      Other letters in the range `I' through `P' may be defined in a
18723      machine-dependent fashion to permit immediate integer operands with
18724      explicit integer values in specified ranges.  For example, on the
18725      68000, `I' is defined to stand for the range of values 1 to 8.
18726      This is the range permitted as a shift count in the shift
18727      instructions.
18730      An immediate floating operand (expression code `const_double') is
18731      allowed, but only if the target floating point format is the same
18732      as that of the host machine (on which the compiler is running).
18735      An immediate floating operand (expression code `const_double' or
18736      `const_vector') is allowed.
18738 `G', `H'
18739      `G' and `H' may be defined in a machine-dependent fashion to
18740      permit immediate floating operands in particular ranges of values.
18743      An immediate integer operand whose value is not an explicit
18744      integer is allowed.
18746      This might appear strange; if an insn allows a constant operand
18747      with a value not known at compile time, it certainly must allow
18748      any known value.  So why use `s' instead of `i'?  Sometimes it
18749      allows better code to be generated.
18751      For example, on the 68000 in a fullword instruction it is possible
18752      to use an immediate operand; but if the immediate value is between
18753      -128 and 127, better code results from loading the value into a
18754      register and using the register.  This is because the load into
18755      the register can be done with a `moveq' instruction.  We arrange
18756      for this to happen by defining the letter `K' to mean "any integer
18757      outside the range -128 to 127", and then specifying `Ks' in the
18758      operand constraints.
18761      Any register, memory or immediate integer operand is allowed,
18762      except for registers that are not general registers.
18765      Any operand whatsoever is allowed, even if it does not satisfy
18766      `general_operand'.  This is normally used in the constraint of a
18767      `match_scratch' when certain alternatives will not actually
18768      require a scratch register.
18770 `0', `1', `2', ... `9'
18771      An operand that matches the specified operand number is allowed.
18772      If a digit is used together with letters within the same
18773      alternative, the digit should come last.
18775      This number is allowed to be more than a single digit.  If multiple
18776      digits are encountered consecutively, they are interpreted as a
18777      single decimal integer.  There is scant chance for ambiguity,
18778      since to-date it has never been desirable that `10' be interpreted
18779      as matching either operand 1 _or_ operand 0.  Should this be
18780      desired, one can use multiple alternatives instead.
18782      This is called a "matching constraint" and what it really means is
18783      that the assembler has only a single operand that fills two roles
18784      considered separate in the RTL insn.  For example, an add insn has
18785      two input operands and one output operand in the RTL, but on most
18786      CISC machines an add instruction really has only two operands, one
18787      of them an input-output operand:
18789           addl #35,r12
18791      Matching constraints are used in these circumstances.  More
18792      precisely, the two operands that match must include one input-only
18793      operand and one output-only operand.  Moreover, the digit must be a
18794      smaller number than the number of the operand that uses it in the
18795      constraint.
18797      For operands to match in a particular case usually means that they
18798      are identical-looking RTL expressions.  But in a few special cases
18799      specific kinds of dissimilarity are allowed.  For example, `*x' as
18800      an input operand will match `*x++' as an output operand.  For
18801      proper results in such cases, the output template should always
18802      use the output-operand's number when printing the operand.
18805      An operand that is a valid memory address is allowed.  This is for
18806      "load address" and "push address" instructions.
18808      `p' in the constraint must be accompanied by `address_operand' as
18809      the predicate in the `match_operand'.  This predicate interprets
18810      the mode specified in the `match_operand' as the mode of the memory
18811      reference for which the address would be valid.
18813 OTHER-LETTERS
18814      Other letters can be defined in machine-dependent fashion to stand
18815      for particular classes of registers or other arbitrary operand
18816      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
18817      for data, address and floating point registers.
18819  In order to have valid assembler code, each operand must satisfy its
18820 constraint.  But a failure to do so does not prevent the pattern from
18821 applying to an insn.  Instead, it directs the compiler to modify the
18822 code so that the constraint will be satisfied.  Usually this is done by
18823 copying an operand into a register.
18825  Contrast, therefore, the two instruction patterns that follow:
18827      (define_insn ""
18828        [(set (match_operand:SI 0 "general_operand" "=r")
18829              (plus:SI (match_dup 0)
18830                       (match_operand:SI 1 "general_operand" "r")))]
18831        ""
18832        "...")
18834 which has two operands, one of which must appear in two places, and
18836      (define_insn ""
18837        [(set (match_operand:SI 0 "general_operand" "=r")
18838              (plus:SI (match_operand:SI 1 "general_operand" "0")
18839                       (match_operand:SI 2 "general_operand" "r")))]
18840        ""
18841        "...")
18843 which has three operands, two of which are required by a constraint to
18844 be identical.  If we are considering an insn of the form
18846      (insn N PREV NEXT
18847        (set (reg:SI 3)
18848             (plus:SI (reg:SI 6) (reg:SI 109)))
18849        ...)
18851 the first pattern would not apply at all, because this insn does not
18852 contain two identical subexpressions in the right place.  The pattern
18853 would say, "That does not look like an add instruction; try other
18854 patterns".  The second pattern would say, "Yes, that's an add
18855 instruction, but there is something wrong with it".  It would direct
18856 the reload pass of the compiler to generate additional insns to make
18857 the constraint true.  The results might look like this:
18859      (insn N2 PREV N
18860        (set (reg:SI 3) (reg:SI 6))
18861        ...)
18863      (insn N N2 NEXT
18864        (set (reg:SI 3)
18865             (plus:SI (reg:SI 3) (reg:SI 109)))
18866        ...)
18868  It is up to you to make sure that each operand, in each pattern, has
18869 constraints that can handle any RTL expression that could be present for
18870 that operand.  (When multiple alternatives are in use, each pattern
18871 must, for each possible combination of operand expressions, have at
18872 least one alternative which can handle that combination of operands.)
18873 The constraints don't need to _allow_ any possible operand--when this is
18874 the case, they do not constrain--but they must at least point the way to
18875 reloading any possible operand so that it will fit.
18877    * If the constraint accepts whatever operands the predicate permits,
18878      there is no problem: reloading is never necessary for this operand.
18880      For example, an operand whose constraints permit everything except
18881      registers is safe provided its predicate rejects registers.
18883      An operand whose predicate accepts only constant values is safe
18884      provided its constraints include the letter `i'.  If any possible
18885      constant value is accepted, then nothing less than `i' will do; if
18886      the predicate is more selective, then the constraints may also be
18887      more selective.
18889    * Any operand expression can be reloaded by copying it into a
18890      register.  So if an operand's constraints allow some kind of
18891      register, it is certain to be safe.  It need not permit all
18892      classes of registers; the compiler knows how to copy a register
18893      into another register of the proper class in order to make an
18894      instruction valid.
18896    * A nonoffsettable memory reference can be reloaded by copying the
18897      address into a register.  So if the constraint uses the letter
18898      `o', all memory references are taken care of.
18900    * A constant operand can be reloaded by allocating space in memory to
18901      hold it as preinitialized data.  Then the memory reference can be
18902      used in place of the constant.  So if the constraint uses the
18903      letters `o' or `m', constant operands are not a problem.
18905    * If the constraint permits a constant and a pseudo register used in
18906      an insn was not allocated to a hard register and is equivalent to
18907      a constant, the register will be replaced with the constant.  If
18908      the predicate does not permit a constant and the insn is
18909      re-recognized for some reason, the compiler will crash.  Thus the
18910      predicate must always recognize any objects allowed by the
18911      constraint.
18913  If the operand's predicate can recognize registers, but the constraint
18914 does not permit them, it can make the compiler crash.  When this
18915 operand happens to be a register, the reload pass will be stymied,
18916 because it does not know how to copy a register temporarily into memory.
18918  If the predicate accepts a unary operator, the constraint applies to
18919 the operand.  For example, the MIPS processor at ISA level 3 supports an
18920 instruction which adds two registers in `SImode' to produce a `DImode'
18921 result, but only if the registers are correctly sign extended.  This
18922 predicate for the input operands accepts a `sign_extend' of an `SImode'
18923 register.  Write the constraint to indicate the type of register that
18924 is required for the operand of the `sign_extend'.
18926 \x1f
18927 File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
18929 16.8.2 Multiple Alternative Constraints
18930 ---------------------------------------
18932 Sometimes a single instruction has multiple alternative sets of possible
18933 operands.  For example, on the 68000, a logical-or instruction can
18934 combine register or an immediate value into memory, or it can combine
18935 any kind of operand into a register; but it cannot combine one memory
18936 location into another.
18938  These constraints are represented as multiple alternatives.  An
18939 alternative can be described by a series of letters for each operand.
18940 The overall constraint for an operand is made from the letters for this
18941 operand from the first alternative, a comma, the letters for this
18942 operand from the second alternative, a comma, and so on until the last
18943 alternative.  Here is how it is done for fullword logical-or on the
18944 68000:
18946      (define_insn "iorsi3"
18947        [(set (match_operand:SI 0 "general_operand" "=m,d")
18948              (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
18949                      (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
18950        ...)
18952  The first alternative has `m' (memory) for operand 0, `0' for operand
18953 1 (meaning it must match operand 0), and `dKs' for operand 2.  The
18954 second alternative has `d' (data register) for operand 0, `0' for
18955 operand 1, and `dmKs' for operand 2.  The `=' and `%' in the
18956 constraints apply to all the alternatives; their meaning is explained
18957 in the next section (*note Class Preferences::).
18959  If all the operands fit any one alternative, the instruction is valid.
18960 Otherwise, for each alternative, the compiler counts how many
18961 instructions must be added to copy the operands so that that
18962 alternative applies.  The alternative requiring the least copying is
18963 chosen.  If two alternatives need the same amount of copying, the one
18964 that comes first is chosen.  These choices can be altered with the `?'
18965 and `!' characters:
18968      Disparage slightly the alternative that the `?' appears in, as a
18969      choice when no alternative applies exactly.  The compiler regards
18970      this alternative as one unit more costly for each `?' that appears
18971      in it.
18974      Disparage severely the alternative that the `!' appears in.  This
18975      alternative can still be used if it fits without reloading, but if
18976      reloading is needed, some other alternative will be used.
18978  When an insn pattern has multiple alternatives in its constraints,
18979 often the appearance of the assembler code is determined mostly by which
18980 alternative was matched.  When this is so, the C code for writing the
18981 assembler code can use the variable `which_alternative', which is the
18982 ordinal number of the alternative that was actually satisfied (0 for
18983 the first, 1 for the second alternative, etc.).  *Note Output
18984 Statement::.
18986 \x1f
18987 File: gccint.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
18989 16.8.3 Register Class Preferences
18990 ---------------------------------
18992 The operand constraints have another function: they enable the compiler
18993 to decide which kind of hardware register a pseudo register is best
18994 allocated to.  The compiler examines the constraints that apply to the
18995 insns that use the pseudo register, looking for the machine-dependent
18996 letters such as `d' and `a' that specify classes of registers.  The
18997 pseudo register is put in whichever class gets the most "votes".  The
18998 constraint letters `g' and `r' also vote: they vote in favor of a
18999 general register.  The machine description says which registers are
19000 considered general.
19002  Of course, on some machines all registers are equivalent, and no
19003 register classes are defined.  Then none of this complexity is relevant.
19005 \x1f
19006 File: gccint.info,  Node: Modifiers,  Next: Disable Insn Alternatives,  Prev: Class Preferences,  Up: Constraints
19008 16.8.4 Constraint Modifier Characters
19009 -------------------------------------
19011 Here are constraint modifier characters.
19014      Means that this operand is write-only for this instruction: the
19015      previous value is discarded and replaced by output data.
19018      Means that this operand is both read and written by the
19019      instruction.
19021      When the compiler fixes up the operands to satisfy the constraints,
19022      it needs to know which operands are inputs to the instruction and
19023      which are outputs from it.  `=' identifies an output; `+'
19024      identifies an operand that is both input and output; all other
19025      operands are assumed to be input only.
19027      If you specify `=' or `+' in a constraint, you put it in the first
19028      character of the constraint string.
19031      Means (in a particular alternative) that this operand is an
19032      "earlyclobber" operand, which is modified before the instruction is
19033      finished using the input operands.  Therefore, this operand may
19034      not lie in a register that is used as an input operand or as part
19035      of any memory address.
19037      `&' applies only to the alternative in which it is written.  In
19038      constraints with multiple alternatives, sometimes one alternative
19039      requires `&' while others do not.  See, for example, the `movdf'
19040      insn of the 68000.
19042      An input operand can be tied to an earlyclobber operand if its only
19043      use as an input occurs before the early result is written.  Adding
19044      alternatives of this form often allows GCC to produce better code
19045      when only some of the inputs can be affected by the earlyclobber.
19046      See, for example, the `mulsi3' insn of the ARM.
19048      `&' does not obviate the need to write `='.
19051      Declares the instruction to be commutative for this operand and the
19052      following operand.  This means that the compiler may interchange
19053      the two operands if that is the cheapest way to make all operands
19054      fit the constraints.  This is often used in patterns for addition
19055      instructions that really have only two operands: the result must
19056      go in one of the arguments.  Here for example, is how the 68000
19057      halfword-add instruction is defined:
19059           (define_insn "addhi3"
19060             [(set (match_operand:HI 0 "general_operand" "=m,r")
19061                (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
19062                         (match_operand:HI 2 "general_operand" "di,g")))]
19063             ...)
19064      GCC can only handle one commutative pair in an asm; if you use
19065      more, the compiler may fail.  Note that you need not use the
19066      modifier if the two alternatives are strictly identical; this
19067      would only waste time in the reload pass.  The modifier is not
19068      operational after register allocation, so the result of
19069      `define_peephole2' and `define_split's performed after reload
19070      cannot rely on `%' to make the intended insn match.
19073      Says that all following characters, up to the next comma, are to be
19074      ignored as a constraint.  They are significant only for choosing
19075      register preferences.
19078      Says that the following character should be ignored when choosing
19079      register preferences.  `*' has no effect on the meaning of the
19080      constraint as a constraint, and no effect on reloading.
19082      Here is an example: the 68000 has an instruction to sign-extend a
19083      halfword in a data register, and can also sign-extend a value by
19084      copying it into an address register.  While either kind of
19085      register is acceptable, the constraints on an address-register
19086      destination are less strict, so it is best if register allocation
19087      makes an address register its goal.  Therefore, `*' is used so
19088      that the `d' constraint letter (for data register) is ignored when
19089      computing register preferences.
19091           (define_insn "extendhisi2"
19092             [(set (match_operand:SI 0 "general_operand" "=*d,a")
19093                   (sign_extend:SI
19094                    (match_operand:HI 1 "general_operand" "0,g")))]
19095             ...)
19097 \x1f
19098 File: gccint.info,  Node: Machine Constraints,  Next: Define Constraints,  Prev: Disable Insn Alternatives,  Up: Constraints
19100 16.8.5 Constraints for Particular Machines
19101 ------------------------------------------
19103 Whenever possible, you should use the general-purpose constraint letters
19104 in `asm' arguments, since they will convey meaning more readily to
19105 people reading your code.  Failing that, use the constraint letters
19106 that usually have very similar meanings across architectures.  The most
19107 commonly used constraints are `m' and `r' (for memory and
19108 general-purpose registers respectively; *note Simple Constraints::), and
19109 `I', usually the letter indicating the most common immediate-constant
19110 format.
19112  Each architecture defines additional constraints.  These constraints
19113 are used by the compiler itself for instruction generation, as well as
19114 for `asm' statements; therefore, some of the constraints are not
19115 particularly useful for `asm'.  Here is a summary of some of the
19116 machine-dependent constraints available on some particular machines; it
19117 includes both constraints that are useful for `asm' and constraints
19118 that aren't.  The compiler source file mentioned in the table heading
19119 for each architecture is the definitive reference for the meanings of
19120 that architecture's constraints.
19122 _ARM family--`config/arm/arm.h'_
19124     `f'
19125           Floating-point register
19127     `w'
19128           VFP floating-point register
19130     `F'
19131           One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
19132           4.0, 5.0 or 10.0
19134     `G'
19135           Floating-point constant that would satisfy the constraint `F'
19136           if it were negated
19138     `I'
19139           Integer that is valid as an immediate operand in a data
19140           processing instruction.  That is, an integer in the range 0
19141           to 255 rotated by a multiple of 2
19143     `J'
19144           Integer in the range -4095 to 4095
19146     `K'
19147           Integer that satisfies constraint `I' when inverted (ones
19148           complement)
19150     `L'
19151           Integer that satisfies constraint `I' when negated (twos
19152           complement)
19154     `M'
19155           Integer in the range 0 to 32
19157     `Q'
19158           A memory reference where the exact address is in a single
19159           register (``m'' is preferable for `asm' statements)
19161     `R'
19162           An item in the constant pool
19164     `S'
19165           A symbol in the text segment of the current file
19167     `Uv'
19168           A memory reference suitable for VFP load/store insns
19169           (reg+constant offset)
19171     `Uy'
19172           A memory reference suitable for iWMMXt load/store
19173           instructions.
19175     `Uq'
19176           A memory reference suitable for the ARMv4 ldrsb instruction.
19178 _AVR family--`config/avr/constraints.md'_
19180     `l'
19181           Registers from r0 to r15
19183     `a'
19184           Registers from r16 to r23
19186     `d'
19187           Registers from r16 to r31
19189     `w'
19190           Registers from r24 to r31.  These registers can be used in
19191           `adiw' command
19193     `e'
19194           Pointer register (r26-r31)
19196     `b'
19197           Base pointer register (r28-r31)
19199     `q'
19200           Stack pointer register (SPH:SPL)
19202     `t'
19203           Temporary register r0
19205     `x'
19206           Register pair X (r27:r26)
19208     `y'
19209           Register pair Y (r29:r28)
19211     `z'
19212           Register pair Z (r31:r30)
19214     `I'
19215           Constant greater than -1, less than 64
19217     `J'
19218           Constant greater than -64, less than 1
19220     `K'
19221           Constant integer 2
19223     `L'
19224           Constant integer 0
19226     `M'
19227           Constant that fits in 8 bits
19229     `N'
19230           Constant integer -1
19232     `O'
19233           Constant integer 8, 16, or 24
19235     `P'
19236           Constant integer 1
19238     `G'
19239           A floating point constant 0.0
19241     `R'
19242           Integer constant in the range -6 ... 5.
19244     `Q'
19245           A memory address based on Y or Z pointer with displacement.
19247 _CRX Architecture--`config/crx/crx.h'_
19249     `b'
19250           Registers from r0 to r14 (registers without stack pointer)
19252     `l'
19253           Register r16 (64-bit accumulator lo register)
19255     `h'
19256           Register r17 (64-bit accumulator hi register)
19258     `k'
19259           Register pair r16-r17. (64-bit accumulator lo-hi pair)
19261     `I'
19262           Constant that fits in 3 bits
19264     `J'
19265           Constant that fits in 4 bits
19267     `K'
19268           Constant that fits in 5 bits
19270     `L'
19271           Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
19273     `G'
19274           Floating point constant that is legal for store immediate
19276 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
19278     `a'
19279           General register 1
19281     `f'
19282           Floating point register
19284     `q'
19285           Shift amount register
19287     `x'
19288           Floating point register (deprecated)
19290     `y'
19291           Upper floating point register (32-bit), floating point
19292           register (64-bit)
19294     `Z'
19295           Any register
19297     `I'
19298           Signed 11-bit integer constant
19300     `J'
19301           Signed 14-bit integer constant
19303     `K'
19304           Integer constant that can be deposited with a `zdepi'
19305           instruction
19307     `L'
19308           Signed 5-bit integer constant
19310     `M'
19311           Integer constant 0
19313     `N'
19314           Integer constant that can be loaded with a `ldil' instruction
19316     `O'
19317           Integer constant whose value plus one is a power of 2
19319     `P'
19320           Integer constant that can be used for `and' operations in
19321           `depi' and `extru' instructions
19323     `S'
19324           Integer constant 31
19326     `U'
19327           Integer constant 63
19329     `G'
19330           Floating-point constant 0.0
19332     `A'
19333           A `lo_sum' data-linkage-table memory operand
19335     `Q'
19336           A memory operand that can be used as the destination operand
19337           of an integer store instruction
19339     `R'
19340           A scaled or unscaled indexed memory operand
19342     `T'
19343           A memory operand for floating-point loads and stores
19345     `W'
19346           A register indirect memory operand
19348 _picoChip family--`picochip.h'_
19350     `k'
19351           Stack register.
19353     `f'
19354           Pointer register.  A register which can be used to access
19355           memory without supplying an offset.  Any other register can
19356           be used to access memory, but will need a constant offset.
19357           In the case of the offset being zero, it is more efficient to
19358           use a pointer register, since this reduces code size.
19360     `t'
19361           A twin register.  A register which may be paired with an
19362           adjacent register to create a 32-bit register.
19364     `a'
19365           Any absolute memory address (e.g., symbolic constant, symbolic
19366           constant + offset).
19368     `I'
19369           4-bit signed integer.
19371     `J'
19372           4-bit unsigned integer.
19374     `K'
19375           8-bit signed integer.
19377     `M'
19378           Any constant whose absolute value is no greater than 4-bits.
19380     `N'
19381           10-bit signed integer
19383     `O'
19384           16-bit signed integer.
19387 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
19389     `b'
19390           Address base register
19392     `d'
19393           Floating point register (containing 64-bit value)
19395     `f'
19396           Floating point register (containing 32-bit value)
19398     `v'
19399           Altivec vector register
19401     `wd'
19402           VSX vector register to hold vector double data
19404     `wf'
19405           VSX vector register to hold vector float data
19407     `ws'
19408           VSX vector register to hold scalar float data
19410     `wa'
19411           Any VSX register
19413     `h'
19414           `MQ', `CTR', or `LINK' register
19416     `q'
19417           `MQ' register
19419     `c'
19420           `CTR' register
19422     `l'
19423           `LINK' register
19425     `x'
19426           `CR' register (condition register) number 0
19428     `y'
19429           `CR' register (condition register)
19431     `z'
19432           `FPMEM' stack memory for FPR-GPR transfers
19434     `I'
19435           Signed 16-bit constant
19437     `J'
19438           Unsigned 16-bit constant shifted left 16 bits (use `L'
19439           instead for `SImode' constants)
19441     `K'
19442           Unsigned 16-bit constant
19444     `L'
19445           Signed 16-bit constant shifted left 16 bits
19447     `M'
19448           Constant larger than 31
19450     `N'
19451           Exact power of 2
19453     `O'
19454           Zero
19456     `P'
19457           Constant whose negation is a signed 16-bit constant
19459     `G'
19460           Floating point constant that can be loaded into a register
19461           with one instruction per word
19463     `H'
19464           Integer/Floating point constant that can be loaded into a
19465           register using three instructions
19467     `m'
19468           Memory operand.  Note that on PowerPC targets, `m' can include
19469           addresses that update the base register.  It is therefore
19470           only safe to use `m' in an `asm' statement if that `asm'
19471           statement accesses the operand exactly once.  The `asm'
19472           statement must also use `%U<OPNO>' as a placeholder for the
19473           "update" flag in the corresponding load or store instruction.
19474           For example:
19476                asm ("st%U0 %1,%0" : "=m" (mem) : "r" (val));
19478           is correct but:
19480                asm ("st %1,%0" : "=m" (mem) : "r" (val));
19482           is not.  Use `es' rather than `m' if you don't want the base
19483           register to be updated.
19485     `es'
19486           A "stable" memory operand; that is, one which does not
19487           include any automodification of the base register.  Unlike
19488           `m', this constraint can be used in `asm' statements that
19489           might access the operand several times, or that might not
19490           access it at all.
19492     `Q'
19493           Memory operand that is an offset from a register (it is
19494           usually better to use `m' or `es' in `asm' statements)
19496     `Z'
19497           Memory operand that is an indexed or indirect from a register
19498           (it is usually better to use `m' or `es' in `asm' statements)
19500     `R'
19501           AIX TOC entry
19503     `a'
19504           Address operand that is an indexed or indirect from a
19505           register (`p' is preferable for `asm' statements)
19507     `S'
19508           Constant suitable as a 64-bit mask operand
19510     `T'
19511           Constant suitable as a 32-bit mask operand
19513     `U'
19514           System V Release 4 small data area reference
19516     `t'
19517           AND masks that can be performed by two rldic{l, r}
19518           instructions
19520     `W'
19521           Vector constant that does not require memory
19523     `j'
19524           Vector constant that is all zeros.
19527 _Intel 386--`config/i386/constraints.md'_
19529     `R'
19530           Legacy register--the eight integer registers available on all
19531           i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
19533     `q'
19534           Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
19535           `c', and `d'; in 64-bit mode, any integer register.
19537     `Q'
19538           Any register accessible as `Rh': `a', `b', `c', and `d'.
19540     `l'
19541           Any register that can be used as the index in a base+index
19542           memory access: that is, any general register except the stack
19543           pointer.
19545     `a'
19546           The `a' register.
19548     `b'
19549           The `b' register.
19551     `c'
19552           The `c' register.
19554     `d'
19555           The `d' register.
19557     `S'
19558           The `si' register.
19560     `D'
19561           The `di' register.
19563     `A'
19564           The `a' and `d' registers, as a pair (for instructions that
19565           return half the result in one and half in the other).
19567     `f'
19568           Any 80387 floating-point (stack) register.
19570     `t'
19571           Top of 80387 floating-point stack (`%st(0)').
19573     `u'
19574           Second from top of 80387 floating-point stack (`%st(1)').
19576     `y'
19577           Any MMX register.
19579     `x'
19580           Any SSE register.
19582     `Yz'
19583           First SSE register (`%xmm0').
19585     `Y2'
19586           Any SSE register, when SSE2 is enabled.
19588     `Yi'
19589           Any SSE register, when SSE2 and inter-unit moves are enabled.
19591     `Ym'
19592           Any MMX register, when inter-unit moves are enabled.
19594     `I'
19595           Integer constant in the range 0 ... 31, for 32-bit shifts.
19597     `J'
19598           Integer constant in the range 0 ... 63, for 64-bit shifts.
19600     `K'
19601           Signed 8-bit integer constant.
19603     `L'
19604           `0xFF' or `0xFFFF', for andsi as a zero-extending move.
19606     `M'
19607           0, 1, 2, or 3 (shifts for the `lea' instruction).
19609     `N'
19610           Unsigned 8-bit integer constant (for `in' and `out'
19611           instructions).
19613     `O'
19614           Integer constant in the range 0 ... 127, for 128-bit shifts.
19616     `G'
19617           Standard 80387 floating point constant.
19619     `C'
19620           Standard SSE floating point constant.
19622     `e'
19623           32-bit signed integer constant, or a symbolic reference known
19624           to fit that range (for immediate operands in sign-extending
19625           x86-64 instructions).
19627     `Z'
19628           32-bit unsigned integer constant, or a symbolic reference
19629           known to fit that range (for immediate operands in
19630           zero-extending x86-64 instructions).
19633 _Intel IA-64--`config/ia64/ia64.h'_
19635     `a'
19636           General register `r0' to `r3' for `addl' instruction
19638     `b'
19639           Branch register
19641     `c'
19642           Predicate register (`c' as in "conditional")
19644     `d'
19645           Application register residing in M-unit
19647     `e'
19648           Application register residing in I-unit
19650     `f'
19651           Floating-point register
19653     `m'
19654           Memory operand.  Remember that `m' allows postincrement and
19655           postdecrement which require printing with `%Pn' on IA-64.
19656           Use `S' to disallow postincrement and postdecrement.
19658     `G'
19659           Floating-point constant 0.0 or 1.0
19661     `I'
19662           14-bit signed integer constant
19664     `J'
19665           22-bit signed integer constant
19667     `K'
19668           8-bit signed integer constant for logical instructions
19670     `L'
19671           8-bit adjusted signed integer constant for compare pseudo-ops
19673     `M'
19674           6-bit unsigned integer constant for shift counts
19676     `N'
19677           9-bit signed integer constant for load and store
19678           postincrements
19680     `O'
19681           The constant zero
19683     `P'
19684           0 or -1 for `dep' instruction
19686     `Q'
19687           Non-volatile memory for floating-point loads and stores
19689     `R'
19690           Integer constant in the range 1 to 4 for `shladd' instruction
19692     `S'
19693           Memory operand except postincrement and postdecrement
19695 _FRV--`config/frv/frv.h'_
19697     `a'
19698           Register in the class `ACC_REGS' (`acc0' to `acc7').
19700     `b'
19701           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
19703     `c'
19704           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
19705           to `icc3').
19707     `d'
19708           Register in the class `GPR_REGS' (`gr0' to `gr63').
19710     `e'
19711           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
19712           registers are excluded not in the class but through the use
19713           of a machine mode larger than 4 bytes.
19715     `f'
19716           Register in the class `FPR_REGS' (`fr0' to `fr63').
19718     `h'
19719           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
19720           registers are excluded not in the class but through the use
19721           of a machine mode larger than 4 bytes.
19723     `l'
19724           Register in the class `LR_REG' (the `lr' register).
19726     `q'
19727           Register in the class `QUAD_REGS' (`gr2' to `gr63').
19728           Register numbers not divisible by 4 are excluded not in the
19729           class but through the use of a machine mode larger than 8
19730           bytes.
19732     `t'
19733           Register in the class `ICC_REGS' (`icc0' to `icc3').
19735     `u'
19736           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
19738     `v'
19739           Register in the class `ICR_REGS' (`cc4' to `cc7').
19741     `w'
19742           Register in the class `FCR_REGS' (`cc0' to `cc3').
19744     `x'
19745           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
19746           Register numbers not divisible by 4 are excluded not in the
19747           class but through the use of a machine mode larger than 8
19748           bytes.
19750     `z'
19751           Register in the class `SPR_REGS' (`lcr' and `lr').
19753     `A'
19754           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
19756     `B'
19757           Register in the class `ACCG_REGS' (`accg0' to `accg7').
19759     `C'
19760           Register in the class `CR_REGS' (`cc0' to `cc7').
19762     `G'
19763           Floating point constant zero
19765     `I'
19766           6-bit signed integer constant
19768     `J'
19769           10-bit signed integer constant
19771     `L'
19772           16-bit signed integer constant
19774     `M'
19775           16-bit unsigned integer constant
19777     `N'
19778           12-bit signed integer constant that is negative--i.e. in the
19779           range of -2048 to -1
19781     `O'
19782           Constant zero
19784     `P'
19785           12-bit signed integer constant that is greater than
19786           zero--i.e. in the range of 1 to 2047.
19789 _Blackfin family--`config/bfin/constraints.md'_
19791     `a'
19792           P register
19794     `d'
19795           D register
19797     `z'
19798           A call clobbered P register.
19800     `qN'
19801           A single register.  If N is in the range 0 to 7, the
19802           corresponding D register.  If it is `A', then the register P0.
19804     `D'
19805           Even-numbered D register
19807     `W'
19808           Odd-numbered D register
19810     `e'
19811           Accumulator register.
19813     `A'
19814           Even-numbered accumulator register.
19816     `B'
19817           Odd-numbered accumulator register.
19819     `b'
19820           I register
19822     `v'
19823           B register
19825     `f'
19826           M register
19828     `c'
19829           Registers used for circular buffering, i.e. I, B, or L
19830           registers.
19832     `C'
19833           The CC register.
19835     `t'
19836           LT0 or LT1.
19838     `k'
19839           LC0 or LC1.
19841     `u'
19842           LB0 or LB1.
19844     `x'
19845           Any D, P, B, M, I or L register.
19847     `y'
19848           Additional registers typically used only in prologues and
19849           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
19850           USP.
19852     `w'
19853           Any register except accumulators or CC.
19855     `Ksh'
19856           Signed 16 bit integer (in the range -32768 to 32767)
19858     `Kuh'
19859           Unsigned 16 bit integer (in the range 0 to 65535)
19861     `Ks7'
19862           Signed 7 bit integer (in the range -64 to 63)
19864     `Ku7'
19865           Unsigned 7 bit integer (in the range 0 to 127)
19867     `Ku5'
19868           Unsigned 5 bit integer (in the range 0 to 31)
19870     `Ks4'
19871           Signed 4 bit integer (in the range -8 to 7)
19873     `Ks3'
19874           Signed 3 bit integer (in the range -3 to 4)
19876     `Ku3'
19877           Unsigned 3 bit integer (in the range 0 to 7)
19879     `PN'
19880           Constant N, where N is a single-digit constant in the range 0
19881           to 4.
19883     `PA'
19884           An integer equal to one of the MACFLAG_XXX constants that is
19885           suitable for use with either accumulator.
19887     `PB'
19888           An integer equal to one of the MACFLAG_XXX constants that is
19889           suitable for use only with accumulator A1.
19891     `M1'
19892           Constant 255.
19894     `M2'
19895           Constant 65535.
19897     `J'
19898           An integer constant with exactly a single bit set.
19900     `L'
19901           An integer constant with all bits set except exactly one.
19903     `H'
19905     `Q'
19906           Any SYMBOL_REF.
19908 _M32C--`config/m32c/m32c.c'_
19910     `Rsp'
19911     `Rfb'
19912     `Rsb'
19913           `$sp', `$fb', `$sb'.
19915     `Rcr'
19916           Any control register, when they're 16 bits wide (nothing if
19917           control registers are 24 bits wide)
19919     `Rcl'
19920           Any control register, when they're 24 bits wide.
19922     `R0w'
19923     `R1w'
19924     `R2w'
19925     `R3w'
19926           $r0, $r1, $r2, $r3.
19928     `R02'
19929           $r0 or $r2, or $r2r0 for 32 bit values.
19931     `R13'
19932           $r1 or $r3, or $r3r1 for 32 bit values.
19934     `Rdi'
19935           A register that can hold a 64 bit value.
19937     `Rhl'
19938           $r0 or $r1 (registers with addressable high/low bytes)
19940     `R23'
19941           $r2 or $r3
19943     `Raa'
19944           Address registers
19946     `Raw'
19947           Address registers when they're 16 bits wide.
19949     `Ral'
19950           Address registers when they're 24 bits wide.
19952     `Rqi'
19953           Registers that can hold QI values.
19955     `Rad'
19956           Registers that can be used with displacements ($a0, $a1, $sb).
19958     `Rsi'
19959           Registers that can hold 32 bit values.
19961     `Rhi'
19962           Registers that can hold 16 bit values.
19964     `Rhc'
19965           Registers chat can hold 16 bit values, including all control
19966           registers.
19968     `Rra'
19969           $r0 through R1, plus $a0 and $a1.
19971     `Rfl'
19972           The flags register.
19974     `Rmm'
19975           The memory-based pseudo-registers $mem0 through $mem15.
19977     `Rpi'
19978           Registers that can hold pointers (16 bit registers for r8c,
19979           m16c; 24 bit registers for m32cm, m32c).
19981     `Rpa'
19982           Matches multiple registers in a PARALLEL to form a larger
19983           register.  Used to match function return values.
19985     `Is3'
19986           -8 ... 7
19988     `IS1'
19989           -128 ... 127
19991     `IS2'
19992           -32768 ... 32767
19994     `IU2'
19995           0 ... 65535
19997     `In4'
19998           -8 ... -1 or 1 ... 8
20000     `In5'
20001           -16 ... -1 or 1 ... 16
20003     `In6'
20004           -32 ... -1 or 1 ... 32
20006     `IM2'
20007           -65536 ... -1
20009     `Ilb'
20010           An 8 bit value with exactly one bit set.
20012     `Ilw'
20013           A 16 bit value with exactly one bit set.
20015     `Sd'
20016           The common src/dest memory addressing modes.
20018     `Sa'
20019           Memory addressed using $a0 or $a1.
20021     `Si'
20022           Memory addressed with immediate addresses.
20024     `Ss'
20025           Memory addressed using the stack pointer ($sp).
20027     `Sf'
20028           Memory addressed using the frame base register ($fb).
20030     `Ss'
20031           Memory addressed using the small base register ($sb).
20033     `S1'
20034           $r1h
20036 _MeP--`config/mep/constraints.md'_
20038     `a'
20039           The $sp register.
20041     `b'
20042           The $tp register.
20044     `c'
20045           Any control register.
20047     `d'
20048           Either the $hi or the $lo register.
20050     `em'
20051           Coprocessor registers that can be directly loaded ($c0-$c15).
20053     `ex'
20054           Coprocessor registers that can be moved to each other.
20056     `er'
20057           Coprocessor registers that can be moved to core registers.
20059     `h'
20060           The $hi register.
20062     `j'
20063           The $rpc register.
20065     `l'
20066           The $lo register.
20068     `t'
20069           Registers which can be used in $tp-relative addressing.
20071     `v'
20072           The $gp register.
20074     `x'
20075           The coprocessor registers.
20077     `y'
20078           The coprocessor control registers.
20080     `z'
20081           The $0 register.
20083     `A'
20084           User-defined register set A.
20086     `B'
20087           User-defined register set B.
20089     `C'
20090           User-defined register set C.
20092     `D'
20093           User-defined register set D.
20095     `I'
20096           Offsets for $gp-rel addressing.
20098     `J'
20099           Constants that can be used directly with boolean insns.
20101     `K'
20102           Constants that can be moved directly to registers.
20104     `L'
20105           Small constants that can be added to registers.
20107     `M'
20108           Long shift counts.
20110     `N'
20111           Small constants that can be compared to registers.
20113     `O'
20114           Constants that can be loaded into the top half of registers.
20116     `S'
20117           Signed 8-bit immediates.
20119     `T'
20120           Symbols encoded for $tp-rel or $gp-rel addressing.
20122     `U'
20123           Non-constant addresses for loading/saving coprocessor
20124           registers.
20126     `W'
20127           The top half of a symbol's value.
20129     `Y'
20130           A register indirect address without offset.
20132     `Z'
20133           Symbolic references to the control bus.
20136 _MIPS--`config/mips/constraints.md'_
20138     `d'
20139           An address register.  This is equivalent to `r' unless
20140           generating MIPS16 code.
20142     `f'
20143           A floating-point register (if available).
20145     `h'
20146           Formerly the `hi' register.  This constraint is no longer
20147           supported.
20149     `l'
20150           The `lo' register.  Use this register to store values that are
20151           no bigger than a word.
20153     `x'
20154           The concatenated `hi' and `lo' registers.  Use this register
20155           to store doubleword values.
20157     `c'
20158           A register suitable for use in an indirect jump.  This will
20159           always be `$25' for `-mabicalls'.
20161     `v'
20162           Register `$3'.  Do not use this constraint in new code; it is
20163           retained only for compatibility with glibc.
20165     `y'
20166           Equivalent to `r'; retained for backwards compatibility.
20168     `z'
20169           A floating-point condition code register.
20171     `I'
20172           A signed 16-bit constant (for arithmetic instructions).
20174     `J'
20175           Integer zero.
20177     `K'
20178           An unsigned 16-bit constant (for logic instructions).
20180     `L'
20181           A signed 32-bit constant in which the lower 16 bits are zero.
20182           Such constants can be loaded using `lui'.
20184     `M'
20185           A constant that cannot be loaded using `lui', `addiu' or
20186           `ori'.
20188     `N'
20189           A constant in the range -65535 to -1 (inclusive).
20191     `O'
20192           A signed 15-bit constant.
20194     `P'
20195           A constant in the range 1 to 65535 (inclusive).
20197     `G'
20198           Floating-point zero.
20200     `R'
20201           An address that can be used in a non-macro load or store.
20203 _Motorola 680x0--`config/m68k/constraints.md'_
20205     `a'
20206           Address register
20208     `d'
20209           Data register
20211     `f'
20212           68881 floating-point register, if available
20214     `I'
20215           Integer in the range 1 to 8
20217     `J'
20218           16-bit signed number
20220     `K'
20221           Signed number whose magnitude is greater than 0x80
20223     `L'
20224           Integer in the range -8 to -1
20226     `M'
20227           Signed number whose magnitude is greater than 0x100
20229     `N'
20230           Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
20232     `O'
20233           16 (for rotate using swap)
20235     `P'
20236           Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
20238     `R'
20239           Numbers that mov3q can handle
20241     `G'
20242           Floating point constant that is not a 68881 constant
20244     `S'
20245           Operands that satisfy 'm' when -mpcrel is in effect
20247     `T'
20248           Operands that satisfy 's' when -mpcrel is not in effect
20250     `Q'
20251           Address register indirect addressing mode
20253     `U'
20254           Register offset addressing
20256     `W'
20257           const_call_operand
20259     `Cs'
20260           symbol_ref or const
20262     `Ci'
20263           const_int
20265     `C0'
20266           const_int 0
20268     `Cj'
20269           Range of signed numbers that don't fit in 16 bits
20271     `Cmvq'
20272           Integers valid for mvq
20274     `Capsw'
20275           Integers valid for a moveq followed by a swap
20277     `Cmvz'
20278           Integers valid for mvz
20280     `Cmvs'
20281           Integers valid for mvs
20283     `Ap'
20284           push_operand
20286     `Ac'
20287           Non-register operands allowed in clr
20290 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
20292     `a'
20293           Register `a'
20295     `b'
20296           Register `b'
20298     `d'
20299           Register `d'
20301     `q'
20302           An 8-bit register
20304     `t'
20305           Temporary soft register _.tmp
20307     `u'
20308           A soft register _.d1 to _.d31
20310     `w'
20311           Stack pointer register
20313     `x'
20314           Register `x'
20316     `y'
20317           Register `y'
20319     `z'
20320           Pseudo register `z' (replaced by `x' or `y' at the end)
20322     `A'
20323           An address register: x, y or z
20325     `B'
20326           An address register: x or y
20328     `D'
20329           Register pair (x:d) to form a 32-bit value
20331     `L'
20332           Constants in the range -65536 to 65535
20334     `M'
20335           Constants whose 16-bit low part is zero
20337     `N'
20338           Constant integer 1 or -1
20340     `O'
20341           Constant integer 16
20343     `P'
20344           Constants in the range -8 to 2
20347 _Moxie--`config/moxie/constraints.md'_
20349     `A'
20350           An absolute address
20352     `B'
20353           An offset address
20355     `W'
20356           A register indirect memory operand
20358     `I'
20359           A constant in the range of 0 to 255.
20361     `N'
20362           A constant in the range of 0 to -255.
20365 _RX--`config/rx/constraints.md'_
20367     `Q'
20368           An address which does not involve register indirect
20369           addressing or pre/post increment/decrement addressing.
20371     `Symbol'
20372           A symbol reference.
20374     `Int08'
20375           A constant in the range -256 to 255, inclusive.
20377     `Sint08'
20378           A constant in the range -128 to 127, inclusive.
20380     `Sint16'
20381           A constant in the range -32768 to 32767, inclusive.
20383     `Sint24'
20384           A constant in the range -8388608 to 8388607, inclusive.
20386     `Uint04'
20387           A constant in the range 0 to 15, inclusive.
20390 _SPARC--`config/sparc/sparc.h'_
20392     `f'
20393           Floating-point register on the SPARC-V8 architecture and
20394           lower floating-point register on the SPARC-V9 architecture.
20396     `e'
20397           Floating-point register.  It is equivalent to `f' on the
20398           SPARC-V8 architecture and contains both lower and upper
20399           floating-point registers on the SPARC-V9 architecture.
20401     `c'
20402           Floating-point condition code register.
20404     `d'
20405           Lower floating-point register.  It is only valid on the
20406           SPARC-V9 architecture when the Visual Instruction Set is
20407           available.
20409     `b'
20410           Floating-point register.  It is only valid on the SPARC-V9
20411           architecture when the Visual Instruction Set is available.
20413     `h'
20414           64-bit global or out register for the SPARC-V8+ architecture.
20416     `D'
20417           A vector constant
20419     `I'
20420           Signed 13-bit constant
20422     `J'
20423           Zero
20425     `K'
20426           32-bit constant with the low 12 bits clear (a constant that
20427           can be loaded with the `sethi' instruction)
20429     `L'
20430           A constant in the range supported by `movcc' instructions
20432     `M'
20433           A constant in the range supported by `movrcc' instructions
20435     `N'
20436           Same as `K', except that it verifies that bits that are not
20437           in the lower 32-bit range are all zero.  Must be used instead
20438           of `K' for modes wider than `SImode'
20440     `O'
20441           The constant 4096
20443     `G'
20444           Floating-point zero
20446     `H'
20447           Signed 13-bit constant, sign-extended to 32 or 64 bits
20449     `Q'
20450           Floating-point constant whose integral representation can be
20451           moved into an integer register using a single sethi
20452           instruction
20454     `R'
20455           Floating-point constant whose integral representation can be
20456           moved into an integer register using a single mov instruction
20458     `S'
20459           Floating-point constant whose integral representation can be
20460           moved into an integer register using a high/lo_sum
20461           instruction sequence
20463     `T'
20464           Memory address aligned to an 8-byte boundary
20466     `U'
20467           Even register
20469     `W'
20470           Memory address for `e' constraint registers
20472     `Y'
20473           Vector zero
20476 _SPU--`config/spu/spu.h'_
20478     `a'
20479           An immediate which can be loaded with the il/ila/ilh/ilhu
20480           instructions.  const_int is treated as a 64 bit value.
20482     `c'
20483           An immediate for and/xor/or instructions.  const_int is
20484           treated as a 64 bit value.
20486     `d'
20487           An immediate for the `iohl' instruction.  const_int is
20488           treated as a 64 bit value.
20490     `f'
20491           An immediate which can be loaded with `fsmbi'.
20493     `A'
20494           An immediate which can be loaded with the il/ila/ilh/ilhu
20495           instructions.  const_int is treated as a 32 bit value.
20497     `B'
20498           An immediate for most arithmetic instructions.  const_int is
20499           treated as a 32 bit value.
20501     `C'
20502           An immediate for and/xor/or instructions.  const_int is
20503           treated as a 32 bit value.
20505     `D'
20506           An immediate for the `iohl' instruction.  const_int is
20507           treated as a 32 bit value.
20509     `I'
20510           A constant in the range [-64, 63] for shift/rotate
20511           instructions.
20513     `J'
20514           An unsigned 7-bit constant for conversion/nop/channel
20515           instructions.
20517     `K'
20518           A signed 10-bit constant for most arithmetic instructions.
20520     `M'
20521           A signed 16 bit immediate for `stop'.
20523     `N'
20524           An unsigned 16-bit constant for `iohl' and `fsmbi'.
20526     `O'
20527           An unsigned 7-bit constant whose 3 least significant bits are
20528           0.
20530     `P'
20531           An unsigned 3-bit constant for 16-byte rotates and shifts
20533     `R'
20534           Call operand, reg, for indirect calls
20536     `S'
20537           Call operand, symbol, for relative calls.
20539     `T'
20540           Call operand, const_int, for absolute calls.
20542     `U'
20543           An immediate which can be loaded with the il/ila/ilh/ilhu
20544           instructions.  const_int is sign extended to 128 bit.
20546     `W'
20547           An immediate for shift and rotate instructions.  const_int is
20548           treated as a 32 bit value.
20550     `Y'
20551           An immediate for and/xor/or instructions.  const_int is sign
20552           extended as a 128 bit.
20554     `Z'
20555           An immediate for the `iohl' instruction.  const_int is sign
20556           extended to 128 bit.
20559 _S/390 and zSeries--`config/s390/s390.h'_
20561     `a'
20562           Address register (general purpose register except r0)
20564     `c'
20565           Condition code register
20567     `d'
20568           Data register (arbitrary general purpose register)
20570     `f'
20571           Floating-point register
20573     `I'
20574           Unsigned 8-bit constant (0-255)
20576     `J'
20577           Unsigned 12-bit constant (0-4095)
20579     `K'
20580           Signed 16-bit constant (-32768-32767)
20582     `L'
20583           Value appropriate as displacement.
20584          `(0..4095)'
20585                for short displacement
20587          `(-524288..524287)'
20588                for long displacement
20590     `M'
20591           Constant integer with a value of 0x7fffffff.
20593     `N'
20594           Multiple letter constraint followed by 4 parameter letters.
20595          `0..9:'
20596                number of the part counting from most to least
20597                significant
20599          `H,Q:'
20600                mode of the part
20602          `D,S,H:'
20603                mode of the containing operand
20605          `0,F:'
20606                value of the other parts (F--all bits set)
20607           The constraint matches if the specified part of a constant
20608           has a value different from its other parts.
20610     `Q'
20611           Memory reference without index register and with short
20612           displacement.
20614     `R'
20615           Memory reference with index register and short displacement.
20617     `S'
20618           Memory reference without index register but with long
20619           displacement.
20621     `T'
20622           Memory reference with index register and long displacement.
20624     `U'
20625           Pointer with short displacement.
20627     `W'
20628           Pointer with long displacement.
20630     `Y'
20631           Shift count operand.
20634 _Score family--`config/score/score.h'_
20636     `d'
20637           Registers from r0 to r32.
20639     `e'
20640           Registers from r0 to r16.
20642     `t'
20643           r8--r11 or r22--r27 registers.
20645     `h'
20646           hi register.
20648     `l'
20649           lo register.
20651     `x'
20652           hi + lo register.
20654     `q'
20655           cnt register.
20657     `y'
20658           lcb register.
20660     `z'
20661           scb register.
20663     `a'
20664           cnt + lcb + scb register.
20666     `c'
20667           cr0--cr15 register.
20669     `b'
20670           cp1 registers.
20672     `f'
20673           cp2 registers.
20675     `i'
20676           cp3 registers.
20678     `j'
20679           cp1 + cp2 + cp3 registers.
20681     `I'
20682           High 16-bit constant (32-bit constant with 16 LSBs zero).
20684     `J'
20685           Unsigned 5 bit integer (in the range 0 to 31).
20687     `K'
20688           Unsigned 16 bit integer (in the range 0 to 65535).
20690     `L'
20691           Signed 16 bit integer (in the range -32768 to 32767).
20693     `M'
20694           Unsigned 14 bit integer (in the range 0 to 16383).
20696     `N'
20697           Signed 14 bit integer (in the range -8192 to 8191).
20699     `Z'
20700           Any SYMBOL_REF.
20702 _Xstormy16--`config/stormy16/stormy16.h'_
20704     `a'
20705           Register r0.
20707     `b'
20708           Register r1.
20710     `c'
20711           Register r2.
20713     `d'
20714           Register r8.
20716     `e'
20717           Registers r0 through r7.
20719     `t'
20720           Registers r0 and r1.
20722     `y'
20723           The carry register.
20725     `z'
20726           Registers r8 and r9.
20728     `I'
20729           A constant between 0 and 3 inclusive.
20731     `J'
20732           A constant that has exactly one bit set.
20734     `K'
20735           A constant that has exactly one bit clear.
20737     `L'
20738           A constant between 0 and 255 inclusive.
20740     `M'
20741           A constant between -255 and 0 inclusive.
20743     `N'
20744           A constant between -3 and 0 inclusive.
20746     `O'
20747           A constant between 1 and 4 inclusive.
20749     `P'
20750           A constant between -4 and -1 inclusive.
20752     `Q'
20753           A memory reference that is a stack push.
20755     `R'
20756           A memory reference that is a stack pop.
20758     `S'
20759           A memory reference that refers to a constant address of known
20760           value.
20762     `T'
20763           The register indicated by Rx (not implemented yet).
20765     `U'
20766           A constant that is not between 2 and 15 inclusive.
20768     `Z'
20769           The constant 0.
20772 _Xtensa--`config/xtensa/constraints.md'_
20774     `a'
20775           General-purpose 32-bit register
20777     `b'
20778           One-bit boolean register
20780     `A'
20781           MAC16 40-bit accumulator register
20783     `I'
20784           Signed 12-bit integer constant, for use in MOVI instructions
20786     `J'
20787           Signed 8-bit integer constant, for use in ADDI instructions
20789     `K'
20790           Integer constant valid for BccI instructions
20792     `L'
20793           Unsigned constant valid for BccUI instructions
20797 \x1f
20798 File: gccint.info,  Node: Disable Insn Alternatives,  Next: Machine Constraints,  Prev: Modifiers,  Up: Constraints
20800 16.8.6 Disable insn alternatives using the `enabled' attribute
20801 --------------------------------------------------------------
20803 The `enabled' insn attribute may be used to disable certain insn
20804 alternatives for machine-specific reasons.  This is useful when adding
20805 new instructions to an existing pattern which are only available for
20806 certain cpu architecture levels as specified with the `-march=' option.
20808  If an insn alternative is disabled, then it will never be used.  The
20809 compiler treats the constraints for the disabled alternative as
20810 unsatisfiable.
20812  In order to make use of the `enabled' attribute a back end has to add
20813 in the machine description files:
20815   1. A definition of the `enabled' insn attribute.  The attribute is
20816      defined as usual using the `define_attr' command.  This definition
20817      should be based on other insn attributes and/or target flags.  The
20818      `enabled' attribute is a numeric attribute and should evaluate to
20819      `(const_int 1)' for an enabled alternative and to `(const_int 0)'
20820      otherwise.
20822   2. A definition of another insn attribute used to describe for what
20823      reason an insn alternative might be available or not.  E.g.
20824      `cpu_facility' as in the example below.
20826   3. An assignment for the second attribute to each insn definition
20827      combining instructions which are not all available under the same
20828      circumstances.  (Note: It obviously only makes sense for
20829      definitions with more than one alternative.  Otherwise the insn
20830      pattern should be disabled or enabled using the insn condition.)
20832  E.g. the following two patterns could easily be merged using the
20833 `enabled' attribute:
20836      (define_insn "*movdi_old"
20837        [(set (match_operand:DI 0 "register_operand" "=d")
20838              (match_operand:DI 1 "register_operand" " d"))]
20839        "!TARGET_NEW"
20840        "lgr %0,%1")
20842      (define_insn "*movdi_new"
20843        [(set (match_operand:DI 0 "register_operand" "=d,f,d")
20844              (match_operand:DI 1 "register_operand" " d,d,f"))]
20845        "TARGET_NEW"
20846        "@
20847         lgr  %0,%1
20848         ldgr %0,%1
20849         lgdr %0,%1")
20851  to:
20854      (define_insn "*movdi_combined"
20855        [(set (match_operand:DI 0 "register_operand" "=d,f,d")
20856              (match_operand:DI 1 "register_operand" " d,d,f"))]
20857        ""
20858        "@
20859         lgr  %0,%1
20860         ldgr %0,%1
20861         lgdr %0,%1"
20862        [(set_attr "cpu_facility" "*,new,new")])
20864  with the `enabled' attribute defined like this:
20867      (define_attr "cpu_facility" "standard,new" (const_string "standard"))
20869      (define_attr "enabled" ""
20870        (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
20871               (and (eq_attr "cpu_facility" "new")
20872                    (ne (symbol_ref "TARGET_NEW") (const_int 0)))
20873               (const_int 1)]
20874              (const_int 0)))
20876 \x1f
20877 File: gccint.info,  Node: Define Constraints,  Next: C Constraint Interface,  Prev: Machine Constraints,  Up: Constraints
20879 16.8.7 Defining Machine-Specific Constraints
20880 --------------------------------------------
20882 Machine-specific constraints fall into two categories: register and
20883 non-register constraints.  Within the latter category, constraints
20884 which allow subsets of all possible memory or address operands should
20885 be specially marked, to give `reload' more information.
20887  Machine-specific constraints can be given names of arbitrary length,
20888 but they must be entirely composed of letters, digits, underscores
20889 (`_'), and angle brackets (`< >').  Like C identifiers, they must begin
20890 with a letter or underscore.
20892  In order to avoid ambiguity in operand constraint strings, no
20893 constraint can have a name that begins with any other constraint's
20894 name.  For example, if `x' is defined as a constraint name, `xy' may
20895 not be, and vice versa.  As a consequence of this rule, no constraint
20896 may begin with one of the generic constraint letters: `E F V X g i m n
20897 o p r s'.
20899  Register constraints correspond directly to register classes.  *Note
20900 Register Classes::.  There is thus not much flexibility in their
20901 definitions.
20903  -- MD Expression: define_register_constraint name regclass docstring
20904      All three arguments are string constants.  NAME is the name of the
20905      constraint, as it will appear in `match_operand' expressions.  If
20906      NAME is a multi-letter constraint its length shall be the same for
20907      all constraints starting with the same letter.  REGCLASS can be
20908      either the name of the corresponding register class (*note
20909      Register Classes::), or a C expression which evaluates to the
20910      appropriate register class.  If it is an expression, it must have
20911      no side effects, and it cannot look at the operand.  The usual use
20912      of expressions is to map some register constraints to `NO_REGS'
20913      when the register class is not available on a given
20914      subarchitecture.
20916      DOCSTRING is a sentence documenting the meaning of the constraint.
20917      Docstrings are explained further below.
20919  Non-register constraints are more like predicates: the constraint
20920 definition gives a Boolean expression which indicates whether the
20921 constraint matches.
20923  -- MD Expression: define_constraint name docstring exp
20924      The NAME and DOCSTRING arguments are the same as for
20925      `define_register_constraint', but note that the docstring comes
20926      immediately after the name for these expressions.  EXP is an RTL
20927      expression, obeying the same rules as the RTL expressions in
20928      predicate definitions.  *Note Defining Predicates::, for details.
20929      If it evaluates true, the constraint matches; if it evaluates
20930      false, it doesn't. Constraint expressions should indicate which
20931      RTL codes they might match, just like predicate expressions.
20933      `match_test' C expressions have access to the following variables:
20935     OP
20936           The RTL object defining the operand.
20938     MODE
20939           The machine mode of OP.
20941     IVAL
20942           `INTVAL (OP)', if OP is a `const_int'.
20944     HVAL
20945           `CONST_DOUBLE_HIGH (OP)', if OP is an integer `const_double'.
20947     LVAL
20948           `CONST_DOUBLE_LOW (OP)', if OP is an integer `const_double'.
20950     RVAL
20951           `CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
20952           `const_double'.
20954      The *VAL variables should only be used once another piece of the
20955      expression has verified that OP is the appropriate kind of RTL
20956      object.
20958  Most non-register constraints should be defined with
20959 `define_constraint'.  The remaining two definition expressions are only
20960 appropriate for constraints that should be handled specially by
20961 `reload' if they fail to match.
20963  -- MD Expression: define_memory_constraint name docstring exp
20964      Use this expression for constraints that match a subset of all
20965      memory operands: that is, `reload' can make them match by
20966      converting the operand to the form `(mem (reg X))', where X is a
20967      base register (from the register class specified by
20968      `BASE_REG_CLASS', *note Register Classes::).
20970      For example, on the S/390, some instructions do not accept
20971      arbitrary memory references, but only those that do not make use
20972      of an index register.  The constraint letter `Q' is defined to
20973      represent a memory address of this type.  If `Q' is defined with
20974      `define_memory_constraint', a `Q' constraint can handle any memory
20975      operand, because `reload' knows it can simply copy the memory
20976      address into a base register if required.  This is analogous to
20977      the way an `o' constraint can handle any memory operand.
20979      The syntax and semantics are otherwise identical to
20980      `define_constraint'.
20982  -- MD Expression: define_address_constraint name docstring exp
20983      Use this expression for constraints that match a subset of all
20984      address operands: that is, `reload' can make the constraint match
20985      by converting the operand to the form `(reg X)', again with X a
20986      base register.
20988      Constraints defined with `define_address_constraint' can only be
20989      used with the `address_operand' predicate, or machine-specific
20990      predicates that work the same way.  They are treated analogously to
20991      the generic `p' constraint.
20993      The syntax and semantics are otherwise identical to
20994      `define_constraint'.
20996  For historical reasons, names beginning with the letters `G H' are
20997 reserved for constraints that match only `const_double's, and names
20998 beginning with the letters `I J K L M N O P' are reserved for
20999 constraints that match only `const_int's.  This may change in the
21000 future.  For the time being, constraints with these names must be
21001 written in a stylized form, so that `genpreds' can tell you did it
21002 correctly:
21004      (define_constraint "[GHIJKLMNOP]..."
21005        "DOC..."
21006        (and (match_code "const_int")  ; `const_double' for G/H
21007             CONDITION...))            ; usually a `match_test'
21009  It is fine to use names beginning with other letters for constraints
21010 that match `const_double's or `const_int's.
21012  Each docstring in a constraint definition should be one or more
21013 complete sentences, marked up in Texinfo format.  _They are currently
21014 unused._ In the future they will be copied into the GCC manual, in
21015 *Note Machine Constraints::, replacing the hand-maintained tables
21016 currently found in that section.  Also, in the future the compiler may
21017 use this to give more helpful diagnostics when poor choice of `asm'
21018 constraints causes a reload failure.
21020  If you put the pseudo-Texinfo directive `@internal' at the beginning
21021 of a docstring, then (in the future) it will appear only in the
21022 internals manual's version of the machine-specific constraint tables.
21023 Use this for constraints that should not appear in `asm' statements.
21025 \x1f
21026 File: gccint.info,  Node: C Constraint Interface,  Prev: Define Constraints,  Up: Constraints
21028 16.8.8 Testing constraints from C
21029 ---------------------------------
21031 It is occasionally useful to test a constraint from C code rather than
21032 implicitly via the constraint string in a `match_operand'.  The
21033 generated file `tm_p.h' declares a few interfaces for working with
21034 machine-specific constraints.  None of these interfaces work with the
21035 generic constraints described in *Note Simple Constraints::.  This may
21036 change in the future.
21038  *Warning:* `tm_p.h' may declare other functions that operate on
21039 constraints, besides the ones documented here.  Do not use those
21040 functions from machine-dependent code.  They exist to implement the old
21041 constraint interface that machine-independent components of the
21042 compiler still expect.  They will change or disappear in the future.
21044  Some valid constraint names are not valid C identifiers, so there is a
21045 mangling scheme for referring to them from C.  Constraint names that do
21046 not contain angle brackets or underscores are left unchanged.
21047 Underscores are doubled, each `<' is replaced with `_l', and each `>'
21048 with `_g'.  Here are some examples:
21050      *Original* *Mangled*
21051      `x'        `x'
21052      `P42x'     `P42x'
21053      `P4_x'     `P4__x'
21054      `P4>x'     `P4_gx'
21055      `P4>>'     `P4_g_g'
21056      `P4_g>'    `P4__g_g'
21058  Throughout this section, the variable C is either a constraint in the
21059 abstract sense, or a constant from `enum constraint_num'; the variable
21060 M is a mangled constraint name (usually as part of a larger identifier).
21062  -- Enum: constraint_num
21063      For each machine-specific constraint, there is a corresponding
21064      enumeration constant: `CONSTRAINT_' plus the mangled name of the
21065      constraint.  Functions that take an `enum constraint_num' as an
21066      argument expect one of these constants.
21068      Machine-independent constraints do not have associated constants.
21069      This may change in the future.
21071  -- Function: inline bool satisfies_constraint_M (rtx EXP)
21072      For each machine-specific, non-register constraint M, there is one
21073      of these functions; it returns `true' if EXP satisfies the
21074      constraint.  These functions are only visible if `rtl.h' was
21075      included before `tm_p.h'.
21077  -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
21078           C)
21079      Like the `satisfies_constraint_M' functions, but the constraint to
21080      test is given as an argument, C.  If C specifies a register
21081      constraint, this function will always return `false'.
21083  -- Function: enum reg_class regclass_for_constraint (enum
21084           constraint_num C)
21085      Returns the register class associated with C.  If C is not a
21086      register constraint, or those registers are not available for the
21087      currently selected subtarget, returns `NO_REGS'.
21089  Here is an example use of `satisfies_constraint_M'.  In peephole
21090 optimizations (*note Peephole Definitions::), operand constraint
21091 strings are ignored, so if there are relevant constraints, they must be
21092 tested in the C condition.  In the example, the optimization is applied
21093 if operand 2 does _not_ satisfy the `K' constraint.  (This is a
21094 simplified version of a peephole definition from the i386 machine
21095 description.)
21097      (define_peephole2
21098        [(match_scratch:SI 3 "r")
21099         (set (match_operand:SI 0 "register_operand" "")
21100              (mult:SI (match_operand:SI 1 "memory_operand" "")
21101                       (match_operand:SI 2 "immediate_operand" "")))]
21103        "!satisfies_constraint_K (operands[2])"
21105        [(set (match_dup 3) (match_dup 1))
21106         (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
21108        "")
21110 \x1f
21111 File: gccint.info,  Node: Standard Names,  Next: Pattern Ordering,  Prev: Constraints,  Up: Machine Desc
21113 16.9 Standard Pattern Names For Generation
21114 ==========================================
21116 Here is a table of the instruction names that are meaningful in the RTL
21117 generation pass of the compiler.  Giving one of these names to an
21118 instruction pattern tells the RTL generation pass that it can use the
21119 pattern to accomplish a certain task.
21121 `movM'
21122      Here M stands for a two-letter machine mode name, in lowercase.
21123      This instruction pattern moves data with that machine mode from
21124      operand 1 to operand 0.  For example, `movsi' moves full-word data.
21126      If operand 0 is a `subreg' with mode M of a register whose own
21127      mode is wider than M, the effect of this instruction is to store
21128      the specified value in the part of the register that corresponds
21129      to mode M.  Bits outside of M, but which are within the same
21130      target word as the `subreg' are undefined.  Bits which are outside
21131      the target word are left unchanged.
21133      This class of patterns is special in several ways.  First of all,
21134      each of these names up to and including full word size _must_ be
21135      defined, because there is no other way to copy a datum from one
21136      place to another.  If there are patterns accepting operands in
21137      larger modes, `movM' must be defined for integer modes of those
21138      sizes.
21140      Second, these patterns are not used solely in the RTL generation
21141      pass.  Even the reload pass can generate move insns to copy values
21142      from stack slots into temporary registers.  When it does so, one
21143      of the operands is a hard register and the other is an operand
21144      that can need to be reloaded into a register.
21146      Therefore, when given such a pair of operands, the pattern must
21147      generate RTL which needs no reloading and needs no temporary
21148      registers--no registers other than the operands.  For example, if
21149      you support the pattern with a `define_expand', then in such a
21150      case the `define_expand' mustn't call `force_reg' or any other such
21151      function which might generate new pseudo registers.
21153      This requirement exists even for subword modes on a RISC machine
21154      where fetching those modes from memory normally requires several
21155      insns and some temporary registers.
21157      During reload a memory reference with an invalid address may be
21158      passed as an operand.  Such an address will be replaced with a
21159      valid address later in the reload pass.  In this case, nothing may
21160      be done with the address except to use it as it stands.  If it is
21161      copied, it will not be replaced with a valid address.  No attempt
21162      should be made to make such an address into a valid address and no
21163      routine (such as `change_address') that will do so may be called.
21164      Note that `general_operand' will fail when applied to such an
21165      address.
21167      The global variable `reload_in_progress' (which must be explicitly
21168      declared if required) can be used to determine whether such special
21169      handling is required.
21171      The variety of operands that have reloads depends on the rest of
21172      the machine description, but typically on a RISC machine these can
21173      only be pseudo registers that did not get hard registers, while on
21174      other machines explicit memory references will get optional
21175      reloads.
21177      If a scratch register is required to move an object to or from
21178      memory, it can be allocated using `gen_reg_rtx' prior to life
21179      analysis.
21181      If there are cases which need scratch registers during or after
21182      reload, you must provide an appropriate secondary_reload target
21183      hook.
21185      The macro `can_create_pseudo_p' can be used to determine if it is
21186      unsafe to create new pseudo registers.  If this variable is
21187      nonzero, then it is unsafe to call `gen_reg_rtx' to allocate a new
21188      pseudo.
21190      The constraints on a `movM' must permit moving any hard register
21191      to any other hard register provided that `HARD_REGNO_MODE_OK'
21192      permits mode M in both registers and `REGISTER_MOVE_COST' applied
21193      to their classes returns a value of 2.
21195      It is obligatory to support floating point `movM' instructions
21196      into and out of any registers that can hold fixed point values,
21197      because unions and structures (which have modes `SImode' or
21198      `DImode') can be in those registers and they may have floating
21199      point members.
21201      There may also be a need to support fixed point `movM'
21202      instructions in and out of floating point registers.
21203      Unfortunately, I have forgotten why this was so, and I don't know
21204      whether it is still true.  If `HARD_REGNO_MODE_OK' rejects fixed
21205      point values in floating point registers, then the constraints of
21206      the fixed point `movM' instructions must be designed to avoid ever
21207      trying to reload into a floating point register.
21209 `reload_inM'
21210 `reload_outM'
21211      These named patterns have been obsoleted by the target hook
21212      `secondary_reload'.
21214      Like `movM', but used when a scratch register is required to move
21215      between operand 0 and operand 1.  Operand 2 describes the scratch
21216      register.  See the discussion of the `SECONDARY_RELOAD_CLASS'
21217      macro in *note Register Classes::.
21219      There are special restrictions on the form of the `match_operand's
21220      used in these patterns.  First, only the predicate for the reload
21221      operand is examined, i.e., `reload_in' examines operand 1, but not
21222      the predicates for operand 0 or 2.  Second, there may be only one
21223      alternative in the constraints.  Third, only a single register
21224      class letter may be used for the constraint; subsequent constraint
21225      letters are ignored.  As a special exception, an empty constraint
21226      string matches the `ALL_REGS' register class.  This may relieve
21227      ports of the burden of defining an `ALL_REGS' constraint letter
21228      just for these patterns.
21230 `movstrictM'
21231      Like `movM' except that if operand 0 is a `subreg' with mode M of
21232      a register whose natural mode is wider, the `movstrictM'
21233      instruction is guaranteed not to alter any of the register except
21234      the part which belongs to mode M.
21236 `movmisalignM'
21237      This variant of a move pattern is designed to load or store a value
21238      from a memory address that is not naturally aligned for its mode.
21239      For a store, the memory will be in operand 0; for a load, the
21240      memory will be in operand 1.  The other operand is guaranteed not
21241      to be a memory, so that it's easy to tell whether this is a load
21242      or store.
21244      This pattern is used by the autovectorizer, and when expanding a
21245      `MISALIGNED_INDIRECT_REF' expression.
21247 `load_multiple'
21248      Load several consecutive memory locations into consecutive
21249      registers.  Operand 0 is the first of the consecutive registers,
21250      operand 1 is the first memory location, and operand 2 is a
21251      constant: the number of consecutive registers.
21253      Define this only if the target machine really has such an
21254      instruction; do not define this if the most efficient way of
21255      loading consecutive registers from memory is to do them one at a
21256      time.
21258      On some machines, there are restrictions as to which consecutive
21259      registers can be stored into memory, such as particular starting or
21260      ending register numbers or only a range of valid counts.  For those
21261      machines, use a `define_expand' (*note Expander Definitions::) and
21262      make the pattern fail if the restrictions are not met.
21264      Write the generated insn as a `parallel' with elements being a
21265      `set' of one register from the appropriate memory location (you may
21266      also need `use' or `clobber' elements).  Use a `match_parallel'
21267      (*note RTL Template::) to recognize the insn.  See `rs6000.md' for
21268      examples of the use of this insn pattern.
21270 `store_multiple'
21271      Similar to `load_multiple', but store several consecutive registers
21272      into consecutive memory locations.  Operand 0 is the first of the
21273      consecutive memory locations, operand 1 is the first register, and
21274      operand 2 is a constant: the number of consecutive registers.
21276 `vec_setM'
21277      Set given field in the vector value.  Operand 0 is the vector to
21278      modify, operand 1 is new value of field and operand 2 specify the
21279      field index.
21281 `vec_extractM'
21282      Extract given field from the vector value.  Operand 1 is the
21283      vector, operand 2 specify field index and operand 0 place to store
21284      value into.
21286 `vec_extract_evenM'
21287      Extract even elements from the input vectors (operand 1 and
21288      operand 2).  The even elements of operand 2 are concatenated to
21289      the even elements of operand 1 in their original order. The result
21290      is stored in operand 0.  The output and input vectors should have
21291      the same modes.
21293 `vec_extract_oddM'
21294      Extract odd elements from the input vectors (operand 1 and operand
21295      2).  The odd elements of operand 2 are concatenated to the odd
21296      elements of operand 1 in their original order. The result is
21297      stored in operand 0.  The output and input vectors should have the
21298      same modes.
21300 `vec_interleave_highM'
21301      Merge high elements of the two input vectors into the output
21302      vector. The output and input vectors should have the same modes
21303      (`N' elements). The high `N/2' elements of the first input vector
21304      are interleaved with the high `N/2' elements of the second input
21305      vector.
21307 `vec_interleave_lowM'
21308      Merge low elements of the two input vectors into the output
21309      vector. The output and input vectors should have the same modes
21310      (`N' elements). The low `N/2' elements of the first input vector
21311      are interleaved with the low `N/2' elements of the second input
21312      vector.
21314 `vec_initM'
21315      Initialize the vector to given values.  Operand 0 is the vector to
21316      initialize and operand 1 is parallel containing values for
21317      individual fields.
21319 `pushM1'
21320      Output a push instruction.  Operand 0 is value to push.  Used only
21321      when `PUSH_ROUNDING' is defined.  For historical reason, this
21322      pattern may be missing and in such case an `mov' expander is used
21323      instead, with a `MEM' expression forming the push operation.  The
21324      `mov' expander method is deprecated.
21326 `addM3'
21327      Add operand 2 and operand 1, storing the result in operand 0.  All
21328      operands must have mode M.  This can be used even on two-address
21329      machines, by means of constraints requiring operands 1 and 0 to be
21330      the same location.
21332 `ssaddM3', `usaddM3'
21334 `subM3', `sssubM3', `ussubM3'
21336 `mulM3', `ssmulM3', `usmulM3'
21337 `divM3', `ssdivM3'
21338 `udivM3', `usdivM3'
21339 `modM3', `umodM3'
21340 `uminM3', `umaxM3'
21341 `andM3', `iorM3', `xorM3'
21342      Similar, for other arithmetic operations.
21344 `sminM3', `smaxM3'
21345      Signed minimum and maximum operations.  When used with floating
21346      point, if both operands are zeros, or if either operand is `NaN',
21347      then it is unspecified which of the two operands is returned as
21348      the result.
21350 `reduc_smin_M', `reduc_smax_M'
21351      Find the signed minimum/maximum of the elements of a vector. The
21352      vector is operand 1, and the scalar result is stored in the least
21353      significant bits of operand 0 (also a vector). The output and
21354      input vector should have the same modes.
21356 `reduc_umin_M', `reduc_umax_M'
21357      Find the unsigned minimum/maximum of the elements of a vector. The
21358      vector is operand 1, and the scalar result is stored in the least
21359      significant bits of operand 0 (also a vector). The output and
21360      input vector should have the same modes.
21362 `reduc_splus_M'
21363      Compute the sum of the signed elements of a vector. The vector is
21364      operand 1, and the scalar result is stored in the least
21365      significant bits of operand 0 (also a vector). The output and
21366      input vector should have the same modes.
21368 `reduc_uplus_M'
21369      Compute the sum of the unsigned elements of a vector. The vector
21370      is operand 1, and the scalar result is stored in the least
21371      significant bits of operand 0 (also a vector). The output and
21372      input vector should have the same modes.
21374 `sdot_prodM'
21376 `udot_prodM'
21377      Compute the sum of the products of two signed/unsigned elements.
21378      Operand 1 and operand 2 are of the same mode. Their product, which
21379      is of a wider mode, is computed and added to operand 3. Operand 3
21380      is of a mode equal or wider than the mode of the product. The
21381      result is placed in operand 0, which is of the same mode as
21382      operand 3.
21384 `ssum_widenM3'
21386 `usum_widenM3'
21387      Operands 0 and 2 are of the same mode, which is wider than the
21388      mode of operand 1. Add operand 1 to operand 2 and place the
21389      widened result in operand 0. (This is used express accumulation of
21390      elements into an accumulator of a wider mode.)
21392 `vec_shl_M', `vec_shr_M'
21393      Whole vector left/right shift in bits.  Operand 1 is a vector to
21394      be shifted.  Operand 2 is an integer shift amount in bits.
21395      Operand 0 is where the resulting shifted vector is stored.  The
21396      output and input vectors should have the same modes.
21398 `vec_pack_trunc_M'
21399      Narrow (demote) and merge the elements of two vectors. Operands 1
21400      and 2 are vectors of the same mode having N integral or floating
21401      point elements of size S.  Operand 0 is the resulting vector in
21402      which 2*N elements of size N/2 are concatenated after narrowing
21403      them down using truncation.
21405 `vec_pack_ssat_M', `vec_pack_usat_M'
21406      Narrow (demote) and merge the elements of two vectors.  Operands 1
21407      and 2 are vectors of the same mode having N integral elements of
21408      size S.  Operand 0 is the resulting vector in which the elements
21409      of the two input vectors are concatenated after narrowing them
21410      down using signed/unsigned saturating arithmetic.
21412 `vec_pack_sfix_trunc_M', `vec_pack_ufix_trunc_M'
21413      Narrow, convert to signed/unsigned integral type and merge the
21414      elements of two vectors.  Operands 1 and 2 are vectors of the same
21415      mode having N floating point elements of size S.  Operand 0 is the
21416      resulting vector in which 2*N elements of size N/2 are
21417      concatenated.
21419 `vec_unpacks_hi_M', `vec_unpacks_lo_M'
21420      Extract and widen (promote) the high/low part of a vector of signed
21421      integral or floating point elements.  The input vector (operand 1)
21422      has N elements of size S.  Widen (promote) the high/low elements
21423      of the vector using signed or floating point extension and place
21424      the resulting N/2 values of size 2*S in the output vector (operand
21425      0).
21427 `vec_unpacku_hi_M', `vec_unpacku_lo_M'
21428      Extract and widen (promote) the high/low part of a vector of
21429      unsigned integral elements.  The input vector (operand 1) has N
21430      elements of size S.  Widen (promote) the high/low elements of the
21431      vector using zero extension and place the resulting N/2 values of
21432      size 2*S in the output vector (operand 0).
21434 `vec_unpacks_float_hi_M', `vec_unpacks_float_lo_M'
21435 `vec_unpacku_float_hi_M', `vec_unpacku_float_lo_M'
21436      Extract, convert to floating point type and widen the high/low
21437      part of a vector of signed/unsigned integral elements.  The input
21438      vector (operand 1) has N elements of size S.  Convert the high/low
21439      elements of the vector using floating point conversion and place
21440      the resulting N/2 values of size 2*S in the output vector (operand
21441      0).
21443 `vec_widen_umult_hi_M', `vec_widen_umult_lo_M'
21444 `vec_widen_smult_hi_M', `vec_widen_smult_lo_M'
21445      Signed/Unsigned widening multiplication.  The two inputs (operands
21446      1 and 2) are vectors with N signed/unsigned elements of size S.
21447      Multiply the high/low elements of the two vectors, and put the N/2
21448      products of size 2*S in the output vector (operand 0).
21450 `mulhisi3'
21451      Multiply operands 1 and 2, which have mode `HImode', and store a
21452      `SImode' product in operand 0.
21454 `mulqihi3', `mulsidi3'
21455      Similar widening-multiplication instructions of other widths.
21457 `umulqihi3', `umulhisi3', `umulsidi3'
21458      Similar widening-multiplication instructions that do unsigned
21459      multiplication.
21461 `usmulqihi3', `usmulhisi3', `usmulsidi3'
21462      Similar widening-multiplication instructions that interpret the
21463      first operand as unsigned and the second operand as signed, then
21464      do a signed multiplication.
21466 `smulM3_highpart'
21467      Perform a signed multiplication of operands 1 and 2, which have
21468      mode M, and store the most significant half of the product in
21469      operand 0.  The least significant half of the product is discarded.
21471 `umulM3_highpart'
21472      Similar, but the multiplication is unsigned.
21474 `maddMN4'
21475      Multiply operands 1 and 2, sign-extend them to mode N, add operand
21476      3, and store the result in operand 0.  Operands 1 and 2 have mode
21477      M and operands 0 and 3 have mode N.  Both modes must be integer or
21478      fixed-point modes and N must be twice the size of M.
21480      In other words, `maddMN4' is like `mulMN3' except that it also
21481      adds operand 3.
21483      These instructions are not allowed to `FAIL'.
21485 `umaddMN4'
21486      Like `maddMN4', but zero-extend the multiplication operands
21487      instead of sign-extending them.
21489 `ssmaddMN4'
21490      Like `maddMN4', but all involved operations must be
21491      signed-saturating.
21493 `usmaddMN4'
21494      Like `umaddMN4', but all involved operations must be
21495      unsigned-saturating.
21497 `msubMN4'
21498      Multiply operands 1 and 2, sign-extend them to mode N, subtract the
21499      result from operand 3, and store the result in operand 0.
21500      Operands 1 and 2 have mode M and operands 0 and 3 have mode N.
21501      Both modes must be integer or fixed-point modes and N must be twice
21502      the size of M.
21504      In other words, `msubMN4' is like `mulMN3' except that it also
21505      subtracts the result from operand 3.
21507      These instructions are not allowed to `FAIL'.
21509 `umsubMN4'
21510      Like `msubMN4', but zero-extend the multiplication operands
21511      instead of sign-extending them.
21513 `ssmsubMN4'
21514      Like `msubMN4', but all involved operations must be
21515      signed-saturating.
21517 `usmsubMN4'
21518      Like `umsubMN4', but all involved operations must be
21519      unsigned-saturating.
21521 `divmodM4'
21522      Signed division that produces both a quotient and a remainder.
21523      Operand 1 is divided by operand 2 to produce a quotient stored in
21524      operand 0 and a remainder stored in operand 3.
21526      For machines with an instruction that produces both a quotient and
21527      a remainder, provide a pattern for `divmodM4' but do not provide
21528      patterns for `divM3' and `modM3'.  This allows optimization in the
21529      relatively common case when both the quotient and remainder are
21530      computed.
21532      If an instruction that just produces a quotient or just a remainder
21533      exists and is more efficient than the instruction that produces
21534      both, write the output routine of `divmodM4' to call
21535      `find_reg_note' and look for a `REG_UNUSED' note on the quotient
21536      or remainder and generate the appropriate instruction.
21538 `udivmodM4'
21539      Similar, but does unsigned division.
21541 `ashlM3', `ssashlM3', `usashlM3'
21542      Arithmetic-shift operand 1 left by a number of bits specified by
21543      operand 2, and store the result in operand 0.  Here M is the mode
21544      of operand 0 and operand 1; operand 2's mode is specified by the
21545      instruction pattern, and the compiler will convert the operand to
21546      that mode before generating the instruction.  The meaning of
21547      out-of-range shift counts can optionally be specified by
21548      `TARGET_SHIFT_TRUNCATION_MASK'.  *Note
21549      TARGET_SHIFT_TRUNCATION_MASK::.  Operand 2 is always a scalar type.
21551 `ashrM3', `lshrM3', `rotlM3', `rotrM3'
21552      Other shift and rotate instructions, analogous to the `ashlM3'
21553      instructions.  Operand 2 is always a scalar type.
21555 `vashlM3', `vashrM3', `vlshrM3', `vrotlM3', `vrotrM3'
21556      Vector shift and rotate instructions that take vectors as operand 2
21557      instead of a scalar type.
21559 `negM2', `ssnegM2', `usnegM2'
21560      Negate operand 1 and store the result in operand 0.
21562 `absM2'
21563      Store the absolute value of operand 1 into operand 0.
21565 `sqrtM2'
21566      Store the square root of operand 1 into operand 0.
21568      The `sqrt' built-in function of C always uses the mode which
21569      corresponds to the C data type `double' and the `sqrtf' built-in
21570      function uses the mode which corresponds to the C data type
21571      `float'.
21573 `fmodM3'
21574      Store the remainder of dividing operand 1 by operand 2 into
21575      operand 0, rounded towards zero to an integer.
21577      The `fmod' built-in function of C always uses the mode which
21578      corresponds to the C data type `double' and the `fmodf' built-in
21579      function uses the mode which corresponds to the C data type
21580      `float'.
21582 `remainderM3'
21583      Store the remainder of dividing operand 1 by operand 2 into
21584      operand 0, rounded to the nearest integer.
21586      The `remainder' built-in function of C always uses the mode which
21587      corresponds to the C data type `double' and the `remainderf'
21588      built-in function uses the mode which corresponds to the C data
21589      type `float'.
21591 `cosM2'
21592      Store the cosine of operand 1 into operand 0.
21594      The `cos' built-in function of C always uses the mode which
21595      corresponds to the C data type `double' and the `cosf' built-in
21596      function uses the mode which corresponds to the C data type
21597      `float'.
21599 `sinM2'
21600      Store the sine of operand 1 into operand 0.
21602      The `sin' built-in function of C always uses the mode which
21603      corresponds to the C data type `double' and the `sinf' built-in
21604      function uses the mode which corresponds to the C data type
21605      `float'.
21607 `expM2'
21608      Store the exponential of operand 1 into operand 0.
21610      The `exp' built-in function of C always uses the mode which
21611      corresponds to the C data type `double' and the `expf' built-in
21612      function uses the mode which corresponds to the C data type
21613      `float'.
21615 `logM2'
21616      Store the natural logarithm of operand 1 into operand 0.
21618      The `log' built-in function of C always uses the mode which
21619      corresponds to the C data type `double' and the `logf' built-in
21620      function uses the mode which corresponds to the C data type
21621      `float'.
21623 `powM3'
21624      Store the value of operand 1 raised to the exponent operand 2 into
21625      operand 0.
21627      The `pow' built-in function of C always uses the mode which
21628      corresponds to the C data type `double' and the `powf' built-in
21629      function uses the mode which corresponds to the C data type
21630      `float'.
21632 `atan2M3'
21633      Store the arc tangent (inverse tangent) of operand 1 divided by
21634      operand 2 into operand 0, using the signs of both arguments to
21635      determine the quadrant of the result.
21637      The `atan2' built-in function of C always uses the mode which
21638      corresponds to the C data type `double' and the `atan2f' built-in
21639      function uses the mode which corresponds to the C data type
21640      `float'.
21642 `floorM2'
21643      Store the largest integral value not greater than argument.
21645      The `floor' built-in function of C always uses the mode which
21646      corresponds to the C data type `double' and the `floorf' built-in
21647      function uses the mode which corresponds to the C data type
21648      `float'.
21650 `btruncM2'
21651      Store the argument rounded to integer towards zero.
21653      The `trunc' built-in function of C always uses the mode which
21654      corresponds to the C data type `double' and the `truncf' built-in
21655      function uses the mode which corresponds to the C data type
21656      `float'.
21658 `roundM2'
21659      Store the argument rounded to integer away from zero.
21661      The `round' built-in function of C always uses the mode which
21662      corresponds to the C data type `double' and the `roundf' built-in
21663      function uses the mode which corresponds to the C data type
21664      `float'.
21666 `ceilM2'
21667      Store the argument rounded to integer away from zero.
21669      The `ceil' built-in function of C always uses the mode which
21670      corresponds to the C data type `double' and the `ceilf' built-in
21671      function uses the mode which corresponds to the C data type
21672      `float'.
21674 `nearbyintM2'
21675      Store the argument rounded according to the default rounding mode
21677      The `nearbyint' built-in function of C always uses the mode which
21678      corresponds to the C data type `double' and the `nearbyintf'
21679      built-in function uses the mode which corresponds to the C data
21680      type `float'.
21682 `rintM2'
21683      Store the argument rounded according to the default rounding mode
21684      and raise the inexact exception when the result differs in value
21685      from the argument
21687      The `rint' built-in function of C always uses the mode which
21688      corresponds to the C data type `double' and the `rintf' built-in
21689      function uses the mode which corresponds to the C data type
21690      `float'.
21692 `lrintMN2'
21693      Convert operand 1 (valid for floating point mode M) to fixed point
21694      mode N as a signed number according to the current rounding mode
21695      and store in operand 0 (which has mode N).
21697 `lroundM2'
21698      Convert operand 1 (valid for floating point mode M) to fixed point
21699      mode N as a signed number rounding to nearest and away from zero
21700      and store in operand 0 (which has mode N).
21702 `lfloorM2'
21703      Convert operand 1 (valid for floating point mode M) to fixed point
21704      mode N as a signed number rounding down and store in operand 0
21705      (which has mode N).
21707 `lceilM2'
21708      Convert operand 1 (valid for floating point mode M) to fixed point
21709      mode N as a signed number rounding up and store in operand 0
21710      (which has mode N).
21712 `copysignM3'
21713      Store a value with the magnitude of operand 1 and the sign of
21714      operand 2 into operand 0.
21716      The `copysign' built-in function of C always uses the mode which
21717      corresponds to the C data type `double' and the `copysignf'
21718      built-in function uses the mode which corresponds to the C data
21719      type `float'.
21721 `ffsM2'
21722      Store into operand 0 one plus the index of the least significant
21723      1-bit of operand 1.  If operand 1 is zero, store zero.  M is the
21724      mode of operand 0; operand 1's mode is specified by the instruction
21725      pattern, and the compiler will convert the operand to that mode
21726      before generating the instruction.
21728      The `ffs' built-in function of C always uses the mode which
21729      corresponds to the C data type `int'.
21731 `clzM2'
21732      Store into operand 0 the number of leading 0-bits in X, starting
21733      at the most significant bit position.  If X is 0, the
21734      `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
21735      result is undefined or has a useful value.  M is the mode of
21736      operand 0; operand 1's mode is specified by the instruction
21737      pattern, and the compiler will convert the operand to that mode
21738      before generating the instruction.
21740 `ctzM2'
21741      Store into operand 0 the number of trailing 0-bits in X, starting
21742      at the least significant bit position.  If X is 0, the
21743      `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
21744      result is undefined or has a useful value.  M is the mode of
21745      operand 0; operand 1's mode is specified by the instruction
21746      pattern, and the compiler will convert the operand to that mode
21747      before generating the instruction.
21749 `popcountM2'
21750      Store into operand 0 the number of 1-bits in X.  M is the mode of
21751      operand 0; operand 1's mode is specified by the instruction
21752      pattern, and the compiler will convert the operand to that mode
21753      before generating the instruction.
21755 `parityM2'
21756      Store into operand 0 the parity of X, i.e. the number of 1-bits in
21757      X modulo 2.  M is the mode of operand 0; operand 1's mode is
21758      specified by the instruction pattern, and the compiler will convert
21759      the operand to that mode before generating the instruction.
21761 `one_cmplM2'
21762      Store the bitwise-complement of operand 1 into operand 0.
21764 `movmemM'
21765      Block move instruction.  The destination and source blocks of
21766      memory are the first two operands, and both are `mem:BLK's with an
21767      address in mode `Pmode'.
21769      The number of bytes to move is the third operand, in mode M.
21770      Usually, you specify `word_mode' for M.  However, if you can
21771      generate better code knowing the range of valid lengths is smaller
21772      than those representable in a full word, you should provide a
21773      pattern with a mode corresponding to the range of values you can
21774      handle efficiently (e.g., `QImode' for values in the range 0-127;
21775      note we avoid numbers that appear negative) and also a pattern
21776      with `word_mode'.
21778      The fourth operand is the known shared alignment of the source and
21779      destination, in the form of a `const_int' rtx.  Thus, if the
21780      compiler knows that both source and destination are word-aligned,
21781      it may provide the value 4 for this operand.
21783      Optional operands 5 and 6 specify expected alignment and size of
21784      block respectively.  The expected alignment differs from alignment
21785      in operand 4 in a way that the blocks are not required to be
21786      aligned according to it in all cases. This expected alignment is
21787      also in bytes, just like operand 4.  Expected size, when unknown,
21788      is set to `(const_int -1)'.
21790      Descriptions of multiple `movmemM' patterns can only be beneficial
21791      if the patterns for smaller modes have fewer restrictions on their
21792      first, second and fourth operands.  Note that the mode M in
21793      `movmemM' does not impose any restriction on the mode of
21794      individually moved data units in the block.
21796      These patterns need not give special consideration to the
21797      possibility that the source and destination strings might overlap.
21799 `movstr'
21800      String copy instruction, with `stpcpy' semantics.  Operand 0 is an
21801      output operand in mode `Pmode'.  The addresses of the destination
21802      and source strings are operands 1 and 2, and both are `mem:BLK's
21803      with addresses in mode `Pmode'.  The execution of the expansion of
21804      this pattern should store in operand 0 the address in which the
21805      `NUL' terminator was stored in the destination string.
21807 `setmemM'
21808      Block set instruction.  The destination string is the first
21809      operand, given as a `mem:BLK' whose address is in mode `Pmode'.
21810      The number of bytes to set is the second operand, in mode M.  The
21811      value to initialize the memory with is the third operand. Targets
21812      that only support the clearing of memory should reject any value
21813      that is not the constant 0.  See `movmemM' for a discussion of the
21814      choice of mode.
21816      The fourth operand is the known alignment of the destination, in
21817      the form of a `const_int' rtx.  Thus, if the compiler knows that
21818      the destination is word-aligned, it may provide the value 4 for
21819      this operand.
21821      Optional operands 5 and 6 specify expected alignment and size of
21822      block respectively.  The expected alignment differs from alignment
21823      in operand 4 in a way that the blocks are not required to be
21824      aligned according to it in all cases. This expected alignment is
21825      also in bytes, just like operand 4.  Expected size, when unknown,
21826      is set to `(const_int -1)'.
21828      The use for multiple `setmemM' is as for `movmemM'.
21830 `cmpstrnM'
21831      String compare instruction, with five operands.  Operand 0 is the
21832      output; it has mode M.  The remaining four operands are like the
21833      operands of `movmemM'.  The two memory blocks specified are
21834      compared byte by byte in lexicographic order starting at the
21835      beginning of each string.  The instruction is not allowed to
21836      prefetch more than one byte at a time since either string may end
21837      in the first byte and reading past that may access an invalid page
21838      or segment and cause a fault.  The effect of the instruction is to
21839      store a value in operand 0 whose sign indicates the result of the
21840      comparison.
21842 `cmpstrM'
21843      String compare instruction, without known maximum length.  Operand
21844      0 is the output; it has mode M.  The second and third operand are
21845      the blocks of memory to be compared; both are `mem:BLK' with an
21846      address in mode `Pmode'.
21848      The fourth operand is the known shared alignment of the source and
21849      destination, in the form of a `const_int' rtx.  Thus, if the
21850      compiler knows that both source and destination are word-aligned,
21851      it may provide the value 4 for this operand.
21853      The two memory blocks specified are compared byte by byte in
21854      lexicographic order starting at the beginning of each string.  The
21855      instruction is not allowed to prefetch more than one byte at a
21856      time since either string may end in the first byte and reading
21857      past that may access an invalid page or segment and cause a fault.
21858      The effect of the instruction is to store a value in operand 0
21859      whose sign indicates the result of the comparison.
21861 `cmpmemM'
21862      Block compare instruction, with five operands like the operands of
21863      `cmpstrM'.  The two memory blocks specified are compared byte by
21864      byte in lexicographic order starting at the beginning of each
21865      block.  Unlike `cmpstrM' the instruction can prefetch any bytes in
21866      the two memory blocks.  The effect of the instruction is to store
21867      a value in operand 0 whose sign indicates the result of the
21868      comparison.
21870 `strlenM'
21871      Compute the length of a string, with three operands.  Operand 0 is
21872      the result (of mode M), operand 1 is a `mem' referring to the
21873      first character of the string, operand 2 is the character to
21874      search for (normally zero), and operand 3 is a constant describing
21875      the known alignment of the beginning of the string.
21877 `floatMN2'
21878      Convert signed integer operand 1 (valid for fixed point mode M) to
21879      floating point mode N and store in operand 0 (which has mode N).
21881 `floatunsMN2'
21882      Convert unsigned integer operand 1 (valid for fixed point mode M)
21883      to floating point mode N and store in operand 0 (which has mode N).
21885 `fixMN2'
21886      Convert operand 1 (valid for floating point mode M) to fixed point
21887      mode N as a signed number and store in operand 0 (which has mode
21888      N).  This instruction's result is defined only when the value of
21889      operand 1 is an integer.
21891      If the machine description defines this pattern, it also needs to
21892      define the `ftrunc' pattern.
21894 `fixunsMN2'
21895      Convert operand 1 (valid for floating point mode M) to fixed point
21896      mode N as an unsigned number and store in operand 0 (which has
21897      mode N).  This instruction's result is defined only when the value
21898      of operand 1 is an integer.
21900 `ftruncM2'
21901      Convert operand 1 (valid for floating point mode M) to an integer
21902      value, still represented in floating point mode M, and store it in
21903      operand 0 (valid for floating point mode M).
21905 `fix_truncMN2'
21906      Like `fixMN2' but works for any floating point value of mode M by
21907      converting the value to an integer.
21909 `fixuns_truncMN2'
21910      Like `fixunsMN2' but works for any floating point value of mode M
21911      by converting the value to an integer.
21913 `truncMN2'
21914      Truncate operand 1 (valid for mode M) to mode N and store in
21915      operand 0 (which has mode N).  Both modes must be fixed point or
21916      both floating point.
21918 `extendMN2'
21919      Sign-extend operand 1 (valid for mode M) to mode N and store in
21920      operand 0 (which has mode N).  Both modes must be fixed point or
21921      both floating point.
21923 `zero_extendMN2'
21924      Zero-extend operand 1 (valid for mode M) to mode N and store in
21925      operand 0 (which has mode N).  Both modes must be fixed point.
21927 `fractMN2'
21928      Convert operand 1 of mode M to mode N and store in operand 0
21929      (which has mode N).  Mode M and mode N could be fixed-point to
21930      fixed-point, signed integer to fixed-point, fixed-point to signed
21931      integer, floating-point to fixed-point, or fixed-point to
21932      floating-point.  When overflows or underflows happen, the results
21933      are undefined.
21935 `satfractMN2'
21936      Convert operand 1 of mode M to mode N and store in operand 0
21937      (which has mode N).  Mode M and mode N could be fixed-point to
21938      fixed-point, signed integer to fixed-point, or floating-point to
21939      fixed-point.  When overflows or underflows happen, the instruction
21940      saturates the results to the maximum or the minimum.
21942 `fractunsMN2'
21943      Convert operand 1 of mode M to mode N and store in operand 0
21944      (which has mode N).  Mode M and mode N could be unsigned integer
21945      to fixed-point, or fixed-point to unsigned integer.  When
21946      overflows or underflows happen, the results are undefined.
21948 `satfractunsMN2'
21949      Convert unsigned integer operand 1 of mode M to fixed-point mode N
21950      and store in operand 0 (which has mode N).  When overflows or
21951      underflows happen, the instruction saturates the results to the
21952      maximum or the minimum.
21954 `extv'
21955      Extract a bit-field from operand 1 (a register or memory operand),
21956      where operand 2 specifies the width in bits and operand 3 the
21957      starting bit, and store it in operand 0.  Operand 0 must have mode
21958      `word_mode'.  Operand 1 may have mode `byte_mode' or `word_mode';
21959      often `word_mode' is allowed only for registers.  Operands 2 and 3
21960      must be valid for `word_mode'.
21962      The RTL generation pass generates this instruction only with
21963      constants for operands 2 and 3 and the constant is never zero for
21964      operand 2.
21966      The bit-field value is sign-extended to a full word integer before
21967      it is stored in operand 0.
21969 `extzv'
21970      Like `extv' except that the bit-field value is zero-extended.
21972 `insv'
21973      Store operand 3 (which must be valid for `word_mode') into a
21974      bit-field in operand 0, where operand 1 specifies the width in
21975      bits and operand 2 the starting bit.  Operand 0 may have mode
21976      `byte_mode' or `word_mode'; often `word_mode' is allowed only for
21977      registers.  Operands 1 and 2 must be valid for `word_mode'.
21979      The RTL generation pass generates this instruction only with
21980      constants for operands 1 and 2 and the constant is never zero for
21981      operand 1.
21983 `movMODEcc'
21984      Conditionally move operand 2 or operand 3 into operand 0 according
21985      to the comparison in operand 1.  If the comparison is true,
21986      operand 2 is moved into operand 0, otherwise operand 3 is moved.
21988      The mode of the operands being compared need not be the same as
21989      the operands being moved.  Some machines, sparc64 for example,
21990      have instructions that conditionally move an integer value based
21991      on the floating point condition codes and vice versa.
21993      If the machine does not have conditional move instructions, do not
21994      define these patterns.
21996 `addMODEcc'
21997      Similar to `movMODEcc' but for conditional addition.  Conditionally
21998      move operand 2 or (operands 2 + operand 3) into operand 0
21999      according to the comparison in operand 1.  If the comparison is
22000      true, operand 2 is moved into operand 0, otherwise (operand 2 +
22001      operand 3) is moved.
22003 `cstoreMODE4'
22004      Store zero or nonzero in operand 0 according to whether a
22005      comparison is true.  Operand 1 is a comparison operator.  Operand
22006      2 and operand 3 are the first and second operand of the
22007      comparison, respectively.  You specify the mode that operand 0
22008      must have when you write the `match_operand' expression.  The
22009      compiler automatically sees which mode you have used and supplies
22010      an operand of that mode.
22012      The value stored for a true condition must have 1 as its low bit,
22013      or else must be negative.  Otherwise the instruction is not
22014      suitable and you should omit it from the machine description.  You
22015      describe to the compiler exactly which value is stored by defining
22016      the macro `STORE_FLAG_VALUE' (*note Misc::).  If a description
22017      cannot be found that can be used for all the `sCOND' patterns, you
22018      should omit those operations from the machine description.
22020      These operations may fail, but should do so only in relatively
22021      uncommon cases; if they would fail for common cases involving
22022      integer comparisons, it is best to omit these patterns.
22024      If these operations are omitted, the compiler will usually
22025      generate code that copies the constant one to the target and
22026      branches around an assignment of zero to the target.  If this code
22027      is more efficient than the potential instructions used for the
22028      `cstoreMODE4' pattern followed by those required to convert the
22029      result into a 1 or a zero in `SImode', you should omit the
22030      `cstoreMODE4' operations from the machine description.
22032 `cbranchMODE4'
22033      Conditional branch instruction combined with a compare instruction.
22034      Operand 0 is a comparison operator.  Operand 1 and operand 2 are
22035      the first and second operands of the comparison, respectively.
22036      Operand 3 is a `label_ref' that refers to the label to jump to.
22038 `jump'
22039      A jump inside a function; an unconditional branch.  Operand 0 is
22040      the `label_ref' of the label to jump to.  This pattern name is
22041      mandatory on all machines.
22043 `call'
22044      Subroutine call instruction returning no value.  Operand 0 is the
22045      function to call; operand 1 is the number of bytes of arguments
22046      pushed as a `const_int'; operand 2 is the number of registers used
22047      as operands.
22049      On most machines, operand 2 is not actually stored into the RTL
22050      pattern.  It is supplied for the sake of some RISC machines which
22051      need to put this information into the assembler code; they can put
22052      it in the RTL instead of operand 1.
22054      Operand 0 should be a `mem' RTX whose address is the address of the
22055      function.  Note, however, that this address can be a `symbol_ref'
22056      expression even if it would not be a legitimate memory address on
22057      the target machine.  If it is also not a valid argument for a call
22058      instruction, the pattern for this operation should be a
22059      `define_expand' (*note Expander Definitions::) that places the
22060      address into a register and uses that register in the call
22061      instruction.
22063 `call_value'
22064      Subroutine call instruction returning a value.  Operand 0 is the
22065      hard register in which the value is returned.  There are three more
22066      operands, the same as the three operands of the `call' instruction
22067      (but with numbers increased by one).
22069      Subroutines that return `BLKmode' objects use the `call' insn.
22071 `call_pop', `call_value_pop'
22072      Similar to `call' and `call_value', except used if defined and if
22073      `RETURN_POPS_ARGS' is nonzero.  They should emit a `parallel' that
22074      contains both the function call and a `set' to indicate the
22075      adjustment made to the frame pointer.
22077      For machines where `RETURN_POPS_ARGS' can be nonzero, the use of
22078      these patterns increases the number of functions for which the
22079      frame pointer can be eliminated, if desired.
22081 `untyped_call'
22082      Subroutine call instruction returning a value of any type.
22083      Operand 0 is the function to call; operand 1 is a memory location
22084      where the result of calling the function is to be stored; operand
22085      2 is a `parallel' expression where each element is a `set'
22086      expression that indicates the saving of a function return value
22087      into the result block.
22089      This instruction pattern should be defined to support
22090      `__builtin_apply' on machines where special instructions are needed
22091      to call a subroutine with arbitrary arguments or to save the value
22092      returned.  This instruction pattern is required on machines that
22093      have multiple registers that can hold a return value (i.e.
22094      `FUNCTION_VALUE_REGNO_P' is true for more than one register).
22096 `return'
22097      Subroutine return instruction.  This instruction pattern name
22098      should be defined only if a single instruction can do all the work
22099      of returning from a function.
22101      Like the `movM' patterns, this pattern is also used after the RTL
22102      generation phase.  In this case it is to support machines where
22103      multiple instructions are usually needed to return from a
22104      function, but some class of functions only requires one
22105      instruction to implement a return.  Normally, the applicable
22106      functions are those which do not need to save any registers or
22107      allocate stack space.
22109      For such machines, the condition specified in this pattern should
22110      only be true when `reload_completed' is nonzero and the function's
22111      epilogue would only be a single instruction.  For machines with
22112      register windows, the routine `leaf_function_p' may be used to
22113      determine if a register window push is required.
22115      Machines that have conditional return instructions should define
22116      patterns such as
22118           (define_insn ""
22119             [(set (pc)
22120                   (if_then_else (match_operator
22121                                    0 "comparison_operator"
22122                                    [(cc0) (const_int 0)])
22123                                 (return)
22124                                 (pc)))]
22125             "CONDITION"
22126             "...")
22128      where CONDITION would normally be the same condition specified on
22129      the named `return' pattern.
22131 `untyped_return'
22132      Untyped subroutine return instruction.  This instruction pattern
22133      should be defined to support `__builtin_return' on machines where
22134      special instructions are needed to return a value of any type.
22136      Operand 0 is a memory location where the result of calling a
22137      function with `__builtin_apply' is stored; operand 1 is a
22138      `parallel' expression where each element is a `set' expression
22139      that indicates the restoring of a function return value from the
22140      result block.
22142 `nop'
22143      No-op instruction.  This instruction pattern name should always be
22144      defined to output a no-op in assembler code.  `(const_int 0)' will
22145      do as an RTL pattern.
22147 `indirect_jump'
22148      An instruction to jump to an address which is operand zero.  This
22149      pattern name is mandatory on all machines.
22151 `casesi'
22152      Instruction to jump through a dispatch table, including bounds
22153      checking.  This instruction takes five operands:
22155        1. The index to dispatch on, which has mode `SImode'.
22157        2. The lower bound for indices in the table, an integer constant.
22159        3. The total range of indices in the table--the largest index
22160           minus the smallest one (both inclusive).
22162        4. A label that precedes the table itself.
22164        5. A label to jump to if the index has a value outside the
22165           bounds.
22167      The table is an `addr_vec' or `addr_diff_vec' inside of a
22168      `jump_insn'.  The number of elements in the table is one plus the
22169      difference between the upper bound and the lower bound.
22171 `tablejump'
22172      Instruction to jump to a variable address.  This is a low-level
22173      capability which can be used to implement a dispatch table when
22174      there is no `casesi' pattern.
22176      This pattern requires two operands: the address or offset, and a
22177      label which should immediately precede the jump table.  If the
22178      macro `CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
22179      the first operand is an offset which counts from the address of
22180      the table; otherwise, it is an absolute address to jump to.  In
22181      either case, the first operand has mode `Pmode'.
22183      The `tablejump' insn is always the last insn before the jump table
22184      it uses.  Its assembler code normally has no need to use the
22185      second operand, but you should incorporate it in the RTL pattern so
22186      that the jump optimizer will not delete the table as unreachable
22187      code.
22189 `decrement_and_branch_until_zero'
22190      Conditional branch instruction that decrements a register and
22191      jumps if the register is nonzero.  Operand 0 is the register to
22192      decrement and test; operand 1 is the label to jump to if the
22193      register is nonzero.  *Note Looping Patterns::.
22195      This optional instruction pattern is only used by the combiner,
22196      typically for loops reversed by the loop optimizer when strength
22197      reduction is enabled.
22199 `doloop_end'
22200      Conditional branch instruction that decrements a register and
22201      jumps if the register is nonzero.  This instruction takes five
22202      operands: Operand 0 is the register to decrement and test; operand
22203      1 is the number of loop iterations as a `const_int' or
22204      `const0_rtx' if this cannot be determined until run-time; operand
22205      2 is the actual or estimated maximum number of iterations as a
22206      `const_int'; operand 3 is the number of enclosed loops as a
22207      `const_int' (an innermost loop has a value of 1); operand 4 is the
22208      label to jump to if the register is nonzero.  *Note Looping
22209      Patterns::.
22211      This optional instruction pattern should be defined for machines
22212      with low-overhead looping instructions as the loop optimizer will
22213      try to modify suitable loops to utilize it.  If nested
22214      low-overhead looping is not supported, use a `define_expand'
22215      (*note Expander Definitions::) and make the pattern fail if
22216      operand 3 is not `const1_rtx'.  Similarly, if the actual or
22217      estimated maximum number of iterations is too large for this
22218      instruction, make it fail.
22220 `doloop_begin'
22221      Companion instruction to `doloop_end' required for machines that
22222      need to perform some initialization, such as loading special
22223      registers used by a low-overhead looping instruction.  If
22224      initialization insns do not always need to be emitted, use a
22225      `define_expand' (*note Expander Definitions::) and make it fail.
22227 `canonicalize_funcptr_for_compare'
22228      Canonicalize the function pointer in operand 1 and store the result
22229      into operand 0.
22231      Operand 0 is always a `reg' and has mode `Pmode'; operand 1 may be
22232      a `reg', `mem', `symbol_ref', `const_int', etc and also has mode
22233      `Pmode'.
22235      Canonicalization of a function pointer usually involves computing
22236      the address of the function which would be called if the function
22237      pointer were used in an indirect call.
22239      Only define this pattern if function pointers on the target machine
22240      can have different values but still call the same function when
22241      used in an indirect call.
22243 `save_stack_block'
22244 `save_stack_function'
22245 `save_stack_nonlocal'
22246 `restore_stack_block'
22247 `restore_stack_function'
22248 `restore_stack_nonlocal'
22249      Most machines save and restore the stack pointer by copying it to
22250      or from an object of mode `Pmode'.  Do not define these patterns on
22251      such machines.
22253      Some machines require special handling for stack pointer saves and
22254      restores.  On those machines, define the patterns corresponding to
22255      the non-standard cases by using a `define_expand' (*note Expander
22256      Definitions::) that produces the required insns.  The three types
22257      of saves and restores are:
22259        1. `save_stack_block' saves the stack pointer at the start of a
22260           block that allocates a variable-sized object, and
22261           `restore_stack_block' restores the stack pointer when the
22262           block is exited.
22264        2. `save_stack_function' and `restore_stack_function' do a
22265           similar job for the outermost block of a function and are
22266           used when the function allocates variable-sized objects or
22267           calls `alloca'.  Only the epilogue uses the restored stack
22268           pointer, allowing a simpler save or restore sequence on some
22269           machines.
22271        3. `save_stack_nonlocal' is used in functions that contain labels
22272           branched to by nested functions.  It saves the stack pointer
22273           in such a way that the inner function can use
22274           `restore_stack_nonlocal' to restore the stack pointer.  The
22275           compiler generates code to restore the frame and argument
22276           pointer registers, but some machines require saving and
22277           restoring additional data such as register window information
22278           or stack backchains.  Place insns in these patterns to save
22279           and restore any such required data.
22281      When saving the stack pointer, operand 0 is the save area and
22282      operand 1 is the stack pointer.  The mode used to allocate the
22283      save area defaults to `Pmode' but you can override that choice by
22284      defining the `STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
22285      You must specify an integral mode, or `VOIDmode' if no save area
22286      is needed for a particular type of save (either because no save is
22287      needed or because a machine-specific save area can be used).
22288      Operand 0 is the stack pointer and operand 1 is the save area for
22289      restore operations.  If `save_stack_block' is defined, operand 0
22290      must not be `VOIDmode' since these saves can be arbitrarily nested.
22292      A save area is a `mem' that is at a constant offset from
22293      `virtual_stack_vars_rtx' when the stack pointer is saved for use by
22294      nonlocal gotos and a `reg' in the other two cases.
22296 `allocate_stack'
22297      Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1
22298      from the stack pointer to create space for dynamically allocated
22299      data.
22301      Store the resultant pointer to this space into operand 0.  If you
22302      are allocating space from the main stack, do this by emitting a
22303      move insn to copy `virtual_stack_dynamic_rtx' to operand 0.  If
22304      you are allocating the space elsewhere, generate code to copy the
22305      location of the space to operand 0.  In the latter case, you must
22306      ensure this space gets freed when the corresponding space on the
22307      main stack is free.
22309      Do not define this pattern if all that must be done is the
22310      subtraction.  Some machines require other operations such as stack
22311      probes or maintaining the back chain.  Define this pattern to emit
22312      those operations in addition to updating the stack pointer.
22314 `check_stack'
22315      If stack checking (*note Stack Checking::) cannot be done on your
22316      system by probing the stack, define this pattern to perform the
22317      needed check and signal an error if the stack has overflowed.  The
22318      single operand is the address in the stack farthest from the
22319      current stack pointer that you need to validate.  Normally, on
22320      platforms where this pattern is needed, you would obtain the stack
22321      limit from a global or thread-specific variable or register.
22323 `probe_stack'
22324      If stack checking (*note Stack Checking::) can be done on your
22325      system by probing the stack but doing it with a "store zero"
22326      instruction is not valid or optimal, define this pattern to do the
22327      probing differently and signal an error if the stack has
22328      overflowed.  The single operand is the memory reference in the
22329      stack that needs to be probed.
22331 `nonlocal_goto'
22332      Emit code to generate a non-local goto, e.g., a jump from one
22333      function to a label in an outer function.  This pattern has four
22334      arguments, each representing a value to be used in the jump.  The
22335      first argument is to be loaded into the frame pointer, the second
22336      is the address to branch to (code to dispatch to the actual label),
22337      the third is the address of a location where the stack is saved,
22338      and the last is the address of the label, to be placed in the
22339      location for the incoming static chain.
22341      On most machines you need not define this pattern, since GCC will
22342      already generate the correct code, which is to load the frame
22343      pointer and static chain, restore the stack (using the
22344      `restore_stack_nonlocal' pattern, if defined), and jump indirectly
22345      to the dispatcher.  You need only define this pattern if this code
22346      will not work on your machine.
22348 `nonlocal_goto_receiver'
22349      This pattern, if defined, contains code needed at the target of a
22350      nonlocal goto after the code already generated by GCC.  You will
22351      not normally need to define this pattern.  A typical reason why
22352      you might need this pattern is if some value, such as a pointer to
22353      a global table, must be restored when the frame pointer is
22354      restored.  Note that a nonlocal goto only occurs within a
22355      unit-of-translation, so a global table pointer that is shared by
22356      all functions of a given module need not be restored.  There are
22357      no arguments.
22359 `exception_receiver'
22360      This pattern, if defined, contains code needed at the site of an
22361      exception handler that isn't needed at the site of a nonlocal
22362      goto.  You will not normally need to define this pattern.  A
22363      typical reason why you might need this pattern is if some value,
22364      such as a pointer to a global table, must be restored after
22365      control flow is branched to the handler of an exception.  There
22366      are no arguments.
22368 `builtin_setjmp_setup'
22369      This pattern, if defined, contains additional code needed to
22370      initialize the `jmp_buf'.  You will not normally need to define
22371      this pattern.  A typical reason why you might need this pattern is
22372      if some value, such as a pointer to a global table, must be
22373      restored.  Though it is preferred that the pointer value be
22374      recalculated if possible (given the address of a label for
22375      instance).  The single argument is a pointer to the `jmp_buf'.
22376      Note that the buffer is five words long and that the first three
22377      are normally used by the generic mechanism.
22379 `builtin_setjmp_receiver'
22380      This pattern, if defined, contains code needed at the site of a
22381      built-in setjmp that isn't needed at the site of a nonlocal goto.
22382      You will not normally need to define this pattern.  A typical
22383      reason why you might need this pattern is if some value, such as a
22384      pointer to a global table, must be restored.  It takes one
22385      argument, which is the label to which builtin_longjmp transfered
22386      control; this pattern may be emitted at a small offset from that
22387      label.
22389 `builtin_longjmp'
22390      This pattern, if defined, performs the entire action of the
22391      longjmp.  You will not normally need to define this pattern unless
22392      you also define `builtin_setjmp_setup'.  The single argument is a
22393      pointer to the `jmp_buf'.
22395 `eh_return'
22396      This pattern, if defined, affects the way `__builtin_eh_return',
22397      and thence the call frame exception handling library routines, are
22398      built.  It is intended to handle non-trivial actions needed along
22399      the abnormal return path.
22401      The address of the exception handler to which the function should
22402      return is passed as operand to this pattern.  It will normally
22403      need to copied by the pattern to some special register or memory
22404      location.  If the pattern needs to determine the location of the
22405      target call frame in order to do so, it may use
22406      `EH_RETURN_STACKADJ_RTX', if defined; it will have already been
22407      assigned.
22409      If this pattern is not defined, the default action will be to
22410      simply copy the return address to `EH_RETURN_HANDLER_RTX'.  Either
22411      that macro or this pattern needs to be defined if call frame
22412      exception handling is to be used.
22414 `prologue'
22415      This pattern, if defined, emits RTL for entry to a function.  The
22416      function entry is responsible for setting up the stack frame,
22417      initializing the frame pointer register, saving callee saved
22418      registers, etc.
22420      Using a prologue pattern is generally preferred over defining
22421      `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
22422      prologue.
22424      The `prologue' pattern is particularly useful for targets which
22425      perform instruction scheduling.
22427 `epilogue'
22428      This pattern emits RTL for exit from a function.  The function
22429      exit is responsible for deallocating the stack frame, restoring
22430      callee saved registers and emitting the return instruction.
22432      Using an epilogue pattern is generally preferred over defining
22433      `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
22434      epilogue.
22436      The `epilogue' pattern is particularly useful for targets which
22437      perform instruction scheduling or which have delay slots for their
22438      return instruction.
22440 `sibcall_epilogue'
22441      This pattern, if defined, emits RTL for exit from a function
22442      without the final branch back to the calling function.  This
22443      pattern will be emitted before any sibling call (aka tail call)
22444      sites.
22446      The `sibcall_epilogue' pattern must not clobber any arguments used
22447      for parameter passing or any stack slots for arguments passed to
22448      the current function.
22450 `trap'
22451      This pattern, if defined, signals an error, typically by causing
22452      some kind of signal to be raised.  Among other places, it is used
22453      by the Java front end to signal `invalid array index' exceptions.
22455 `ctrapMM4'
22456      Conditional trap instruction.  Operand 0 is a piece of RTL which
22457      performs a comparison, and operands 1 and 2 are the arms of the
22458      comparison.  Operand 3 is the trap code, an integer.
22460      A typical `ctrap' pattern looks like
22462           (define_insn "ctrapsi4"
22463             [(trap_if (match_operator 0 "trap_operator"
22464                        [(match_operand 1 "register_operand")
22465                         (match_operand 2 "immediate_operand")])
22466                       (match_operand 3 "const_int_operand" "i"))]
22467             ""
22468             "...")
22470 `prefetch'
22471      This pattern, if defined, emits code for a non-faulting data
22472      prefetch instruction.  Operand 0 is the address of the memory to
22473      prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
22474      for a write to the memory address, or a constant 0 otherwise.
22475      Operand 2 is the expected degree of temporal locality of the data
22476      and is a value between 0 and 3, inclusive; 0 means that the data
22477      has no temporal locality, so it need not be left in the cache
22478      after the access; 3 means that the data has a high degree of
22479      temporal locality and should be left in all levels of cache
22480      possible;  1 and 2 mean, respectively, a low or moderate degree of
22481      temporal locality.
22483      Targets that do not support write prefetches or locality hints can
22484      ignore the values of operands 1 and 2.
22486 `blockage'
22487      This pattern defines a pseudo insn that prevents the instruction
22488      scheduler from moving instructions across the boundary defined by
22489      the blockage insn.  Normally an UNSPEC_VOLATILE pattern.
22491 `memory_barrier'
22492      If the target memory model is not fully synchronous, then this
22493      pattern should be defined to an instruction that orders both loads
22494      and stores before the instruction with respect to loads and stores
22495      after the instruction.  This pattern has no operands.
22497 `sync_compare_and_swapMODE'
22498      This pattern, if defined, emits code for an atomic compare-and-swap
22499      operation.  Operand 1 is the memory on which the atomic operation
22500      is performed.  Operand 2 is the "old" value to be compared against
22501      the current contents of the memory location.  Operand 3 is the
22502      "new" value to store in the memory if the compare succeeds.
22503      Operand 0 is the result of the operation; it should contain the
22504      contents of the memory before the operation.  If the compare
22505      succeeds, this should obviously be a copy of operand 2.
22507      This pattern must show that both operand 0 and operand 1 are
22508      modified.
22510      This pattern must issue any memory barrier instructions such that
22511      all memory operations before the atomic operation occur before the
22512      atomic operation and all memory operations after the atomic
22513      operation occur after the atomic operation.
22515      For targets where the success or failure of the compare-and-swap
22516      operation is available via the status flags, it is possible to
22517      avoid a separate compare operation and issue the subsequent branch
22518      or store-flag operation immediately after the compare-and-swap.
22519      To this end, GCC will look for a `MODE_CC' set in the output of
22520      `sync_compare_and_swapMODE'; if the machine description includes
22521      such a set, the target should also define special `cbranchcc4'
22522      and/or `cstorecc4' instructions.  GCC will then be able to take
22523      the destination of the `MODE_CC' set and pass it to the
22524      `cbranchcc4' or `cstorecc4' pattern as the first operand of the
22525      comparison (the second will be `(const_int 0)').
22527 `sync_addMODE', `sync_subMODE'
22528 `sync_iorMODE', `sync_andMODE'
22529 `sync_xorMODE', `sync_nandMODE'
22530      These patterns emit code for an atomic operation on memory.
22531      Operand 0 is the memory on which the atomic operation is performed.
22532      Operand 1 is the second operand to the binary operator.
22534      This pattern must issue any memory barrier instructions such that
22535      all memory operations before the atomic operation occur before the
22536      atomic operation and all memory operations after the atomic
22537      operation occur after the atomic operation.
22539      If these patterns are not defined, the operation will be
22540      constructed from a compare-and-swap operation, if defined.
22542 `sync_old_addMODE', `sync_old_subMODE'
22543 `sync_old_iorMODE', `sync_old_andMODE'
22544 `sync_old_xorMODE', `sync_old_nandMODE'
22545      These patterns are emit code for an atomic operation on memory,
22546      and return the value that the memory contained before the
22547      operation.  Operand 0 is the result value, operand 1 is the memory
22548      on which the atomic operation is performed, and operand 2 is the
22549      second operand to the binary operator.
22551      This pattern must issue any memory barrier instructions such that
22552      all memory operations before the atomic operation occur before the
22553      atomic operation and all memory operations after the atomic
22554      operation occur after the atomic operation.
22556      If these patterns are not defined, the operation will be
22557      constructed from a compare-and-swap operation, if defined.
22559 `sync_new_addMODE', `sync_new_subMODE'
22560 `sync_new_iorMODE', `sync_new_andMODE'
22561 `sync_new_xorMODE', `sync_new_nandMODE'
22562      These patterns are like their `sync_old_OP' counterparts, except
22563      that they return the value that exists in the memory location
22564      after the operation, rather than before the operation.
22566 `sync_lock_test_and_setMODE'
22567      This pattern takes two forms, based on the capabilities of the
22568      target.  In either case, operand 0 is the result of the operand,
22569      operand 1 is the memory on which the atomic operation is
22570      performed, and operand 2 is the value to set in the lock.
22572      In the ideal case, this operation is an atomic exchange operation,
22573      in which the previous value in memory operand is copied into the
22574      result operand, and the value operand is stored in the memory
22575      operand.
22577      For less capable targets, any value operand that is not the
22578      constant 1 should be rejected with `FAIL'.  In this case the
22579      target may use an atomic test-and-set bit operation.  The result
22580      operand should contain 1 if the bit was previously set and 0 if
22581      the bit was previously clear.  The true contents of the memory
22582      operand are implementation defined.
22584      This pattern must issue any memory barrier instructions such that
22585      the pattern as a whole acts as an acquire barrier, that is all
22586      memory operations after the pattern do not occur until the lock is
22587      acquired.
22589      If this pattern is not defined, the operation will be constructed
22590      from a compare-and-swap operation, if defined.
22592 `sync_lock_releaseMODE'
22593      This pattern, if defined, releases a lock set by
22594      `sync_lock_test_and_setMODE'.  Operand 0 is the memory that
22595      contains the lock; operand 1 is the value to store in the lock.
22597      If the target doesn't implement full semantics for
22598      `sync_lock_test_and_setMODE', any value operand which is not the
22599      constant 0 should be rejected with `FAIL', and the true contents
22600      of the memory operand are implementation defined.
22602      This pattern must issue any memory barrier instructions such that
22603      the pattern as a whole acts as a release barrier, that is the lock
22604      is released only after all previous memory operations have
22605      completed.
22607      If this pattern is not defined, then a `memory_barrier' pattern
22608      will be emitted, followed by a store of the value to the memory
22609      operand.
22611 `stack_protect_set'
22612      This pattern, if defined, moves a `Pmode' value from the memory in
22613      operand 1 to the memory in operand 0 without leaving the value in
22614      a register afterward.  This is to avoid leaking the value some
22615      place that an attacker might use to rewrite the stack guard slot
22616      after having clobbered it.
22618      If this pattern is not defined, then a plain move pattern is
22619      generated.
22621 `stack_protect_test'
22622      This pattern, if defined, compares a `Pmode' value from the memory
22623      in operand 1 with the memory in operand 0 without leaving the
22624      value in a register afterward and branches to operand 2 if the
22625      values weren't equal.
22627      If this pattern is not defined, then a plain compare pattern and
22628      conditional branch pattern is used.
22630 `clear_cache'
22631      This pattern, if defined, flushes the instruction cache for a
22632      region of memory.  The region is bounded to by the Pmode pointers
22633      in operand 0 inclusive and operand 1 exclusive.
22635      If this pattern is not defined, a call to the library function
22636      `__clear_cache' is used.
22639 \x1f
22640 File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
22642 16.10 When the Order of Patterns Matters
22643 ========================================
22645 Sometimes an insn can match more than one instruction pattern.  Then the
22646 pattern that appears first in the machine description is the one used.
22647 Therefore, more specific patterns (patterns that will match fewer
22648 things) and faster instructions (those that will produce better code
22649 when they do match) should usually go first in the description.
22651  In some cases the effect of ordering the patterns can be used to hide
22652 a pattern when it is not valid.  For example, the 68000 has an
22653 instruction for converting a fullword to floating point and another for
22654 converting a byte to floating point.  An instruction converting an
22655 integer to floating point could match either one.  We put the pattern
22656 to convert the fullword first to make sure that one will be used rather
22657 than the other.  (Otherwise a large integer might be generated as a
22658 single-byte immediate quantity, which would not work.)  Instead of
22659 using this pattern ordering it would be possible to make the pattern
22660 for convert-a-byte smart enough to deal properly with any constant
22661 value.
22663 \x1f
22664 File: gccint.info,  Node: Dependent Patterns,  Next: Jump Patterns,  Prev: Pattern Ordering,  Up: Machine Desc
22666 16.11 Interdependence of Patterns
22667 =================================
22669 In some cases machines support instructions identical except for the
22670 machine mode of one or more operands.  For example, there may be
22671 "sign-extend halfword" and "sign-extend byte" instructions whose
22672 patterns are
22674      (set (match_operand:SI 0 ...)
22675           (extend:SI (match_operand:HI 1 ...)))
22677      (set (match_operand:SI 0 ...)
22678           (extend:SI (match_operand:QI 1 ...)))
22680 Constant integers do not specify a machine mode, so an instruction to
22681 extend a constant value could match either pattern.  The pattern it
22682 actually will match is the one that appears first in the file.  For
22683 correct results, this must be the one for the widest possible mode
22684 (`HImode', here).  If the pattern matches the `QImode' instruction, the
22685 results will be incorrect if the constant value does not actually fit
22686 that mode.
22688  Such instructions to extend constants are rarely generated because
22689 they are optimized away, but they do occasionally happen in nonoptimized
22690 compilations.
22692  If a constraint in a pattern allows a constant, the reload pass may
22693 replace a register with a constant permitted by the constraint in some
22694 cases.  Similarly for memory references.  Because of this substitution,
22695 you should not provide separate patterns for increment and decrement
22696 instructions.  Instead, they should be generated from the same pattern
22697 that supports register-register add insns by examining the operands and
22698 generating the appropriate machine instruction.
22700 \x1f
22701 File: gccint.info,  Node: Jump Patterns,  Next: Looping Patterns,  Prev: Dependent Patterns,  Up: Machine Desc
22703 16.12 Defining Jump Instruction Patterns
22704 ========================================
22706 GCC does not assume anything about how the machine realizes jumps.  The
22707 machine description should define a single pattern, usually a
22708 `define_expand', which expands to all the required insns.
22710  Usually, this would be a comparison insn to set the condition code and
22711 a separate branch insn testing the condition code and branching or not
22712 according to its value.  For many machines, however, separating
22713 compares and branches is limiting, which is why the more flexible
22714 approach with one `define_expand' is used in GCC.  The machine
22715 description becomes clearer for architectures that have
22716 compare-and-branch instructions but no condition code.  It also works
22717 better when different sets of comparison operators are supported by
22718 different kinds of conditional branches (e.g. integer vs.
22719 floating-point), or by conditional branches with respect to conditional
22720 stores.
22722  Two separate insns are always used if the machine description
22723 represents a condition code register using the legacy RTL expression
22724 `(cc0)', and on most machines that use a separate condition code
22725 register (*note Condition Code::).  For machines that use `(cc0)', in
22726 fact, the set and use of the condition code must be separate and
22727 adjacent(1), thus allowing flags in `cc_status' to be used (*note
22728 Condition Code::) and so that the comparison and branch insns could be
22729 located from each other by using the functions `prev_cc0_setter' and
22730 `next_cc0_user'.
22732  Even in this case having a single entry point for conditional branches
22733 is advantageous, because it handles equally well the case where a single
22734 comparison instruction records the results of both signed and unsigned
22735 comparison of the given operands (with the branch insns coming in
22736 distinct signed and unsigned flavors) as in the x86 or SPARC, and the
22737 case where there are distinct signed and unsigned compare instructions
22738 and only one set of conditional branch instructions as in the PowerPC.
22740  ---------- Footnotes ----------
22742  (1) `note' insns can separate them, though.
22744 \x1f
22745 File: gccint.info,  Node: Looping Patterns,  Next: Insn Canonicalizations,  Prev: Jump Patterns,  Up: Machine Desc
22747 16.13 Defining Looping Instruction Patterns
22748 ===========================================
22750 Some machines have special jump instructions that can be utilized to
22751 make loops more efficient.  A common example is the 68000 `dbra'
22752 instruction which performs a decrement of a register and a branch if the
22753 result was greater than zero.  Other machines, in particular digital
22754 signal processors (DSPs), have special block repeat instructions to
22755 provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
22756 DSPs have a block repeat instruction that loads special registers to
22757 mark the top and end of a loop and to count the number of loop
22758 iterations.  This avoids the need for fetching and executing a
22759 `dbra'-like instruction and avoids pipeline stalls associated with the
22760 jump.
22762  GCC has three special named patterns to support low overhead looping.
22763 They are `decrement_and_branch_until_zero', `doloop_begin', and
22764 `doloop_end'.  The first pattern, `decrement_and_branch_until_zero', is
22765 not emitted during RTL generation but may be emitted during the
22766 instruction combination phase.  This requires the assistance of the
22767 loop optimizer, using information collected during strength reduction,
22768 to reverse a loop to count down to zero.  Some targets also require the
22769 loop optimizer to add a `REG_NONNEG' note to indicate that the
22770 iteration count is always positive.  This is needed if the target
22771 performs a signed loop termination test.  For example, the 68000 uses a
22772 pattern similar to the following for its `dbra' instruction:
22774      (define_insn "decrement_and_branch_until_zero"
22775        [(set (pc)
22776              (if_then_else
22777                (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
22778                             (const_int -1))
22779                    (const_int 0))
22780                (label_ref (match_operand 1 "" ""))
22781                (pc)))
22782         (set (match_dup 0)
22783              (plus:SI (match_dup 0)
22784                       (const_int -1)))]
22785        "find_reg_note (insn, REG_NONNEG, 0)"
22786        "...")
22788  Note that since the insn is both a jump insn and has an output, it must
22789 deal with its own reloads, hence the `m' constraints.  Also note that
22790 since this insn is generated by the instruction combination phase
22791 combining two sequential insns together into an implicit parallel insn,
22792 the iteration counter needs to be biased by the same amount as the
22793 decrement operation, in this case -1.  Note that the following similar
22794 pattern will not be matched by the combiner.
22796      (define_insn "decrement_and_branch_until_zero"
22797        [(set (pc)
22798              (if_then_else
22799                (ge (match_operand:SI 0 "general_operand" "+d*am")
22800                    (const_int 1))
22801                (label_ref (match_operand 1 "" ""))
22802                (pc)))
22803         (set (match_dup 0)
22804              (plus:SI (match_dup 0)
22805                       (const_int -1)))]
22806        "find_reg_note (insn, REG_NONNEG, 0)"
22807        "...")
22809  The other two special looping patterns, `doloop_begin' and
22810 `doloop_end', are emitted by the loop optimizer for certain
22811 well-behaved loops with a finite number of loop iterations using
22812 information collected during strength reduction.
22814  The `doloop_end' pattern describes the actual looping instruction (or
22815 the implicit looping operation) and the `doloop_begin' pattern is an
22816 optional companion pattern that can be used for initialization needed
22817 for some low-overhead looping instructions.
22819  Note that some machines require the actual looping instruction to be
22820 emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
22821 the true RTL for a looping instruction at the top of the loop can cause
22822 problems with flow analysis.  So instead, a dummy `doloop' insn is
22823 emitted at the end of the loop.  The machine dependent reorg pass checks
22824 for the presence of this `doloop' insn and then searches back to the
22825 top of the loop, where it inserts the true looping insn (provided there
22826 are no instructions in the loop which would cause problems).  Any
22827 additional labels can be emitted at this point.  In addition, if the
22828 desired special iteration counter register was not allocated, this
22829 machine dependent reorg pass could emit a traditional compare and jump
22830 instruction pair.
22832  The essential difference between the `decrement_and_branch_until_zero'
22833 and the `doloop_end' patterns is that the loop optimizer allocates an
22834 additional pseudo register for the latter as an iteration counter.
22835 This pseudo register cannot be used within the loop (i.e., general
22836 induction variables cannot be derived from it), however, in many cases
22837 the loop induction variable may become redundant and removed by the
22838 flow pass.
22840 \x1f
22841 File: gccint.info,  Node: Insn Canonicalizations,  Next: Expander Definitions,  Prev: Looping Patterns,  Up: Machine Desc
22843 16.14 Canonicalization of Instructions
22844 ======================================
22846 There are often cases where multiple RTL expressions could represent an
22847 operation performed by a single machine instruction.  This situation is
22848 most commonly encountered with logical, branch, and multiply-accumulate
22849 instructions.  In such cases, the compiler attempts to convert these
22850 multiple RTL expressions into a single canonical form to reduce the
22851 number of insn patterns required.
22853  In addition to algebraic simplifications, following canonicalizations
22854 are performed:
22856    * For commutative and comparison operators, a constant is always
22857      made the second operand.  If a machine only supports a constant as
22858      the second operand, only patterns that match a constant in the
22859      second operand need be supplied.
22861    * For associative operators, a sequence of operators will always
22862      chain to the left; for instance, only the left operand of an
22863      integer `plus' can itself be a `plus'.  `and', `ior', `xor',
22864      `plus', `mult', `smin', `smax', `umin', and `umax' are associative
22865      when applied to integers, and sometimes to floating-point.
22867    * For these operators, if only one operand is a `neg', `not',
22868      `mult', `plus', or `minus' expression, it will be the first
22869      operand.
22871    * In combinations of `neg', `mult', `plus', and `minus', the `neg'
22872      operations (if any) will be moved inside the operations as far as
22873      possible.  For instance, `(neg (mult A B))' is canonicalized as
22874      `(mult (neg A) B)', but `(plus (mult (neg B) C) A)' is
22875      canonicalized as `(minus A (mult B C))'.
22877    * For the `compare' operator, a constant is always the second operand
22878      if the first argument is a condition code register or `(cc0)'.
22880    * An operand of `neg', `not', `mult', `plus', or `minus' is made the
22881      first operand under the same conditions as above.
22883    * `(ltu (plus A B) B)' is converted to `(ltu (plus A B) A)'.
22884      Likewise with `geu' instead of `ltu'.
22886    * `(minus X (const_int N))' is converted to `(plus X (const_int
22887      -N))'.
22889    * Within address computations (i.e., inside `mem'), a left shift is
22890      converted into the appropriate multiplication by a power of two.
22892    * De Morgan's Law is used to move bitwise negation inside a bitwise
22893      logical-and or logical-or operation.  If this results in only one
22894      operand being a `not' expression, it will be the first one.
22896      A machine that has an instruction that performs a bitwise
22897      logical-and of one operand with the bitwise negation of the other
22898      should specify the pattern for that instruction as
22900           (define_insn ""
22901             [(set (match_operand:M 0 ...)
22902                   (and:M (not:M (match_operand:M 1 ...))
22903                                (match_operand:M 2 ...)))]
22904             "..."
22905             "...")
22907      Similarly, a pattern for a "NAND" instruction should be written
22909           (define_insn ""
22910             [(set (match_operand:M 0 ...)
22911                   (ior:M (not:M (match_operand:M 1 ...))
22912                                (not:M (match_operand:M 2 ...))))]
22913             "..."
22914             "...")
22916      In both cases, it is not necessary to include patterns for the many
22917      logically equivalent RTL expressions.
22919    * The only possible RTL expressions involving both bitwise
22920      exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M
22921      (xor:M X Y))'.
22923    * The sum of three items, one of which is a constant, will only
22924      appear in the form
22926           (plus:M (plus:M X Y) CONSTANT)
22928    * Equality comparisons of a group of bits (usually a single bit)
22929      with zero will be written using `zero_extract' rather than the
22930      equivalent `and' or `sign_extract' operations.
22933  Further canonicalization rules are defined in the function
22934 `commutative_operand_precedence' in `gcc/rtlanal.c'.
22936 \x1f
22937 File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc
22939 16.15 Defining RTL Sequences for Code Generation
22940 ================================================
22942 On some target machines, some standard pattern names for RTL generation
22943 cannot be handled with single insn, but a sequence of RTL insns can
22944 represent them.  For these target machines, you can write a
22945 `define_expand' to specify how to generate the sequence of RTL.
22947  A `define_expand' is an RTL expression that looks almost like a
22948 `define_insn'; but, unlike the latter, a `define_expand' is used only
22949 for RTL generation and it can produce more than one RTL insn.
22951  A `define_expand' RTX has four operands:
22953    * The name.  Each `define_expand' must have a name, since the only
22954      use for it is to refer to it by name.
22956    * The RTL template.  This is a vector of RTL expressions representing
22957      a sequence of separate instructions.  Unlike `define_insn', there
22958      is no implicit surrounding `PARALLEL'.
22960    * The condition, a string containing a C expression.  This
22961      expression is used to express how the availability of this pattern
22962      depends on subclasses of target machine, selected by command-line
22963      options when GCC is run.  This is just like the condition of a
22964      `define_insn' that has a standard name.  Therefore, the condition
22965      (if present) may not depend on the data in the insn being matched,
22966      but only the target-machine-type flags.  The compiler needs to
22967      test these conditions during initialization in order to learn
22968      exactly which named instructions are available in a particular run.
22970    * The preparation statements, a string containing zero or more C
22971      statements which are to be executed before RTL code is generated
22972      from the RTL template.
22974      Usually these statements prepare temporary registers for use as
22975      internal operands in the RTL template, but they can also generate
22976      RTL insns directly by calling routines such as `emit_insn', etc.
22977      Any such insns precede the ones that come from the RTL template.
22979  Every RTL insn emitted by a `define_expand' must match some
22980 `define_insn' in the machine description.  Otherwise, the compiler will
22981 crash when trying to generate code for the insn or trying to optimize
22984  The RTL template, in addition to controlling generation of RTL insns,
22985 also describes the operands that need to be specified when this pattern
22986 is used.  In particular, it gives a predicate for each operand.
22988  A true operand, which needs to be specified in order to generate RTL
22989 from the pattern, should be described with a `match_operand' in its
22990 first occurrence in the RTL template.  This enters information on the
22991 operand's predicate into the tables that record such things.  GCC uses
22992 the information to preload the operand into a register if that is
22993 required for valid RTL code.  If the operand is referred to more than
22994 once, subsequent references should use `match_dup'.
22996  The RTL template may also refer to internal "operands" which are
22997 temporary registers or labels used only within the sequence made by the
22998 `define_expand'.  Internal operands are substituted into the RTL
22999 template with `match_dup', never with `match_operand'.  The values of
23000 the internal operands are not passed in as arguments by the compiler
23001 when it requests use of this pattern.  Instead, they are computed
23002 within the pattern, in the preparation statements.  These statements
23003 compute the values and store them into the appropriate elements of
23004 `operands' so that `match_dup' can find them.
23006  There are two special macros defined for use in the preparation
23007 statements: `DONE' and `FAIL'.  Use them with a following semicolon, as
23008 a statement.
23010 `DONE'
23011      Use the `DONE' macro to end RTL generation for the pattern.  The
23012      only RTL insns resulting from the pattern on this occasion will be
23013      those already emitted by explicit calls to `emit_insn' within the
23014      preparation statements; the RTL template will not be generated.
23016 `FAIL'
23017      Make the pattern fail on this occasion.  When a pattern fails, it
23018      means that the pattern was not truly available.  The calling
23019      routines in the compiler will try other strategies for code
23020      generation using other patterns.
23022      Failure is currently supported only for binary (addition,
23023      multiplication, shifting, etc.) and bit-field (`extv', `extzv',
23024      and `insv') operations.
23026  If the preparation falls through (invokes neither `DONE' nor `FAIL'),
23027 then the `define_expand' acts like a `define_insn' in that the RTL
23028 template is used to generate the insn.
23030  The RTL template is not used for matching, only for generating the
23031 initial insn list.  If the preparation statement always invokes `DONE'
23032 or `FAIL', the RTL template may be reduced to a simple list of
23033 operands, such as this example:
23035      (define_expand "addsi3"
23036        [(match_operand:SI 0 "register_operand" "")
23037         (match_operand:SI 1 "register_operand" "")
23038         (match_operand:SI 2 "register_operand" "")]
23039        ""
23040        "
23041      {
23042        handle_add (operands[0], operands[1], operands[2]);
23043        DONE;
23044      }")
23046  Here is an example, the definition of left-shift for the SPUR chip:
23048      (define_expand "ashlsi3"
23049        [(set (match_operand:SI 0 "register_operand" "")
23050              (ashift:SI
23051                (match_operand:SI 1 "register_operand" "")
23052                (match_operand:SI 2 "nonmemory_operand" "")))]
23053        ""
23054        "
23056      {
23057        if (GET_CODE (operands[2]) != CONST_INT
23058            || (unsigned) INTVAL (operands[2]) > 3)
23059          FAIL;
23060      }")
23062 This example uses `define_expand' so that it can generate an RTL insn
23063 for shifting when the shift-count is in the supported range of 0 to 3
23064 but fail in other cases where machine insns aren't available.  When it
23065 fails, the compiler tries another strategy using different patterns
23066 (such as, a library call).
23068  If the compiler were able to handle nontrivial condition-strings in
23069 patterns with names, then it would be possible to use a `define_insn'
23070 in that case.  Here is another case (zero-extension on the 68000) which
23071 makes more use of the power of `define_expand':
23073      (define_expand "zero_extendhisi2"
23074        [(set (match_operand:SI 0 "general_operand" "")
23075              (const_int 0))
23076         (set (strict_low_part
23077                (subreg:HI
23078                  (match_dup 0)
23079                  0))
23080              (match_operand:HI 1 "general_operand" ""))]
23081        ""
23082        "operands[1] = make_safe_from (operands[1], operands[0]);")
23084 Here two RTL insns are generated, one to clear the entire output operand
23085 and the other to copy the input operand into its low half.  This
23086 sequence is incorrect if the input operand refers to [the old value of]
23087 the output operand, so the preparation statement makes sure this isn't
23088 so.  The function `make_safe_from' copies the `operands[1]' into a
23089 temporary register if it refers to `operands[0]'.  It does this by
23090 emitting another RTL insn.
23092  Finally, a third example shows the use of an internal operand.
23093 Zero-extension on the SPUR chip is done by `and'-ing the result against
23094 a halfword mask.  But this mask cannot be represented by a `const_int'
23095 because the constant value is too large to be legitimate on this
23096 machine.  So it must be copied into a register with `force_reg' and
23097 then the register used in the `and'.
23099      (define_expand "zero_extendhisi2"
23100        [(set (match_operand:SI 0 "register_operand" "")
23101              (and:SI (subreg:SI
23102                        (match_operand:HI 1 "register_operand" "")
23103                        0)
23104                      (match_dup 2)))]
23105        ""
23106        "operands[2]
23107           = force_reg (SImode, GEN_INT (65535)); ")
23109  _Note:_ If the `define_expand' is used to serve a standard binary or
23110 unary arithmetic operation or a bit-field operation, then the last insn
23111 it generates must not be a `code_label', `barrier' or `note'.  It must
23112 be an `insn', `jump_insn' or `call_insn'.  If you don't need a real insn
23113 at the end, emit an insn to copy the result of the operation into
23114 itself.  Such an insn will generate no code, but it can avoid problems
23115 in the compiler.
23117 \x1f
23118 File: gccint.info,  Node: Insn Splitting,  Next: Including Patterns,  Prev: Expander Definitions,  Up: Machine Desc
23120 16.16 Defining How to Split Instructions
23121 ========================================
23123 There are two cases where you should specify how to split a pattern
23124 into multiple insns.  On machines that have instructions requiring
23125 delay slots (*note Delay Slots::) or that have instructions whose
23126 output is not available for multiple cycles (*note Processor pipeline
23127 description::), the compiler phases that optimize these cases need to
23128 be able to move insns into one-instruction delay slots.  However, some
23129 insns may generate more than one machine instruction.  These insns
23130 cannot be placed into a delay slot.
23132  Often you can rewrite the single insn as a list of individual insns,
23133 each corresponding to one machine instruction.  The disadvantage of
23134 doing so is that it will cause the compilation to be slower and require
23135 more space.  If the resulting insns are too complex, it may also
23136 suppress some optimizations.  The compiler splits the insn if there is a
23137 reason to believe that it might improve instruction or delay slot
23138 scheduling.
23140  The insn combiner phase also splits putative insns.  If three insns are
23141 merged into one insn with a complex expression that cannot be matched by
23142 some `define_insn' pattern, the combiner phase attempts to split the
23143 complex pattern into two insns that are recognized.  Usually it can
23144 break the complex pattern into two patterns by splitting out some
23145 subexpression.  However, in some other cases, such as performing an
23146 addition of a large constant in two insns on a RISC machine, the way to
23147 split the addition into two insns is machine-dependent.
23149  The `define_split' definition tells the compiler how to split a
23150 complex insn into several simpler insns.  It looks like this:
23152      (define_split
23153        [INSN-PATTERN]
23154        "CONDITION"
23155        [NEW-INSN-PATTERN-1
23156         NEW-INSN-PATTERN-2
23157         ...]
23158        "PREPARATION-STATEMENTS")
23160  INSN-PATTERN is a pattern that needs to be split and CONDITION is the
23161 final condition to be tested, as in a `define_insn'.  When an insn
23162 matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
23163 in the insn list with the insns given by NEW-INSN-PATTERN-1,
23164 NEW-INSN-PATTERN-2, etc.
23166  The PREPARATION-STATEMENTS are similar to those statements that are
23167 specified for `define_expand' (*note Expander Definitions::) and are
23168 executed before the new RTL is generated to prepare for the generated
23169 code or emit some insns whose pattern is not fixed.  Unlike those in
23170 `define_expand', however, these statements must not generate any new
23171 pseudo-registers.  Once reload has completed, they also must not
23172 allocate any space in the stack frame.
23174  Patterns are matched against INSN-PATTERN in two different
23175 circumstances.  If an insn needs to be split for delay slot scheduling
23176 or insn scheduling, the insn is already known to be valid, which means
23177 that it must have been matched by some `define_insn' and, if
23178 `reload_completed' is nonzero, is known to satisfy the constraints of
23179 that `define_insn'.  In that case, the new insn patterns must also be
23180 insns that are matched by some `define_insn' and, if `reload_completed'
23181 is nonzero, must also satisfy the constraints of those definitions.
23183  As an example of this usage of `define_split', consider the following
23184 example from `a29k.md', which splits a `sign_extend' from `HImode' to
23185 `SImode' into a pair of shift insns:
23187      (define_split
23188        [(set (match_operand:SI 0 "gen_reg_operand" "")
23189              (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
23190        ""
23191        [(set (match_dup 0)
23192              (ashift:SI (match_dup 1)
23193                         (const_int 16)))
23194         (set (match_dup 0)
23195              (ashiftrt:SI (match_dup 0)
23196                           (const_int 16)))]
23197        "
23198      { operands[1] = gen_lowpart (SImode, operands[1]); }")
23200  When the combiner phase tries to split an insn pattern, it is always
23201 the case that the pattern is _not_ matched by any `define_insn'.  The
23202 combiner pass first tries to split a single `set' expression and then
23203 the same `set' expression inside a `parallel', but followed by a
23204 `clobber' of a pseudo-reg to use as a scratch register.  In these
23205 cases, the combiner expects exactly two new insn patterns to be
23206 generated.  It will verify that these patterns match some `define_insn'
23207 definitions, so you need not do this test in the `define_split' (of
23208 course, there is no point in writing a `define_split' that will never
23209 produce insns that match).
23211  Here is an example of this use of `define_split', taken from
23212 `rs6000.md':
23214      (define_split
23215        [(set (match_operand:SI 0 "gen_reg_operand" "")
23216              (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
23217                       (match_operand:SI 2 "non_add_cint_operand" "")))]
23218        ""
23219        [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
23220         (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
23221      "
23222      {
23223        int low = INTVAL (operands[2]) & 0xffff;
23224        int high = (unsigned) INTVAL (operands[2]) >> 16;
23226        if (low & 0x8000)
23227          high++, low |= 0xffff0000;
23229        operands[3] = GEN_INT (high << 16);
23230        operands[4] = GEN_INT (low);
23231      }")
23233  Here the predicate `non_add_cint_operand' matches any `const_int' that
23234 is _not_ a valid operand of a single add insn.  The add with the
23235 smaller displacement is written so that it can be substituted into the
23236 address of a subsequent operation.
23238  An example that uses a scratch register, from the same file, generates
23239 an equality comparison of a register and a large constant:
23241      (define_split
23242        [(set (match_operand:CC 0 "cc_reg_operand" "")
23243              (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
23244                          (match_operand:SI 2 "non_short_cint_operand" "")))
23245         (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
23246        "find_single_use (operands[0], insn, 0)
23247         && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
23248             || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
23249        [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
23250         (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
23251        "
23252      {
23253        /* Get the constant we are comparing against, C, and see what it
23254           looks like sign-extended to 16 bits.  Then see what constant
23255           could be XOR'ed with C to get the sign-extended value.  */
23257        int c = INTVAL (operands[2]);
23258        int sextc = (c << 16) >> 16;
23259        int xorv = c ^ sextc;
23261        operands[4] = GEN_INT (xorv);
23262        operands[5] = GEN_INT (sextc);
23263      }")
23265  To avoid confusion, don't write a single `define_split' that accepts
23266 some insns that match some `define_insn' as well as some insns that
23267 don't.  Instead, write two separate `define_split' definitions, one for
23268 the insns that are valid and one for the insns that are not valid.
23270  The splitter is allowed to split jump instructions into sequence of
23271 jumps or create new jumps in while splitting non-jump instructions.  As
23272 the central flowgraph and branch prediction information needs to be
23273 updated, several restriction apply.
23275  Splitting of jump instruction into sequence that over by another jump
23276 instruction is always valid, as compiler expect identical behavior of
23277 new jump.  When new sequence contains multiple jump instructions or new
23278 labels, more assistance is needed.  Splitter is required to create only
23279 unconditional jumps, or simple conditional jump instructions.
23280 Additionally it must attach a `REG_BR_PROB' note to each conditional
23281 jump.  A global variable `split_branch_probability' holds the
23282 probability of the original branch in case it was a simple conditional
23283 jump, -1 otherwise.  To simplify recomputing of edge frequencies, the
23284 new sequence is required to have only forward jumps to the newly
23285 created labels.
23287  For the common case where the pattern of a define_split exactly
23288 matches the pattern of a define_insn, use `define_insn_and_split'.  It
23289 looks like this:
23291      (define_insn_and_split
23292        [INSN-PATTERN]
23293        "CONDITION"
23294        "OUTPUT-TEMPLATE"
23295        "SPLIT-CONDITION"
23296        [NEW-INSN-PATTERN-1
23297         NEW-INSN-PATTERN-2
23298         ...]
23299        "PREPARATION-STATEMENTS"
23300        [INSN-ATTRIBUTES])
23302  INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
23303 as in `define_insn'.  The NEW-INSN-PATTERN vector and the
23304 PREPARATION-STATEMENTS are used as in a `define_split'.  The
23305 SPLIT-CONDITION is also used as in `define_split', with the additional
23306 behavior that if the condition starts with `&&', the condition used for
23307 the split will be the constructed as a logical "and" of the split
23308 condition with the insn condition.  For example, from i386.md:
23310      (define_insn_and_split "zero_extendhisi2_and"
23311        [(set (match_operand:SI 0 "register_operand" "=r")
23312           (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
23313         (clobber (reg:CC 17))]
23314        "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
23315        "#"
23316        "&& reload_completed"
23317        [(parallel [(set (match_dup 0)
23318                         (and:SI (match_dup 0) (const_int 65535)))
23319                    (clobber (reg:CC 17))])]
23320        ""
23321        [(set_attr "type" "alu1")])
23323  In this case, the actual split condition will be
23324 `TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
23326  The `define_insn_and_split' construction provides exactly the same
23327 functionality as two separate `define_insn' and `define_split'
23328 patterns.  It exists for compactness, and as a maintenance tool to
23329 prevent having to ensure the two patterns' templates match.
23331 \x1f
23332 File: gccint.info,  Node: Including Patterns,  Next: Peephole Definitions,  Prev: Insn Splitting,  Up: Machine Desc
23334 16.17 Including Patterns in Machine Descriptions.
23335 =================================================
23337 The `include' pattern tells the compiler tools where to look for
23338 patterns that are in files other than in the file `.md'.  This is used
23339 only at build time and there is no preprocessing allowed.
23341  It looks like:
23344      (include
23345        PATHNAME)
23347  For example:
23350      (include "filestuff")
23352  Where PATHNAME is a string that specifies the location of the file,
23353 specifies the include file to be in `gcc/config/target/filestuff'.  The
23354 directory `gcc/config/target' is regarded as the default directory.
23356  Machine descriptions may be split up into smaller more manageable
23357 subsections and placed into subdirectories.
23359  By specifying:
23362      (include "BOGUS/filestuff")
23364  the include file is specified to be in
23365 `gcc/config/TARGET/BOGUS/filestuff'.
23367  Specifying an absolute path for the include file such as;
23369      (include "/u2/BOGUS/filestuff")
23370  is permitted but is not encouraged.
23372 16.17.1 RTL Generation Tool Options for Directory Search
23373 --------------------------------------------------------
23375 The `-IDIR' option specifies directories to search for machine
23376 descriptions.  For example:
23379      genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
23381  Add the directory DIR to the head of the list of directories to be
23382 searched for header files.  This can be used to override a system
23383 machine definition file, substituting your own version, since these
23384 directories are searched before the default machine description file
23385 directories.  If you use more than one `-I' option, the directories are
23386 scanned in left-to-right order; the standard default directory come
23387 after.
23389 \x1f
23390 File: gccint.info,  Node: Peephole Definitions,  Next: Insn Attributes,  Prev: Including Patterns,  Up: Machine Desc
23392 16.18 Machine-Specific Peephole Optimizers
23393 ==========================================
23395 In addition to instruction patterns the `md' file may contain
23396 definitions of machine-specific peephole optimizations.
23398  The combiner does not notice certain peephole optimizations when the
23399 data flow in the program does not suggest that it should try them.  For
23400 example, sometimes two consecutive insns related in purpose can be
23401 combined even though the second one does not appear to use a register
23402 computed in the first one.  A machine-specific peephole optimizer can
23403 detect such opportunities.
23405  There are two forms of peephole definitions that may be used.  The
23406 original `define_peephole' is run at assembly output time to match
23407 insns and substitute assembly text.  Use of `define_peephole' is
23408 deprecated.
23410  A newer `define_peephole2' matches insns and substitutes new insns.
23411 The `peephole2' pass is run after register allocation but before
23412 scheduling, which may result in much better code for targets that do
23413 scheduling.
23415 * Menu:
23417 * define_peephole::     RTL to Text Peephole Optimizers
23418 * define_peephole2::    RTL to RTL Peephole Optimizers
23420 \x1f
23421 File: gccint.info,  Node: define_peephole,  Next: define_peephole2,  Up: Peephole Definitions
23423 16.18.1 RTL to Text Peephole Optimizers
23424 ---------------------------------------
23426 A definition looks like this:
23428      (define_peephole
23429        [INSN-PATTERN-1
23430         INSN-PATTERN-2
23431         ...]
23432        "CONDITION"
23433        "TEMPLATE"
23434        "OPTIONAL-INSN-ATTRIBUTES")
23436 The last string operand may be omitted if you are not using any
23437 machine-specific information in this machine description.  If present,
23438 it must obey the same rules as in a `define_insn'.
23440  In this skeleton, INSN-PATTERN-1 and so on are patterns to match
23441 consecutive insns.  The optimization applies to a sequence of insns when
23442 INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next,
23443 and so on.
23445  Each of the insns matched by a peephole must also match a
23446 `define_insn'.  Peepholes are checked only at the last stage just
23447 before code generation, and only optionally.  Therefore, any insn which
23448 would match a peephole but no `define_insn' will cause a crash in code
23449 generation in an unoptimized compilation, or at various optimization
23450 stages.
23452  The operands of the insns are matched with `match_operands',
23453 `match_operator', and `match_dup', as usual.  What is not usual is that
23454 the operand numbers apply to all the insn patterns in the definition.
23455 So, you can check for identical operands in two insns by using
23456 `match_operand' in one insn and `match_dup' in the other.
23458  The operand constraints used in `match_operand' patterns do not have
23459 any direct effect on the applicability of the peephole, but they will
23460 be validated afterward, so make sure your constraints are general enough
23461 to apply whenever the peephole matches.  If the peephole matches but
23462 the constraints are not satisfied, the compiler will crash.
23464  It is safe to omit constraints in all the operands of the peephole; or
23465 you can write constraints which serve as a double-check on the criteria
23466 previously tested.
23468  Once a sequence of insns matches the patterns, the CONDITION is
23469 checked.  This is a C expression which makes the final decision whether
23470 to perform the optimization (we do so if the expression is nonzero).  If
23471 CONDITION is omitted (in other words, the string is empty) then the
23472 optimization is applied to every sequence of insns that matches the
23473 patterns.
23475  The defined peephole optimizations are applied after register
23476 allocation is complete.  Therefore, the peephole definition can check
23477 which operands have ended up in which kinds of registers, just by
23478 looking at the operands.
23480  The way to refer to the operands in CONDITION is to write
23481 `operands[I]' for operand number I (as matched by `(match_operand I
23482 ...)').  Use the variable `insn' to refer to the last of the insns
23483 being matched; use `prev_active_insn' to find the preceding insns.
23485  When optimizing computations with intermediate results, you can use
23486 CONDITION to match only when the intermediate results are not used
23487 elsewhere.  Use the C expression `dead_or_set_p (INSN, OP)', where INSN
23488 is the insn in which you expect the value to be used for the last time
23489 (from the value of `insn', together with use of `prev_nonnote_insn'),
23490 and OP is the intermediate value (from `operands[I]').
23492  Applying the optimization means replacing the sequence of insns with
23493 one new insn.  The TEMPLATE controls ultimate output of assembler code
23494 for this combined insn.  It works exactly like the template of a
23495 `define_insn'.  Operand numbers in this template are the same ones used
23496 in matching the original sequence of insns.
23498  The result of a defined peephole optimizer does not need to match any
23499 of the insn patterns in the machine description; it does not even have
23500 an opportunity to match them.  The peephole optimizer definition itself
23501 serves as the insn pattern to control how the insn is output.
23503  Defined peephole optimizers are run as assembler code is being output,
23504 so the insns they produce are never combined or rearranged in any way.
23506  Here is an example, taken from the 68000 machine description:
23508      (define_peephole
23509        [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
23510         (set (match_operand:DF 0 "register_operand" "=f")
23511              (match_operand:DF 1 "register_operand" "ad"))]
23512        "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
23513      {
23514        rtx xoperands[2];
23515        xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
23516      #ifdef MOTOROLA
23517        output_asm_insn ("move.l %1,(sp)", xoperands);
23518        output_asm_insn ("move.l %1,-(sp)", operands);
23519        return "fmove.d (sp)+,%0";
23520      #else
23521        output_asm_insn ("movel %1,sp@", xoperands);
23522        output_asm_insn ("movel %1,sp@-", operands);
23523        return "fmoved sp@+,%0";
23524      #endif
23525      })
23527  The effect of this optimization is to change
23529      jbsr _foobar
23530      addql #4,sp
23531      movel d1,sp@-
23532      movel d0,sp@-
23533      fmoved sp@+,fp0
23535 into
23537      jbsr _foobar
23538      movel d1,sp@
23539      movel d0,sp@-
23540      fmoved sp@+,fp0
23542  INSN-PATTERN-1 and so on look _almost_ like the second operand of
23543 `define_insn'.  There is one important difference: the second operand
23544 of `define_insn' consists of one or more RTX's enclosed in square
23545 brackets.  Usually, there is only one: then the same action can be
23546 written as an element of a `define_peephole'.  But when there are
23547 multiple actions in a `define_insn', they are implicitly enclosed in a
23548 `parallel'.  Then you must explicitly write the `parallel', and the
23549 square brackets within it, in the `define_peephole'.  Thus, if an insn
23550 pattern looks like this,
23552      (define_insn "divmodsi4"
23553        [(set (match_operand:SI 0 "general_operand" "=d")
23554              (div:SI (match_operand:SI 1 "general_operand" "0")
23555                      (match_operand:SI 2 "general_operand" "dmsK")))
23556         (set (match_operand:SI 3 "general_operand" "=d")
23557              (mod:SI (match_dup 1) (match_dup 2)))]
23558        "TARGET_68020"
23559        "divsl%.l %2,%3:%0")
23561 then the way to mention this insn in a peephole is as follows:
23563      (define_peephole
23564        [...
23565         (parallel
23566          [(set (match_operand:SI 0 "general_operand" "=d")
23567                (div:SI (match_operand:SI 1 "general_operand" "0")
23568                        (match_operand:SI 2 "general_operand" "dmsK")))
23569           (set (match_operand:SI 3 "general_operand" "=d")
23570                (mod:SI (match_dup 1) (match_dup 2)))])
23571         ...]
23572        ...)
23574 \x1f
23575 File: gccint.info,  Node: define_peephole2,  Prev: define_peephole,  Up: Peephole Definitions
23577 16.18.2 RTL to RTL Peephole Optimizers
23578 --------------------------------------
23580 The `define_peephole2' definition tells the compiler how to substitute
23581 one sequence of instructions for another sequence, what additional
23582 scratch registers may be needed and what their lifetimes must be.
23584      (define_peephole2
23585        [INSN-PATTERN-1
23586         INSN-PATTERN-2
23587         ...]
23588        "CONDITION"
23589        [NEW-INSN-PATTERN-1
23590         NEW-INSN-PATTERN-2
23591         ...]
23592        "PREPARATION-STATEMENTS")
23594  The definition is almost identical to `define_split' (*note Insn
23595 Splitting::) except that the pattern to match is not a single
23596 instruction, but a sequence of instructions.
23598  It is possible to request additional scratch registers for use in the
23599 output template.  If appropriate registers are not free, the pattern
23600 will simply not match.
23602  Scratch registers are requested with a `match_scratch' pattern at the
23603 top level of the input pattern.  The allocated register (initially) will
23604 be dead at the point requested within the original sequence.  If the
23605 scratch is used at more than a single point, a `match_dup' pattern at
23606 the top level of the input pattern marks the last position in the input
23607 sequence at which the register must be available.
23609  Here is an example from the IA-32 machine description:
23611      (define_peephole2
23612        [(match_scratch:SI 2 "r")
23613         (parallel [(set (match_operand:SI 0 "register_operand" "")
23614                         (match_operator:SI 3 "arith_or_logical_operator"
23615                           [(match_dup 0)
23616                            (match_operand:SI 1 "memory_operand" "")]))
23617                    (clobber (reg:CC 17))])]
23618        "! optimize_size && ! TARGET_READ_MODIFY"
23619        [(set (match_dup 2) (match_dup 1))
23620         (parallel [(set (match_dup 0)
23621                         (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
23622                    (clobber (reg:CC 17))])]
23623        "")
23625 This pattern tries to split a load from its use in the hopes that we'll
23626 be able to schedule around the memory load latency.  It allocates a
23627 single `SImode' register of class `GENERAL_REGS' (`"r"') that needs to
23628 be live only at the point just before the arithmetic.
23630  A real example requiring extended scratch lifetimes is harder to come
23631 by, so here's a silly made-up example:
23633      (define_peephole2
23634        [(match_scratch:SI 4 "r")
23635         (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
23636         (set (match_operand:SI 2 "" "") (match_dup 1))
23637         (match_dup 4)
23638         (set (match_operand:SI 3 "" "") (match_dup 1))]
23639        "/* determine 1 does not overlap 0 and 2 */"
23640        [(set (match_dup 4) (match_dup 1))
23641         (set (match_dup 0) (match_dup 4))
23642         (set (match_dup 2) (match_dup 4))]
23643         (set (match_dup 3) (match_dup 4))]
23644        "")
23646 If we had not added the `(match_dup 4)' in the middle of the input
23647 sequence, it might have been the case that the register we chose at the
23648 beginning of the sequence is killed by the first or second `set'.
23650 \x1f
23651 File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc
23653 16.19 Instruction Attributes
23654 ============================
23656 In addition to describing the instruction supported by the target
23657 machine, the `md' file also defines a group of "attributes" and a set of
23658 values for each.  Every generated insn is assigned a value for each
23659 attribute.  One possible attribute would be the effect that the insn
23660 has on the machine's condition code.  This attribute can then be used
23661 by `NOTICE_UPDATE_CC' to track the condition codes.
23663 * Menu:
23665 * Defining Attributes:: Specifying attributes and their values.
23666 * Expressions::         Valid expressions for attribute values.
23667 * Tagging Insns::       Assigning attribute values to insns.
23668 * Attr Example::        An example of assigning attributes.
23669 * Insn Lengths::        Computing the length of insns.
23670 * Constant Attributes:: Defining attributes that are constant.
23671 * Delay Slots::         Defining delay slots required for a machine.
23672 * Processor pipeline description:: Specifying information for insn scheduling.
23674 \x1f
23675 File: gccint.info,  Node: Defining Attributes,  Next: Expressions,  Up: Insn Attributes
23677 16.19.1 Defining Attributes and their Values
23678 --------------------------------------------
23680 The `define_attr' expression is used to define each attribute required
23681 by the target machine.  It looks like:
23683      (define_attr NAME LIST-OF-VALUES DEFAULT)
23685  NAME is a string specifying the name of the attribute being defined.
23687  LIST-OF-VALUES is either a string that specifies a comma-separated
23688 list of values that can be assigned to the attribute, or a null string
23689 to indicate that the attribute takes numeric values.
23691  DEFAULT is an attribute expression that gives the value of this
23692 attribute for insns that match patterns whose definition does not
23693 include an explicit value for this attribute.  *Note Attr Example::,
23694 for more information on the handling of defaults.  *Note Constant
23695 Attributes::, for information on attributes that do not depend on any
23696 particular insn.
23698  For each defined attribute, a number of definitions are written to the
23699 `insn-attr.h' file.  For cases where an explicit set of values is
23700 specified for an attribute, the following are defined:
23702    * A `#define' is written for the symbol `HAVE_ATTR_NAME'.
23704    * An enumerated class is defined for `attr_NAME' with elements of
23705      the form `UPPER-NAME_UPPER-VALUE' where the attribute name and
23706      value are first converted to uppercase.
23708    * A function `get_attr_NAME' is defined that is passed an insn and
23709      returns the attribute value for that insn.
23711  For example, if the following is present in the `md' file:
23713      (define_attr "type" "branch,fp,load,store,arith" ...)
23715 the following lines will be written to the file `insn-attr.h'.
23717      #define HAVE_ATTR_type
23718      enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
23719                       TYPE_STORE, TYPE_ARITH};
23720      extern enum attr_type get_attr_type ();
23722  If the attribute takes numeric values, no `enum' type will be defined
23723 and the function to obtain the attribute's value will return `int'.
23725  There are attributes which are tied to a specific meaning.  These
23726 attributes are not free to use for other purposes:
23728 `length'
23729      The `length' attribute is used to calculate the length of emitted
23730      code chunks.  This is especially important when verifying branch
23731      distances. *Note Insn Lengths::.
23733 `enabled'
23734      The `enabled' attribute can be defined to prevent certain
23735      alternatives of an insn definition from being used during code
23736      generation. *Note Disable Insn Alternatives::.
23739 \x1f
23740 File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes
23742 16.19.2 Attribute Expressions
23743 -----------------------------
23745 RTL expressions used to define attributes use the codes described above
23746 plus a few specific to attribute definitions, to be discussed below.
23747 Attribute value expressions must have one of the following forms:
23749 `(const_int I)'
23750      The integer I specifies the value of a numeric attribute.  I must
23751      be non-negative.
23753      The value of a numeric attribute can be specified either with a
23754      `const_int', or as an integer represented as a string in
23755      `const_string', `eq_attr' (see below), `attr', `symbol_ref',
23756      simple arithmetic expressions, and `set_attr' overrides on
23757      specific instructions (*note Tagging Insns::).
23759 `(const_string VALUE)'
23760      The string VALUE specifies a constant attribute value.  If VALUE
23761      is specified as `"*"', it means that the default value of the
23762      attribute is to be used for the insn containing this expression.
23763      `"*"' obviously cannot be used in the DEFAULT expression of a
23764      `define_attr'.
23766      If the attribute whose value is being specified is numeric, VALUE
23767      must be a string containing a non-negative integer (normally
23768      `const_int' would be used in this case).  Otherwise, it must
23769      contain one of the valid values for the attribute.
23771 `(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
23772      TEST specifies an attribute test, whose format is defined below.
23773      The value of this expression is TRUE-VALUE if TEST is true,
23774      otherwise it is FALSE-VALUE.
23776 `(cond [TEST1 VALUE1 ...] DEFAULT)'
23777      The first operand of this expression is a vector containing an even
23778      number of expressions and consisting of pairs of TEST and VALUE
23779      expressions.  The value of the `cond' expression is that of the
23780      VALUE corresponding to the first true TEST expression.  If none of
23781      the TEST expressions are true, the value of the `cond' expression
23782      is that of the DEFAULT expression.
23784  TEST expressions can have one of the following forms:
23786 `(const_int I)'
23787      This test is true if I is nonzero and false otherwise.
23789 `(not TEST)'
23790 `(ior TEST1 TEST2)'
23791 `(and TEST1 TEST2)'
23792      These tests are true if the indicated logical function is true.
23794 `(match_operand:M N PRED CONSTRAINTS)'
23795      This test is true if operand N of the insn whose attribute value
23796      is being determined has mode M (this part of the test is ignored
23797      if M is `VOIDmode') and the function specified by the string PRED
23798      returns a nonzero value when passed operand N and mode M (this
23799      part of the test is ignored if PRED is the null string).
23801      The CONSTRAINTS operand is ignored and should be the null string.
23803 `(le ARITH1 ARITH2)'
23804 `(leu ARITH1 ARITH2)'
23805 `(lt ARITH1 ARITH2)'
23806 `(ltu ARITH1 ARITH2)'
23807 `(gt ARITH1 ARITH2)'
23808 `(gtu ARITH1 ARITH2)'
23809 `(ge ARITH1 ARITH2)'
23810 `(geu ARITH1 ARITH2)'
23811 `(ne ARITH1 ARITH2)'
23812 `(eq ARITH1 ARITH2)'
23813      These tests are true if the indicated comparison of the two
23814      arithmetic expressions is true.  Arithmetic expressions are formed
23815      with `plus', `minus', `mult', `div', `mod', `abs', `neg', `and',
23816      `ior', `xor', `not', `ashift', `lshiftrt', and `ashiftrt'
23817      expressions.
23819      `const_int' and `symbol_ref' are always valid terms (*note Insn
23820      Lengths::,for additional forms).  `symbol_ref' is a string
23821      denoting a C expression that yields an `int' when evaluated by the
23822      `get_attr_...' routine.  It should normally be a global variable.
23824 `(eq_attr NAME VALUE)'
23825      NAME is a string specifying the name of an attribute.
23827      VALUE is a string that is either a valid value for attribute NAME,
23828      a comma-separated list of values, or `!' followed by a value or
23829      list.  If VALUE does not begin with a `!', this test is true if
23830      the value of the NAME attribute of the current insn is in the list
23831      specified by VALUE.  If VALUE begins with a `!', this test is true
23832      if the attribute's value is _not_ in the specified list.
23834      For example,
23836           (eq_attr "type" "load,store")
23838      is equivalent to
23840           (ior (eq_attr "type" "load") (eq_attr "type" "store"))
23842      If NAME specifies an attribute of `alternative', it refers to the
23843      value of the compiler variable `which_alternative' (*note Output
23844      Statement::) and the values must be small integers.  For example,
23846           (eq_attr "alternative" "2,3")
23848      is equivalent to
23850           (ior (eq (symbol_ref "which_alternative") (const_int 2))
23851                (eq (symbol_ref "which_alternative") (const_int 3)))
23853      Note that, for most attributes, an `eq_attr' test is simplified in
23854      cases where the value of the attribute being tested is known for
23855      all insns matching a particular pattern.  This is by far the most
23856      common case.
23858 `(attr_flag NAME)'
23859      The value of an `attr_flag' expression is true if the flag
23860      specified by NAME is true for the `insn' currently being scheduled.
23862      NAME is a string specifying one of a fixed set of flags to test.
23863      Test the flags `forward' and `backward' to determine the direction
23864      of a conditional branch.  Test the flags `very_likely', `likely',
23865      `very_unlikely', and `unlikely' to determine if a conditional
23866      branch is expected to be taken.
23868      If the `very_likely' flag is true, then the `likely' flag is also
23869      true.  Likewise for the `very_unlikely' and `unlikely' flags.
23871      This example describes a conditional branch delay slot which can
23872      be nullified for forward branches that are taken (annul-true) or
23873      for backward branches which are not taken (annul-false).
23875           (define_delay (eq_attr "type" "cbranch")
23876             [(eq_attr "in_branch_delay" "true")
23877              (and (eq_attr "in_branch_delay" "true")
23878                   (attr_flag "forward"))
23879              (and (eq_attr "in_branch_delay" "true")
23880                   (attr_flag "backward"))])
23882      The `forward' and `backward' flags are false if the current `insn'
23883      being scheduled is not a conditional branch.
23885      The `very_likely' and `likely' flags are true if the `insn' being
23886      scheduled is not a conditional branch.  The `very_unlikely' and
23887      `unlikely' flags are false if the `insn' being scheduled is not a
23888      conditional branch.
23890      `attr_flag' is only used during delay slot scheduling and has no
23891      meaning to other passes of the compiler.
23893 `(attr NAME)'
23894      The value of another attribute is returned.  This is most useful
23895      for numeric attributes, as `eq_attr' and `attr_flag' produce more
23896      efficient code for non-numeric attributes.
23898 \x1f
23899 File: gccint.info,  Node: Tagging Insns,  Next: Attr Example,  Prev: Expressions,  Up: Insn Attributes
23901 16.19.3 Assigning Attribute Values to Insns
23902 -------------------------------------------
23904 The value assigned to an attribute of an insn is primarily determined by
23905 which pattern is matched by that insn (or which `define_peephole'
23906 generated it).  Every `define_insn' and `define_peephole' can have an
23907 optional last argument to specify the values of attributes for matching
23908 insns.  The value of any attribute not specified in a particular insn
23909 is set to the default value for that attribute, as specified in its
23910 `define_attr'.  Extensive use of default values for attributes permits
23911 the specification of the values for only one or two attributes in the
23912 definition of most insn patterns, as seen in the example in the next
23913 section.
23915  The optional last argument of `define_insn' and `define_peephole' is a
23916 vector of expressions, each of which defines the value for a single
23917 attribute.  The most general way of assigning an attribute's value is
23918 to use a `set' expression whose first operand is an `attr' expression
23919 giving the name of the attribute being set.  The second operand of the
23920 `set' is an attribute expression (*note Expressions::) giving the value
23921 of the attribute.
23923  When the attribute value depends on the `alternative' attribute (i.e.,
23924 which is the applicable alternative in the constraint of the insn), the
23925 `set_attr_alternative' expression can be used.  It allows the
23926 specification of a vector of attribute expressions, one for each
23927 alternative.
23929  When the generality of arbitrary attribute expressions is not required,
23930 the simpler `set_attr' expression can be used, which allows specifying
23931 a string giving either a single attribute value or a list of attribute
23932 values, one for each alternative.
23934  The form of each of the above specifications is shown below.  In each
23935 case, NAME is a string specifying the attribute to be set.
23937 `(set_attr NAME VALUE-STRING)'
23938      VALUE-STRING is either a string giving the desired attribute value,
23939      or a string containing a comma-separated list giving the values for
23940      succeeding alternatives.  The number of elements must match the
23941      number of alternatives in the constraint of the insn pattern.
23943      Note that it may be useful to specify `*' for some alternative, in
23944      which case the attribute will assume its default value for insns
23945      matching that alternative.
23947 `(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
23948      Depending on the alternative of the insn, the value will be one of
23949      the specified values.  This is a shorthand for using a `cond' with
23950      tests on the `alternative' attribute.
23952 `(set (attr NAME) VALUE)'
23953      The first operand of this `set' must be the special RTL expression
23954      `attr', whose sole operand is a string giving the name of the
23955      attribute being set.  VALUE is the value of the attribute.
23957  The following shows three different ways of representing the same
23958 attribute value specification:
23960      (set_attr "type" "load,store,arith")
23962      (set_attr_alternative "type"
23963                            [(const_string "load") (const_string "store")
23964                             (const_string "arith")])
23966      (set (attr "type")
23967           (cond [(eq_attr "alternative" "1") (const_string "load")
23968                  (eq_attr "alternative" "2") (const_string "store")]
23969                 (const_string "arith")))
23971  The `define_asm_attributes' expression provides a mechanism to specify
23972 the attributes assigned to insns produced from an `asm' statement.  It
23973 has the form:
23975      (define_asm_attributes [ATTR-SETS])
23977 where ATTR-SETS is specified the same as for both the `define_insn' and
23978 the `define_peephole' expressions.
23980  These values will typically be the "worst case" attribute values.  For
23981 example, they might indicate that the condition code will be clobbered.
23983  A specification for a `length' attribute is handled specially.  The
23984 way to compute the length of an `asm' insn is to multiply the length
23985 specified in the expression `define_asm_attributes' by the number of
23986 machine instructions specified in the `asm' statement, determined by
23987 counting the number of semicolons and newlines in the string.
23988 Therefore, the value of the `length' attribute specified in a
23989 `define_asm_attributes' should be the maximum possible length of a
23990 single machine instruction.
23992 \x1f
23993 File: gccint.info,  Node: Attr Example,  Next: Insn Lengths,  Prev: Tagging Insns,  Up: Insn Attributes
23995 16.19.4 Example of Attribute Specifications
23996 -------------------------------------------
23998 The judicious use of defaulting is important in the efficient use of
23999 insn attributes.  Typically, insns are divided into "types" and an
24000 attribute, customarily called `type', is used to represent this value.
24001 This attribute is normally used only to define the default value for
24002 other attributes.  An example will clarify this usage.
24004  Assume we have a RISC machine with a condition code and in which only
24005 full-word operations are performed in registers.  Let us assume that we
24006 can divide all insns into loads, stores, (integer) arithmetic
24007 operations, floating point operations, and branches.
24009  Here we will concern ourselves with determining the effect of an insn
24010 on the condition code and will limit ourselves to the following possible
24011 effects:  The condition code can be set unpredictably (clobbered), not
24012 be changed, be set to agree with the results of the operation, or only
24013 changed if the item previously set into the condition code has been
24014 modified.
24016  Here is part of a sample `md' file for such a machine:
24018      (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
24020      (define_attr "cc" "clobber,unchanged,set,change0"
24021                   (cond [(eq_attr "type" "load")
24022                              (const_string "change0")
24023                          (eq_attr "type" "store,branch")
24024                              (const_string "unchanged")
24025                          (eq_attr "type" "arith")
24026                              (if_then_else (match_operand:SI 0 "" "")
24027                                            (const_string "set")
24028                                            (const_string "clobber"))]
24029                         (const_string "clobber")))
24031      (define_insn ""
24032        [(set (match_operand:SI 0 "general_operand" "=r,r,m")
24033              (match_operand:SI 1 "general_operand" "r,m,r"))]
24034        ""
24035        "@
24036         move %0,%1
24037         load %0,%1
24038         store %0,%1"
24039        [(set_attr "type" "arith,load,store")])
24041  Note that we assume in the above example that arithmetic operations
24042 performed on quantities smaller than a machine word clobber the
24043 condition code since they will set the condition code to a value
24044 corresponding to the full-word result.
24046 \x1f
24047 File: gccint.info,  Node: Insn Lengths,  Next: Constant Attributes,  Prev: Attr Example,  Up: Insn Attributes
24049 16.19.5 Computing the Length of an Insn
24050 ---------------------------------------
24052 For many machines, multiple types of branch instructions are provided,
24053 each for different length branch displacements.  In most cases, the
24054 assembler will choose the correct instruction to use.  However, when
24055 the assembler cannot do so, GCC can when a special attribute, the
24056 `length' attribute, is defined.  This attribute must be defined to have
24057 numeric values by specifying a null string in its `define_attr'.
24059  In the case of the `length' attribute, two additional forms of
24060 arithmetic terms are allowed in test expressions:
24062 `(match_dup N)'
24063      This refers to the address of operand N of the current insn, which
24064      must be a `label_ref'.
24066 `(pc)'
24067      This refers to the address of the _current_ insn.  It might have
24068      been more consistent with other usage to make this the address of
24069      the _next_ insn but this would be confusing because the length of
24070      the current insn is to be computed.
24072  For normal insns, the length will be determined by value of the
24073 `length' attribute.  In the case of `addr_vec' and `addr_diff_vec' insn
24074 patterns, the length is computed as the number of vectors multiplied by
24075 the size of each vector.
24077  Lengths are measured in addressable storage units (bytes).
24079  The following macros can be used to refine the length computation:
24081 `ADJUST_INSN_LENGTH (INSN, LENGTH)'
24082      If defined, modifies the length assigned to instruction INSN as a
24083      function of the context in which it is used.  LENGTH is an lvalue
24084      that contains the initially computed length of the insn and should
24085      be updated with the correct length of the insn.
24087      This macro will normally not be required.  A case in which it is
24088      required is the ROMP.  On this machine, the size of an `addr_vec'
24089      insn must be increased by two to compensate for the fact that
24090      alignment may be required.
24092  The routine that returns `get_attr_length' (the value of the `length'
24093 attribute) can be used by the output routine to determine the form of
24094 the branch instruction to be written, as the example below illustrates.
24096  As an example of the specification of variable-length branches,
24097 consider the IBM 360.  If we adopt the convention that a register will
24098 be set to the starting address of a function, we can jump to labels
24099 within 4k of the start using a four-byte instruction.  Otherwise, we
24100 need a six-byte sequence to load the address from memory and then
24101 branch to it.
24103  On such a machine, a pattern for a branch instruction might be
24104 specified as follows:
24106      (define_insn "jump"
24107        [(set (pc)
24108              (label_ref (match_operand 0 "" "")))]
24109        ""
24110      {
24111         return (get_attr_length (insn) == 4
24112                 ? "b %l0" : "l r15,=a(%l0); br r15");
24113      }
24114        [(set (attr "length")
24115              (if_then_else (lt (match_dup 0) (const_int 4096))
24116                            (const_int 4)
24117                            (const_int 6)))])
24119 \x1f
24120 File: gccint.info,  Node: Constant Attributes,  Next: Delay Slots,  Prev: Insn Lengths,  Up: Insn Attributes
24122 16.19.6 Constant Attributes
24123 ---------------------------
24125 A special form of `define_attr', where the expression for the default
24126 value is a `const' expression, indicates an attribute that is constant
24127 for a given run of the compiler.  Constant attributes may be used to
24128 specify which variety of processor is used.  For example,
24130      (define_attr "cpu" "m88100,m88110,m88000"
24131       (const
24132        (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
24133               (symbol_ref "TARGET_88110") (const_string "m88110")]
24134              (const_string "m88000"))))
24136      (define_attr "memory" "fast,slow"
24137       (const
24138        (if_then_else (symbol_ref "TARGET_FAST_MEM")
24139                      (const_string "fast")
24140                      (const_string "slow"))))
24142  The routine generated for constant attributes has no parameters as it
24143 does not depend on any particular insn.  RTL expressions used to define
24144 the value of a constant attribute may use the `symbol_ref' form, but
24145 may not use either the `match_operand' form or `eq_attr' forms
24146 involving insn attributes.
24148 \x1f
24149 File: gccint.info,  Node: Delay Slots,  Next: Processor pipeline description,  Prev: Constant Attributes,  Up: Insn Attributes
24151 16.19.7 Delay Slot Scheduling
24152 -----------------------------
24154 The insn attribute mechanism can be used to specify the requirements for
24155 delay slots, if any, on a target machine.  An instruction is said to
24156 require a "delay slot" if some instructions that are physically after
24157 the instruction are executed as if they were located before it.
24158 Classic examples are branch and call instructions, which often execute
24159 the following instruction before the branch or call is performed.
24161  On some machines, conditional branch instructions can optionally
24162 "annul" instructions in the delay slot.  This means that the
24163 instruction will not be executed for certain branch outcomes.  Both
24164 instructions that annul if the branch is true and instructions that
24165 annul if the branch is false are supported.
24167  Delay slot scheduling differs from instruction scheduling in that
24168 determining whether an instruction needs a delay slot is dependent only
24169 on the type of instruction being generated, not on data flow between the
24170 instructions.  See the next section for a discussion of data-dependent
24171 instruction scheduling.
24173  The requirement of an insn needing one or more delay slots is indicated
24174 via the `define_delay' expression.  It has the following form:
24176      (define_delay TEST
24177                    [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
24178                     DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
24179                     ...])
24181  TEST is an attribute test that indicates whether this `define_delay'
24182 applies to a particular insn.  If so, the number of required delay
24183 slots is determined by the length of the vector specified as the second
24184 argument.  An insn placed in delay slot N must satisfy attribute test
24185 DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
24186 may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
24187 specifies which insns in the delay slot may be annulled if the branch
24188 is false.  If annulling is not supported for that delay slot, `(nil)'
24189 should be coded.
24191  For example, in the common case where branch and call insns require a
24192 single delay slot, which may contain any insn other than a branch or
24193 call, the following would be placed in the `md' file:
24195      (define_delay (eq_attr "type" "branch,call")
24196                    [(eq_attr "type" "!branch,call") (nil) (nil)])
24198  Multiple `define_delay' expressions may be specified.  In this case,
24199 each such expression specifies different delay slot requirements and
24200 there must be no insn for which tests in two `define_delay' expressions
24201 are both true.
24203  For example, if we have a machine that requires one delay slot for
24204 branches but two for calls,  no delay slot can contain a branch or call
24205 insn, and any valid insn in the delay slot for the branch can be
24206 annulled if the branch is true, we might represent this as follows:
24208      (define_delay (eq_attr "type" "branch")
24209         [(eq_attr "type" "!branch,call")
24210          (eq_attr "type" "!branch,call")
24211          (nil)])
24213      (define_delay (eq_attr "type" "call")
24214                    [(eq_attr "type" "!branch,call") (nil) (nil)
24215                     (eq_attr "type" "!branch,call") (nil) (nil)])
24217 \x1f
24218 File: gccint.info,  Node: Processor pipeline description,  Prev: Delay Slots,  Up: Insn Attributes
24220 16.19.8 Specifying processor pipeline description
24221 -------------------------------------------------
24223 To achieve better performance, most modern processors (super-pipelined,
24224 superscalar RISC, and VLIW processors) have many "functional units" on
24225 which several instructions can be executed simultaneously.  An
24226 instruction starts execution if its issue conditions are satisfied.  If
24227 not, the instruction is stalled until its conditions are satisfied.
24228 Such "interlock (pipeline) delay" causes interruption of the fetching
24229 of successor instructions (or demands nop instructions, e.g. for some
24230 MIPS processors).
24232  There are two major kinds of interlock delays in modern processors.
24233 The first one is a data dependence delay determining "instruction
24234 latency time".  The instruction execution is not started until all
24235 source data have been evaluated by prior instructions (there are more
24236 complex cases when the instruction execution starts even when the data
24237 are not available but will be ready in given time after the instruction
24238 execution start).  Taking the data dependence delays into account is
24239 simple.  The data dependence (true, output, and anti-dependence) delay
24240 between two instructions is given by a constant.  In most cases this
24241 approach is adequate.  The second kind of interlock delays is a
24242 reservation delay.  The reservation delay means that two instructions
24243 under execution will be in need of shared processors resources, i.e.
24244 buses, internal registers, and/or functional units, which are reserved
24245 for some time.  Taking this kind of delay into account is complex
24246 especially for modern RISC processors.
24248  The task of exploiting more processor parallelism is solved by an
24249 instruction scheduler.  For a better solution to this problem, the
24250 instruction scheduler has to have an adequate description of the
24251 processor parallelism (or "pipeline description").  GCC machine
24252 descriptions describe processor parallelism and functional unit
24253 reservations for groups of instructions with the aid of "regular
24254 expressions".
24256  The GCC instruction scheduler uses a "pipeline hazard recognizer" to
24257 figure out the possibility of the instruction issue by the processor on
24258 a given simulated processor cycle.  The pipeline hazard recognizer is
24259 automatically generated from the processor pipeline description.  The
24260 pipeline hazard recognizer generated from the machine description is
24261 based on a deterministic finite state automaton (DFA): the instruction
24262 issue is possible if there is a transition from one automaton state to
24263 another one.  This algorithm is very fast, and furthermore, its speed
24264 is not dependent on processor complexity(1).
24266  The rest of this section describes the directives that constitute an
24267 automaton-based processor pipeline description.  The order of these
24268 constructions within the machine description file is not important.
24270  The following optional construction describes names of automata
24271 generated and used for the pipeline hazards recognition.  Sometimes the
24272 generated finite state automaton used by the pipeline hazard recognizer
24273 is large.  If we use more than one automaton and bind functional units
24274 to the automata, the total size of the automata is usually less than
24275 the size of the single automaton.  If there is no one such
24276 construction, only one finite state automaton is generated.
24278      (define_automaton AUTOMATA-NAMES)
24280  AUTOMATA-NAMES is a string giving names of the automata.  The names
24281 are separated by commas.  All the automata should have unique names.
24282 The automaton name is used in the constructions `define_cpu_unit' and
24283 `define_query_cpu_unit'.
24285  Each processor functional unit used in the description of instruction
24286 reservations should be described by the following construction.
24288      (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
24290  UNIT-NAMES is a string giving the names of the functional units
24291 separated by commas.  Don't use name `nothing', it is reserved for
24292 other goals.
24294  AUTOMATON-NAME is a string giving the name of the automaton with which
24295 the unit is bound.  The automaton should be described in construction
24296 `define_automaton'.  You should give "automaton-name", if there is a
24297 defined automaton.
24299  The assignment of units to automata are constrained by the uses of the
24300 units in insn reservations.  The most important constraint is: if a
24301 unit reservation is present on a particular cycle of an alternative for
24302 an insn reservation, then some unit from the same automaton must be
24303 present on the same cycle for the other alternatives of the insn
24304 reservation.  The rest of the constraints are mentioned in the
24305 description of the subsequent constructions.
24307  The following construction describes CPU functional units analogously
24308 to `define_cpu_unit'.  The reservation of such units can be queried for
24309 an automaton state.  The instruction scheduler never queries
24310 reservation of functional units for given automaton state.  So as a
24311 rule, you don't need this construction.  This construction could be
24312 used for future code generation goals (e.g. to generate VLIW insn
24313 templates).
24315      (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
24317  UNIT-NAMES is a string giving names of the functional units separated
24318 by commas.
24320  AUTOMATON-NAME is a string giving the name of the automaton with which
24321 the unit is bound.
24323  The following construction is the major one to describe pipeline
24324 characteristics of an instruction.
24326      (define_insn_reservation INSN-NAME DEFAULT_LATENCY
24327                               CONDITION REGEXP)
24329  DEFAULT_LATENCY is a number giving latency time of the instruction.
24330 There is an important difference between the old description and the
24331 automaton based pipeline description.  The latency time is used for all
24332 dependencies when we use the old description.  In the automaton based
24333 pipeline description, the given latency time is only used for true
24334 dependencies.  The cost of anti-dependencies is always zero and the
24335 cost of output dependencies is the difference between latency times of
24336 the producing and consuming insns (if the difference is negative, the
24337 cost is considered to be zero).  You can always change the default
24338 costs for any description by using the target hook
24339 `TARGET_SCHED_ADJUST_COST' (*note Scheduling::).
24341  INSN-NAME is a string giving the internal name of the insn.  The
24342 internal names are used in constructions `define_bypass' and in the
24343 automaton description file generated for debugging.  The internal name
24344 has nothing in common with the names in `define_insn'.  It is a good
24345 practice to use insn classes described in the processor manual.
24347  CONDITION defines what RTL insns are described by this construction.
24348 You should remember that you will be in trouble if CONDITION for two or
24349 more different `define_insn_reservation' constructions is TRUE for an
24350 insn.  In this case what reservation will be used for the insn is not
24351 defined.  Such cases are not checked during generation of the pipeline
24352 hazards recognizer because in general recognizing that two conditions
24353 may have the same value is quite difficult (especially if the conditions
24354 contain `symbol_ref').  It is also not checked during the pipeline
24355 hazard recognizer work because it would slow down the recognizer
24356 considerably.
24358  REGEXP is a string describing the reservation of the cpu's functional
24359 units by the instruction.  The reservations are described by a regular
24360 expression according to the following syntax:
24362             regexp = regexp "," oneof
24363                    | oneof
24365             oneof = oneof "|" allof
24366                   | allof
24368             allof = allof "+" repeat
24369                   | repeat
24371             repeat = element "*" number
24372                    | element
24374             element = cpu_function_unit_name
24375                     | reservation_name
24376                     | result_name
24377                     | "nothing"
24378                     | "(" regexp ")"
24380    * `,' is used for describing the start of the next cycle in the
24381      reservation.
24383    * `|' is used for describing a reservation described by the first
24384      regular expression *or* a reservation described by the second
24385      regular expression *or* etc.
24387    * `+' is used for describing a reservation described by the first
24388      regular expression *and* a reservation described by the second
24389      regular expression *and* etc.
24391    * `*' is used for convenience and simply means a sequence in which
24392      the regular expression are repeated NUMBER times with cycle
24393      advancing (see `,').
24395    * `cpu_function_unit_name' denotes reservation of the named
24396      functional unit.
24398    * `reservation_name' -- see description of construction
24399      `define_reservation'.
24401    * `nothing' denotes no unit reservations.
24403  Sometimes unit reservations for different insns contain common parts.
24404 In such case, you can simplify the pipeline description by describing
24405 the common part by the following construction
24407      (define_reservation RESERVATION-NAME REGEXP)
24409  RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
24410 names and reservation names are in the same name space.  So the
24411 reservation names should be different from the functional unit names
24412 and can not be the reserved name `nothing'.
24414  The following construction is used to describe exceptions in the
24415 latency time for given instruction pair.  This is so called bypasses.
24417      (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
24418                     [GUARD])
24420  NUMBER defines when the result generated by the instructions given in
24421 string OUT_INSN_NAMES will be ready for the instructions given in
24422 string IN_INSN_NAMES.  The instructions in the string are separated by
24423 commas.
24425  GUARD is an optional string giving the name of a C function which
24426 defines an additional guard for the bypass.  The function will get the
24427 two insns as parameters.  If the function returns zero the bypass will
24428 be ignored for this case.  The additional guard is necessary to
24429 recognize complicated bypasses, e.g. when the consumer is only an
24430 address of insn `store' (not a stored value).
24432  If there are more one bypass with the same output and input insns, the
24433 chosen bypass is the first bypass with a guard in description whose
24434 guard function returns nonzero.  If there is no such bypass, then
24435 bypass without the guard function is chosen.
24437  The following five constructions are usually used to describe VLIW
24438 processors, or more precisely, to describe a placement of small
24439 instructions into VLIW instruction slots.  They can be used for RISC
24440 processors, too.
24442      (exclusion_set UNIT-NAMES UNIT-NAMES)
24443      (presence_set UNIT-NAMES PATTERNS)
24444      (final_presence_set UNIT-NAMES PATTERNS)
24445      (absence_set UNIT-NAMES PATTERNS)
24446      (final_absence_set UNIT-NAMES PATTERNS)
24448  UNIT-NAMES is a string giving names of functional units separated by
24449 commas.
24451  PATTERNS is a string giving patterns of functional units separated by
24452 comma.  Currently pattern is one unit or units separated by
24453 white-spaces.
24455  The first construction (`exclusion_set') means that each functional
24456 unit in the first string can not be reserved simultaneously with a unit
24457 whose name is in the second string and vice versa.  For example, the
24458 construction is useful for describing processors (e.g. some SPARC
24459 processors) with a fully pipelined floating point functional unit which
24460 can execute simultaneously only single floating point insns or only
24461 double floating point insns.
24463  The second construction (`presence_set') means that each functional
24464 unit in the first string can not be reserved unless at least one of
24465 pattern of units whose names are in the second string is reserved.
24466 This is an asymmetric relation.  For example, it is useful for
24467 description that VLIW `slot1' is reserved after `slot0' reservation.
24468 We could describe it by the following construction
24470      (presence_set "slot1" "slot0")
24472  Or `slot1' is reserved only after `slot0' and unit `b0' reservation.
24473 In this case we could write
24475      (presence_set "slot1" "slot0 b0")
24477  The third construction (`final_presence_set') is analogous to
24478 `presence_set'.  The difference between them is when checking is done.
24479 When an instruction is issued in given automaton state reflecting all
24480 current and planned unit reservations, the automaton state is changed.
24481 The first state is a source state, the second one is a result state.
24482 Checking for `presence_set' is done on the source state reservation,
24483 checking for `final_presence_set' is done on the result reservation.
24484 This construction is useful to describe a reservation which is actually
24485 two subsequent reservations.  For example, if we use
24487      (presence_set "slot1" "slot0")
24489  the following insn will be never issued (because `slot1' requires
24490 `slot0' which is absent in the source state).
24492      (define_reservation "insn_and_nop" "slot0 + slot1")
24494  but it can be issued if we use analogous `final_presence_set'.
24496  The forth construction (`absence_set') means that each functional unit
24497 in the first string can be reserved only if each pattern of units whose
24498 names are in the second string is not reserved.  This is an asymmetric
24499 relation (actually `exclusion_set' is analogous to this one but it is
24500 symmetric).  For example it might be useful in a VLIW description to
24501 say that `slot0' cannot be reserved after either `slot1' or `slot2'
24502 have been reserved.  This can be described as:
24504      (absence_set "slot0" "slot1, slot2")
24506  Or `slot2' can not be reserved if `slot0' and unit `b0' are reserved
24507 or `slot1' and unit `b1' are reserved.  In this case we could write
24509      (absence_set "slot2" "slot0 b0, slot1 b1")
24511  All functional units mentioned in a set should belong to the same
24512 automaton.
24514  The last construction (`final_absence_set') is analogous to
24515 `absence_set' but checking is done on the result (state) reservation.
24516 See comments for `final_presence_set'.
24518  You can control the generator of the pipeline hazard recognizer with
24519 the following construction.
24521      (automata_option OPTIONS)
24523  OPTIONS is a string giving options which affect the generated code.
24524 Currently there are the following options:
24526    * "no-minimization" makes no minimization of the automaton.  This is
24527      only worth to do when we are debugging the description and need to
24528      look more accurately at reservations of states.
24530    * "time" means printing time statistics about the generation of
24531      automata.
24533    * "stats" means printing statistics about the generated automata
24534      such as the number of DFA states, NDFA states and arcs.
24536    * "v" means a generation of the file describing the result automata.
24537      The file has suffix `.dfa' and can be used for the description
24538      verification and debugging.
24540    * "w" means a generation of warning instead of error for
24541      non-critical errors.
24543    * "ndfa" makes nondeterministic finite state automata.  This affects
24544      the treatment of operator `|' in the regular expressions.  The
24545      usual treatment of the operator is to try the first alternative
24546      and, if the reservation is not possible, the second alternative.
24547      The nondeterministic treatment means trying all alternatives, some
24548      of them may be rejected by reservations in the subsequent insns.
24550    * "progress" means output of a progress bar showing how many states
24551      were generated so far for automaton being processed.  This is
24552      useful during debugging a DFA description.  If you see too many
24553      generated states, you could interrupt the generator of the pipeline
24554      hazard recognizer and try to figure out a reason for generation of
24555      the huge automaton.
24557  As an example, consider a superscalar RISC machine which can issue
24558 three insns (two integer insns and one floating point insn) on the
24559 cycle but can finish only two insns.  To describe this, we define the
24560 following functional units.
24562      (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
24563      (define_cpu_unit "port0, port1")
24565  All simple integer insns can be executed in any integer pipeline and
24566 their result is ready in two cycles.  The simple integer insns are
24567 issued into the first pipeline unless it is reserved, otherwise they
24568 are issued into the second pipeline.  Integer division and
24569 multiplication insns can be executed only in the second integer
24570 pipeline and their results are ready correspondingly in 8 and 4 cycles.
24571 The integer division is not pipelined, i.e. the subsequent integer
24572 division insn can not be issued until the current division insn
24573 finished.  Floating point insns are fully pipelined and their results
24574 are ready in 3 cycles.  Where the result of a floating point insn is
24575 used by an integer insn, an additional delay of one cycle is incurred.
24576 To describe all of this we could specify
24578      (define_cpu_unit "div")
24580      (define_insn_reservation "simple" 2 (eq_attr "type" "int")
24581                               "(i0_pipeline | i1_pipeline), (port0 | port1)")
24583      (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
24584                               "i1_pipeline, nothing*2, (port0 | port1)")
24586      (define_insn_reservation "div" 8 (eq_attr "type" "div")
24587                               "i1_pipeline, div*7, div + (port0 | port1)")
24589      (define_insn_reservation "float" 3 (eq_attr "type" "float")
24590                               "f_pipeline, nothing, (port0 | port1))
24592      (define_bypass 4 "float" "simple,mult,div")
24594  To simplify the description we could describe the following reservation
24596      (define_reservation "finish" "port0|port1")
24598  and use it in all `define_insn_reservation' as in the following
24599 construction
24601      (define_insn_reservation "simple" 2 (eq_attr "type" "int")
24602                               "(i0_pipeline | i1_pipeline), finish")
24604  ---------- Footnotes ----------
24606  (1) However, the size of the automaton depends on processor
24607 complexity.  To limit this effect, machine descriptions can split
24608 orthogonal parts of the machine description among several automata: but
24609 then, since each of these must be stepped independently, this does
24610 cause a small decrease in the algorithm's performance.
24612 \x1f
24613 File: gccint.info,  Node: Conditional Execution,  Next: Constant Definitions,  Prev: Insn Attributes,  Up: Machine Desc
24615 16.20 Conditional Execution
24616 ===========================
24618 A number of architectures provide for some form of conditional
24619 execution, or predication.  The hallmark of this feature is the ability
24620 to nullify most of the instructions in the instruction set.  When the
24621 instruction set is large and not entirely symmetric, it can be quite
24622 tedious to describe these forms directly in the `.md' file.  An
24623 alternative is the `define_cond_exec' template.
24625      (define_cond_exec
24626        [PREDICATE-PATTERN]
24627        "CONDITION"
24628        "OUTPUT-TEMPLATE")
24630  PREDICATE-PATTERN is the condition that must be true for the insn to
24631 be executed at runtime and should match a relational operator.  One can
24632 use `match_operator' to match several relational operators at once.
24633 Any `match_operand' operands must have no more than one alternative.
24635  CONDITION is a C expression that must be true for the generated
24636 pattern to match.
24638  OUTPUT-TEMPLATE is a string similar to the `define_insn' output
24639 template (*note Output Template::), except that the `*' and `@' special
24640 cases do not apply.  This is only useful if the assembly text for the
24641 predicate is a simple prefix to the main insn.  In order to handle the
24642 general case, there is a global variable `current_insn_predicate' that
24643 will contain the entire predicate if the current insn is predicated,
24644 and will otherwise be `NULL'.
24646  When `define_cond_exec' is used, an implicit reference to the
24647 `predicable' instruction attribute is made.  *Note Insn Attributes::.
24648 This attribute must be boolean (i.e. have exactly two elements in its
24649 LIST-OF-VALUES).  Further, it must not be used with complex
24650 expressions.  That is, the default and all uses in the insns must be a
24651 simple constant, not dependent on the alternative or anything else.
24653  For each `define_insn' for which the `predicable' attribute is true, a
24654 new `define_insn' pattern will be generated that matches a predicated
24655 version of the instruction.  For example,
24657      (define_insn "addsi"
24658        [(set (match_operand:SI 0 "register_operand" "r")
24659              (plus:SI (match_operand:SI 1 "register_operand" "r")
24660                       (match_operand:SI 2 "register_operand" "r")))]
24661        "TEST1"
24662        "add %2,%1,%0")
24664      (define_cond_exec
24665        [(ne (match_operand:CC 0 "register_operand" "c")
24666             (const_int 0))]
24667        "TEST2"
24668        "(%0)")
24670 generates a new pattern
24672      (define_insn ""
24673        [(cond_exec
24674           (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
24675           (set (match_operand:SI 0 "register_operand" "r")
24676                (plus:SI (match_operand:SI 1 "register_operand" "r")
24677                         (match_operand:SI 2 "register_operand" "r"))))]
24678        "(TEST2) && (TEST1)"
24679        "(%3) add %2,%1,%0")
24681 \x1f
24682 File: gccint.info,  Node: Constant Definitions,  Next: Iterators,  Prev: Conditional Execution,  Up: Machine Desc
24684 16.21 Constant Definitions
24685 ==========================
24687 Using literal constants inside instruction patterns reduces legibility
24688 and can be a maintenance problem.
24690  To overcome this problem, you may use the `define_constants'
24691 expression.  It contains a vector of name-value pairs.  From that point
24692 on, wherever any of the names appears in the MD file, it is as if the
24693 corresponding value had been written instead.  You may use
24694 `define_constants' multiple times; each appearance adds more constants
24695 to the table.  It is an error to redefine a constant with a different
24696 value.
24698  To come back to the a29k load multiple example, instead of
24700      (define_insn ""
24701        [(match_parallel 0 "load_multiple_operation"
24702           [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
24703                 (match_operand:SI 2 "memory_operand" "m"))
24704            (use (reg:SI 179))
24705            (clobber (reg:SI 179))])]
24706        ""
24707        "loadm 0,0,%1,%2")
24709  You could write:
24711      (define_constants [
24712          (R_BP 177)
24713          (R_FC 178)
24714          (R_CR 179)
24715          (R_Q  180)
24716      ])
24718      (define_insn ""
24719        [(match_parallel 0 "load_multiple_operation"
24720           [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
24721                 (match_operand:SI 2 "memory_operand" "m"))
24722            (use (reg:SI R_CR))
24723            (clobber (reg:SI R_CR))])]
24724        ""
24725        "loadm 0,0,%1,%2")
24727  The constants that are defined with a define_constant are also output
24728 in the insn-codes.h header file as #defines.
24730 \x1f
24731 File: gccint.info,  Node: Iterators,  Prev: Constant Definitions,  Up: Machine Desc
24733 16.22 Iterators
24734 ===============
24736 Ports often need to define similar patterns for more than one machine
24737 mode or for more than one rtx code.  GCC provides some simple iterator
24738 facilities to make this process easier.
24740 * Menu:
24742 * Mode Iterators::         Generating variations of patterns for different modes.
24743 * Code Iterators::         Doing the same for codes.
24745 \x1f
24746 File: gccint.info,  Node: Mode Iterators,  Next: Code Iterators,  Up: Iterators
24748 16.22.1 Mode Iterators
24749 ----------------------
24751 Ports often need to define similar patterns for two or more different
24752 modes.  For example:
24754    * If a processor has hardware support for both single and double
24755      floating-point arithmetic, the `SFmode' patterns tend to be very
24756      similar to the `DFmode' ones.
24758    * If a port uses `SImode' pointers in one configuration and `DImode'
24759      pointers in another, it will usually have very similar `SImode'
24760      and `DImode' patterns for manipulating pointers.
24762  Mode iterators allow several patterns to be instantiated from one
24763 `.md' file template.  They can be used with any type of rtx-based
24764 construct, such as a `define_insn', `define_split', or
24765 `define_peephole2'.
24767 * Menu:
24769 * Defining Mode Iterators:: Defining a new mode iterator.
24770 * Substitutions::           Combining mode iterators with substitutions
24771 * Examples::                Examples
24773 \x1f
24774 File: gccint.info,  Node: Defining Mode Iterators,  Next: Substitutions,  Up: Mode Iterators
24776 16.22.1.1 Defining Mode Iterators
24777 .................................
24779 The syntax for defining a mode iterator is:
24781      (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
24783  This allows subsequent `.md' file constructs to use the mode suffix
24784 `:NAME'.  Every construct that does so will be expanded N times, once
24785 with every use of `:NAME' replaced by `:MODE1', once with every use
24786 replaced by `:MODE2', and so on.  In the expansion for a particular
24787 MODEI, every C condition will also require that CONDI be true.
24789  For example:
24791      (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
24793  defines a new mode suffix `:P'.  Every construct that uses `:P' will
24794 be expanded twice, once with every `:P' replaced by `:SI' and once with
24795 every `:P' replaced by `:DI'.  The `:SI' version will only apply if
24796 `Pmode == SImode' and the `:DI' version will only apply if `Pmode ==
24797 DImode'.
24799  As with other `.md' conditions, an empty string is treated as "always
24800 true".  `(MODE "")' can also be abbreviated to `MODE'.  For example:
24802      (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
24804  means that the `:DI' expansion only applies if `TARGET_64BIT' but that
24805 the `:SI' expansion has no such constraint.
24807  Iterators are applied in the order they are defined.  This can be
24808 significant if two iterators are used in a construct that requires
24809 substitutions.  *Note Substitutions::.
24811 \x1f
24812 File: gccint.info,  Node: Substitutions,  Next: Examples,  Prev: Defining Mode Iterators,  Up: Mode Iterators
24814 16.22.1.2 Substitution in Mode Iterators
24815 ........................................
24817 If an `.md' file construct uses mode iterators, each version of the
24818 construct will often need slightly different strings or modes.  For
24819 example:
24821    * When a `define_expand' defines several `addM3' patterns (*note
24822      Standard Names::), each expander will need to use the appropriate
24823      mode name for M.
24825    * When a `define_insn' defines several instruction patterns, each
24826      instruction will often use a different assembler mnemonic.
24828    * When a `define_insn' requires operands with different modes, using
24829      an iterator for one of the operand modes usually requires a
24830      specific mode for the other operand(s).
24832  GCC supports such variations through a system of "mode attributes".
24833 There are two standard attributes: `mode', which is the name of the
24834 mode in lower case, and `MODE', which is the same thing in upper case.
24835 You can define other attributes using:
24837      (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
24839  where NAME is the name of the attribute and VALUEI is the value
24840 associated with MODEI.
24842  When GCC replaces some :ITERATOR with :MODE, it will scan each string
24843 and mode in the pattern for sequences of the form `<ITERATOR:ATTR>',
24844 where ATTR is the name of a mode attribute.  If the attribute is
24845 defined for MODE, the whole `<...>' sequence will be replaced by the
24846 appropriate attribute value.
24848  For example, suppose an `.md' file has:
24850      (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
24851      (define_mode_attr load [(SI "lw") (DI "ld")])
24853  If one of the patterns that uses `:P' contains the string
24854 `"<P:load>\t%0,%1"', the `SI' version of that pattern will use
24855 `"lw\t%0,%1"' and the `DI' version will use `"ld\t%0,%1"'.
24857  Here is an example of using an attribute for a mode:
24859      (define_mode_iterator LONG [SI DI])
24860      (define_mode_attr SHORT [(SI "HI") (DI "SI")])
24861      (define_insn ...
24862        (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
24864  The `ITERATOR:' prefix may be omitted, in which case the substitution
24865 will be attempted for every iterator expansion.
24867 \x1f
24868 File: gccint.info,  Node: Examples,  Prev: Substitutions,  Up: Mode Iterators
24870 16.22.1.3 Mode Iterator Examples
24871 ................................
24873 Here is an example from the MIPS port.  It defines the following modes
24874 and attributes (among others):
24876      (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
24877      (define_mode_attr d [(SI "") (DI "d")])
24879  and uses the following template to define both `subsi3' and `subdi3':
24881      (define_insn "sub<mode>3"
24882        [(set (match_operand:GPR 0 "register_operand" "=d")
24883              (minus:GPR (match_operand:GPR 1 "register_operand" "d")
24884                         (match_operand:GPR 2 "register_operand" "d")))]
24885        ""
24886        "<d>subu\t%0,%1,%2"
24887        [(set_attr "type" "arith")
24888         (set_attr "mode" "<MODE>")])
24890  This is exactly equivalent to:
24892      (define_insn "subsi3"
24893        [(set (match_operand:SI 0 "register_operand" "=d")
24894              (minus:SI (match_operand:SI 1 "register_operand" "d")
24895                        (match_operand:SI 2 "register_operand" "d")))]
24896        ""
24897        "subu\t%0,%1,%2"
24898        [(set_attr "type" "arith")
24899         (set_attr "mode" "SI")])
24901      (define_insn "subdi3"
24902        [(set (match_operand:DI 0 "register_operand" "=d")
24903              (minus:DI (match_operand:DI 1 "register_operand" "d")
24904                        (match_operand:DI 2 "register_operand" "d")))]
24905        ""
24906        "dsubu\t%0,%1,%2"
24907        [(set_attr "type" "arith")
24908         (set_attr "mode" "DI")])
24910 \x1f
24911 File: gccint.info,  Node: Code Iterators,  Prev: Mode Iterators,  Up: Iterators
24913 16.22.2 Code Iterators
24914 ----------------------
24916 Code iterators operate in a similar way to mode iterators.  *Note Mode
24917 Iterators::.
24919  The construct:
24921      (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")])
24923  defines a pseudo rtx code NAME that can be instantiated as CODEI if
24924 condition CONDI is true.  Each CODEI must have the same rtx format.
24925 *Note RTL Classes::.
24927  As with mode iterators, each pattern that uses NAME will be expanded N
24928 times, once with all uses of NAME replaced by CODE1, once with all uses
24929 replaced by CODE2, and so on.  *Note Defining Mode Iterators::.
24931  It is possible to define attributes for codes as well as for modes.
24932 There are two standard code attributes: `code', the name of the code in
24933 lower case, and `CODE', the name of the code in upper case.  Other
24934 attributes are defined using:
24936      (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
24938  Here's an example of code iterators in action, taken from the MIPS
24939 port:
24941      (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
24942                                      eq ne gt ge lt le gtu geu ltu leu])
24944      (define_expand "b<code>"
24945        [(set (pc)
24946              (if_then_else (any_cond:CC (cc0)
24947                                         (const_int 0))
24948                            (label_ref (match_operand 0 ""))
24949                            (pc)))]
24950        ""
24951      {
24952        gen_conditional_branch (operands, <CODE>);
24953        DONE;
24954      })
24956  This is equivalent to:
24958      (define_expand "bunordered"
24959        [(set (pc)
24960              (if_then_else (unordered:CC (cc0)
24961                                          (const_int 0))
24962                            (label_ref (match_operand 0 ""))
24963                            (pc)))]
24964        ""
24965      {
24966        gen_conditional_branch (operands, UNORDERED);
24967        DONE;
24968      })
24970      (define_expand "bordered"
24971        [(set (pc)
24972              (if_then_else (ordered:CC (cc0)
24973                                        (const_int 0))
24974                            (label_ref (match_operand 0 ""))
24975                            (pc)))]
24976        ""
24977      {
24978        gen_conditional_branch (operands, ORDERED);
24979        DONE;
24980      })
24982      ...
24984 \x1f
24985 File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top
24987 17 Target Description Macros and Functions
24988 ******************************************
24990 In addition to the file `MACHINE.md', a machine description includes a
24991 C header file conventionally given the name `MACHINE.h' and a C source
24992 file named `MACHINE.c'.  The header file defines numerous macros that
24993 convey the information about the target machine that does not fit into
24994 the scheme of the `.md' file.  The file `tm.h' should be a link to
24995 `MACHINE.h'.  The header file `config.h' includes `tm.h' and most
24996 compiler source files include `config.h'.  The source file defines a
24997 variable `targetm', which is a structure containing pointers to
24998 functions and data relating to the target machine.  `MACHINE.c' should
24999 also contain their definitions, if they are not defined elsewhere in
25000 GCC, and other functions called through the macros defined in the `.h'
25001 file.
25003 * Menu:
25005 * Target Structure::    The `targetm' variable.
25006 * Driver::              Controlling how the driver runs the compilation passes.
25007 * Run-time Target::     Defining `-m' options like `-m68000' and `-m68020'.
25008 * Per-Function Data::   Defining data structures for per-function information.
25009 * Storage Layout::      Defining sizes and alignments of data.
25010 * Type Layout::         Defining sizes and properties of basic user data types.
25011 * Registers::           Naming and describing the hardware registers.
25012 * Register Classes::    Defining the classes of hardware registers.
25013 * Old Constraints::     The old way to define machine-specific constraints.
25014 * Stack and Calling::   Defining which way the stack grows and by how much.
25015 * Varargs::             Defining the varargs macros.
25016 * Trampolines::         Code set up at run time to enter a nested function.
25017 * Library Calls::       Controlling how library routines are implicitly called.
25018 * Addressing Modes::    Defining addressing modes valid for memory operands.
25019 * Anchored Addresses::  Defining how `-fsection-anchors' should work.
25020 * Condition Code::      Defining how insns update the condition code.
25021 * Costs::               Defining relative costs of different operations.
25022 * Scheduling::          Adjusting the behavior of the instruction scheduler.
25023 * Sections::            Dividing storage into text, data, and other sections.
25024 * PIC::                 Macros for position independent code.
25025 * Assembler Format::    Defining how to write insns and pseudo-ops to output.
25026 * Debugging Info::      Defining the format of debugging output.
25027 * Floating Point::      Handling floating point for cross-compilers.
25028 * Mode Switching::      Insertion of mode-switching instructions.
25029 * Target Attributes::   Defining target-specific uses of `__attribute__'.
25030 * Emulated TLS::        Emulated TLS support.
25031 * MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
25032 * PCH Target::          Validity checking for precompiled headers.
25033 * C++ ABI::             Controlling C++ ABI changes.
25034 * Named Address Spaces:: Adding support for named address spaces
25035 * Misc::                Everything else.
25037 \x1f
25038 File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros
25040 17.1 The Global `targetm' Variable
25041 ==================================
25043  -- Variable: struct gcc_target targetm
25044      The target `.c' file must define the global `targetm' variable
25045      which contains pointers to functions and data relating to the
25046      target machine.  The variable is declared in `target.h';
25047      `target-def.h' defines the macro `TARGET_INITIALIZER' which is
25048      used to initialize the variable, and macros for the default
25049      initializers for elements of the structure.  The `.c' file should
25050      override those macros for which the default definition is
25051      inappropriate.  For example:
25052           #include "target.h"
25053           #include "target-def.h"
25055           /* Initialize the GCC target structure.  */
25057           #undef TARGET_COMP_TYPE_ATTRIBUTES
25058           #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes
25060           struct gcc_target targetm = TARGET_INITIALIZER;
25062 Where a macro should be defined in the `.c' file in this manner to form
25063 part of the `targetm' structure, it is documented below as a "Target
25064 Hook" with a prototype.  Many macros will change in future from being
25065 defined in the `.h' file to being part of the `targetm' structure.
25067 \x1f
25068 File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros
25070 17.2 Controlling the Compilation Driver, `gcc'
25071 ==============================================
25073 You can control the compilation driver.
25075  -- Macro: SWITCH_TAKES_ARG (CHAR)
25076      A C expression which determines whether the option `-CHAR' takes
25077      arguments.  The value should be the number of arguments that
25078      option takes-zero, for many options.
25080      By default, this macro is defined as `DEFAULT_SWITCH_TAKES_ARG',
25081      which handles the standard options properly.  You need not define
25082      `SWITCH_TAKES_ARG' unless you wish to add additional options which
25083      take arguments.  Any redefinition should call
25084      `DEFAULT_SWITCH_TAKES_ARG' and then check for additional options.
25086  -- Macro: WORD_SWITCH_TAKES_ARG (NAME)
25087      A C expression which determines whether the option `-NAME' takes
25088      arguments.  The value should be the number of arguments that
25089      option takes-zero, for many options.  This macro rather than
25090      `SWITCH_TAKES_ARG' is used for multi-character option names.
25092      By default, this macro is defined as
25093      `DEFAULT_WORD_SWITCH_TAKES_ARG', which handles the standard options
25094      properly.  You need not define `WORD_SWITCH_TAKES_ARG' unless you
25095      wish to add additional options which take arguments.  Any
25096      redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and then
25097      check for additional options.
25099  -- Macro: SWITCH_CURTAILS_COMPILATION (CHAR)
25100      A C expression which determines whether the option `-CHAR' stops
25101      compilation before the generation of an executable.  The value is
25102      boolean, nonzero if the option does stop an executable from being
25103      generated, zero otherwise.
25105      By default, this macro is defined as
25106      `DEFAULT_SWITCH_CURTAILS_COMPILATION', which handles the standard
25107      options properly.  You need not define
25108      `SWITCH_CURTAILS_COMPILATION' unless you wish to add additional
25109      options which affect the generation of an executable.  Any
25110      redefinition should call `DEFAULT_SWITCH_CURTAILS_COMPILATION' and
25111      then check for additional options.
25113  -- Macro: SWITCHES_NEED_SPACES
25114      A string-valued C expression which enumerates the options for which
25115      the linker needs a space between the option and its argument.
25117      If this macro is not defined, the default value is `""'.
25119  -- Macro: TARGET_OPTION_TRANSLATE_TABLE
25120      If defined, a list of pairs of strings, the first of which is a
25121      potential command line target to the `gcc' driver program, and the
25122      second of which is a space-separated (tabs and other whitespace
25123      are not supported) list of options with which to replace the first
25124      option.  The target defining this list is responsible for assuring
25125      that the results are valid.  Replacement options may not be the
25126      `--opt' style, they must be the `-opt' style.  It is the intention
25127      of this macro to provide a mechanism for substitution that affects
25128      the multilibs chosen, such as one option that enables many
25129      options, some of which select multilibs.  Example nonsensical
25130      definition, where `-malt-abi', `-EB', and `-mspoo' cause different
25131      multilibs to be chosen:
25133           #define TARGET_OPTION_TRANSLATE_TABLE \
25134           { "-fast",   "-march=fast-foo -malt-abi -I/usr/fast-foo" }, \
25135           { "-compat", "-EB -malign=4 -mspoo" }
25137  -- Macro: DRIVER_SELF_SPECS
25138      A list of specs for the driver itself.  It should be a suitable
25139      initializer for an array of strings, with no surrounding braces.
25141      The driver applies these specs to its own command line between
25142      loading default `specs' files (but not command-line specified
25143      ones) and choosing the multilib directory or running any
25144      subcommands.  It applies them in the order given, so each spec can
25145      depend on the options added by earlier ones.  It is also possible
25146      to remove options using `%<OPTION' in the usual way.
25148      This macro can be useful when a port has several interdependent
25149      target options.  It provides a way of standardizing the command
25150      line so that the other specs are easier to write.
25152      Do not define this macro if it does not need to do anything.
25154  -- Macro: OPTION_DEFAULT_SPECS
25155      A list of specs used to support configure-time default options
25156      (i.e.  `--with' options) in the driver.  It should be a suitable
25157      initializer for an array of structures, each containing two
25158      strings, without the outermost pair of surrounding braces.
25160      The first item in the pair is the name of the default.  This must
25161      match the code in `config.gcc' for the target.  The second item is
25162      a spec to apply if a default with this name was specified.  The
25163      string `%(VALUE)' in the spec will be replaced by the value of the
25164      default everywhere it occurs.
25166      The driver will apply these specs to its own command line between
25167      loading default `specs' files and processing `DRIVER_SELF_SPECS',
25168      using the same mechanism as `DRIVER_SELF_SPECS'.
25170      Do not define this macro if it does not need to do anything.
25172  -- Macro: CPP_SPEC
25173      A C string constant that tells the GCC driver program options to
25174      pass to CPP.  It can also specify how to translate options you
25175      give to GCC into options for GCC to pass to the CPP.
25177      Do not define this macro if it does not need to do anything.
25179  -- Macro: CPLUSPLUS_CPP_SPEC
25180      This macro is just like `CPP_SPEC', but is used for C++, rather
25181      than C.  If you do not define this macro, then the value of
25182      `CPP_SPEC' (if any) will be used instead.
25184  -- Macro: CC1_SPEC
25185      A C string constant that tells the GCC driver program options to
25186      pass to `cc1', `cc1plus', `f771', and the other language front
25187      ends.  It can also specify how to translate options you give to
25188      GCC into options for GCC to pass to front ends.
25190      Do not define this macro if it does not need to do anything.
25192  -- Macro: CC1PLUS_SPEC
25193      A C string constant that tells the GCC driver program options to
25194      pass to `cc1plus'.  It can also specify how to translate options
25195      you give to GCC into options for GCC to pass to the `cc1plus'.
25197      Do not define this macro if it does not need to do anything.  Note
25198      that everything defined in CC1_SPEC is already passed to `cc1plus'
25199      so there is no need to duplicate the contents of CC1_SPEC in
25200      CC1PLUS_SPEC.
25202  -- Macro: ASM_SPEC
25203      A C string constant that tells the GCC driver program options to
25204      pass to the assembler.  It can also specify how to translate
25205      options you give to GCC into options for GCC to pass to the
25206      assembler.  See the file `sun3.h' for an example of this.
25208      Do not define this macro if it does not need to do anything.
25210  -- Macro: ASM_FINAL_SPEC
25211      A C string constant that tells the GCC driver program how to run
25212      any programs which cleanup after the normal assembler.  Normally,
25213      this is not needed.  See the file `mips.h' for an example of this.
25215      Do not define this macro if it does not need to do anything.
25217  -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
25218      Define this macro, with no value, if the driver should give the
25219      assembler an argument consisting of a single dash, `-', to
25220      instruct it to read from its standard input (which will be a pipe
25221      connected to the output of the compiler proper).  This argument is
25222      given after any `-o' option specifying the name of the output file.
25224      If you do not define this macro, the assembler is assumed to read
25225      its standard input if given no non-option arguments.  If your
25226      assembler cannot read standard input at all, use a `%{pipe:%e}'
25227      construct; see `mips.h' for instance.
25229  -- Macro: LINK_SPEC
25230      A C string constant that tells the GCC driver program options to
25231      pass to the linker.  It can also specify how to translate options
25232      you give to GCC into options for GCC to pass to the linker.
25234      Do not define this macro if it does not need to do anything.
25236  -- Macro: LIB_SPEC
25237      Another C string constant used much like `LINK_SPEC'.  The
25238      difference between the two is that `LIB_SPEC' is used at the end
25239      of the command given to the linker.
25241      If this macro is not defined, a default is provided that loads the
25242      standard C library from the usual place.  See `gcc.c'.
25244  -- Macro: LIBGCC_SPEC
25245      Another C string constant that tells the GCC driver program how
25246      and when to place a reference to `libgcc.a' into the linker
25247      command line.  This constant is placed both before and after the
25248      value of `LIB_SPEC'.
25250      If this macro is not defined, the GCC driver provides a default
25251      that passes the string `-lgcc' to the linker.
25253  -- Macro: REAL_LIBGCC_SPEC
25254      By default, if `ENABLE_SHARED_LIBGCC' is defined, the
25255      `LIBGCC_SPEC' is not directly used by the driver program but is
25256      instead modified to refer to different versions of `libgcc.a'
25257      depending on the values of the command line flags `-static',
25258      `-shared', `-static-libgcc', and `-shared-libgcc'.  On targets
25259      where these modifications are inappropriate, define
25260      `REAL_LIBGCC_SPEC' instead.  `REAL_LIBGCC_SPEC' tells the driver
25261      how to place a reference to `libgcc' on the link command line,
25262      but, unlike `LIBGCC_SPEC', it is used unmodified.
25264  -- Macro: USE_LD_AS_NEEDED
25265      A macro that controls the modifications to `LIBGCC_SPEC' mentioned
25266      in `REAL_LIBGCC_SPEC'.  If nonzero, a spec will be generated that
25267      uses -as-needed and the shared libgcc in place of the static
25268      exception handler library, when linking without any of `-static',
25269      `-static-libgcc', or `-shared-libgcc'.
25271  -- Macro: LINK_EH_SPEC
25272      If defined, this C string constant is added to `LINK_SPEC'.  When
25273      `USE_LD_AS_NEEDED' is zero or undefined, it also affects the
25274      modifications to `LIBGCC_SPEC' mentioned in `REAL_LIBGCC_SPEC'.
25276  -- Macro: STARTFILE_SPEC
25277      Another C string constant used much like `LINK_SPEC'.  The
25278      difference between the two is that `STARTFILE_SPEC' is used at the
25279      very beginning of the command given to the linker.
25281      If this macro is not defined, a default is provided that loads the
25282      standard C startup file from the usual place.  See `gcc.c'.
25284  -- Macro: ENDFILE_SPEC
25285      Another C string constant used much like `LINK_SPEC'.  The
25286      difference between the two is that `ENDFILE_SPEC' is used at the
25287      very end of the command given to the linker.
25289      Do not define this macro if it does not need to do anything.
25291  -- Macro: THREAD_MODEL_SPEC
25292      GCC `-v' will print the thread model GCC was configured to use.
25293      However, this doesn't work on platforms that are multilibbed on
25294      thread models, such as AIX 4.3.  On such platforms, define
25295      `THREAD_MODEL_SPEC' such that it evaluates to a string without
25296      blanks that names one of the recognized thread models.  `%*', the
25297      default value of this macro, will expand to the value of
25298      `thread_file' set in `config.gcc'.
25300  -- Macro: SYSROOT_SUFFIX_SPEC
25301      Define this macro to add a suffix to the target sysroot when GCC is
25302      configured with a sysroot.  This will cause GCC to search for
25303      usr/lib, et al, within sysroot+suffix.
25305  -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC
25306      Define this macro to add a headers_suffix to the target sysroot
25307      when GCC is configured with a sysroot.  This will cause GCC to
25308      pass the updated sysroot+headers_suffix to CPP, causing it to
25309      search for usr/include, et al, within sysroot+headers_suffix.
25311  -- Macro: EXTRA_SPECS
25312      Define this macro to provide additional specifications to put in
25313      the `specs' file that can be used in various specifications like
25314      `CC1_SPEC'.
25316      The definition should be an initializer for an array of structures,
25317      containing a string constant, that defines the specification name,
25318      and a string constant that provides the specification.
25320      Do not define this macro if it does not need to do anything.
25322      `EXTRA_SPECS' is useful when an architecture contains several
25323      related targets, which have various `..._SPECS' which are similar
25324      to each other, and the maintainer would like one central place to
25325      keep these definitions.
25327      For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to
25328      define either `_CALL_SYSV' when the System V calling sequence is
25329      used or `_CALL_AIX' when the older AIX-based calling sequence is
25330      used.
25332      The `config/rs6000/rs6000.h' target file defines:
25334           #define EXTRA_SPECS \
25335             { "cpp_sysv_default", CPP_SYSV_DEFAULT },
25337           #define CPP_SYS_DEFAULT ""
25339      The `config/rs6000/sysv.h' target file defines:
25340           #undef CPP_SPEC
25341           #define CPP_SPEC \
25342           "%{posix: -D_POSIX_SOURCE } \
25343           %{mcall-sysv: -D_CALL_SYSV } \
25344           %{!mcall-sysv: %(cpp_sysv_default) } \
25345           %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
25347           #undef CPP_SYSV_DEFAULT
25348           #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
25350      while the `config/rs6000/eabiaix.h' target file defines
25351      `CPP_SYSV_DEFAULT' as:
25353           #undef CPP_SYSV_DEFAULT
25354           #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
25356  -- Macro: LINK_LIBGCC_SPECIAL_1
25357      Define this macro if the driver program should find the library
25358      `libgcc.a'.  If you do not define this macro, the driver program
25359      will pass the argument `-lgcc' to tell the linker to do the search.
25361  -- Macro: LINK_GCC_C_SEQUENCE_SPEC
25362      The sequence in which libgcc and libc are specified to the linker.
25363      By default this is `%G %L %G'.
25365  -- Macro: LINK_COMMAND_SPEC
25366      A C string constant giving the complete command line need to
25367      execute the linker.  When you do this, you will need to update
25368      your port each time a change is made to the link command line
25369      within `gcc.c'.  Therefore, define this macro only if you need to
25370      completely redefine the command line for invoking the linker and
25371      there is no other way to accomplish the effect you need.
25372      Overriding this macro may be avoidable by overriding
25373      `LINK_GCC_C_SEQUENCE_SPEC' instead.
25375  -- Macro: LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
25376      A nonzero value causes `collect2' to remove duplicate
25377      `-LDIRECTORY' search directories from linking commands.  Do not
25378      give it a nonzero value if removing duplicate search directories
25379      changes the linker's semantics.
25381  -- Macro: MULTILIB_DEFAULTS
25382      Define this macro as a C expression for the initializer of an
25383      array of string to tell the driver program which options are
25384      defaults for this target and thus do not need to be handled
25385      specially when using `MULTILIB_OPTIONS'.
25387      Do not define this macro if `MULTILIB_OPTIONS' is not defined in
25388      the target makefile fragment or if none of the options listed in
25389      `MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.
25391  -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
25392      Define this macro to tell `gcc' that it should only translate a
25393      `-B' prefix into a `-L' linker option if the prefix indicates an
25394      absolute file name.
25396  -- Macro: MD_EXEC_PREFIX
25397      If defined, this macro is an additional prefix to try after
25398      `STANDARD_EXEC_PREFIX'.  `MD_EXEC_PREFIX' is not searched when the
25399      `-b' option is used, or the compiler is built as a cross compiler.
25400      If you define `MD_EXEC_PREFIX', then be sure to add it to the
25401      list of directories used to find the assembler in `configure.in'.
25403  -- Macro: STANDARD_STARTFILE_PREFIX
25404      Define this macro as a C string constant if you wish to override
25405      the standard choice of `libdir' as the default prefix to try when
25406      searching for startup files such as `crt0.o'.
25407      `STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
25408      built as a cross compiler.
25410  -- Macro: STANDARD_STARTFILE_PREFIX_1
25411      Define this macro as a C string constant if you wish to override
25412      the standard choice of `/lib' as a prefix to try after the default
25413      prefix when searching for startup files such as `crt0.o'.
25414      `STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
25415      built as a cross compiler.
25417  -- Macro: STANDARD_STARTFILE_PREFIX_2
25418      Define this macro as a C string constant if you wish to override
25419      the standard choice of `/lib' as yet another prefix to try after
25420      the default prefix when searching for startup files such as
25421      `crt0.o'.  `STANDARD_STARTFILE_PREFIX_2' is not searched when the
25422      compiler is built as a cross compiler.
25424  -- Macro: MD_STARTFILE_PREFIX
25425      If defined, this macro supplies an additional prefix to try after
25426      the standard prefixes.  `MD_EXEC_PREFIX' is not searched when the
25427      `-b' option is used, or when the compiler is built as a cross
25428      compiler.
25430  -- Macro: MD_STARTFILE_PREFIX_1
25431      If defined, this macro supplies yet another prefix to try after the
25432      standard prefixes.  It is not searched when the `-b' option is
25433      used, or when the compiler is built as a cross compiler.
25435  -- Macro: INIT_ENVIRONMENT
25436      Define this macro as a C string constant if you wish to set
25437      environment variables for programs called by the driver, such as
25438      the assembler and loader.  The driver passes the value of this
25439      macro to `putenv' to initialize the necessary environment
25440      variables.
25442  -- Macro: LOCAL_INCLUDE_DIR
25443      Define this macro as a C string constant if you wish to override
25444      the standard choice of `/usr/local/include' as the default prefix
25445      to try when searching for local header files.  `LOCAL_INCLUDE_DIR'
25446      comes before `SYSTEM_INCLUDE_DIR' in the search order.
25448      Cross compilers do not search either `/usr/local/include' or its
25449      replacement.
25451  -- Macro: MODIFY_TARGET_NAME
25452      Define this macro if you wish to define command-line switches that
25453      modify the default target name.
25455      For each switch, you can include a string to be appended to the
25456      first part of the configuration name or a string to be deleted
25457      from the configuration name, if present.  The definition should be
25458      an initializer for an array of structures.  Each array element
25459      should have three elements: the switch name (a string constant,
25460      including the initial dash), one of the enumeration codes `ADD' or
25461      `DELETE' to indicate whether the string should be inserted or
25462      deleted, and the string to be inserted or deleted (a string
25463      constant).
25465      For example, on a machine where `64' at the end of the
25466      configuration name denotes a 64-bit target and you want the `-32'
25467      and `-64' switches to select between 32- and 64-bit targets, you
25468      would code
25470           #define MODIFY_TARGET_NAME \
25471             { { "-32", DELETE, "64"}, \
25472                {"-64", ADD, "64"}}
25474  -- Macro: SYSTEM_INCLUDE_DIR
25475      Define this macro as a C string constant if you wish to specify a
25476      system-specific directory to search for header files before the
25477      standard directory.  `SYSTEM_INCLUDE_DIR' comes before
25478      `STANDARD_INCLUDE_DIR' in the search order.
25480      Cross compilers do not use this macro and do not search the
25481      directory specified.
25483  -- Macro: STANDARD_INCLUDE_DIR
25484      Define this macro as a C string constant if you wish to override
25485      the standard choice of `/usr/include' as the default prefix to try
25486      when searching for header files.
25488      Cross compilers ignore this macro and do not search either
25489      `/usr/include' or its replacement.
25491  -- Macro: STANDARD_INCLUDE_COMPONENT
25492      The "component" corresponding to `STANDARD_INCLUDE_DIR'.  See
25493      `INCLUDE_DEFAULTS', below, for the description of components.  If
25494      you do not define this macro, no component is used.
25496  -- Macro: INCLUDE_DEFAULTS
25497      Define this macro if you wish to override the entire default
25498      search path for include files.  For a native compiler, the default
25499      search path usually consists of `GCC_INCLUDE_DIR',
25500      `LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR',
25501      `GPLUSPLUS_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'.  In addition,
25502      `GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are defined
25503      automatically by `Makefile', and specify private search areas for
25504      GCC.  The directory `GPLUSPLUS_INCLUDE_DIR' is used only for C++
25505      programs.
25507      The definition should be an initializer for an array of structures.
25508      Each array element should have four elements: the directory name (a
25509      string constant), the component name (also a string constant), a
25510      flag for C++-only directories, and a flag showing that the
25511      includes in the directory don't need to be wrapped in `extern `C''
25512      when compiling C++.  Mark the end of the array with a null element.
25514      The component name denotes what GNU package the include file is
25515      part of, if any, in all uppercase letters.  For example, it might
25516      be `GCC' or `BINUTILS'.  If the package is part of a
25517      vendor-supplied operating system, code the component name as `0'.
25519      For example, here is the definition used for VAX/VMS:
25521           #define INCLUDE_DEFAULTS \
25522           {                                       \
25523             { "GNU_GXX_INCLUDE:", "G++", 1, 1},   \
25524             { "GNU_CC_INCLUDE:", "GCC", 0, 0},    \
25525             { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0},  \
25526             { ".", 0, 0, 0},                      \
25527             { 0, 0, 0, 0}                         \
25528           }
25530  Here is the order of prefixes tried for exec files:
25532   1. Any prefixes specified by the user with `-B'.
25534   2. The environment variable `GCC_EXEC_PREFIX' or, if `GCC_EXEC_PREFIX'
25535      is not set and the compiler has not been installed in the
25536      configure-time PREFIX, the location in which the compiler has
25537      actually been installed.
25539   3. The directories specified by the environment variable
25540      `COMPILER_PATH'.
25542   4. The macro `STANDARD_EXEC_PREFIX', if the compiler has been
25543      installed in the configured-time PREFIX.
25545   5. The location `/usr/libexec/gcc/', but only if this is a native
25546      compiler.
25548   6. The location `/usr/lib/gcc/', but only if this is a native
25549      compiler.
25551   7. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
25552      native compiler.
25554  Here is the order of prefixes tried for startfiles:
25556   1. Any prefixes specified by the user with `-B'.
25558   2. The environment variable `GCC_EXEC_PREFIX' or its automatically
25559      determined value based on the installed toolchain location.
25561   3. The directories specified by the environment variable
25562      `LIBRARY_PATH' (or port-specific name; native only, cross
25563      compilers do not use this).
25565   4. The macro `STANDARD_EXEC_PREFIX', but only if the toolchain is
25566      installed in the configured PREFIX or this is a native compiler.
25568   5. The location `/usr/lib/gcc/', but only if this is a native
25569      compiler.
25571   6. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
25572      native compiler.
25574   7. The macro `MD_STARTFILE_PREFIX', if defined, but only if this is a
25575      native compiler, or we have a target system root.
25577   8. The macro `MD_STARTFILE_PREFIX_1', if defined, but only if this is
25578      a native compiler, or we have a target system root.
25580   9. The macro `STANDARD_STARTFILE_PREFIX', with any sysroot
25581      modifications.  If this path is relative it will be prefixed by
25582      `GCC_EXEC_PREFIX' and the machine suffix or `STANDARD_EXEC_PREFIX'
25583      and the machine suffix.
25585  10. The macro `STANDARD_STARTFILE_PREFIX_1', but only if this is a
25586      native compiler, or we have a target system root. The default for
25587      this macro is `/lib/'.
25589  11. The macro `STANDARD_STARTFILE_PREFIX_2', but only if this is a
25590      native compiler, or we have a target system root. The default for
25591      this macro is `/usr/lib/'.
25593 \x1f
25594 File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros
25596 17.3 Run-time Target Specification
25597 ==================================
25599 Here are run-time target specifications.
25601  -- Macro: TARGET_CPU_CPP_BUILTINS ()
25602      This function-like macro expands to a block of code that defines
25603      built-in preprocessor macros and assertions for the target CPU,
25604      using the functions `builtin_define', `builtin_define_std' and
25605      `builtin_assert'.  When the front end calls this macro it provides
25606      a trailing semicolon, and since it has finished command line
25607      option processing your code can use those results freely.
25609      `builtin_assert' takes a string in the form you pass to the
25610      command-line option `-A', such as `cpu=mips', and creates the
25611      assertion.  `builtin_define' takes a string in the form accepted
25612      by option `-D' and unconditionally defines the macro.
25614      `builtin_define_std' takes a string representing the name of an
25615      object-like macro.  If it doesn't lie in the user's namespace,
25616      `builtin_define_std' defines it unconditionally.  Otherwise, it
25617      defines a version with two leading underscores, and another version
25618      with two leading and trailing underscores, and defines the original
25619      only if an ISO standard was not requested on the command line.  For
25620      example, passing `unix' defines `__unix', `__unix__' and possibly
25621      `unix'; passing `_mips' defines `__mips', `__mips__' and possibly
25622      `_mips', and passing `_ABI64' defines only `_ABI64'.
25624      You can also test for the C dialect being compiled.  The variable
25625      `c_language' is set to one of `clk_c', `clk_cplusplus' or
25626      `clk_objective_c'.  Note that if we are preprocessing assembler,
25627      this variable will be `clk_c' but the function-like macro
25628      `preprocessing_asm_p()' will return true, so you might want to
25629      check for that first.  If you need to check for strict ANSI, the
25630      variable `flag_iso' can be used.  The function-like macro
25631      `preprocessing_trad_p()' can be used to check for traditional
25632      preprocessing.
25634  -- Macro: TARGET_OS_CPP_BUILTINS ()
25635      Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
25636      and is used for the target operating system instead.
25638  -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
25639      Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
25640      and is used for the target object format.  `elfos.h' uses this
25641      macro to define `__ELF__', so you probably do not need to define
25642      it yourself.
25644  -- Variable: extern int target_flags
25645      This variable is declared in `options.h', which is included before
25646      any target-specific headers.
25648  -- Target Hook: int TARGET_DEFAULT_TARGET_FLAGS
25649      This variable specifies the initial value of `target_flags'.  Its
25650      default setting is 0.
25652  -- Target Hook: bool TARGET_HANDLE_OPTION (size_t CODE, const char
25653           *ARG, int VALUE)
25654      This hook is called whenever the user specifies one of the
25655      target-specific options described by the `.opt' definition files
25656      (*note Options::).  It has the opportunity to do some
25657      option-specific processing and should return true if the option is
25658      valid.  The default definition does nothing but return true.
25660      CODE specifies the `OPT_NAME' enumeration value associated with
25661      the selected option; NAME is just a rendering of the option name
25662      in which non-alphanumeric characters are replaced by underscores.
25663      ARG specifies the string argument and is null if no argument was
25664      given.  If the option is flagged as a `UInteger' (*note Option
25665      properties::), VALUE is the numeric value of the argument.
25666      Otherwise VALUE is 1 if the positive form of the option was used
25667      and 0 if the "no-" form was.
25669  -- Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
25670           *ARG, int VALUE)
25671      This target hook is called whenever the user specifies one of the
25672      target-specific C language family options described by the `.opt'
25673      definition files(*note Options::).  It has the opportunity to do
25674      some option-specific processing and should return true if the
25675      option is valid.  The arguments are like for
25676      `TARGET_HANDLE_OPTION'.  The default definition does nothing but
25677      return false.
25679      In general, you should use `TARGET_HANDLE_OPTION' to handle
25680      options.  However, if processing an option requires routines that
25681      are only available in the C (and related language) front ends,
25682      then you should use `TARGET_HANDLE_C_OPTION' instead.
25684  -- Macro: TARGET_VERSION
25685      This macro is a C statement to print on `stderr' a string
25686      describing the particular machine description choice.  Every
25687      machine description should define `TARGET_VERSION'.  For example:
25689           #ifdef MOTOROLA
25690           #define TARGET_VERSION \
25691             fprintf (stderr, " (68k, Motorola syntax)");
25692           #else
25693           #define TARGET_VERSION \
25694             fprintf (stderr, " (68k, MIT syntax)");
25695           #endif
25697  -- Macro: OVERRIDE_OPTIONS
25698      Sometimes certain combinations of command options do not make
25699      sense on a particular target machine.  You can define a macro
25700      `OVERRIDE_OPTIONS' to take account of this.  This macro, if
25701      defined, is executed once just after all the command options have
25702      been parsed.
25704      Don't use this macro to turn on various extra optimizations for
25705      `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.
25707      If you need to do something whenever the optimization level is
25708      changed via the optimize attribute or pragma, see
25709      `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'
25711  -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
25712      This target function is similar to the macro `OVERRIDE_OPTIONS'
25713      but is called when the optimize level is changed via an attribute
25714      or pragma or when it is reset at the end of the code affected by
25715      the attribute or pragma.  It is not called at the beginning of
25716      compilation when `OVERRIDE_OPTIONS' is called so if you want to
25717      perform these actions then, you should have `OVERRIDE_OPTIONS' call
25718      `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'.
25720  -- Macro: C_COMMON_OVERRIDE_OPTIONS
25721      This is similar to `OVERRIDE_OPTIONS' but is only used in the C
25722      language frontends (C, Objective-C, C++, Objective-C++) and so can
25723      be used to alter option flag variables which only exist in those
25724      frontends.
25726  -- Macro: OPTIMIZATION_OPTIONS (LEVEL, SIZE)
25727      Some machines may desire to change what optimizations are
25728      performed for various optimization levels.   This macro, if
25729      defined, is executed once just after the optimization level is
25730      determined and before the remainder of the command options have
25731      been parsed.  Values set in this macro are used as the default
25732      values for the other command line options.
25734      LEVEL is the optimization level specified; 2 if `-O2' is
25735      specified, 1 if `-O' is specified, and 0 if neither is specified.
25737      SIZE is nonzero if `-Os' is specified and zero otherwise.
25739      This macro is run once at program startup and when the optimization
25740      options are changed via `#pragma GCC optimize' or by using the
25741      `optimize' attribute.
25743      *Do not examine `write_symbols' in this macro!* The debugging
25744      options are not supposed to alter the generated code.
25746  -- Target Hook: void TARGET_HELP (void)
25747      This hook is called in response to the user invoking
25748      `--target-help' on the command line.  It gives the target a chance
25749      to display extra information on the target specific command line
25750      options found in its `.opt' file.
25752  -- Macro: CAN_DEBUG_WITHOUT_FP
25753      Define this macro if debugging can be performed even without a
25754      frame pointer.  If this macro is defined, GCC will turn on the
25755      `-fomit-frame-pointer' option whenever `-O' is specified.
25757 \x1f
25758 File: gccint.info,  Node: Per-Function Data,  Next: Storage Layout,  Prev: Run-time Target,  Up: Target Macros
25760 17.4 Defining data structures for per-function information.
25761 ===========================================================
25763 If the target needs to store information on a per-function basis, GCC
25764 provides a macro and a couple of variables to allow this.  Note, just
25765 using statics to store the information is a bad idea, since GCC supports
25766 nested functions, so you can be halfway through encoding one function
25767 when another one comes along.
25769  GCC defines a data structure called `struct function' which contains
25770 all of the data specific to an individual function.  This structure
25771 contains a field called `machine' whose type is `struct
25772 machine_function *', which can be used by targets to point to their own
25773 specific data.
25775  If a target needs per-function specific data it should define the type
25776 `struct machine_function' and also the macro `INIT_EXPANDERS'.  This
25777 macro should be used to initialize the function pointer
25778 `init_machine_status'.  This pointer is explained below.
25780  One typical use of per-function, target specific data is to create an
25781 RTX to hold the register containing the function's return address.  This
25782 RTX can then be used to implement the `__builtin_return_address'
25783 function, for level 0.
25785  Note--earlier implementations of GCC used a single data area to hold
25786 all of the per-function information.  Thus when processing of a nested
25787 function began the old per-function data had to be pushed onto a stack,
25788 and when the processing was finished, it had to be popped off the
25789 stack.  GCC used to provide function pointers called
25790 `save_machine_status' and `restore_machine_status' to handle the saving
25791 and restoring of the target specific information.  Since the single
25792 data area approach is no longer used, these pointers are no longer
25793 supported.
25795  -- Macro: INIT_EXPANDERS
25796      Macro called to initialize any target specific information.  This
25797      macro is called once per function, before generation of any RTL
25798      has begun.  The intention of this macro is to allow the
25799      initialization of the function pointer `init_machine_status'.
25801  -- Variable: void (*)(struct function *) init_machine_status
25802      If this function pointer is non-`NULL' it will be called once per
25803      function, before function compilation starts, in order to allow the
25804      target to perform any target specific initialization of the
25805      `struct function' structure.  It is intended that this would be
25806      used to initialize the `machine' of that structure.
25808      `struct machine_function' structures are expected to be freed by
25809      GC.  Generally, any memory that they reference must be allocated
25810      by using `ggc_alloc', including the structure itself.
25812 \x1f
25813 File: gccint.info,  Node: Storage Layout,  Next: Type Layout,  Prev: Per-Function Data,  Up: Target Macros
25815 17.5 Storage Layout
25816 ===================
25818 Note that the definitions of the macros in this table which are sizes or
25819 alignments measured in bits do not need to be constant.  They can be C
25820 expressions that refer to static variables, such as the `target_flags'.
25821 *Note Run-time Target::.
25823  -- Macro: BITS_BIG_ENDIAN
25824      Define this macro to have the value 1 if the most significant bit
25825      in a byte has the lowest number; otherwise define it to have the
25826      value zero.  This means that bit-field instructions count from the
25827      most significant bit.  If the machine has no bit-field
25828      instructions, then this must still be defined, but it doesn't
25829      matter which value it is defined to.  This macro need not be a
25830      constant.
25832      This macro does not affect the way structure fields are packed into
25833      bytes or words; that is controlled by `BYTES_BIG_ENDIAN'.
25835  -- Macro: BYTES_BIG_ENDIAN
25836      Define this macro to have the value 1 if the most significant byte
25837      in a word has the lowest number.  This macro need not be a
25838      constant.
25840  -- Macro: WORDS_BIG_ENDIAN
25841      Define this macro to have the value 1 if, in a multiword object,
25842      the most significant word has the lowest number.  This applies to
25843      both memory locations and registers; GCC fundamentally assumes
25844      that the order of words in memory is the same as the order in
25845      registers.  This macro need not be a constant.
25847  -- Macro: LIBGCC2_WORDS_BIG_ENDIAN
25848      Define this macro if `WORDS_BIG_ENDIAN' is not constant.  This
25849      must be a constant value with the same meaning as
25850      `WORDS_BIG_ENDIAN', which will be used only when compiling
25851      `libgcc2.c'.  Typically the value will be set based on
25852      preprocessor defines.
25854  -- Macro: FLOAT_WORDS_BIG_ENDIAN
25855      Define this macro to have the value 1 if `DFmode', `XFmode' or
25856      `TFmode' floating point numbers are stored in memory with the word
25857      containing the sign bit at the lowest address; otherwise define it
25858      to have the value 0.  This macro need not be a constant.
25860      You need not define this macro if the ordering is the same as for
25861      multi-word integers.
25863  -- Macro: BITS_PER_UNIT
25864      Define this macro to be the number of bits in an addressable
25865      storage unit (byte).  If you do not define this macro the default
25866      is 8.
25868  -- Macro: BITS_PER_WORD
25869      Number of bits in a word.  If you do not define this macro, the
25870      default is `BITS_PER_UNIT * UNITS_PER_WORD'.
25872  -- Macro: MAX_BITS_PER_WORD
25873      Maximum number of bits in a word.  If this is undefined, the
25874      default is `BITS_PER_WORD'.  Otherwise, it is the constant value
25875      that is the largest value that `BITS_PER_WORD' can have at
25876      run-time.
25878  -- Macro: UNITS_PER_WORD
25879      Number of storage units in a word; normally the size of a
25880      general-purpose register, a power of two from 1 or 8.
25882  -- Macro: MIN_UNITS_PER_WORD
25883      Minimum number of units in a word.  If this is undefined, the
25884      default is `UNITS_PER_WORD'.  Otherwise, it is the constant value
25885      that is the smallest value that `UNITS_PER_WORD' can have at
25886      run-time.
25888  -- Macro: UNITS_PER_SIMD_WORD (MODE)
25889      Number of units in the vectors that the vectorizer can produce for
25890      scalar mode MODE.  The default is equal to `UNITS_PER_WORD',
25891      because the vectorizer can do some transformations even in absence
25892      of specialized SIMD hardware.
25894  -- Macro: POINTER_SIZE
25895      Width of a pointer, in bits.  You must specify a value no wider
25896      than the width of `Pmode'.  If it is not equal to the width of
25897      `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'.  If you do
25898      not specify a value the default is `BITS_PER_WORD'.
25900  -- Macro: POINTERS_EXTEND_UNSIGNED
25901      A C expression that determines how pointers should be extended from
25902      `ptr_mode' to either `Pmode' or `word_mode'.  It is greater than
25903      zero if pointers should be zero-extended, zero if they should be
25904      sign-extended, and negative if some other sort of conversion is
25905      needed.  In the last case, the extension is done by the target's
25906      `ptr_extend' instruction.
25908      You need not define this macro if the `ptr_mode', `Pmode' and
25909      `word_mode' are all the same width.
25911  -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
25912      A macro to update M and UNSIGNEDP when an object whose type is
25913      TYPE and which has the specified mode and signedness is to be
25914      stored in a register.  This macro is only called when TYPE is a
25915      scalar type.
25917      On most RISC machines, which only have operations that operate on
25918      a full register, define this macro to set M to `word_mode' if M is
25919      an integer mode narrower than `BITS_PER_WORD'.  In most cases,
25920      only integer modes should be widened because wider-precision
25921      floating-point operations are usually more expensive than their
25922      narrower counterparts.
25924      For most machines, the macro definition does not change UNSIGNEDP.
25925      However, some machines, have instructions that preferentially
25926      handle either signed or unsigned quantities of certain modes.  For
25927      example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
25928      instructions sign-extend the result to 64 bits.  On such machines,
25929      set UNSIGNEDP according to which kind of extension is more
25930      efficient.
25932      Do not define this macro if it would never modify M.
25934  -- Target Hook: enum machine_mode TARGET_PROMOTE_FUNCTION_MODE
25935           (const_tree TYPE, enum machine_mode MODE, int *PUNSIGNEDP,
25936           const_tree FUNTYPE, int FOR_RETURN)
25937      Like `PROMOTE_MODE', but it is applied to outgoing function
25938      arguments or function return values.  The target hook should
25939      return the new mode and possibly change `*PUNSIGNEDP' if the
25940      promotion should change signedness.  This function is called only
25941      for scalar _or pointer_ types.
25943      FOR_RETURN allows to distinguish the promotion of arguments and
25944      return values.  If it is `1', a return value is being promoted and
25945      `TARGET_FUNCTION_VALUE' must perform the same promotions done here.
25946      If it is `2', the returned mode should be that of the register in
25947      which an incoming parameter is copied, or the outgoing result is
25948      computed; then the hook should return the same mode as
25949      `promote_mode', though the signedness may be different.
25951      The default is to not promote arguments and return values.  You can
25952      also define the hook to
25953      `default_promote_function_mode_always_promote' if you would like
25954      to apply the same rules given by `PROMOTE_MODE'.
25956  -- Macro: PARM_BOUNDARY
25957      Normal alignment required for function parameters on the stack, in
25958      bits.  All stack parameters receive at least this much alignment
25959      regardless of data type.  On most machines, this is the same as the
25960      size of an integer.
25962  -- Macro: STACK_BOUNDARY
25963      Define this macro to the minimum alignment enforced by hardware
25964      for the stack pointer on this machine.  The definition is a C
25965      expression for the desired alignment (measured in bits).  This
25966      value is used as a default if `PREFERRED_STACK_BOUNDARY' is not
25967      defined.  On most machines, this should be the same as
25968      `PARM_BOUNDARY'.
25970  -- Macro: PREFERRED_STACK_BOUNDARY
25971      Define this macro if you wish to preserve a certain alignment for
25972      the stack pointer, greater than what the hardware enforces.  The
25973      definition is a C expression for the desired alignment (measured
25974      in bits).  This macro must evaluate to a value equal to or larger
25975      than `STACK_BOUNDARY'.
25977  -- Macro: INCOMING_STACK_BOUNDARY
25978      Define this macro if the incoming stack boundary may be different
25979      from `PREFERRED_STACK_BOUNDARY'.  This macro must evaluate to a
25980      value equal to or larger than `STACK_BOUNDARY'.
25982  -- Macro: FUNCTION_BOUNDARY
25983      Alignment required for a function entry point, in bits.
25985  -- Macro: BIGGEST_ALIGNMENT
25986      Biggest alignment that any data type can require on this machine,
25987      in bits.  Note that this is not the biggest alignment that is
25988      supported, just the biggest alignment that, when violated, may
25989      cause a fault.
25991  -- Macro: MALLOC_ABI_ALIGNMENT
25992      Alignment, in bits, a C conformant malloc implementation has to
25993      provide.  If not defined, the default value is `BITS_PER_WORD'.
25995  -- Macro: ATTRIBUTE_ALIGNED_VALUE
25996      Alignment used by the `__attribute__ ((aligned))' construct.  If
25997      not defined, the default value is `BIGGEST_ALIGNMENT'.
25999  -- Macro: MINIMUM_ATOMIC_ALIGNMENT
26000      If defined, the smallest alignment, in bits, that can be given to
26001      an object that can be referenced in one operation, without
26002      disturbing any nearby object.  Normally, this is `BITS_PER_UNIT',
26003      but may be larger on machines that don't have byte or half-word
26004      store operations.
26006  -- Macro: BIGGEST_FIELD_ALIGNMENT
26007      Biggest alignment that any structure or union field can require on
26008      this machine, in bits.  If defined, this overrides
26009      `BIGGEST_ALIGNMENT' for structure and union fields only, unless
26010      the field alignment has been set by the `__attribute__ ((aligned
26011      (N)))' construct.
26013  -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED)
26014      An expression for the alignment of a structure field FIELD if the
26015      alignment computed in the usual way (including applying of
26016      `BIGGEST_ALIGNMENT' and `BIGGEST_FIELD_ALIGNMENT' to the
26017      alignment) is COMPUTED.  It overrides alignment only if the field
26018      alignment has not been set by the `__attribute__ ((aligned (N)))'
26019      construct.
26021  -- Macro: MAX_STACK_ALIGNMENT
26022      Biggest stack alignment guaranteed by the backend.  Use this macro
26023      to specify the maximum alignment of a variable on stack.
26025      If not defined, the default value is `STACK_BOUNDARY'.
26028  -- Macro: MAX_OFILE_ALIGNMENT
26029      Biggest alignment supported by the object file format of this
26030      machine.  Use this macro to limit the alignment which can be
26031      specified using the `__attribute__ ((aligned (N)))' construct.  If
26032      not defined, the default value is `BIGGEST_ALIGNMENT'.
26034      On systems that use ELF, the default (in `config/elfos.h') is the
26035      largest supported 32-bit ELF section alignment representable on a
26036      32-bit host e.g. `(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'.  On
26037      32-bit ELF the largest supported section alignment in bits is
26038      `(0x80000000 * 8)', but this is not representable on 32-bit hosts.
26040  -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
26041      If defined, a C expression to compute the alignment for a variable
26042      in the static store.  TYPE is the data type, and BASIC-ALIGN is
26043      the alignment that the object would ordinarily have.  The value of
26044      this macro is used instead of that alignment to align the object.
26046      If this macro is not defined, then BASIC-ALIGN is used.
26048      One use of this macro is to increase alignment of medium-size data
26049      to make it all fit in fewer cache lines.  Another is to cause
26050      character arrays to be word-aligned so that `strcpy' calls that
26051      copy constants to character arrays can be done inline.
26053  -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN)
26054      If defined, a C expression to compute the alignment given to a
26055      constant that is being placed in memory.  CONSTANT is the constant
26056      and BASIC-ALIGN is the alignment that the object would ordinarily
26057      have.  The value of this macro is used instead of that alignment to
26058      align the object.
26060      If this macro is not defined, then BASIC-ALIGN is used.
26062      The typical use of this macro is to increase alignment for string
26063      constants to be word aligned so that `strcpy' calls that copy
26064      constants can be done inline.
26066  -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
26067      If defined, a C expression to compute the alignment for a variable
26068      in the local store.  TYPE is the data type, and BASIC-ALIGN is the
26069      alignment that the object would ordinarily have.  The value of this
26070      macro is used instead of that alignment to align the object.
26072      If this macro is not defined, then BASIC-ALIGN is used.
26074      One use of this macro is to increase alignment of medium-size data
26075      to make it all fit in fewer cache lines.
26077  -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN)
26078      If defined, a C expression to compute the alignment for stack slot.
26079      TYPE is the data type, MODE is the widest mode available, and
26080      BASIC-ALIGN is the alignment that the slot would ordinarily have.
26081      The value of this macro is used instead of that alignment to align
26082      the slot.
26084      If this macro is not defined, then BASIC-ALIGN is used when TYPE
26085      is `NULL'.  Otherwise, `LOCAL_ALIGNMENT' will be used.
26087      This macro is to set alignment of stack slot to the maximum
26088      alignment of all possible modes which the slot may have.
26090  -- Macro: LOCAL_DECL_ALIGNMENT (DECL)
26091      If defined, a C expression to compute the alignment for a local
26092      variable DECL.
26094      If this macro is not defined, then `LOCAL_ALIGNMENT (TREE_TYPE
26095      (DECL), DECL_ALIGN (DECL))' is used.
26097      One use of this macro is to increase alignment of medium-size data
26098      to make it all fit in fewer cache lines.
26100  -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN)
26101      If defined, a C expression to compute the minimum required
26102      alignment for dynamic stack realignment purposes for EXP (a type
26103      or decl), MODE, assuming normal alignment ALIGN.
26105      If this macro is not defined, then ALIGN will be used.
26107  -- Macro: EMPTY_FIELD_BOUNDARY
26108      Alignment in bits to be given to a structure bit-field that
26109      follows an empty field such as `int : 0;'.
26111      If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
26113  -- Macro: STRUCTURE_SIZE_BOUNDARY
26114      Number of bits which any structure or union's size must be a
26115      multiple of.  Each structure or union's size is rounded up to a
26116      multiple of this.
26118      If you do not define this macro, the default is the same as
26119      `BITS_PER_UNIT'.
26121  -- Macro: STRICT_ALIGNMENT
26122      Define this macro to be the value 1 if instructions will fail to
26123      work if given data not on the nominal alignment.  If instructions
26124      will merely go slower in that case, define this macro as 0.
26126  -- Macro: PCC_BITFIELD_TYPE_MATTERS
26127      Define this if you wish to imitate the way many other C compilers
26128      handle alignment of bit-fields and the structures that contain
26129      them.
26131      The behavior is that the type written for a named bit-field (`int',
26132      `short', or other integer type) imposes an alignment for the entire
26133      structure, as if the structure really did contain an ordinary
26134      field of that type.  In addition, the bit-field is placed within
26135      the structure so that it would fit within such a field, not
26136      crossing a boundary for it.
26138      Thus, on most machines, a named bit-field whose type is written as
26139      `int' would not cross a four-byte boundary, and would force
26140      four-byte alignment for the whole structure.  (The alignment used
26141      may not be four bytes; it is controlled by the other alignment
26142      parameters.)
26144      An unnamed bit-field will not affect the alignment of the
26145      containing structure.
26147      If the macro is defined, its definition should be a C expression;
26148      a nonzero value for the expression enables this behavior.
26150      Note that if this macro is not defined, or its value is zero, some
26151      bit-fields may cross more than one alignment boundary.  The
26152      compiler can support such references if there are `insv', `extv',
26153      and `extzv' insns that can directly reference memory.
26155      The other known way of making bit-fields work is to define
26156      `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'.  Then
26157      every structure can be accessed with fullwords.
26159      Unless the machine has bit-field instructions or you define
26160      `STRUCTURE_SIZE_BOUNDARY' that way, you must define
26161      `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
26163      If your aim is to make GCC use the same conventions for laying out
26164      bit-fields as are used by another compiler, here is how to
26165      investigate what the other compiler does.  Compile and run this
26166      program:
26168           struct foo1
26169           {
26170             char x;
26171             char :0;
26172             char y;
26173           };
26175           struct foo2
26176           {
26177             char x;
26178             int :0;
26179             char y;
26180           };
26182           main ()
26183           {
26184             printf ("Size of foo1 is %d\n",
26185                     sizeof (struct foo1));
26186             printf ("Size of foo2 is %d\n",
26187                     sizeof (struct foo2));
26188             exit (0);
26189           }
26191      If this prints 2 and 5, then the compiler's behavior is what you
26192      would get from `PCC_BITFIELD_TYPE_MATTERS'.
26194  -- Macro: BITFIELD_NBYTES_LIMITED
26195      Like `PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
26196      to aligning a bit-field within the structure.
26198  -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void)
26199      When `PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine
26200      whether unnamed bitfields affect the alignment of the containing
26201      structure.  The hook should return true if the structure should
26202      inherit the alignment requirements of an unnamed bitfield's type.
26204  -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void)
26205      This target hook should return `true' if accesses to volatile
26206      bitfields should use the narrowest mode possible.  It should
26207      return `false' if these accesses should use the bitfield container
26208      type.
26210      The default is `!TARGET_STRICT_ALIGN'.
26212  -- Macro: MEMBER_TYPE_FORCES_BLK (FIELD, MODE)
26213      Return 1 if a structure or array containing FIELD should be
26214      accessed using `BLKMODE'.
26216      If FIELD is the only field in the structure, MODE is its mode,
26217      otherwise MODE is VOIDmode.  MODE is provided in the case where
26218      structures of one field would require the structure's mode to
26219      retain the field's mode.
26221      Normally, this is not needed.
26223  -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED)
26224      Define this macro as an expression for the alignment of a type
26225      (given by TYPE as a tree node) if the alignment computed in the
26226      usual way is COMPUTED and the alignment explicitly specified was
26227      SPECIFIED.
26229      The default is to use SPECIFIED if it is larger; otherwise, use
26230      the smaller of COMPUTED and `BIGGEST_ALIGNMENT'
26232  -- Macro: MAX_FIXED_MODE_SIZE
26233      An integer expression for the size in bits of the largest integer
26234      machine mode that should actually be used.  All integer machine
26235      modes of this size or smaller can be used for structures and
26236      unions with the appropriate sizes.  If this macro is undefined,
26237      `GET_MODE_BITSIZE (DImode)' is assumed.
26239  -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
26240      If defined, an expression of type `enum machine_mode' that
26241      specifies the mode of the save area operand of a
26242      `save_stack_LEVEL' named pattern (*note Standard Names::).
26243      SAVE_LEVEL is one of `SAVE_BLOCK', `SAVE_FUNCTION', or
26244      `SAVE_NONLOCAL' and selects which of the three named patterns is
26245      having its mode specified.
26247      You need not define this macro if it always returns `Pmode'.  You
26248      would most commonly define this macro if the `save_stack_LEVEL'
26249      patterns need to support both a 32- and a 64-bit mode.
26251  -- Macro: STACK_SIZE_MODE
26252      If defined, an expression of type `enum machine_mode' that
26253      specifies the mode of the size increment operand of an
26254      `allocate_stack' named pattern (*note Standard Names::).
26256      You need not define this macro if it always returns `word_mode'.
26257      You would most commonly define this macro if the `allocate_stack'
26258      pattern needs to support both a 32- and a 64-bit mode.
26260  -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
26261      This target hook should return the mode to be used for the return
26262      value of compare instructions expanded to libgcc calls.  If not
26263      defined `word_mode' is returned which is the right choice for a
26264      majority of targets.
26266  -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
26267      This target hook should return the mode to be used for the shift
26268      count operand of shift instructions expanded to libgcc calls.  If
26269      not defined `word_mode' is returned which is the right choice for
26270      a majority of targets.
26272  -- Target Hook: enum machine_mode TARGET_UNWIND_WORD_MODE (void)
26273      Return machine mode to be used for `_Unwind_Word' type.  The
26274      default is to use `word_mode'.
26276  -- Macro: ROUND_TOWARDS_ZERO
26277      If defined, this macro should be true if the prevailing rounding
26278      mode is towards zero.
26280      Defining this macro only affects the way `libgcc.a' emulates
26281      floating-point arithmetic.
26283      Not defining this macro is equivalent to returning zero.
26285  -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE)
26286      This macro should return true if floats with SIZE bits do not have
26287      a NaN or infinity representation, but use the largest exponent for
26288      normal numbers instead.
26290      Defining this macro only affects the way `libgcc.a' emulates
26291      floating-point arithmetic.
26293      The default definition of this macro returns false for all sizes.
26295  -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree
26296           RECORD_TYPE)
26297      This target hook returns `true' if bit-fields in the given
26298      RECORD_TYPE are to be laid out following the rules of Microsoft
26299      Visual C/C++, namely: (i) a bit-field won't share the same storage
26300      unit with the previous bit-field if their underlying types have
26301      different sizes, and the bit-field will be aligned to the highest
26302      alignment of the underlying types of itself and of the previous
26303      bit-field; (ii) a zero-sized bit-field will affect the alignment of
26304      the whole enclosing structure, even if it is unnamed; except that
26305      (iii) a zero-sized bit-field will be disregarded unless it follows
26306      another bit-field of nonzero size.  If this hook returns `true',
26307      other macros that control bit-field layout are ignored.
26309      When a bit-field is inserted into a packed record, the whole size
26310      of the underlying type is used by one or more same-size adjacent
26311      bit-fields (that is, if its long:3, 32 bits is used in the record,
26312      and any additional adjacent long bit-fields are packed into the
26313      same chunk of 32 bits.  However, if the size changes, a new field
26314      of that size is allocated).  In an unpacked record, this is the
26315      same as using alignment, but not equivalent when packing.
26317      If both MS bit-fields and `__attribute__((packed))' are used, the
26318      latter will take precedence.  If `__attribute__((packed))' is used
26319      on a single field when MS bit-fields are in use, it will take
26320      precedence for that field, but the alignment of the rest of the
26321      structure may affect its placement.
26323  -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void)
26324      Returns true if the target supports decimal floating point.
26326  -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void)
26327      Returns true if the target supports fixed-point arithmetic.
26329  -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void)
26330      This hook is called just before expansion into rtl, allowing the
26331      target to perform additional initializations or analysis before
26332      the expansion.  For example, the rs6000 port uses it to allocate a
26333      scratch stack slot for use in copying SDmode values between memory
26334      and floating point registers whenever the function being expanded
26335      has any SDmode usage.
26337  -- Target Hook: void TARGET_INSTANTIATE_DECLS (void)
26338      This hook allows the backend to perform additional instantiations
26339      on rtl that are not actually in any insns yet, but will be later.
26341  -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE)
26342      If your target defines any fundamental types, or any types your
26343      target uses should be mangled differently from the default, define
26344      this hook to return the appropriate encoding for these types as
26345      part of a C++ mangled name.  The TYPE argument is the tree
26346      structure representing the type to be mangled.  The hook may be
26347      applied to trees which are not target-specific fundamental types;
26348      it should return `NULL' for all such types, as well as arguments
26349      it does not recognize.  If the return value is not `NULL', it must
26350      point to a statically-allocated string constant.
26352      Target-specific fundamental types might be new fundamental types or
26353      qualified versions of ordinary fundamental types.  Encode new
26354      fundamental types as `u N NAME', where NAME is the name used for
26355      the type in source code, and N is the length of NAME in decimal.
26356      Encode qualified versions of ordinary types as `U N NAME CODE',
26357      where NAME is the name used for the type qualifier in source code,
26358      N is the length of NAME as above, and CODE is the code used to
26359      represent the unqualified version of this type.  (See
26360      `write_builtin_type' in `cp/mangle.c' for the list of codes.)  In
26361      both cases the spaces are for clarity; do not include any spaces
26362      in your string.
26364      This hook is applied to types prior to typedef resolution.  If the
26365      mangled name for a particular type depends only on that type's
26366      main variant, you can perform typedef resolution yourself using
26367      `TYPE_MAIN_VARIANT' before mangling.
26369      The default version of this hook always returns `NULL', which is
26370      appropriate for a target that does not define any new fundamental
26371      types.
26373 \x1f
26374 File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros
26376 17.6 Layout of Source Language Data Types
26377 =========================================
26379 These macros define the sizes and other characteristics of the standard
26380 basic data types used in programs being compiled.  Unlike the macros in
26381 the previous section, these apply to specific features of C and related
26382 languages, rather than to fundamental aspects of storage layout.
26384  -- Macro: INT_TYPE_SIZE
26385      A C expression for the size in bits of the type `int' on the
26386      target machine.  If you don't define this, the default is one word.
26388  -- Macro: SHORT_TYPE_SIZE
26389      A C expression for the size in bits of the type `short' on the
26390      target machine.  If you don't define this, the default is half a
26391      word.  (If this would be less than one storage unit, it is rounded
26392      up to one unit.)
26394  -- Macro: LONG_TYPE_SIZE
26395      A C expression for the size in bits of the type `long' on the
26396      target machine.  If you don't define this, the default is one word.
26398  -- Macro: ADA_LONG_TYPE_SIZE
26399      On some machines, the size used for the Ada equivalent of the type
26400      `long' by a native Ada compiler differs from that used by C.  In
26401      that situation, define this macro to be a C expression to be used
26402      for the size of that type.  If you don't define this, the default
26403      is the value of `LONG_TYPE_SIZE'.
26405  -- Macro: LONG_LONG_TYPE_SIZE
26406      A C expression for the size in bits of the type `long long' on the
26407      target machine.  If you don't define this, the default is two
26408      words.  If you want to support GNU Ada on your machine, the value
26409      of this macro must be at least 64.
26411  -- Macro: CHAR_TYPE_SIZE
26412      A C expression for the size in bits of the type `char' on the
26413      target machine.  If you don't define this, the default is
26414      `BITS_PER_UNIT'.
26416  -- Macro: BOOL_TYPE_SIZE
26417      A C expression for the size in bits of the C++ type `bool' and C99
26418      type `_Bool' on the target machine.  If you don't define this, and
26419      you probably shouldn't, the default is `CHAR_TYPE_SIZE'.
26421  -- Macro: FLOAT_TYPE_SIZE
26422      A C expression for the size in bits of the type `float' on the
26423      target machine.  If you don't define this, the default is one word.
26425  -- Macro: DOUBLE_TYPE_SIZE
26426      A C expression for the size in bits of the type `double' on the
26427      target machine.  If you don't define this, the default is two
26428      words.
26430  -- Macro: LONG_DOUBLE_TYPE_SIZE
26431      A C expression for the size in bits of the type `long double' on
26432      the target machine.  If you don't define this, the default is two
26433      words.
26435  -- Macro: SHORT_FRACT_TYPE_SIZE
26436      A C expression for the size in bits of the type `short _Fract' on
26437      the target machine.  If you don't define this, the default is
26438      `BITS_PER_UNIT'.
26440  -- Macro: FRACT_TYPE_SIZE
26441      A C expression for the size in bits of the type `_Fract' on the
26442      target machine.  If you don't define this, the default is
26443      `BITS_PER_UNIT * 2'.
26445  -- Macro: LONG_FRACT_TYPE_SIZE
26446      A C expression for the size in bits of the type `long _Fract' on
26447      the target machine.  If you don't define this, the default is
26448      `BITS_PER_UNIT * 4'.
26450  -- Macro: LONG_LONG_FRACT_TYPE_SIZE
26451      A C expression for the size in bits of the type `long long _Fract'
26452      on the target machine.  If you don't define this, the default is
26453      `BITS_PER_UNIT * 8'.
26455  -- Macro: SHORT_ACCUM_TYPE_SIZE
26456      A C expression for the size in bits of the type `short _Accum' on
26457      the target machine.  If you don't define this, the default is
26458      `BITS_PER_UNIT * 2'.
26460  -- Macro: ACCUM_TYPE_SIZE
26461      A C expression for the size in bits of the type `_Accum' on the
26462      target machine.  If you don't define this, the default is
26463      `BITS_PER_UNIT * 4'.
26465  -- Macro: LONG_ACCUM_TYPE_SIZE
26466      A C expression for the size in bits of the type `long _Accum' on
26467      the target machine.  If you don't define this, the default is
26468      `BITS_PER_UNIT * 8'.
26470  -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
26471      A C expression for the size in bits of the type `long long _Accum'
26472      on the target machine.  If you don't define this, the default is
26473      `BITS_PER_UNIT * 16'.
26475  -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE
26476      Define this macro if `LONG_DOUBLE_TYPE_SIZE' is not constant or if
26477      you want routines in `libgcc2.a' for a size other than
26478      `LONG_DOUBLE_TYPE_SIZE'.  If you don't define this, the default is
26479      `LONG_DOUBLE_TYPE_SIZE'.
26481  -- Macro: LIBGCC2_HAS_DF_MODE
26482      Define this macro if neither `LIBGCC2_DOUBLE_TYPE_SIZE' nor
26483      `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is `DFmode' but you want `DFmode'
26484      routines in `libgcc2.a' anyway.  If you don't define this and
26485      either `LIBGCC2_DOUBLE_TYPE_SIZE' or
26486      `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64 then the default is 1,
26487      otherwise it is 0.
26489  -- Macro: LIBGCC2_HAS_XF_MODE
26490      Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
26491      `XFmode' but you want `XFmode' routines in `libgcc2.a' anyway.  If
26492      you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80
26493      then the default is 1, otherwise it is 0.
26495  -- Macro: LIBGCC2_HAS_TF_MODE
26496      Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
26497      `TFmode' but you want `TFmode' routines in `libgcc2.a' anyway.  If
26498      you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128
26499      then the default is 1, otherwise it is 0.
26501  -- Macro: SF_SIZE
26502  -- Macro: DF_SIZE
26503  -- Macro: XF_SIZE
26504  -- Macro: TF_SIZE
26505      Define these macros to be the size in bits of the mantissa of
26506      `SFmode', `DFmode', `XFmode' and `TFmode' values, if the defaults
26507      in `libgcc2.h' are inappropriate.  By default, `FLT_MANT_DIG' is
26508      used for `SF_SIZE', `LDBL_MANT_DIG' for `XF_SIZE' and `TF_SIZE',
26509      and `DBL_MANT_DIG' or `LDBL_MANT_DIG' for `DF_SIZE' according to
26510      whether `LIBGCC2_DOUBLE_TYPE_SIZE' or
26511      `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64.
26513  -- Macro: TARGET_FLT_EVAL_METHOD
26514      A C expression for the value for `FLT_EVAL_METHOD' in `float.h',
26515      assuming, if applicable, that the floating-point control word is
26516      in its default state.  If you do not define this macro the value of
26517      `FLT_EVAL_METHOD' will be zero.
26519  -- Macro: WIDEST_HARDWARE_FP_SIZE
26520      A C expression for the size in bits of the widest floating-point
26521      format supported by the hardware.  If you define this macro, you
26522      must specify a value less than or equal to the value of
26523      `LONG_DOUBLE_TYPE_SIZE'.  If you do not define this macro, the
26524      value of `LONG_DOUBLE_TYPE_SIZE' is the default.
26526  -- Macro: DEFAULT_SIGNED_CHAR
26527      An expression whose value is 1 or 0, according to whether the type
26528      `char' should be signed or unsigned by default.  The user can
26529      always override this default with the options `-fsigned-char' and
26530      `-funsigned-char'.
26532  -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
26533      This target hook should return true if the compiler should give an
26534      `enum' type only as many bytes as it takes to represent the range
26535      of possible values of that type.  It should return false if all
26536      `enum' types should be allocated like `int'.
26538      The default is to return false.
26540  -- Macro: SIZE_TYPE
26541      A C expression for a string describing the name of the data type
26542      to use for size values.  The typedef name `size_t' is defined
26543      using the contents of the string.
26545      The string can contain more than one keyword.  If so, separate
26546      them with spaces, and write first any length keyword, then
26547      `unsigned' if appropriate, and finally `int'.  The string must
26548      exactly match one of the data type names defined in the function
26549      `init_decl_processing' in the file `c-decl.c'.  You may not omit
26550      `int' or change the order--that would cause the compiler to crash
26551      on startup.
26553      If you don't define this macro, the default is `"long unsigned
26554      int"'.
26556  -- Macro: PTRDIFF_TYPE
26557      A C expression for a string describing the name of the data type
26558      to use for the result of subtracting two pointers.  The typedef
26559      name `ptrdiff_t' is defined using the contents of the string.  See
26560      `SIZE_TYPE' above for more information.
26562      If you don't define this macro, the default is `"long int"'.
26564  -- Macro: WCHAR_TYPE
26565      A C expression for a string describing the name of the data type
26566      to use for wide characters.  The typedef name `wchar_t' is defined
26567      using the contents of the string.  See `SIZE_TYPE' above for more
26568      information.
26570      If you don't define this macro, the default is `"int"'.
26572  -- Macro: WCHAR_TYPE_SIZE
26573      A C expression for the size in bits of the data type for wide
26574      characters.  This is used in `cpp', which cannot make use of
26575      `WCHAR_TYPE'.
26577  -- Macro: WINT_TYPE
26578      A C expression for a string describing the name of the data type to
26579      use for wide characters passed to `printf' and returned from
26580      `getwc'.  The typedef name `wint_t' is defined using the contents
26581      of the string.  See `SIZE_TYPE' above for more information.
26583      If you don't define this macro, the default is `"unsigned int"'.
26585  -- Macro: INTMAX_TYPE
26586      A C expression for a string describing the name of the data type
26587      that can represent any value of any standard or extended signed
26588      integer type.  The typedef name `intmax_t' is defined using the
26589      contents of the string.  See `SIZE_TYPE' above for more
26590      information.
26592      If you don't define this macro, the default is the first of
26593      `"int"', `"long int"', or `"long long int"' that has as much
26594      precision as `long long int'.
26596  -- Macro: UINTMAX_TYPE
26597      A C expression for a string describing the name of the data type
26598      that can represent any value of any standard or extended unsigned
26599      integer type.  The typedef name `uintmax_t' is defined using the
26600      contents of the string.  See `SIZE_TYPE' above for more
26601      information.
26603      If you don't define this macro, the default is the first of
26604      `"unsigned int"', `"long unsigned int"', or `"long long unsigned
26605      int"' that has as much precision as `long long unsigned int'.
26607  -- Macro: SIG_ATOMIC_TYPE
26608  -- Macro: INT8_TYPE
26609  -- Macro: INT16_TYPE
26610  -- Macro: INT32_TYPE
26611  -- Macro: INT64_TYPE
26612  -- Macro: UINT8_TYPE
26613  -- Macro: UINT16_TYPE
26614  -- Macro: UINT32_TYPE
26615  -- Macro: UINT64_TYPE
26616  -- Macro: INT_LEAST8_TYPE
26617  -- Macro: INT_LEAST16_TYPE
26618  -- Macro: INT_LEAST32_TYPE
26619  -- Macro: INT_LEAST64_TYPE
26620  -- Macro: UINT_LEAST8_TYPE
26621  -- Macro: UINT_LEAST16_TYPE
26622  -- Macro: UINT_LEAST32_TYPE
26623  -- Macro: UINT_LEAST64_TYPE
26624  -- Macro: INT_FAST8_TYPE
26625  -- Macro: INT_FAST16_TYPE
26626  -- Macro: INT_FAST32_TYPE
26627  -- Macro: INT_FAST64_TYPE
26628  -- Macro: UINT_FAST8_TYPE
26629  -- Macro: UINT_FAST16_TYPE
26630  -- Macro: UINT_FAST32_TYPE
26631  -- Macro: UINT_FAST64_TYPE
26632  -- Macro: INTPTR_TYPE
26633  -- Macro: UINTPTR_TYPE
26634      C expressions for the standard types `sig_atomic_t', `int8_t',
26635      `int16_t', `int32_t', `int64_t', `uint8_t', `uint16_t',
26636      `uint32_t', `uint64_t', `int_least8_t', `int_least16_t',
26637      `int_least32_t', `int_least64_t', `uint_least8_t',
26638      `uint_least16_t', `uint_least32_t', `uint_least64_t',
26639      `int_fast8_t', `int_fast16_t', `int_fast32_t', `int_fast64_t',
26640      `uint_fast8_t', `uint_fast16_t', `uint_fast32_t', `uint_fast64_t',
26641      `intptr_t', and `uintptr_t'.  See `SIZE_TYPE' above for more
26642      information.
26644      If any of these macros evaluates to a null pointer, the
26645      corresponding type is not supported; if GCC is configured to
26646      provide `<stdint.h>' in such a case, the header provided may not
26647      conform to C99, depending on the type in question.  The defaults
26648      for all of these macros are null pointers.
26650  -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
26651      The C++ compiler represents a pointer-to-member-function with a
26652      struct that looks like:
26654             struct {
26655               union {
26656                 void (*fn)();
26657                 ptrdiff_t vtable_index;
26658               };
26659               ptrdiff_t delta;
26660             };
26662      The C++ compiler must use one bit to indicate whether the function
26663      that will be called through a pointer-to-member-function is
26664      virtual.  Normally, we assume that the low-order bit of a function
26665      pointer must always be zero.  Then, by ensuring that the
26666      vtable_index is odd, we can distinguish which variant of the union
26667      is in use.  But, on some platforms function pointers can be odd,
26668      and so this doesn't work.  In that case, we use the low-order bit
26669      of the `delta' field, and shift the remainder of the `delta' field
26670      to the left.
26672      GCC will automatically make the right selection about where to
26673      store this bit using the `FUNCTION_BOUNDARY' setting for your
26674      platform.  However, some platforms such as ARM/Thumb have
26675      `FUNCTION_BOUNDARY' set such that functions always start at even
26676      addresses, but the lowest bit of pointers to functions indicate
26677      whether the function at that address is in ARM or Thumb mode.  If
26678      this is the case of your architecture, you should define this
26679      macro to `ptrmemfunc_vbit_in_delta'.
26681      In general, you should not have to define this macro.  On
26682      architectures in which function addresses are always even,
26683      according to `FUNCTION_BOUNDARY', GCC will automatically define
26684      this macro to `ptrmemfunc_vbit_in_pfn'.
26686  -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
26687      Normally, the C++ compiler uses function pointers in vtables.  This
26688      macro allows the target to change to use "function descriptors"
26689      instead.  Function descriptors are found on targets for whom a
26690      function pointer is actually a small data structure.  Normally the
26691      data structure consists of the actual code address plus a data
26692      pointer to which the function's data is relative.
26694      If vtables are used, the value of this macro should be the number
26695      of words that the function descriptor occupies.
26697  -- Macro: TARGET_VTABLE_ENTRY_ALIGN
26698      By default, the vtable entries are void pointers, the so the
26699      alignment is the same as pointer alignment.  The value of this
26700      macro specifies the alignment of the vtable entry in bits.  It
26701      should be defined only when special alignment is necessary. */
26703  -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
26704      There are a few non-descriptor entries in the vtable at offsets
26705      below zero.  If these entries must be padded (say, to preserve the
26706      alignment specified by `TARGET_VTABLE_ENTRY_ALIGN'), set this to
26707      the number of words in each data entry.
26709 \x1f
26710 File: gccint.info,  Node: Registers,  Next: Register Classes,  Prev: Type Layout,  Up: Target Macros
26712 17.7 Register Usage
26713 ===================
26715 This section explains how to describe what registers the target machine
26716 has, and how (in general) they can be used.
26718  The description of which registers a specific instruction can use is
26719 done with register classes; see *Note Register Classes::.  For
26720 information on using registers to access a stack frame, see *Note Frame
26721 Registers::.  For passing values in registers, see *Note Register
26722 Arguments::.  For returning values in registers, see *Note Scalar
26723 Return::.
26725 * Menu:
26727 * Register Basics::             Number and kinds of registers.
26728 * Allocation Order::            Order in which registers are allocated.
26729 * Values in Registers::         What kinds of values each reg can hold.
26730 * Leaf Functions::              Renumbering registers for leaf functions.
26731 * Stack Registers::             Handling a register stack such as 80387.
26733 \x1f
26734 File: gccint.info,  Node: Register Basics,  Next: Allocation Order,  Up: Registers
26736 17.7.1 Basic Characteristics of Registers
26737 -----------------------------------------
26739 Registers have various characteristics.
26741  -- Macro: FIRST_PSEUDO_REGISTER
26742      Number of hardware registers known to the compiler.  They receive
26743      numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first
26744      pseudo register's number really is assigned the number
26745      `FIRST_PSEUDO_REGISTER'.
26747  -- Macro: FIXED_REGISTERS
26748      An initializer that says which registers are used for fixed
26749      purposes all throughout the compiled code and are therefore not
26750      available for general allocation.  These would include the stack
26751      pointer, the frame pointer (except on machines where that can be
26752      used as a general register when no frame pointer is needed), the
26753      program counter on machines where that is considered one of the
26754      addressable registers, and any other numbered register with a
26755      standard use.
26757      This information is expressed as a sequence of numbers, separated
26758      by commas and surrounded by braces.  The Nth number is 1 if
26759      register N is fixed, 0 otherwise.
26761      The table initialized from this macro, and the table initialized by
26762      the following one, may be overridden at run time either
26763      automatically, by the actions of the macro
26764      `CONDITIONAL_REGISTER_USAGE', or by the user with the command
26765      options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'.
26767  -- Macro: CALL_USED_REGISTERS
26768      Like `FIXED_REGISTERS' but has 1 for each register that is
26769      clobbered (in general) by function calls as well as for fixed
26770      registers.  This macro therefore identifies the registers that are
26771      not available for general allocation of values that must live
26772      across function calls.
26774      If a register has 0 in `CALL_USED_REGISTERS', the compiler
26775      automatically saves it on function entry and restores it on
26776      function exit, if the register is used within the function.
26778  -- Macro: CALL_REALLY_USED_REGISTERS
26779      Like `CALL_USED_REGISTERS' except this macro doesn't require that
26780      the entire set of `FIXED_REGISTERS' be included.
26781      (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS').
26782      This macro is optional.  If not specified, it defaults to the value
26783      of `CALL_USED_REGISTERS'.
26785  -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE)
26786      A C expression that is nonzero if it is not permissible to store a
26787      value of mode MODE in hard register number REGNO across a call
26788      without some part of it being clobbered.  For most machines this
26789      macro need not be defined.  It is only required for machines that
26790      do not preserve the entire contents of a register across a call.
26792  -- Macro: CONDITIONAL_REGISTER_USAGE
26793      Zero or more C statements that may conditionally modify five
26794      variables `fixed_regs', `call_used_regs', `global_regs',
26795      `reg_names', and `reg_class_contents', to take into account any
26796      dependence of these register sets on target flags.  The first three
26797      of these are of type `char []' (interpreted as Boolean vectors).
26798      `global_regs' is a `const char *[]', and `reg_class_contents' is a
26799      `HARD_REG_SET'.  Before the macro is called, `fixed_regs',
26800      `call_used_regs', `reg_class_contents', and `reg_names' have been
26801      initialized from `FIXED_REGISTERS', `CALL_USED_REGISTERS',
26802      `REG_CLASS_CONTENTS', and `REGISTER_NAMES', respectively.
26803      `global_regs' has been cleared, and any `-ffixed-REG',
26804      `-fcall-used-REG' and `-fcall-saved-REG' command options have been
26805      applied.
26807      You need not define this macro if it has no work to do.
26809      If the usage of an entire class of registers depends on the target
26810      flags, you may indicate this to GCC by using this macro to modify
26811      `fixed_regs' and `call_used_regs' to 1 for each of the registers
26812      in the classes which should not be used by GCC.  Also define the
26813      macro `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' to
26814      return `NO_REGS' if it is called with a letter for a class that
26815      shouldn't be used.
26817      (However, if this class is not included in `GENERAL_REGS' and all
26818      of the insn patterns whose constraints permit this class are
26819      controlled by target switches, then GCC will automatically avoid
26820      using these registers when the target switches are opposed to
26821      them.)
26823  -- Macro: INCOMING_REGNO (OUT)
26824      Define this macro if the target machine has register windows.
26825      This C expression returns the register number as seen by the
26826      called function corresponding to the register number OUT as seen
26827      by the calling function.  Return OUT if register number OUT is not
26828      an outbound register.
26830  -- Macro: OUTGOING_REGNO (IN)
26831      Define this macro if the target machine has register windows.
26832      This C expression returns the register number as seen by the
26833      calling function corresponding to the register number IN as seen
26834      by the called function.  Return IN if register number IN is not an
26835      inbound register.
26837  -- Macro: LOCAL_REGNO (REGNO)
26838      Define this macro if the target machine has register windows.
26839      This C expression returns true if the register is call-saved but
26840      is in the register window.  Unlike most call-saved registers, such
26841      registers need not be explicitly restored on function exit or
26842      during non-local gotos.
26844  -- Macro: PC_REGNUM
26845      If the program counter has a register number, define this as that
26846      register number.  Otherwise, do not define it.
26848 \x1f
26849 File: gccint.info,  Node: Allocation Order,  Next: Values in Registers,  Prev: Register Basics,  Up: Registers
26851 17.7.2 Order of Allocation of Registers
26852 ---------------------------------------
26854 Registers are allocated in order.
26856  -- Macro: REG_ALLOC_ORDER
26857      If defined, an initializer for a vector of integers, containing the
26858      numbers of hard registers in the order in which GCC should prefer
26859      to use them (from most preferred to least).
26861      If this macro is not defined, registers are used lowest numbered
26862      first (all else being equal).
26864      One use of this macro is on machines where the highest numbered
26865      registers must always be saved and the save-multiple-registers
26866      instruction supports only sequences of consecutive registers.  On
26867      such machines, define `REG_ALLOC_ORDER' to be an initializer that
26868      lists the highest numbered allocable register first.
26870  -- Macro: ORDER_REGS_FOR_LOCAL_ALLOC
26871      A C statement (sans semicolon) to choose the order in which to
26872      allocate hard registers for pseudo-registers local to a basic
26873      block.
26875      Store the desired register order in the array `reg_alloc_order'.
26876      Element 0 should be the register to allocate first; element 1, the
26877      next register; and so on.
26879      The macro body should not assume anything about the contents of
26880      `reg_alloc_order' before execution of the macro.
26882      On most machines, it is not necessary to define this macro.
26884  -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO)
26885      In some case register allocation order is not enough for the
26886      Integrated Register Allocator (IRA) to generate a good code.  If
26887      this macro is defined, it should return a floating point value
26888      based on REGNO.  The cost of using REGNO for a pseudo will be
26889      increased by approximately the pseudo's usage frequency times the
26890      value returned by this macro.  Not defining this macro is
26891      equivalent to having it always return `0.0'.
26893      On most machines, it is not necessary to define this macro.
26895 \x1f
26896 File: gccint.info,  Node: Values in Registers,  Next: Leaf Functions,  Prev: Allocation Order,  Up: Registers
26898 17.7.3 How Values Fit in Registers
26899 ----------------------------------
26901 This section discusses the macros that describe which kinds of values
26902 (specifically, which machine modes) each register can hold, and how many
26903 consecutive registers are needed for a given mode.
26905  -- Macro: HARD_REGNO_NREGS (REGNO, MODE)
26906      A C expression for the number of consecutive hard registers,
26907      starting at register number REGNO, required to hold a value of mode
26908      MODE.  This macro must never return zero, even if a register
26909      cannot hold the requested mode - indicate that with
26910      HARD_REGNO_MODE_OK and/or CANNOT_CHANGE_MODE_CLASS instead.
26912      On a machine where all registers are exactly one word, a suitable
26913      definition of this macro is
26915           #define HARD_REGNO_NREGS(REGNO, MODE)            \
26916              ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
26917               / UNITS_PER_WORD)
26919  -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE)
26920      A C expression that is nonzero if a value of mode MODE, stored in
26921      memory, ends with padding that causes it to take up more space than
26922      in registers starting at register number REGNO (as determined by
26923      multiplying GCC's notion of the size of the register when
26924      containing this mode by the number of registers returned by
26925      `HARD_REGNO_NREGS').  By default this is zero.
26927      For example, if a floating-point value is stored in three 32-bit
26928      registers but takes up 128 bits in memory, then this would be
26929      nonzero.
26931      This macros only needs to be defined if there are cases where
26932      `subreg_get_info' would otherwise wrongly determine that a
26933      `subreg' can be represented by an offset to the register number,
26934      when in fact such a `subreg' would contain some of the padding not
26935      stored in registers and so not be representable.
26937  -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
26938      For values of REGNO and MODE for which
26939      `HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression
26940      returning the greater number of registers required to hold the
26941      value including any padding.  In the example above, the value
26942      would be four.
26944  -- Macro: REGMODE_NATURAL_SIZE (MODE)
26945      Define this macro if the natural size of registers that hold values
26946      of mode MODE is not the word size.  It is a C expression that
26947      should give the natural size in bytes for the specified mode.  It
26948      is used by the register allocator to try to optimize its results.
26949      This happens for example on SPARC 64-bit where the natural size of
26950      floating-point registers is still 32-bit.
26952  -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE)
26953      A C expression that is nonzero if it is permissible to store a
26954      value of mode MODE in hard register number REGNO (or in several
26955      registers starting with that one).  For a machine where all
26956      registers are equivalent, a suitable definition is
26958           #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
26960      You need not include code to check for the numbers of fixed
26961      registers, because the allocation mechanism considers them to be
26962      always occupied.
26964      On some machines, double-precision values must be kept in even/odd
26965      register pairs.  You can implement that by defining this macro to
26966      reject odd register numbers for such modes.
26968      The minimum requirement for a mode to be OK in a register is that
26969      the `movMODE' instruction pattern support moves between the
26970      register and other hard register in the same class and that moving
26971      a value into the register and back out not alter it.
26973      Since the same instruction used to move `word_mode' will work for
26974      all narrower integer modes, it is not necessary on any machine for
26975      `HARD_REGNO_MODE_OK' to distinguish between these modes, provided
26976      you define patterns `movhi', etc., to take advantage of this.  This
26977      is useful because of the interaction between `HARD_REGNO_MODE_OK'
26978      and `MODES_TIEABLE_P'; it is very desirable for all integer modes
26979      to be tieable.
26981      Many machines have special registers for floating point arithmetic.
26982      Often people assume that floating point machine modes are allowed
26983      only in floating point registers.  This is not true.  Any
26984      registers that can hold integers can safely _hold_ a floating
26985      point machine mode, whether or not floating arithmetic can be done
26986      on it in those registers.  Integer move instructions can be used
26987      to move the values.
26989      On some machines, though, the converse is true: fixed-point machine
26990      modes may not go in floating registers.  This is true if the
26991      floating registers normalize any value stored in them, because
26992      storing a non-floating value there would garble it.  In this case,
26993      `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in
26994      floating registers.  But if the floating registers do not
26995      automatically normalize, if you can store any bit pattern in one
26996      and retrieve it unchanged without a trap, then any machine mode
26997      may go in a floating register, so you can define this macro to say
26998      so.
27000      The primary significance of special floating registers is rather
27001      that they are the registers acceptable in floating point arithmetic
27002      instructions.  However, this is of no concern to
27003      `HARD_REGNO_MODE_OK'.  You handle it by writing the proper
27004      constraints for those instructions.
27006      On some machines, the floating registers are especially slow to
27007      access, so that it is better to store a value in a stack frame
27008      than in such a register if floating point arithmetic is not being
27009      done.  As long as the floating registers are not in class
27010      `GENERAL_REGS', they will not be used unless some pattern's
27011      constraint asks for one.
27013  -- Macro: HARD_REGNO_RENAME_OK (FROM, TO)
27014      A C expression that is nonzero if it is OK to rename a hard
27015      register FROM to another hard register TO.
27017      One common use of this macro is to prevent renaming of a register
27018      to another register that is not saved by a prologue in an interrupt
27019      handler.
27021      The default is always nonzero.
27023  -- Macro: MODES_TIEABLE_P (MODE1, MODE2)
27024      A C expression that is nonzero if a value of mode MODE1 is
27025      accessible in mode MODE2 without copying.
27027      If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
27028      MODE2)' are always the same for any R, then `MODES_TIEABLE_P
27029      (MODE1, MODE2)' should be nonzero.  If they differ for any R, you
27030      should define this macro to return zero unless some other
27031      mechanism ensures the accessibility of the value in a narrower
27032      mode.
27034      You should define this macro to return nonzero in as many cases as
27035      possible since doing so will allow GCC to perform better register
27036      allocation.
27038  -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO)
27039      This target hook should return `true' if it is OK to use a hard
27040      register REGNO as scratch reg in peephole2.
27042      One common use of this macro is to prevent using of a register that
27043      is not saved by a prologue in an interrupt handler.
27045      The default version of this hook always returns `true'.
27047  -- Macro: AVOID_CCMODE_COPIES
27048      Define this macro if the compiler should avoid copies to/from
27049      `CCmode' registers.  You should only define this macro if support
27050      for copying to/from `CCmode' is incomplete.
27052 \x1f
27053 File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers
27055 17.7.4 Handling Leaf Functions
27056 ------------------------------
27058 On some machines, a leaf function (i.e., one which makes no calls) can
27059 run more efficiently if it does not make its own register window.
27060 Often this means it is required to receive its arguments in the
27061 registers where they are passed by the caller, instead of the registers
27062 where they would normally arrive.
27064  The special treatment for leaf functions generally applies only when
27065 other conditions are met; for example, often they may use only those
27066 registers for its own variables and temporaries.  We use the term "leaf
27067 function" to mean a function that is suitable for this special
27068 handling, so that functions with no calls are not necessarily "leaf
27069 functions".
27071  GCC assigns register numbers before it knows whether the function is
27072 suitable for leaf function treatment.  So it needs to renumber the
27073 registers in order to output a leaf function.  The following macros
27074 accomplish this.
27076  -- Macro: LEAF_REGISTERS
27077      Name of a char vector, indexed by hard register number, which
27078      contains 1 for a register that is allowable in a candidate for leaf
27079      function treatment.
27081      If leaf function treatment involves renumbering the registers,
27082      then the registers marked here should be the ones before
27083      renumbering--those that GCC would ordinarily allocate.  The
27084      registers which will actually be used in the assembler code, after
27085      renumbering, should not be marked with 1 in this vector.
27087      Define this macro only if the target machine offers a way to
27088      optimize the treatment of leaf functions.
27090  -- Macro: LEAF_REG_REMAP (REGNO)
27091      A C expression whose value is the register number to which REGNO
27092      should be renumbered, when a function is treated as a leaf
27093      function.
27095      If REGNO is a register number which should not appear in a leaf
27096      function before renumbering, then the expression should yield -1,
27097      which will cause the compiler to abort.
27099      Define this macro only if the target machine offers a way to
27100      optimize the treatment of leaf functions, and registers need to be
27101      renumbered to do this.
27103  `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' must
27104 usually treat leaf functions specially.  They can test the C variable
27105 `current_function_is_leaf' which is nonzero for leaf functions.
27106 `current_function_is_leaf' is set prior to local register allocation
27107 and is valid for the remaining compiler passes.  They can also test the
27108 C variable `current_function_uses_only_leaf_regs' which is nonzero for
27109 leaf functions which only use leaf registers.
27110 `current_function_uses_only_leaf_regs' is valid after all passes that
27111 modify the instructions have been run and is only useful if
27112 `LEAF_REGISTERS' is defined.
27114 \x1f
27115 File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers
27117 17.7.5 Registers That Form a Stack
27118 ----------------------------------
27120 There are special features to handle computers where some of the
27121 "registers" form a stack.  Stack registers are normally written by
27122 pushing onto the stack, and are numbered relative to the top of the
27123 stack.
27125  Currently, GCC can only handle one group of stack-like registers, and
27126 they must be consecutively numbered.  Furthermore, the existing support
27127 for stack-like registers is specific to the 80387 floating point
27128 coprocessor.  If you have a new architecture that uses stack-like
27129 registers, you will need to do substantial work on `reg-stack.c' and
27130 write your machine description to cooperate with it, as well as
27131 defining these macros.
27133  -- Macro: STACK_REGS
27134      Define this if the machine has any stack-like registers.
27136  -- Macro: STACK_REG_COVER_CLASS
27137      This is a cover class containing the stack registers.  Define this
27138      if the machine has any stack-like registers.
27140  -- Macro: FIRST_STACK_REG
27141      The number of the first stack-like register.  This one is the top
27142      of the stack.
27144  -- Macro: LAST_STACK_REG
27145      The number of the last stack-like register.  This one is the
27146      bottom of the stack.
27148 \x1f
27149 File: gccint.info,  Node: Register Classes,  Next: Old Constraints,  Prev: Registers,  Up: Target Macros
27151 17.8 Register Classes
27152 =====================
27154 On many machines, the numbered registers are not all equivalent.  For
27155 example, certain registers may not be allowed for indexed addressing;
27156 certain registers may not be allowed in some instructions.  These
27157 machine restrictions are described to the compiler using "register
27158 classes".
27160  You define a number of register classes, giving each one a name and
27161 saying which of the registers belong to it.  Then you can specify
27162 register classes that are allowed as operands to particular instruction
27163 patterns.
27165  In general, each register will belong to several classes.  In fact, one
27166 class must be named `ALL_REGS' and contain all the registers.  Another
27167 class must be named `NO_REGS' and contain no registers.  Often the
27168 union of two classes will be another class; however, this is not
27169 required.
27171  One of the classes must be named `GENERAL_REGS'.  There is nothing
27172 terribly special about the name, but the operand constraint letters `r'
27173 and `g' specify this class.  If `GENERAL_REGS' is the same as
27174 `ALL_REGS', just define it as a macro which expands to `ALL_REGS'.
27176  Order the classes so that if class X is contained in class Y then X
27177 has a lower class number than Y.
27179  The way classes other than `GENERAL_REGS' are specified in operand
27180 constraints is through machine-dependent operand constraint letters.
27181 You can define such letters to correspond to various classes, then use
27182 them in operand constraints.
27184  You should define a class for the union of two classes whenever some
27185 instruction allows both classes.  For example, if an instruction allows
27186 either a floating point (coprocessor) register or a general register
27187 for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS'
27188 which includes both of them.  Otherwise you will get suboptimal code.
27190  You must also specify certain redundant information about the register
27191 classes: for each class, which classes contain it and which ones are
27192 contained in it; for each pair of classes, the largest class contained
27193 in their union.
27195  When a value occupying several consecutive registers is expected in a
27196 certain class, all the registers used must belong to that class.
27197 Therefore, register classes cannot be used to enforce a requirement for
27198 a register pair to start with an even-numbered register.  The way to
27199 specify this requirement is with `HARD_REGNO_MODE_OK'.
27201  Register classes used for input-operands of bitwise-and or shift
27202 instructions have a special requirement: each such class must have, for
27203 each fixed-point machine mode, a subclass whose registers can transfer
27204 that mode to or from memory.  For example, on some machines, the
27205 operations for single-byte values (`QImode') are limited to certain
27206 registers.  When this is so, each register class that is used in a
27207 bitwise-and or shift instruction must have a subclass consisting of
27208 registers from which single-byte values can be loaded or stored.  This
27209 is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to
27210 return.
27212  -- Data type: enum reg_class
27213      An enumerated type that must be defined with all the register
27214      class names as enumerated values.  `NO_REGS' must be first.
27215      `ALL_REGS' must be the last register class, followed by one more
27216      enumerated value, `LIM_REG_CLASSES', which is not a register class
27217      but rather tells how many classes there are.
27219      Each register class has a number, which is the value of casting
27220      the class name to type `int'.  The number serves as an index in
27221      many of the tables described below.
27223  -- Macro: N_REG_CLASSES
27224      The number of distinct register classes, defined as follows:
27226           #define N_REG_CLASSES (int) LIM_REG_CLASSES
27228  -- Macro: REG_CLASS_NAMES
27229      An initializer containing the names of the register classes as C
27230      string constants.  These names are used in writing some of the
27231      debugging dumps.
27233  -- Macro: REG_CLASS_CONTENTS
27234      An initializer containing the contents of the register classes, as
27235      integers which are bit masks.  The Nth integer specifies the
27236      contents of class N.  The way the integer MASK is interpreted is
27237      that register R is in the class if `MASK & (1 << R)' is 1.
27239      When the machine has more than 32 registers, an integer does not
27240      suffice.  Then the integers are replaced by sub-initializers,
27241      braced groupings containing several integers.  Each
27242      sub-initializer must be suitable as an initializer for the type
27243      `HARD_REG_SET' which is defined in `hard-reg-set.h'.  In this
27244      situation, the first integer in each sub-initializer corresponds to
27245      registers 0 through 31, the second integer to registers 32 through
27246      63, and so on.
27248  -- Macro: REGNO_REG_CLASS (REGNO)
27249      A C expression whose value is a register class containing hard
27250      register REGNO.  In general there is more than one such class;
27251      choose a class which is "minimal", meaning that no smaller class
27252      also contains the register.
27254  -- Macro: BASE_REG_CLASS
27255      A macro whose definition is the name of the class to which a valid
27256      base register must belong.  A base register is one used in an
27257      address which is the register value plus a displacement.
27259  -- Macro: MODE_BASE_REG_CLASS (MODE)
27260      This is a variation of the `BASE_REG_CLASS' macro which allows the
27261      selection of a base register in a mode dependent manner.  If MODE
27262      is VOIDmode then it should return the same value as
27263      `BASE_REG_CLASS'.
27265  -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
27266      A C expression whose value is the register class to which a valid
27267      base register must belong in order to be used in a base plus index
27268      register address.  You should define this macro if base plus index
27269      addresses have different requirements than other base register
27270      uses.
27272  -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, OUTER_CODE, INDEX_CODE)
27273      A C expression whose value is the register class to which a valid
27274      base register must belong.  OUTER_CODE and INDEX_CODE define the
27275      context in which the base register occurs.  OUTER_CODE is the code
27276      of the immediately enclosing expression (`MEM' for the top level
27277      of an address, `ADDRESS' for something that occurs in an
27278      `address_operand').  INDEX_CODE is the code of the corresponding
27279      index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise.
27281  -- Macro: INDEX_REG_CLASS
27282      A macro whose definition is the name of the class to which a valid
27283      index register must belong.  An index register is one used in an
27284      address where its value is either multiplied by a scale factor or
27285      added to another register (as well as added to a displacement).
27287  -- Macro: REGNO_OK_FOR_BASE_P (NUM)
27288      A C expression which is nonzero if register number NUM is suitable
27289      for use as a base register in operand addresses.  Like
27290      `TARGET_LEGITIMATE_ADDRESS_P', this macro should also define a
27291      strict and a non-strict variant.  Both variants behave the same
27292      for hard register; for pseudos, the strict variant will pass only
27293      those that have been allocated to a valid hard registers, while
27294      the non-strict variant will pass all pseudos.
27296      Compiler source files that want to use the strict variant of this
27297      and other macros define the macro `REG_OK_STRICT'.  You should use
27298      an `#ifdef REG_OK_STRICT' conditional to define the strict variant
27299      in that case and the non-strict variant otherwise.
27301  -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
27302      A C expression that is just like `REGNO_OK_FOR_BASE_P', except that
27303      that expression may examine the mode of the memory reference in
27304      MODE.  You should define this macro if the mode of the memory
27305      reference affects whether a register may be used as a base
27306      register.  If you define this macro, the compiler will use it
27307      instead of `REGNO_OK_FOR_BASE_P'.  The mode may be `VOIDmode' for
27308      addresses that appear outside a `MEM', i.e., as an
27309      `address_operand'.
27311      This macro also has strict and non-strict variants.
27313  -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
27314      A C expression which is nonzero if register number NUM is suitable
27315      for use as a base register in base plus index operand addresses,
27316      accessing memory in mode MODE.  It may be either a suitable hard
27317      register or a pseudo register that has been allocated such a hard
27318      register.  You should define this macro if base plus index
27319      addresses have different requirements than other base register
27320      uses.
27322      Use of this macro is deprecated; please use the more general
27323      `REGNO_MODE_CODE_OK_FOR_BASE_P'.
27325      This macro also has strict and non-strict variants.
27327  -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, OUTER_CODE,
27328           INDEX_CODE)
27329      A C expression that is just like `REGNO_MODE_OK_FOR_BASE_P', except
27330      that that expression may examine the context in which the register
27331      appears in the memory reference.  OUTER_CODE is the code of the
27332      immediately enclosing expression (`MEM' if at the top level of the
27333      address, `ADDRESS' for something that occurs in an
27334      `address_operand').  INDEX_CODE is the code of the corresponding
27335      index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise.
27336      The mode may be `VOIDmode' for addresses that appear outside a
27337      `MEM', i.e., as an `address_operand'.
27339      This macro also has strict and non-strict variants.
27341  -- Macro: REGNO_OK_FOR_INDEX_P (NUM)
27342      A C expression which is nonzero if register number NUM is suitable
27343      for use as an index register in operand addresses.  It may be
27344      either a suitable hard register or a pseudo register that has been
27345      allocated such a hard register.
27347      The difference between an index register and a base register is
27348      that the index register may be scaled.  If an address involves the
27349      sum of two registers, neither one of them scaled, then either one
27350      may be labeled the "base" and the other the "index"; but whichever
27351      labeling is used must fit the machine's constraints of which
27352      registers may serve in each capacity.  The compiler will try both
27353      labelings, looking for one that is valid, and will reload one or
27354      both registers only if neither labeling works.
27356      This macro also has strict and non-strict variants.
27358  -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS)
27359      A C expression that places additional restrictions on the register
27360      class to use when it is necessary to copy value X into a register
27361      in class CLASS.  The value is a register class; perhaps CLASS, or
27362      perhaps another, smaller class.  On many machines, the following
27363      definition is safe:
27365           #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
27367      Sometimes returning a more restrictive class makes better code.
27368      For example, on the 68000, when X is an integer constant that is
27369      in range for a `moveq' instruction, the value of this macro is
27370      always `DATA_REGS' as long as CLASS includes the data registers.
27371      Requiring a data register guarantees that a `moveq' will be used.
27373      One case where `PREFERRED_RELOAD_CLASS' must not return CLASS is
27374      if X is a legitimate constant which cannot be loaded into some
27375      register class.  By returning `NO_REGS' you can force X into a
27376      memory location.  For example, rs6000 can load immediate values
27377      into general-purpose registers, but does not have an instruction
27378      for loading an immediate value into a floating-point register, so
27379      `PREFERRED_RELOAD_CLASS' returns `NO_REGS' when X is a
27380      floating-point constant.  If the constant can't be loaded into any
27381      kind of register, code generation will be better if
27382      `LEGITIMATE_CONSTANT_P' makes the constant illegitimate instead of
27383      using `PREFERRED_RELOAD_CLASS'.
27385      If an insn has pseudos in it after register allocation, reload
27386      will go through the alternatives and call repeatedly
27387      `PREFERRED_RELOAD_CLASS' to find the best one.  Returning
27388      `NO_REGS', in this case, makes reload add a `!' in front of the
27389      constraint: the x86 back-end uses this feature to discourage usage
27390      of 387 registers when math is done in the SSE registers (and vice
27391      versa).
27393  -- Macro: PREFERRED_OUTPUT_RELOAD_CLASS (X, CLASS)
27394      Like `PREFERRED_RELOAD_CLASS', but for output reloads instead of
27395      input reloads.  If you don't define this macro, the default is to
27396      use CLASS, unchanged.
27398      You can also use `PREFERRED_OUTPUT_RELOAD_CLASS' to discourage
27399      reload from using some alternatives, like `PREFERRED_RELOAD_CLASS'.
27401  -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
27402      A C expression that places additional restrictions on the register
27403      class to use when it is necessary to be able to hold a value of
27404      mode MODE in a reload register for which class CLASS would
27405      ordinarily be used.
27407      Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when
27408      there are certain modes that simply can't go in certain reload
27409      classes.
27411      The value is a register class; perhaps CLASS, or perhaps another,
27412      smaller class.
27414      Don't define this macro unless the target machine has limitations
27415      which require the macro to do something nontrivial.
27417  -- Target Hook: enum reg_class TARGET_SECONDARY_RELOAD (bool IN_P, rtx
27418           X, enum reg_class RELOAD_CLASS, enum machine_mode
27419           RELOAD_MODE, secondary_reload_info *SRI)
27420      Many machines have some registers that cannot be copied directly
27421      to or from memory or even from other types of registers.  An
27422      example is the `MQ' register, which on most machines, can only be
27423      copied to or from general registers, but not memory.  Below, we
27424      shall be using the term 'intermediate register' when a move
27425      operation cannot be performed directly, but has to be done by
27426      copying the source into the intermediate register first, and then
27427      copying the intermediate register to the destination.  An
27428      intermediate register always has the same mode as source and
27429      destination.  Since it holds the actual value being copied, reload
27430      might apply optimizations to re-use an intermediate register and
27431      eliding the copy from the source when it can determine that the
27432      intermediate register still holds the required value.
27434      Another kind of secondary reload is required on some machines which
27435      allow copying all registers to and from memory, but require a
27436      scratch register for stores to some memory locations (e.g., those
27437      with symbolic address on the RT, and those with certain symbolic
27438      address on the SPARC when compiling PIC).  Scratch registers need
27439      not have the same mode as the value being copied, and usually hold
27440      a different value than that being copied.  Special patterns in the
27441      md file are needed to describe how the copy is performed with the
27442      help of the scratch register; these patterns also describe the
27443      number, register class(es) and mode(s) of the scratch register(s).
27445      In some cases, both an intermediate and a scratch register are
27446      required.
27448      For input reloads, this target hook is called with nonzero IN_P,
27449      and X is an rtx that needs to be copied to a register of class
27450      RELOAD_CLASS in RELOAD_MODE.  For output reloads, this target hook
27451      is called with zero IN_P, and a register of class RELOAD_CLASS
27452      needs to be copied to rtx X in RELOAD_MODE.
27454      If copying a register of RELOAD_CLASS from/to X requires an
27455      intermediate register, the hook `secondary_reload' should return
27456      the register class required for this intermediate register.  If no
27457      intermediate register is required, it should return NO_REGS.  If
27458      more than one intermediate register is required, describe the one
27459      that is closest in the copy chain to the reload register.
27461      If scratch registers are needed, you also have to describe how to
27462      perform the copy from/to the reload register to/from this closest
27463      intermediate register.  Or if no intermediate register is
27464      required, but still a scratch register is needed, describe the
27465      copy  from/to the reload register to/from the reload operand X.
27467      You do this by setting `sri->icode' to the instruction code of a
27468      pattern in the md file which performs the move.  Operands 0 and 1
27469      are the output and input of this copy, respectively.  Operands
27470      from operand 2 onward are for scratch operands.  These scratch
27471      operands must have a mode, and a single-register-class output
27472      constraint.
27474      When an intermediate register is used, the `secondary_reload' hook
27475      will be called again to determine how to copy the intermediate
27476      register to/from the reload operand X, so your hook must also have
27477      code to handle the register class of the intermediate operand.
27479      X might be a pseudo-register or a `subreg' of a pseudo-register,
27480      which could either be in a hard register or in memory.  Use
27481      `true_regnum' to find out; it will return -1 if the pseudo is in
27482      memory and the hard register number if it is in a register.
27484      Scratch operands in memory (constraint `"=m"' / `"=&m"') are
27485      currently not supported.  For the time being, you will have to
27486      continue to use `SECONDARY_MEMORY_NEEDED' for that purpose.
27488      `copy_cost' also uses this target hook to find out how values are
27489      copied.  If you want it to include some extra cost for the need to
27490      allocate (a) scratch register(s), set `sri->extra_cost' to the
27491      additional cost.  Or if two dependent moves are supposed to have a
27492      lower cost than the sum of the individual moves due to expected
27493      fortuitous scheduling and/or special forwarding logic, you can set
27494      `sri->extra_cost' to a negative amount.
27496  -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
27497  -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
27498  -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
27499      These macros are obsolete, new ports should use the target hook
27500      `TARGET_SECONDARY_RELOAD' instead.
27502      These are obsolete macros, replaced by the
27503      `TARGET_SECONDARY_RELOAD' target hook.  Older ports still define
27504      these macros to indicate to the reload phase that it may need to
27505      allocate at least one register for a reload in addition to the
27506      register to contain the data.  Specifically, if copying X to a
27507      register CLASS in MODE requires an intermediate register, you were
27508      supposed to define `SECONDARY_INPUT_RELOAD_CLASS' to return the
27509      largest register class all of whose registers can be used as
27510      intermediate registers or scratch registers.
27512      If copying a register CLASS in MODE to X requires an intermediate
27513      or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' was supposed
27514      to be defined be defined to return the largest register class
27515      required.  If the requirements for input and output reloads were
27516      the same, the macro `SECONDARY_RELOAD_CLASS' should have been used
27517      instead of defining both macros identically.
27519      The values returned by these macros are often `GENERAL_REGS'.
27520      Return `NO_REGS' if no spare register is needed; i.e., if X can be
27521      directly copied to or from a register of CLASS in MODE without
27522      requiring a scratch register.  Do not define this macro if it
27523      would always return `NO_REGS'.
27525      If a scratch register is required (either with or without an
27526      intermediate register), you were supposed to define patterns for
27527      `reload_inM' or `reload_outM', as required (*note Standard
27528      Names::.  These patterns, which were normally implemented with a
27529      `define_expand', should be similar to the `movM' patterns, except
27530      that operand 2 is the scratch register.
27532      These patterns need constraints for the reload register and scratch
27533      register that contain a single register class.  If the original
27534      reload register (whose class is CLASS) can meet the constraint
27535      given in the pattern, the value returned by these macros is used
27536      for the class of the scratch register.  Otherwise, two additional
27537      reload registers are required.  Their classes are obtained from
27538      the constraints in the insn pattern.
27540      X might be a pseudo-register or a `subreg' of a pseudo-register,
27541      which could either be in a hard register or in memory.  Use
27542      `true_regnum' to find out; it will return -1 if the pseudo is in
27543      memory and the hard register number if it is in a register.
27545      These macros should not be used in the case where a particular
27546      class of registers can only be copied to memory and not to another
27547      class of registers.  In that case, secondary reload registers are
27548      not needed and would not be helpful.  Instead, a stack location
27549      must be used to perform the copy and the `movM' pattern should use
27550      memory as an intermediate storage.  This case often occurs between
27551      floating-point and general registers.
27553  -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)
27554      Certain machines have the property that some registers cannot be
27555      copied to some other registers without using memory.  Define this
27556      macro on those machines to be a C expression that is nonzero if
27557      objects of mode M in registers of CLASS1 can only be copied to
27558      registers of class CLASS2 by storing a register of CLASS1 into
27559      memory and loading that memory location into a register of CLASS2.
27561      Do not define this macro if its value would always be zero.
27563  -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
27564      Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler
27565      allocates a stack slot for a memory location needed for register
27566      copies.  If this macro is defined, the compiler instead uses the
27567      memory location defined by this macro.
27569      Do not define this macro if you do not define
27570      `SECONDARY_MEMORY_NEEDED'.
27572  -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE)
27573      When the compiler needs a secondary memory location to copy
27574      between two registers of mode MODE, it normally allocates
27575      sufficient memory to hold a quantity of `BITS_PER_WORD' bits and
27576      performs the store and load operations in a mode that many bits
27577      wide and whose class is the same as that of MODE.
27579      This is right thing to do on most machines because it ensures that
27580      all bits of the register are copied and prevents accesses to the
27581      registers in a narrower mode, which some machines prohibit for
27582      floating-point registers.
27584      However, this default behavior is not correct on some machines,
27585      such as the DEC Alpha, that store short integers in floating-point
27586      registers differently than in integer registers.  On those
27587      machines, the default widening will not work correctly and you
27588      must define this macro to suppress that widening in some cases.
27589      See the file `alpha.h' for details.
27591      Do not define this macro if you do not define
27592      `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is
27593      `BITS_PER_WORD' bits wide is correct for your machine.
27595  -- Macro: SMALL_REGISTER_CLASSES
27596      On some machines, it is risky to let hard registers live across
27597      arbitrary insns.  Typically, these machines have instructions that
27598      require values to be in specific registers (like an accumulator),
27599      and reload will fail if the required hard register is used for
27600      another purpose across such an insn.
27602      Define `SMALL_REGISTER_CLASSES' to be an expression with a nonzero
27603      value on these machines.  When this macro has a nonzero value, the
27604      compiler will try to minimize the lifetime of hard registers.
27606      It is always safe to define this macro with a nonzero value, but
27607      if you unnecessarily define it, you will reduce the amount of
27608      optimizations that can be performed in some cases.  If you do not
27609      define this macro with a nonzero value when it is required, the
27610      compiler will run out of spill registers and print a fatal error
27611      message.  For most machines, you should not define this macro at
27612      all.
27614  -- Macro: CLASS_LIKELY_SPILLED_P (CLASS)
27615      A C expression whose value is nonzero if pseudos that have been
27616      assigned to registers of class CLASS would likely be spilled
27617      because registers of CLASS are needed for spill registers.
27619      The default value of this macro returns 1 if CLASS has exactly one
27620      register and zero otherwise.  On most machines, this default
27621      should be used.  Only define this macro to some other expression
27622      if pseudos allocated by `local-alloc.c' end up in memory because
27623      their hard registers were needed for spill registers.  If this
27624      macro returns nonzero for those classes, those pseudos will only
27625      be allocated by `global.c', which knows how to reallocate the
27626      pseudo to another register.  If there would not be another
27627      register available for reallocation, you should not change the
27628      definition of this macro since the only effect of such a
27629      definition would be to slow down register allocation.
27631  -- Macro: CLASS_MAX_NREGS (CLASS, MODE)
27632      A C expression for the maximum number of consecutive registers of
27633      class CLASS needed to hold a value of mode MODE.
27635      This is closely related to the macro `HARD_REGNO_NREGS'.  In fact,
27636      the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be
27637      the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all
27638      REGNO values in the class CLASS.
27640      This macro helps control the handling of multiple-word values in
27641      the reload pass.
27643  -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS)
27644      If defined, a C expression that returns nonzero for a CLASS for
27645      which a change from mode FROM to mode TO is invalid.
27647      For the example, loading 32-bit integer or floating-point objects
27648      into floating-point registers on the Alpha extends them to 64 bits.
27649      Therefore loading a 64-bit object and then storing it as a 32-bit
27650      object does not store the low-order 32 bits, as would be the case
27651      for a normal register.  Therefore, `alpha.h' defines
27652      `CANNOT_CHANGE_MODE_CLASS' as below:
27654           #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
27655             (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
27656              ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0)
27658  -- Target Hook: const enum reg_class * TARGET_IRA_COVER_CLASSES (void)
27659      Return an array of cover classes for the Integrated Register
27660      Allocator (IRA).  Cover classes are a set of non-intersecting
27661      register classes covering all hard registers used for register
27662      allocation purposes.  If a move between two registers in the same
27663      cover class is possible, it should be cheaper than a load or store
27664      of the registers.  The array is terminated by a `LIM_REG_CLASSES'
27665      element.
27667      The order of cover classes in the array is important.  If two
27668      classes have the same cost of usage for a pseudo, the class
27669      occurred first in the array is chosen for the pseudo.
27671      This hook is called once at compiler startup, after the
27672      command-line options have been processed. It is then re-examined
27673      by every call to `target_reinit'.
27675      The default implementation returns `IRA_COVER_CLASSES', if defined,
27676      otherwise there is no default implementation.  You must define
27677      either this macro or `IRA_COVER_CLASSES' in order to use the
27678      integrated register allocator with Chaitin-Briggs coloring. If the
27679      macro is not defined, the only available coloring algorithm is
27680      Chow's priority coloring.
27682  -- Macro: IRA_COVER_CLASSES
27683      See the documentation for `TARGET_IRA_COVER_CLASSES'.
27685 \x1f
27686 File: gccint.info,  Node: Old Constraints,  Next: Stack and Calling,  Prev: Register Classes,  Up: Target Macros
27688 17.9 Obsolete Macros for Defining Constraints
27689 =============================================
27691 Machine-specific constraints can be defined with these macros instead
27692 of the machine description constructs described in *Note Define
27693 Constraints::.  This mechanism is obsolete.  New ports should not use
27694 it; old ports should convert to the new mechanism.
27696  -- Macro: CONSTRAINT_LEN (CHAR, STR)
27697      For the constraint at the start of STR, which starts with the
27698      letter C, return the length.  This allows you to have register
27699      class / constant / extra constraints that are longer than a single
27700      letter; you don't need to define this macro if you can do with
27701      single-letter constraints only.  The definition of this macro
27702      should use DEFAULT_CONSTRAINT_LEN for all the characters that you
27703      don't want to handle specially.  There are some sanity checks in
27704      genoutput.c that check the constraint lengths for the md file, so
27705      you can also use this macro to help you while you are
27706      transitioning from a byzantine single-letter-constraint scheme:
27707      when you return a negative length for a constraint you want to
27708      re-use, genoutput will complain about every instance where it is
27709      used in the md file.
27711  -- Macro: REG_CLASS_FROM_LETTER (CHAR)
27712      A C expression which defines the machine-dependent operand
27713      constraint letters for register classes.  If CHAR is such a
27714      letter, the value should be the register class corresponding to
27715      it.  Otherwise, the value should be `NO_REGS'.  The register
27716      letter `r', corresponding to class `GENERAL_REGS', will not be
27717      passed to this macro; you do not need to handle it.
27719  -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR)
27720      Like `REG_CLASS_FROM_LETTER', but you also get the constraint
27721      string passed in STR, so that you can use suffixes to distinguish
27722      between different variants.
27724  -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C)
27725      A C expression that defines the machine-dependent operand
27726      constraint letters (`I', `J', `K', ... `P') that specify
27727      particular ranges of integer values.  If C is one of those
27728      letters, the expression should check that VALUE, an integer, is in
27729      the appropriate range and return 1 if so, 0 otherwise.  If C is
27730      not one of those letters, the value should be 0 regardless of
27731      VALUE.
27733  -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
27734      Like `CONST_OK_FOR_LETTER_P', but you also get the constraint
27735      string passed in STR, so that you can use suffixes to distinguish
27736      between different variants.
27738  -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)
27739      A C expression that defines the machine-dependent operand
27740      constraint letters that specify particular ranges of
27741      `const_double' values (`G' or `H').
27743      If C is one of those letters, the expression should check that
27744      VALUE, an RTX of code `const_double', is in the appropriate range
27745      and return 1 if so, 0 otherwise.  If C is not one of those
27746      letters, the value should be 0 regardless of VALUE.
27748      `const_double' is used for all floating-point constants and for
27749      `DImode' fixed-point constants.  A given letter can accept either
27750      or both kinds of values.  It can use `GET_MODE' to distinguish
27751      between these kinds.
27753  -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
27754      Like `CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the
27755      constraint string passed in STR, so that you can use suffixes to
27756      distinguish between different variants.
27758  -- Macro: EXTRA_CONSTRAINT (VALUE, C)
27759      A C expression that defines the optional machine-dependent
27760      constraint letters that can be used to segregate specific types of
27761      operands, usually memory references, for the target machine.  Any
27762      letter that is not elsewhere defined and not matched by
27763      `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' may be used.
27764      Normally this macro will not be defined.
27766      If it is required for a particular target machine, it should
27767      return 1 if VALUE corresponds to the operand type represented by
27768      the constraint letter C.  If C is not defined as an extra
27769      constraint, the value returned should be 0 regardless of VALUE.
27771      For example, on the ROMP, load instructions cannot have their
27772      output in r0 if the memory reference contains a symbolic address.
27773      Constraint letter `Q' is defined as representing a memory address
27774      that does _not_ contain a symbolic address.  An alternative is
27775      specified with a `Q' constraint on the input and `r' on the
27776      output.  The next alternative specifies `m' on the input and a
27777      register class that does not include r0 on the output.
27779  -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR)
27780      Like `EXTRA_CONSTRAINT', but you also get the constraint string
27781      passed in STR, so that you can use suffixes to distinguish between
27782      different variants.
27784  -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR)
27785      A C expression that defines the optional machine-dependent
27786      constraint letters, amongst those accepted by `EXTRA_CONSTRAINT',
27787      that should be treated like memory constraints by the reload pass.
27789      It should return 1 if the operand type represented by the
27790      constraint at the start of STR, the first letter of which is the
27791      letter C, comprises a subset of all memory references including
27792      all those whose address is simply a base register.  This allows
27793      the reload pass to reload an operand, if it does not directly
27794      correspond to the operand type of C, by copying its address into a
27795      base register.
27797      For example, on the S/390, some instructions do not accept
27798      arbitrary memory references, but only those that do not make use
27799      of an index register.  The constraint letter `Q' is defined via
27800      `EXTRA_CONSTRAINT' as representing a memory address of this type.
27801      If the letter `Q' is marked as `EXTRA_MEMORY_CONSTRAINT', a `Q'
27802      constraint can handle any memory operand, because the reload pass
27803      knows it can be reloaded by copying the memory address into a base
27804      register if required.  This is analogous to the way an `o'
27805      constraint can handle any memory operand.
27807  -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR)
27808      A C expression that defines the optional machine-dependent
27809      constraint letters, amongst those accepted by `EXTRA_CONSTRAINT' /
27810      `EXTRA_CONSTRAINT_STR', that should be treated like address
27811      constraints by the reload pass.
27813      It should return 1 if the operand type represented by the
27814      constraint at the start of STR, which starts with the letter C,
27815      comprises a subset of all memory addresses including all those
27816      that consist of just a base register.  This allows the reload pass
27817      to reload an operand, if it does not directly correspond to the
27818      operand type of STR, by copying it into a base register.
27820      Any constraint marked as `EXTRA_ADDRESS_CONSTRAINT' can only be
27821      used with the `address_operand' predicate.  It is treated
27822      analogously to the `p' constraint.
27824 \x1f
27825 File: gccint.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Old Constraints,  Up: Target Macros
27827 17.10 Stack Layout and Calling Conventions
27828 ==========================================
27830 This describes the stack layout and calling conventions.
27832 * Menu:
27834 * Frame Layout::
27835 * Exception Handling::
27836 * Stack Checking::
27837 * Frame Registers::
27838 * Elimination::
27839 * Stack Arguments::
27840 * Register Arguments::
27841 * Scalar Return::
27842 * Aggregate Return::
27843 * Caller Saves::
27844 * Function Entry::
27845 * Profiling::
27846 * Tail Calls::
27847 * Stack Smashing Protection::
27849 \x1f
27850 File: gccint.info,  Node: Frame Layout,  Next: Exception Handling,  Up: Stack and Calling
27852 17.10.1 Basic Stack Layout
27853 --------------------------
27855 Here is the basic stack layout.
27857  -- Macro: STACK_GROWS_DOWNWARD
27858      Define this macro if pushing a word onto the stack moves the stack
27859      pointer to a smaller address.
27861      When we say, "define this macro if ...", it means that the
27862      compiler checks this macro only with `#ifdef' so the precise
27863      definition used does not matter.
27865  -- Macro: STACK_PUSH_CODE
27866      This macro defines the operation used when something is pushed on
27867      the stack.  In RTL, a push operation will be `(set (mem
27868      (STACK_PUSH_CODE (reg sp))) ...)'
27870      The choices are `PRE_DEC', `POST_DEC', `PRE_INC', and `POST_INC'.
27871      Which of these is correct depends on the stack direction and on
27872      whether the stack pointer points to the last item on the stack or
27873      whether it points to the space for the next item on the stack.
27875      The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined,
27876      which is almost always right, and `PRE_INC' otherwise, which is
27877      often wrong.
27879  -- Macro: FRAME_GROWS_DOWNWARD
27880      Define this macro to nonzero value if the addresses of local
27881      variable slots are at negative offsets from the frame pointer.
27883  -- Macro: ARGS_GROW_DOWNWARD
27884      Define this macro if successive arguments to a function occupy
27885      decreasing addresses on the stack.
27887  -- Macro: STARTING_FRAME_OFFSET
27888      Offset from the frame pointer to the first local variable slot to
27889      be allocated.
27891      If `FRAME_GROWS_DOWNWARD', find the next slot's offset by
27892      subtracting the first slot's length from `STARTING_FRAME_OFFSET'.
27893      Otherwise, it is found by adding the length of the first slot to
27894      the value `STARTING_FRAME_OFFSET'.
27896  -- Macro: STACK_ALIGNMENT_NEEDED
27897      Define to zero to disable final alignment of the stack during
27898      reload.  The nonzero default for this macro is suitable for most
27899      ports.
27901      On ports where `STARTING_FRAME_OFFSET' is nonzero or where there
27902      is a register save block following the local block that doesn't
27903      require alignment to `STACK_BOUNDARY', it may be beneficial to
27904      disable stack alignment and do it in the backend.
27906  -- Macro: STACK_POINTER_OFFSET
27907      Offset from the stack pointer register to the first location at
27908      which outgoing arguments are placed.  If not specified, the
27909      default value of zero is used.  This is the proper value for most
27910      machines.
27912      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
27913      the first location at which outgoing arguments are placed.
27915  -- Macro: FIRST_PARM_OFFSET (FUNDECL)
27916      Offset from the argument pointer register to the first argument's
27917      address.  On some machines it may depend on the data type of the
27918      function.
27920      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
27921      the first argument's address.
27923  -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
27924      Offset from the stack pointer register to an item dynamically
27925      allocated on the stack, e.g., by `alloca'.
27927      The default value for this macro is `STACK_POINTER_OFFSET' plus the
27928      length of the outgoing arguments.  The default is correct for most
27929      machines.  See `function.c' for details.
27931  -- Macro: INITIAL_FRAME_ADDRESS_RTX
27932      A C expression whose value is RTL representing the address of the
27933      initial stack frame. This address is passed to `RETURN_ADDR_RTX'
27934      and `DYNAMIC_CHAIN_ADDRESS'.  If you don't define this macro, a
27935      reasonable default value will be used.  Define this macro in order
27936      to make frame pointer elimination work in the presence of
27937      `__builtin_frame_address (count)' and `__builtin_return_address
27938      (count)' for `count' not equal to zero.
27940  -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
27941      A C expression whose value is RTL representing the address in a
27942      stack frame where the pointer to the caller's frame is stored.
27943      Assume that FRAMEADDR is an RTL expression for the address of the
27944      stack frame itself.
27946      If you don't define this macro, the default is to return the value
27947      of FRAMEADDR--that is, the stack frame address is also the address
27948      of the stack word that points to the previous frame.
27950  -- Macro: SETUP_FRAME_ADDRESSES
27951      If defined, a C expression that produces the machine-specific code
27952      to setup the stack so that arbitrary frames can be accessed.  For
27953      example, on the SPARC, we must flush all of the register windows
27954      to the stack before we can access arbitrary stack frames.  You
27955      will seldom need to define this macro.
27957  -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
27958      This target hook should return an rtx that is used to store the
27959      address of the current frame into the built in `setjmp' buffer.
27960      The default value, `virtual_stack_vars_rtx', is correct for most
27961      machines.  One reason you may need to define this target hook is if
27962      `hard_frame_pointer_rtx' is the appropriate value on your machine.
27964  -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
27965      A C expression whose value is RTL representing the value of the
27966      frame address for the current frame.  FRAMEADDR is the frame
27967      pointer of the current frame.  This is used for
27968      __builtin_frame_address.  You need only define this macro if the
27969      frame address is not the same as the frame pointer.  Most machines
27970      do not need to define it.
27972  -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR)
27973      A C expression whose value is RTL representing the value of the
27974      return address for the frame COUNT steps up from the current
27975      frame, after the prologue.  FRAMEADDR is the frame pointer of the
27976      COUNT frame, or the frame pointer of the COUNT - 1 frame if
27977      `RETURN_ADDR_IN_PREVIOUS_FRAME' is defined.
27979      The value of the expression must always be the correct address when
27980      COUNT is zero, but may be `NULL_RTX' if there is no way to
27981      determine the return address of other frames.
27983  -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
27984      Define this if the return address of a particular stack frame is
27985      accessed from the frame pointer of the previous stack frame.
27987  -- Macro: INCOMING_RETURN_ADDR_RTX
27988      A C expression whose value is RTL representing the location of the
27989      incoming return address at the beginning of any function, before
27990      the prologue.  This RTL is either a `REG', indicating that the
27991      return value is saved in `REG', or a `MEM' representing a location
27992      in the stack.
27994      You only need to define this macro if you want to support call
27995      frame debugging information like that provided by DWARF 2.
27997      If this RTL is a `REG', you should also define
27998      `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'.
28000  -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
28001      A C expression whose value is an integer giving a DWARF 2 column
28002      number that may be used as an alternative return column.  The
28003      column must not correspond to any gcc hard register (that is, it
28004      must not be in the range of `DWARF_FRAME_REGNUM').
28006      This macro can be useful if `DWARF_FRAME_RETURN_COLUMN' is set to a
28007      general register, but an alternative column needs to be used for
28008      signal frames.  Some targets have also used different frame return
28009      columns over time.
28011  -- Macro: DWARF_ZERO_REG
28012      A C expression whose value is an integer giving a DWARF 2 register
28013      number that is considered to always have the value zero.  This
28014      should only be defined if the target has an architected zero
28015      register, and someone decided it was a good idea to use that
28016      register number to terminate the stack backtrace.  New ports
28017      should avoid this.
28019  -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
28020           *LABEL, rtx PATTERN, int INDEX)
28021      This target hook allows the backend to emit frame-related insns
28022      that contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame
28023      debugging info engine will invoke it on insns of the form
28024           (set (reg) (unspec [...] UNSPEC_INDEX))
28025      and
28026           (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
28027      to let the backend emit the call frame instructions.  LABEL is the
28028      CFI label attached to the insn, PATTERN is the pattern of the insn
28029      and INDEX is `UNSPEC_INDEX' or `UNSPECV_INDEX'.
28031  -- Macro: INCOMING_FRAME_SP_OFFSET
28032      A C expression whose value is an integer giving the offset, in
28033      bytes, from the value of the stack pointer register to the top of
28034      the stack frame at the beginning of any function, before the
28035      prologue.  The top of the frame is defined to be the value of the
28036      stack pointer in the previous frame, just before the call
28037      instruction.
28039      You only need to define this macro if you want to support call
28040      frame debugging information like that provided by DWARF 2.
28042  -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
28043      A C expression whose value is an integer giving the offset, in
28044      bytes, from the argument pointer to the canonical frame address
28045      (cfa).  The final value should coincide with that calculated by
28046      `INCOMING_FRAME_SP_OFFSET'.  Which is unfortunately not usable
28047      during virtual register instantiation.
28049      The default value for this macro is `FIRST_PARM_OFFSET (fundecl) +
28050      crtl->args.pretend_args_size', which is correct for most machines;
28051      in general, the arguments are found immediately before the stack
28052      frame.  Note that this is not the case on some targets that save
28053      registers into the caller's frame, such as SPARC and rs6000, and
28054      so such targets need to define this macro.
28056      You only need to define this macro if the default is incorrect,
28057      and you want to support call frame debugging information like that
28058      provided by DWARF 2.
28060  -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL)
28061      If defined, a C expression whose value is an integer giving the
28062      offset in bytes from the frame pointer to the canonical frame
28063      address (cfa).  The final value should coincide with that
28064      calculated by `INCOMING_FRAME_SP_OFFSET'.
28066      Normally the CFA is calculated as an offset from the argument
28067      pointer, via `ARG_POINTER_CFA_OFFSET', but if the argument pointer
28068      is variable due to the ABI, this may not be possible.  If this
28069      macro is defined, it implies that the virtual register
28070      instantiation should be based on the frame pointer instead of the
28071      argument pointer.  Only one of `FRAME_POINTER_CFA_OFFSET' and
28072      `ARG_POINTER_CFA_OFFSET' should be defined.
28074  -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
28075      If defined, a C expression whose value is an integer giving the
28076      offset in bytes from the canonical frame address (cfa) to the
28077      frame base used in DWARF 2 debug information.  The default is
28078      zero.  A different value may reduce the size of debug information
28079      on some ports.
28081 \x1f
28082 File: gccint.info,  Node: Exception Handling,  Next: Stack Checking,  Prev: Frame Layout,  Up: Stack and Calling
28084 17.10.2 Exception Handling Support
28085 ----------------------------------
28087  -- Macro: EH_RETURN_DATA_REGNO (N)
28088      A C expression whose value is the Nth register number used for
28089      data by exception handlers, or `INVALID_REGNUM' if fewer than N
28090      registers are usable.
28092      The exception handling library routines communicate with the
28093      exception handlers via a set of agreed upon registers.  Ideally
28094      these registers should be call-clobbered; it is possible to use
28095      call-saved registers, but may negatively impact code size.  The
28096      target must support at least 2 data registers, but should define 4
28097      if there are enough free registers.
28099      You must define this macro if you want to support call frame
28100      exception handling like that provided by DWARF 2.
28102  -- Macro: EH_RETURN_STACKADJ_RTX
28103      A C expression whose value is RTL representing a location in which
28104      to store a stack adjustment to be applied before function return.
28105      This is used to unwind the stack to an exception handler's call
28106      frame.  It will be assigned zero on code paths that return
28107      normally.
28109      Typically this is a call-clobbered hard register that is otherwise
28110      untouched by the epilogue, but could also be a stack slot.
28112      Do not define this macro if the stack pointer is saved and restored
28113      by the regular prolog and epilog code in the call frame itself; in
28114      this case, the exception handling library routines will update the
28115      stack location to be restored in place.  Otherwise, you must define
28116      this macro if you want to support call frame exception handling
28117      like that provided by DWARF 2.
28119  -- Macro: EH_RETURN_HANDLER_RTX
28120      A C expression whose value is RTL representing a location in which
28121      to store the address of an exception handler to which we should
28122      return.  It will not be assigned on code paths that return
28123      normally.
28125      Typically this is the location in the call frame at which the
28126      normal return address is stored.  For targets that return by
28127      popping an address off the stack, this might be a memory address
28128      just below the _target_ call frame rather than inside the current
28129      call frame.  If defined, `EH_RETURN_STACKADJ_RTX' will have already
28130      been assigned, so it may be used to calculate the location of the
28131      target call frame.
28133      Some targets have more complex requirements than storing to an
28134      address calculable during initial code generation.  In that case
28135      the `eh_return' instruction pattern should be used instead.
28137      If you want to support call frame exception handling, you must
28138      define either this macro or the `eh_return' instruction pattern.
28140  -- Macro: RETURN_ADDR_OFFSET
28141      If defined, an integer-valued C expression for which rtl will be
28142      generated to add it to the exception handler address before it is
28143      searched in the exception handling tables, and to subtract it
28144      again from the address before using it to return to the exception
28145      handler.
28147  -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL)
28148      This macro chooses the encoding of pointers embedded in the
28149      exception handling sections.  If at all possible, this should be
28150      defined such that the exception handling section will not require
28151      dynamic relocations, and so may be read-only.
28153      CODE is 0 for data, 1 for code labels, 2 for function pointers.
28154      GLOBAL is true if the symbol may be affected by dynamic
28155      relocations.  The macro should return a combination of the
28156      `DW_EH_PE_*' defines as found in `dwarf2.h'.
28158      If this macro is not defined, pointers will not be encoded but
28159      represented directly.
28161  -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
28162           ADDR, DONE)
28163      This macro allows the target to emit whatever special magic is
28164      required to represent the encoding chosen by
28165      `ASM_PREFERRED_EH_DATA_FORMAT'.  Generic code takes care of
28166      pc-relative and indirect encodings; this must be defined if the
28167      target uses text-relative or data-relative encodings.
28169      This is a C statement that branches to DONE if the format was
28170      handled.  ENCODING is the format chosen, SIZE is the number of
28171      bytes that the format occupies, ADDR is the `SYMBOL_REF' to be
28172      emitted.
28174  -- Macro: MD_UNWIND_SUPPORT
28175      A string specifying a file to be #include'd in unwind-dw2.c.  The
28176      file so included typically defines `MD_FALLBACK_FRAME_STATE_FOR'.
28178  -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
28179      This macro allows the target to add CPU and operating system
28180      specific code to the call-frame unwinder for use when there is no
28181      unwind data available.  The most common reason to implement this
28182      macro is to unwind through signal frames.
28184      This macro is called from `uw_frame_state_for' in `unwind-dw2.c',
28185      `unwind-dw2-xtensa.c' and `unwind-ia64.c'.  CONTEXT is an
28186      `_Unwind_Context'; FS is an `_Unwind_FrameState'.  Examine
28187      `context->ra' for the address of the code being executed and
28188      `context->cfa' for the stack pointer value.  If the frame can be
28189      decoded, the register save addresses should be updated in FS and
28190      the macro should evaluate to `_URC_NO_REASON'.  If the frame
28191      cannot be decoded, the macro should evaluate to
28192      `_URC_END_OF_STACK'.
28194      For proper signal handling in Java this macro is accompanied by
28195      `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h'
28196      headers.
28198  -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
28199      This macro allows the target to add operating system specific code
28200      to the call-frame unwinder to handle the IA-64 `.unwabi' unwinding
28201      directive, usually used for signal or interrupt frames.
28203      This macro is called from `uw_update_context' in `unwind-ia64.c'.
28204      CONTEXT is an `_Unwind_Context'; FS is an `_Unwind_FrameState'.
28205      Examine `fs->unwabi' for the abi and context in the `.unwabi'
28206      directive.  If the `.unwabi' directive can be handled, the
28207      register save addresses should be updated in FS.
28209  -- Macro: TARGET_USES_WEAK_UNWIND_INFO
28210      A C expression that evaluates to true if the target requires unwind
28211      info to be given comdat linkage.  Define it to be `1' if comdat
28212      linkage is necessary.  The default is `0'.
28214 \x1f
28215 File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling
28217 17.10.3 Specifying How Stack Checking is Done
28218 ---------------------------------------------
28220 GCC will check that stack references are within the boundaries of the
28221 stack, if the option `-fstack-check' is specified, in one of three ways:
28223   1. If the value of the `STACK_CHECK_BUILTIN' macro is nonzero, GCC
28224      will assume that you have arranged for full stack checking to be
28225      done at appropriate places in the configuration files.  GCC will
28226      not do other special processing.
28228   2. If `STACK_CHECK_BUILTIN' is zero and the value of the
28229      `STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume
28230      that you have arranged for static stack checking (checking of the
28231      static stack frame of functions) to be done at appropriate places
28232      in the configuration files.  GCC will only emit code to do dynamic
28233      stack checking (checking on dynamic stack allocations) using the
28234      third approach below.
28236   3. If neither of the above are true, GCC will generate code to
28237      periodically "probe" the stack pointer using the values of the
28238      macros defined below.
28240  If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is
28241 defined, GCC will change its allocation strategy for large objects if
28242 the option `-fstack-check' is specified: they will always be allocated
28243 dynamically if their size exceeds `STACK_CHECK_MAX_VAR_SIZE' bytes.
28245  -- Macro: STACK_CHECK_BUILTIN
28246      A nonzero value if stack checking is done by the configuration
28247      files in a machine-dependent manner.  You should define this macro
28248      if stack checking is required by the ABI of your machine or if you
28249      would like to do stack checking in some more efficient way than
28250      the generic approach.  The default value of this macro is zero.
28252  -- Macro: STACK_CHECK_STATIC_BUILTIN
28253      A nonzero value if static stack checking is done by the
28254      configuration files in a machine-dependent manner.  You should
28255      define this macro if you would like to do static stack checking in
28256      some more efficient way than the generic approach.  The default
28257      value of this macro is zero.
28259  -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP
28260      An integer specifying the interval at which GCC must generate
28261      stack probe instructions, defined as 2 raised to this integer.
28262      You will normally define this macro so that the interval be no
28263      larger than the size of the "guard pages" at the end of a stack
28264      area.  The default value of 12 (4096-byte interval) is suitable
28265      for most systems.
28267  -- Macro: STACK_CHECK_MOVING_SP
28268      An integer which is nonzero if GCC should move the stack pointer
28269      page by page when doing probes.  This can be necessary on systems
28270      where the stack pointer contains the bottom address of the memory
28271      area accessible to the executing thread at any point in time.  In
28272      this situation an alternate signal stack is required in order to
28273      be able to recover from a stack overflow.  The default value of
28274      this macro is zero.
28276  -- Macro: STACK_CHECK_PROTECT
28277      The number of bytes of stack needed to recover from a stack
28278      overflow, for languages where such a recovery is supported.  The
28279      default value of 75 words with the `setjmp'/`longjmp'-based
28280      exception handling mechanism and 8192 bytes with other exception
28281      handling mechanisms should be adequate for most machines.
28283  The following macros are relevant only if neither STACK_CHECK_BUILTIN
28284 nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether
28285 in the opposite case.
28287  -- Macro: STACK_CHECK_MAX_FRAME_SIZE
28288      The maximum size of a stack frame, in bytes.  GCC will generate
28289      probe instructions in non-leaf functions to ensure at least this
28290      many bytes of stack are available.  If a stack frame is larger
28291      than this size, stack checking will not be reliable and GCC will
28292      issue a warning.  The default is chosen so that GCC only generates
28293      one instruction on most systems.  You should normally not change
28294      the default value of this macro.
28296  -- Macro: STACK_CHECK_FIXED_FRAME_SIZE
28297      GCC uses this value to generate the above warning message.  It
28298      represents the amount of fixed frame used by a function, not
28299      including space for any callee-saved registers, temporaries and
28300      user variables.  You need only specify an upper bound for this
28301      amount and will normally use the default of four words.
28303  -- Macro: STACK_CHECK_MAX_VAR_SIZE
28304      The maximum size, in bytes, of an object that GCC will place in the
28305      fixed area of the stack frame when the user specifies
28306      `-fstack-check'.  GCC computed the default from the values of the
28307      above macros and you will normally not need to override that
28308      default.
28310 \x1f
28311 File: gccint.info,  Node: Frame Registers,  Next: Elimination,  Prev: Stack Checking,  Up: Stack and Calling
28313 17.10.4 Registers That Address the Stack Frame
28314 ----------------------------------------------
28316 This discusses registers that address the stack frame.
28318  -- Macro: STACK_POINTER_REGNUM
28319      The register number of the stack pointer register, which must also
28320      be a fixed register according to `FIXED_REGISTERS'.  On most
28321      machines, the hardware determines which register this is.
28323  -- Macro: FRAME_POINTER_REGNUM
28324      The register number of the frame pointer register, which is used to
28325      access automatic variables in the stack frame.  On some machines,
28326      the hardware determines which register this is.  On other
28327      machines, you can choose any register you wish for this purpose.
28329  -- Macro: HARD_FRAME_POINTER_REGNUM
28330      On some machines the offset between the frame pointer and starting
28331      offset of the automatic variables is not known until after register
28332      allocation has been done (for example, because the saved registers
28333      are between these two locations).  On those machines, define
28334      `FRAME_POINTER_REGNUM' the number of a special, fixed register to
28335      be used internally until the offset is known, and define
28336      `HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
28337      used for the frame pointer.
28339      You should define this macro only in the very rare circumstances
28340      when it is not possible to calculate the offset between the frame
28341      pointer and the automatic variables until after register
28342      allocation has been completed.  When this macro is defined, you
28343      must also indicate in your definition of `ELIMINABLE_REGS' how to
28344      eliminate `FRAME_POINTER_REGNUM' into either
28345      `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'.
28347      Do not define this macro if it would be the same as
28348      `FRAME_POINTER_REGNUM'.
28350  -- Macro: ARG_POINTER_REGNUM
28351      The register number of the arg pointer register, which is used to
28352      access the function's argument list.  On some machines, this is
28353      the same as the frame pointer register.  On some machines, the
28354      hardware determines which register this is.  On other machines,
28355      you can choose any register you wish for this purpose.  If this is
28356      not the same register as the frame pointer register, then you must
28357      mark it as a fixed register according to `FIXED_REGISTERS', or
28358      arrange to be able to eliminate it (*note Elimination::).
28360  -- Macro: RETURN_ADDRESS_POINTER_REGNUM
28361      The register number of the return address pointer register, which
28362      is used to access the current function's return address from the
28363      stack.  On some machines, the return address is not at a fixed
28364      offset from the frame pointer or stack pointer or argument
28365      pointer.  This register can be defined to point to the return
28366      address on the stack, and then be converted by `ELIMINABLE_REGS'
28367      into either the frame pointer or stack pointer.
28369      Do not define this macro unless there is no other way to get the
28370      return address from the stack.
28372  -- Macro: STATIC_CHAIN_REGNUM
28373  -- Macro: STATIC_CHAIN_INCOMING_REGNUM
28374      Register numbers used for passing a function's static chain
28375      pointer.  If register windows are used, the register number as
28376      seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM',
28377      while the register number as seen by the calling function is
28378      `STATIC_CHAIN_REGNUM'.  If these registers are the same,
28379      `STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
28381      The static chain register need not be a fixed register.
28383      If the static chain is passed in memory, these macros should not be
28384      defined; instead, the `TARGET_STATIC_CHAIN' hook should be used.
28386  -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL, bool
28387           INCOMING_P)
28388      This hook replaces the use of `STATIC_CHAIN_REGNUM' et al for
28389      targets that may use different static chain locations for different
28390      nested functions.  This may be required if the target has function
28391      attributes that affect the calling conventions of the function and
28392      those calling conventions use different static chain locations.
28394      The default version of this hook uses `STATIC_CHAIN_REGNUM' et al.
28396      If the static chain is passed in memory, this hook should be used
28397      to provide rtx giving `mem' expressions that denote where they are
28398      stored.  Often the `mem' expression as seen by the caller will be
28399      at an offset from the stack pointer and the `mem' expression as
28400      seen by the callee will be at an offset from the frame pointer.  The
28401      variables `stack_pointer_rtx', `frame_pointer_rtx', and
28402      `arg_pointer_rtx' will have been initialized and should be used to
28403      refer to those items.
28405  -- Macro: DWARF_FRAME_REGISTERS
28406      This macro specifies the maximum number of hard registers that can
28407      be saved in a call frame.  This is used to size data structures
28408      used in DWARF2 exception handling.
28410      Prior to GCC 3.0, this macro was needed in order to establish a
28411      stable exception handling ABI in the face of adding new hard
28412      registers for ISA extensions.  In GCC 3.0 and later, the EH ABI is
28413      insulated from changes in the number of hard registers.
28414      Nevertheless, this macro can still be used to reduce the runtime
28415      memory requirements of the exception handling routines, which can
28416      be substantial if the ISA contains a lot of registers that are not
28417      call-saved.
28419      If this macro is not defined, it defaults to
28420      `FIRST_PSEUDO_REGISTER'.
28422  -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
28423      This macro is similar to `DWARF_FRAME_REGISTERS', but is provided
28424      for backward compatibility in pre GCC 3.0 compiled code.
28426      If this macro is not defined, it defaults to
28427      `DWARF_FRAME_REGISTERS'.
28429  -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
28430      Define this macro if the target's representation for dwarf
28431      registers is different than the internal representation for unwind
28432      column.  Given a dwarf register, this macro should return the
28433      internal unwind column number to use instead.
28435      See the PowerPC's SPE target for an example.
28437  -- Macro: DWARF_FRAME_REGNUM (REGNO)
28438      Define this macro if the target's representation for dwarf
28439      registers used in .eh_frame or .debug_frame is different from that
28440      used in other debug info sections.  Given a GCC hard register
28441      number, this macro should return the .eh_frame register number.
28442      The default is `DBX_REGISTER_NUMBER (REGNO)'.
28445  -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
28446      Define this macro to map register numbers held in the call frame
28447      info that GCC has collected using `DWARF_FRAME_REGNUM' to those
28448      that should be output in .debug_frame (`FOR_EH' is zero) and
28449      .eh_frame (`FOR_EH' is nonzero).  The default is to return `REGNO'.
28452 \x1f
28453 File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
28455 17.10.5 Eliminating Frame Pointer and Arg Pointer
28456 -------------------------------------------------
28458 This is about eliminating the frame pointer and arg pointer.
28460  -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void)
28461      This target hook should return `true' if a function must have and
28462      use a frame pointer.  This target hook is called in the reload
28463      pass.  If its return value is `true' the function will have a
28464      frame pointer.
28466      This target hook can in principle examine the current function and
28467      decide according to the facts, but on most machines the constant
28468      `false' or the constant `true' suffices.  Use `false' when the
28469      machine allows code to be generated with no frame pointer, and
28470      doing so saves some time or space.  Use `true' when there is no
28471      possible advantage to avoiding a frame pointer.
28473      In certain cases, the compiler does not know how to produce valid
28474      code without a frame pointer.  The compiler recognizes those cases
28475      and automatically gives the function a frame pointer regardless of
28476      what `TARGET_FRAME_POINTER_REQUIRED' returns.  You don't need to
28477      worry about them.
28479      In a function that does not require a frame pointer, the frame
28480      pointer register can be allocated for ordinary usage, unless you
28481      mark it as a fixed register.  See `FIXED_REGISTERS' for more
28482      information.
28484      Default return value is `false'.
28486  -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)
28487      A C statement to store in the variable DEPTH-VAR the difference
28488      between the frame pointer and the stack pointer values immediately
28489      after the function prologue.  The value would be computed from
28490      information such as the result of `get_frame_size ()' and the
28491      tables of registers `regs_ever_live' and `call_used_regs'.
28493      If `ELIMINABLE_REGS' is defined, this macro will be not be used and
28494      need not be defined.  Otherwise, it must be defined even if
28495      `TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case,
28496      you may set DEPTH-VAR to anything.
28498  -- Macro: ELIMINABLE_REGS
28499      If defined, this macro specifies a table of register pairs used to
28500      eliminate unneeded registers that point into the stack frame.  If
28501      it is not defined, the only elimination attempted by the compiler
28502      is to replace references to the frame pointer with references to
28503      the stack pointer.
28505      The definition of this macro is a list of structure
28506      initializations, each of which specifies an original and
28507      replacement register.
28509      On some machines, the position of the argument pointer is not
28510      known until the compilation is completed.  In such a case, a
28511      separate hard register must be used for the argument pointer.
28512      This register can be eliminated by replacing it with either the
28513      frame pointer or the argument pointer, depending on whether or not
28514      the frame pointer has been eliminated.
28516      In this case, you might specify:
28517           #define ELIMINABLE_REGS  \
28518           {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
28519            {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
28520            {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
28522      Note that the elimination of the argument pointer with the stack
28523      pointer is specified first since that is the preferred elimination.
28525  -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const
28526           int TO_REG)
28527      This target hook should returns `true' if the compiler is allowed
28528      to try to replace register number FROM_REG with register number
28529      TO_REG.  This target hook need only be defined if `ELIMINABLE_REGS'
28530      is defined, and will usually be `true', since most of the cases
28531      preventing register elimination are things that the compiler
28532      already knows about.
28534      Default return value is `true'.
28536  -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
28537      This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It
28538      specifies the initial difference between the specified pair of
28539      registers.  This macro must be defined if `ELIMINABLE_REGS' is
28540      defined.
28542 \x1f
28543 File: gccint.info,  Node: Stack Arguments,  Next: Register Arguments,  Prev: Elimination,  Up: Stack and Calling
28545 17.10.6 Passing Function Arguments on the Stack
28546 -----------------------------------------------
28548 The macros in this section control how arguments are passed on the
28549 stack.  See the following section for other macros that control passing
28550 certain arguments in registers.
28552  -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE)
28553      This target hook returns `true' if an argument declared in a
28554      prototype as an integral type smaller than `int' should actually be
28555      passed as an `int'.  In addition to avoiding errors in certain
28556      cases of mismatch, it also makes for better code on certain
28557      machines.  The default is to not promote prototypes.
28559  -- Macro: PUSH_ARGS
28560      A C expression.  If nonzero, push insns will be used to pass
28561      outgoing arguments.  If the target machine does not have a push
28562      instruction, set it to zero.  That directs GCC to use an alternate
28563      strategy: to allocate the entire argument block and then store the
28564      arguments into it.  When `PUSH_ARGS' is nonzero, `PUSH_ROUNDING'
28565      must be defined too.
28567  -- Macro: PUSH_ARGS_REVERSED
28568      A C expression.  If nonzero, function arguments will be evaluated
28569      from last to first, rather than from first to last.  If this macro
28570      is not defined, it defaults to `PUSH_ARGS' on targets where the
28571      stack and args grow in opposite directions, and 0 otherwise.
28573  -- Macro: PUSH_ROUNDING (NPUSHED)
28574      A C expression that is the number of bytes actually pushed onto the
28575      stack when an instruction attempts to push NPUSHED bytes.
28577      On some machines, the definition
28579           #define PUSH_ROUNDING(BYTES) (BYTES)
28581      will suffice.  But on other machines, instructions that appear to
28582      push one byte actually push two bytes in an attempt to maintain
28583      alignment.  Then the definition should be
28585           #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
28587  -- Macro: ACCUMULATE_OUTGOING_ARGS
28588      A C expression.  If nonzero, the maximum amount of space required
28589      for outgoing arguments will be computed and placed into the
28590      variable `current_function_outgoing_args_size'.  No space will be
28591      pushed onto the stack for each call; instead, the function
28592      prologue should increase the stack frame size by this amount.
28594      Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not
28595      proper.
28597  -- Macro: REG_PARM_STACK_SPACE (FNDECL)
28598      Define this macro if functions should assume that stack space has
28599      been allocated for arguments even when their values are passed in
28600      registers.
28602      The value of this macro is the size, in bytes, of the area
28603      reserved for arguments passed in registers for the function
28604      represented by FNDECL, which can be zero if GCC is calling a
28605      library function.  The argument FNDECL can be the FUNCTION_DECL,
28606      or the type itself of the function.
28608      This space can be allocated by the caller, or be a part of the
28609      machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
28610      which.
28612  -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE)
28613      Define this to a nonzero value if it is the responsibility of the
28614      caller to allocate the area reserved for arguments passed in
28615      registers when calling a function of FNTYPE.  FNTYPE may be NULL
28616      if the function called is a library function.
28618      If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
28619      whether the space for these arguments counts in the value of
28620      `current_function_outgoing_args_size'.
28622  -- Macro: STACK_PARMS_IN_REG_PARM_AREA
28623      Define this macro if `REG_PARM_STACK_SPACE' is defined, but the
28624      stack parameters don't skip the area specified by it.
28626      Normally, when a parameter is not passed in registers, it is
28627      placed on the stack beyond the `REG_PARM_STACK_SPACE' area.
28628      Defining this macro suppresses this behavior and causes the
28629      parameter to be passed on the stack in its natural location.
28631  -- Macro: RETURN_POPS_ARGS (FUNDECL, FUNTYPE, STACK-SIZE)
28632      A C expression that should indicate the number of bytes of its own
28633      arguments that a function pops on returning, or 0 if the function
28634      pops no arguments and the caller must therefore pop them all after
28635      the function returns.
28637      FUNDECL is a C variable whose value is a tree node that describes
28638      the function in question.  Normally it is a node of type
28639      `FUNCTION_DECL' that describes the declaration of the function.
28640      From this you can obtain the `DECL_ATTRIBUTES' of the function.
28642      FUNTYPE is a C variable whose value is a tree node that describes
28643      the function in question.  Normally it is a node of type
28644      `FUNCTION_TYPE' that describes the data type of the function.
28645      From this it is possible to obtain the data types of the value and
28646      arguments (if known).
28648      When a call to a library function is being considered, FUNDECL
28649      will contain an identifier node for the library function.  Thus, if
28650      you need to distinguish among various library functions, you can
28651      do so by their names.  Note that "library function" in this
28652      context means a function used to perform arithmetic, whose name is
28653      known specially in the compiler and was not mentioned in the C
28654      code being compiled.
28656      STACK-SIZE is the number of bytes of arguments passed on the
28657      stack.  If a variable number of bytes is passed, it is zero, and
28658      argument popping will always be the responsibility of the calling
28659      function.
28661      On the VAX, all functions always pop their arguments, so the
28662      definition of this macro is STACK-SIZE.  On the 68000, using the
28663      standard calling convention, no functions pop their arguments, so
28664      the value of the macro is always 0 in this case.  But an
28665      alternative calling convention is available in which functions
28666      that take a fixed number of arguments pop them but other functions
28667      (such as `printf') pop nothing (the caller pops all).  When this
28668      convention is in use, FUNTYPE is examined to determine whether a
28669      function takes a fixed number of arguments.
28671  -- Macro: CALL_POPS_ARGS (CUM)
28672      A C expression that should indicate the number of bytes a call
28673      sequence pops off the stack.  It is added to the value of
28674      `RETURN_POPS_ARGS' when compiling a function call.
28676      CUM is the variable in which all arguments to the called function
28677      have been accumulated.
28679      On certain architectures, such as the SH5, a call trampoline is
28680      used that pops certain registers off the stack, depending on the
28681      arguments that have been passed to the function.  Since this is a
28682      property of the call site, not of the called function,
28683      `RETURN_POPS_ARGS' is not appropriate.
28685 \x1f
28686 File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
28688 17.10.7 Passing Arguments in Registers
28689 --------------------------------------
28691 This section describes the macros which let you control how various
28692 types of arguments are passed in registers or how they are arranged in
28693 the stack.
28695  -- Macro: FUNCTION_ARG (CUM, MODE, TYPE, NAMED)
28696      A C expression that controls whether a function argument is passed
28697      in a register, and which register.
28699      The arguments are CUM, which summarizes all the previous
28700      arguments; MODE, the machine mode of the argument; TYPE, the data
28701      type of the argument as a tree node or 0 if that is not known
28702      (which happens for C support library functions); and NAMED, which
28703      is 1 for an ordinary argument and 0 for nameless arguments that
28704      correspond to `...' in the called function's prototype.  TYPE can
28705      be an incomplete type if a syntax error has previously occurred.
28707      The value of the expression is usually either a `reg' RTX for the
28708      hard register in which to pass the argument, or zero to pass the
28709      argument on the stack.
28711      For machines like the VAX and 68000, where normally all arguments
28712      are pushed, zero suffices as a definition.
28714      The value of the expression can also be a `parallel' RTX.  This is
28715      used when an argument is passed in multiple locations.  The mode
28716      of the `parallel' should be the mode of the entire argument.  The
28717      `parallel' holds any number of `expr_list' pairs; each one
28718      describes where part of the argument is passed.  In each
28719      `expr_list' the first operand must be a `reg' RTX for the hard
28720      register in which to pass this part of the argument, and the mode
28721      of the register RTX indicates how large this part of the argument
28722      is.  The second operand of the `expr_list' is a `const_int' which
28723      gives the offset in bytes into the entire argument of where this
28724      part starts.  As a special exception the first `expr_list' in the
28725      `parallel' RTX may have a first operand of zero.  This indicates
28726      that the entire argument is also stored on the stack.
28728      The last time this macro is called, it is called with `MODE ==
28729      VOIDmode', and its result is passed to the `call' or `call_value'
28730      pattern as operands 2 and 3 respectively.
28732      The usual way to make the ISO library `stdarg.h' work on a machine
28733      where some arguments are usually passed in registers, is to cause
28734      nameless arguments to be passed on the stack instead.  This is done
28735      by making `FUNCTION_ARG' return 0 whenever NAMED is 0.
28737      You may use the hook `targetm.calls.must_pass_in_stack' in the
28738      definition of this macro to determine if this argument is of a
28739      type that must be passed in the stack.  If `REG_PARM_STACK_SPACE'
28740      is not defined and `FUNCTION_ARG' returns nonzero for such an
28741      argument, the compiler will abort.  If `REG_PARM_STACK_SPACE' is
28742      defined, the argument will be computed in the stack and then
28743      loaded into a register.
28745  -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode
28746           MODE, const_tree TYPE)
28747      This target hook should return `true' if we should not pass TYPE
28748      solely in registers.  The file `expr.h' defines a definition that
28749      is usually appropriate, refer to `expr.h' for additional
28750      documentation.
28752  -- Macro: FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)
28753      Define this macro if the target machine has "register windows", so
28754      that the register in which a function sees an arguments is not
28755      necessarily the same as the one in which the caller passed the
28756      argument.
28758      For such machines, `FUNCTION_ARG' computes the register in which
28759      the caller passes the value, and `FUNCTION_INCOMING_ARG' should be
28760      defined in a similar fashion to tell the function being called
28761      where the arguments will arrive.
28763      If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves
28764      both purposes.
28766  -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS *CUM,
28767           enum machine_mode MODE, tree TYPE, bool NAMED)
28768      This target hook returns the number of bytes at the beginning of an
28769      argument that must be put in registers.  The value must be zero for
28770      arguments that are passed entirely in registers or that are
28771      entirely pushed on the stack.
28773      On some machines, certain arguments must be passed partially in
28774      registers and partially in memory.  On these machines, typically
28775      the first few words of arguments are passed in registers, and the
28776      rest on the stack.  If a multi-word argument (a `double' or a
28777      structure) crosses that boundary, its first few words must be
28778      passed in registers and the rest must be pushed.  This macro tells
28779      the compiler when this occurs, and how many bytes should go in
28780      registers.
28782      `FUNCTION_ARG' for these arguments should return the first
28783      register to be used by the caller for this argument; likewise
28784      `FUNCTION_INCOMING_ARG', for the called function.
28786  -- Target Hook: bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS *CUM,
28787           enum machine_mode MODE, tree TYPE, bool NAMED)
28788      This target hook should return `true' if an argument at the
28789      position indicated by CUM should be passed by reference.  This
28790      predicate is queried after target independent reasons for being
28791      passed by reference, such as `TREE_ADDRESSABLE (type)'.
28793      If the hook returns true, a copy of that argument is made in
28794      memory and a pointer to the argument is passed instead of the
28795      argument itself.  The pointer is passed in whatever way is
28796      appropriate for passing a pointer to that type.
28798  -- Target Hook: bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS *CUM, enum
28799           machine_mode MODE, const_tree TYPE, bool NAMED)
28800      The function argument described by the parameters to this hook is
28801      known to be passed by reference.  The hook should return true if
28802      the function argument should be copied by the callee instead of
28803      copied by the caller.
28805      For any argument for which the hook returns true, if it can be
28806      determined that the argument is not modified, then a copy need not
28807      be generated.
28809      The default version of this hook always returns false.
28811  -- Macro: CUMULATIVE_ARGS
28812      A C type for declaring a variable that is used as the first
28813      argument of `FUNCTION_ARG' and other related values.  For some
28814      target machines, the type `int' suffices and can hold the number
28815      of bytes of argument so far.
28817      There is no need to record in `CUMULATIVE_ARGS' anything about the
28818      arguments that have been passed on the stack.  The compiler has
28819      other variables to keep track of that.  For target machines on
28820      which all arguments are passed on the stack, there is no need to
28821      store anything in `CUMULATIVE_ARGS'; however, the data structure
28822      must exist and should not be empty, so use `int'.
28824  -- Macro: OVERRIDE_ABI_FORMAT (FNDECL)
28825      If defined, this macro is called before generating any code for a
28826      function, but after the CFUN descriptor for the function has been
28827      created.  The back end may use this macro to update CFUN to
28828      reflect an ABI other than that which would normally be used by
28829      default.  If the compiler is generating code for a
28830      compiler-generated function, FNDECL may be `NULL'.
28832  -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
28833           N_NAMED_ARGS)
28834      A C statement (sans semicolon) for initializing the variable CUM
28835      for the state at the beginning of the argument list.  The variable
28836      has type `CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
28837      for the data type of the function which will receive the args, or
28838      0 if the args are to a compiler support library function.  For
28839      direct calls that are not libcalls, FNDECL contain the declaration
28840      node of the function.  FNDECL is also set when
28841      `INIT_CUMULATIVE_ARGS' is used to find arguments for the function
28842      being compiled.  N_NAMED_ARGS is set to the number of named
28843      arguments, including a structure return address if it is passed as
28844      a parameter, when making a call.  When processing incoming
28845      arguments, N_NAMED_ARGS is set to -1.
28847      When processing a call to a compiler support library function,
28848      LIBNAME identifies which one.  It is a `symbol_ref' rtx which
28849      contains the name of the function, as a string.  LIBNAME is 0 when
28850      an ordinary C function call is being processed.  Thus, each time
28851      this macro is called, either LIBNAME or FNTYPE is nonzero, but
28852      never both of them at once.
28854  -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
28855      Like `INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls,
28856      it gets a `MODE' argument instead of FNTYPE, that would be `NULL'.
28857      INDIRECT would always be zero, too.  If this macro is not
28858      defined, `INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is
28859      used instead.
28861  -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
28862      Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
28863      finding the arguments for the function being compiled.  If this
28864      macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead.
28866      The value passed for LIBNAME is always 0, since library routines
28867      with special calling conventions are never compiled with GCC.  The
28868      argument LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'.
28870  -- Macro: FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)
28871      A C statement (sans semicolon) to update the summarizer variable
28872      CUM to advance past an argument in the argument list.  The values
28873      MODE, TYPE and NAMED describe that argument.  Once this is done,
28874      the variable CUM is suitable for analyzing the _following_
28875      argument with `FUNCTION_ARG', etc.
28877      This macro need not do anything if the argument in question was
28878      passed on the stack.  The compiler knows how to track the amount
28879      of stack space used for arguments without any special help.
28881  -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE)
28882      If defined, a C expression that is the number of bytes to add to
28883      the offset of the argument passed in memory.  This is needed for
28884      the SPU, which passes `char' and `short' arguments in the preferred
28885      slot that is in the middle of the quad word instead of starting at
28886      the top.
28888  -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE)
28889      If defined, a C expression which determines whether, and in which
28890      direction, to pad out an argument with extra space.  The value
28891      should be of type `enum direction': either `upward' to pad above
28892      the argument, `downward' to pad below, or `none' to inhibit
28893      padding.
28895      The _amount_ of padding is always just enough to reach the next
28896      multiple of `FUNCTION_ARG_BOUNDARY'; this macro does not control
28897      it.
28899      This macro has a default definition which is right for most
28900      systems.  For little-endian machines, the default is to pad
28901      upward.  For big-endian machines, the default is to pad downward
28902      for an argument of constant size shorter than an `int', and upward
28903      otherwise.
28905  -- Macro: PAD_VARARGS_DOWN
28906      If defined, a C expression which determines whether the default
28907      implementation of va_arg will attempt to pad down before reading
28908      the next argument, if that argument is smaller than its aligned
28909      space as controlled by `PARM_BOUNDARY'.  If this macro is not
28910      defined, all such arguments are padded down if `BYTES_BIG_ENDIAN'
28911      is true.
28913  -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
28914      Specify padding for the last element of a block move between
28915      registers and memory.  FIRST is nonzero if this is the only
28916      element.  Defining this macro allows better control of register
28917      function parameters on big-endian machines, without using
28918      `PARALLEL' rtl.  In particular, `MUST_PASS_IN_STACK' need not test
28919      padding and mode of types in registers, as there is no longer a
28920      "wrong" part of a register;  For example, a three byte aggregate
28921      may be passed in the high part of a register if so required.
28923  -- Macro: FUNCTION_ARG_BOUNDARY (MODE, TYPE)
28924      If defined, a C expression that gives the alignment boundary, in
28925      bits, of an argument with the specified mode and type.  If it is
28926      not defined, `PARM_BOUNDARY' is used for all arguments.
28928  -- Macro: FUNCTION_ARG_REGNO_P (REGNO)
28929      A C expression that is nonzero if REGNO is the number of a hard
28930      register in which function arguments are sometimes passed.  This
28931      does _not_ include implicit arguments such as the static chain and
28932      the structure-value address.  On many machines, no registers can be
28933      used for this purpose since all function arguments are pushed on
28934      the stack.
28936  -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE)
28937      This hook should return true if parameter of type TYPE are passed
28938      as two scalar parameters.  By default, GCC will attempt to pack
28939      complex arguments into the target's word size.  Some ABIs require
28940      complex arguments to be split and treated as their individual
28941      components.  For example, on AIX64, complex floats should be
28942      passed in a pair of floating point registers, even though a
28943      complex float would fit in one 64-bit floating point register.
28945      The default value of this hook is `NULL', which is treated as
28946      always false.
28948  -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
28949      This hook returns a type node for `va_list' for the target.  The
28950      default version of the hook returns `void*'.
28952  -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL)
28953      This hook returns the va_list type of the calling convention
28954      specified by FNDECL.  The default version of this hook returns
28955      `va_list_type_node'.
28957  -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
28958      This hook returns the va_list type of the calling convention
28959      specified by the type of TYPE. If TYPE is not a valid va_list
28960      type, it returns `NULL_TREE'.
28962  -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
28963           TYPE, gimple_seq *PRE_P, gimple_seq *POST_P)
28964      This hook performs target-specific gimplification of
28965      `VA_ARG_EXPR'.  The first two parameters correspond to the
28966      arguments to `va_arg'; the latter two are as in
28967      `gimplify.c:gimplify_expr'.
28969  -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE)
28970      Define this to return nonzero if the port can handle pointers with
28971      machine mode MODE.  The default version of this hook returns true
28972      for both `ptr_mode' and `Pmode'.
28974  -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode
28975           MODE)
28976      Define this to return nonzero if the port is prepared to handle
28977      insns involving scalar mode MODE.  For a scalar mode to be
28978      considered supported, all the basic arithmetic and comparisons
28979      must work.
28981      The default version of this hook returns true for any mode
28982      required to handle the basic C types (as defined by the port).
28983      Included here are the double-word arithmetic supported by the code
28984      in `optabs.c'.
28986  -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode
28987           MODE)
28988      Define this to return nonzero if the port is prepared to handle
28989      insns involving vector mode MODE.  At the very least, it must have
28990      move patterns for this mode.
28992 \x1f
28993 File: gccint.info,  Node: Scalar Return,  Next: Aggregate Return,  Prev: Register Arguments,  Up: Stack and Calling
28995 17.10.8 How Scalar Function Values Are Returned
28996 -----------------------------------------------
28998 This section discusses the macros that control returning scalars as
28999 values--values that can fit in registers.
29001  -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE,
29002           const_tree FN_DECL_OR_TYPE, bool OUTGOING)
29003      Define this to return an RTX representing the place where a
29004      function returns or receives a value of data type RET_TYPE, a tree
29005      node representing a data type.  FN_DECL_OR_TYPE is a tree node
29006      representing `FUNCTION_DECL' or `FUNCTION_TYPE' of a function
29007      being called.  If OUTGOING is false, the hook should compute the
29008      register in which the caller will see the return value.
29009      Otherwise, the hook should return an RTX representing the place
29010      where a function returns a value.
29012      On many machines, only `TYPE_MODE (RET_TYPE)' is relevant.
29013      (Actually, on most machines, scalar values are returned in the same
29014      place regardless of mode.)  The value of the expression is usually
29015      a `reg' RTX for the hard register where the return value is stored.
29016      The value can also be a `parallel' RTX, if the return value is in
29017      multiple places.  See `FUNCTION_ARG' for an explanation of the
29018      `parallel' form.   Note that the callee will populate every
29019      location specified in the `parallel', but if the first element of
29020      the `parallel' contains the whole return value, callers will use
29021      that element as the canonical location and ignore the others.  The
29022      m68k port uses this type of `parallel' to return pointers in both
29023      `%a0' (the canonical location) and `%d0'.
29025      If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
29026      the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is
29027      a scalar type.
29029      If the precise function being called is known, FUNC is a tree node
29030      (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
29031      makes it possible to use a different value-returning convention
29032      for specific functions when all their calls are known.
29034      Some target machines have "register windows" so that the register
29035      in which a function returns its value is not the same as the one
29036      in which the caller sees the value.  For such machines, you should
29037      return different RTX depending on OUTGOING.
29039      `TARGET_FUNCTION_VALUE' is not used for return values with
29040      aggregate data types, because these are returned in another way.
29041      See `TARGET_STRUCT_VALUE_RTX' and related macros, below.
29043  -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
29044      This macro has been deprecated.  Use `TARGET_FUNCTION_VALUE' for a
29045      new target instead.
29047  -- Macro: FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)
29048      This macro has been deprecated.  Use `TARGET_FUNCTION_VALUE' for a
29049      new target instead.
29051  -- Macro: LIBCALL_VALUE (MODE)
29052      A C expression to create an RTX representing the place where a
29053      library function returns a value of mode MODE.
29055      Note that "library function" in this context means a compiler
29056      support routine, used to perform arithmetic, whose name is known
29057      specially by the compiler and was not mentioned in the C code being
29058      compiled.
29060  -- Target Hook: rtx TARGET_LIBCALL_VALUE (enum machine_mode
29061      MODE, const_rtx FUN) Define this hook if the back-end needs to
29062      know the name of the libcall function in order to determine where
29063      the result should be returned.
29065      The mode of the result is given by MODE and the name of the called
29066      library function is given by FUN.  The hook should return an RTX
29067      representing the place where the library function result will be
29068      returned.
29070      If this hook is not defined, then LIBCALL_VALUE will be used.
29072  -- Macro: FUNCTION_VALUE_REGNO_P (REGNO)
29073      A C expression that is nonzero if REGNO is the number of a hard
29074      register in which the values of called function may come back.
29076      A register whose use for returning values is limited to serving as
29077      the second of a pair (for a value of type `double', say) need not
29078      be recognized by this macro.  So for most machines, this definition
29079      suffices:
29081           #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
29083      If the machine has register windows, so that the caller and the
29084      called function use different registers for the return value, this
29085      macro should recognize only the caller's register numbers.
29087  -- Macro: TARGET_ENUM_VA_LIST (IDX, PNAME, PTYPE)
29088      This target macro is used in function `c_common_nodes_and_builtins'
29089      to iterate through the target specific builtin types for va_list.
29090      The variable IDX is used as iterator. PNAME has to be a pointer to
29091      a `const char *' and PTYPE a pointer to a `tree' typed variable.
29092      The arguments PNAME and PTYPE are used to store the result of this
29093      macro and are set to the name of the va_list builtin type and its
29094      internal type.  If the return value of this macro is zero, then
29095      there is no more element.  Otherwise the IDX should be increased
29096      for the next call of this macro to iterate through all types.
29098  -- Macro: APPLY_RESULT_SIZE
29099      Define this macro if `untyped_call' and `untyped_return' need more
29100      space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and
29101      restoring an arbitrary return value.
29103  -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE)
29104      This hook should return true if values of type TYPE are returned
29105      at the most significant end of a register (in other words, if they
29106      are padded at the least significant end).  You can assume that TYPE
29107      is returned in a register; the caller is required to check this.
29109      Note that the register provided by `TARGET_FUNCTION_VALUE' must be
29110      able to hold the complete return value.  For example, if a 1-, 2-
29111      or 3-byte structure is returned at the most significant end of a
29112      4-byte register, `TARGET_FUNCTION_VALUE' should provide an
29113      `SImode' rtx.
29115 \x1f
29116 File: gccint.info,  Node: Aggregate Return,  Next: Caller Saves,  Prev: Scalar Return,  Up: Stack and Calling
29118 17.10.9 How Large Values Are Returned
29119 -------------------------------------
29121 When a function value's mode is `BLKmode' (and in some other cases),
29122 the value is not returned according to `TARGET_FUNCTION_VALUE' (*note
29123 Scalar Return::).  Instead, the caller passes the address of a block of
29124 memory in which the value should be stored.  This address is called the
29125 "structure value address".
29127  This section describes how to control returning structure values in
29128 memory.
29130  -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE,
29131           const_tree FNTYPE)
29132      This target hook should return a nonzero value to say to return the
29133      function value in memory, just as large structures are always
29134      returned.  Here TYPE will be the data type of the value, and FNTYPE
29135      will be the type of the function doing the returning, or `NULL' for
29136      libcalls.
29138      Note that values of mode `BLKmode' must be explicitly handled by
29139      this function.  Also, the option `-fpcc-struct-return' takes
29140      effect regardless of this macro.  On most systems, it is possible
29141      to leave the hook undefined; this causes a default definition to
29142      be used, whose value is the constant 1 for `BLKmode' values, and 0
29143      otherwise.
29145      Do not use this hook to indicate that structures and unions should
29146      always be returned in memory.  You should instead use
29147      `DEFAULT_PCC_STRUCT_RETURN' to indicate this.
29149  -- Macro: DEFAULT_PCC_STRUCT_RETURN
29150      Define this macro to be 1 if all structure and union return values
29151      must be in memory.  Since this results in slower code, this should
29152      be defined only if needed for compatibility with other compilers
29153      or with an ABI.  If you define this macro to be 0, then the
29154      conventions used for structure and union return values are decided
29155      by the `TARGET_RETURN_IN_MEMORY' target hook.
29157      If not defined, this defaults to the value 1.
29159  -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
29160      This target hook should return the location of the structure value
29161      address (normally a `mem' or `reg'), or 0 if the address is passed
29162      as an "invisible" first argument.  Note that FNDECL may be `NULL',
29163      for libcalls.  You do not need to define this target hook if the
29164      address is always passed as an "invisible" first argument.
29166      On some architectures the place where the structure value address
29167      is found by the called function is not the same place that the
29168      caller put it.  This can be due to register windows, or it could
29169      be because the function prologue moves it to a different place.
29170      INCOMING is `1' or `2' when the location is needed in the context
29171      of the called function, and `0' in the context of the caller.
29173      If INCOMING is nonzero and the address is to be found on the
29174      stack, return a `mem' which refers to the frame pointer. If
29175      INCOMING is `2', the result is being used to fetch the structure
29176      value address at the beginning of a function.  If you need to emit
29177      adjusting code, you should do it at this point.
29179  -- Macro: PCC_STATIC_STRUCT_RETURN
29180      Define this macro if the usual system convention on the target
29181      machine for returning structures and unions is for the called
29182      function to return the address of a static variable containing the
29183      value.
29185      Do not define this if the usual system convention is for the
29186      caller to pass an address to the subroutine.
29188      This macro has effect in `-fpcc-struct-return' mode, but it does
29189      nothing when you use `-freg-struct-return' mode.
29191 \x1f
29192 File: gccint.info,  Node: Caller Saves,  Next: Function Entry,  Prev: Aggregate Return,  Up: Stack and Calling
29194 17.10.10 Caller-Saves Register Allocation
29195 -----------------------------------------
29197 If you enable it, GCC can save registers around function calls.  This
29198 makes it possible to use call-clobbered registers to hold variables that
29199 must live across calls.
29201  -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS)
29202      A C expression to determine whether it is worthwhile to consider
29203      placing a pseudo-register in a call-clobbered hard register and
29204      saving and restoring it around each function call.  The expression
29205      should be 1 when this is worth doing, and 0 otherwise.
29207      If you don't define this macro, a default is used which is good on
29208      most machines: `4 * CALLS < REFS'.
29210  -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
29211      A C expression specifying which mode is required for saving NREGS
29212      of a pseudo-register in call-clobbered hard register REGNO.  If
29213      REGNO is unsuitable for caller save, `VOIDmode' should be
29214      returned.  For most machines this macro need not be defined since
29215      GCC will select the smallest suitable mode.
29217 \x1f
29218 File: gccint.info,  Node: Function Entry,  Next: Profiling,  Prev: Caller Saves,  Up: Stack and Calling
29220 17.10.11 Function Entry and Exit
29221 --------------------------------
29223 This section describes the macros that output function entry
29224 ("prologue") and exit ("epilogue") code.
29226  -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
29227           HOST_WIDE_INT SIZE)
29228      If defined, a function that outputs the assembler code for entry
29229      to a function.  The prologue is responsible for setting up the
29230      stack frame, initializing the frame pointer register, saving
29231      registers that must be saved, and allocating SIZE additional bytes
29232      of storage for the local variables.  SIZE is an integer.  FILE is
29233      a stdio stream to which the assembler code should be output.
29235      The label for the beginning of the function need not be output by
29236      this macro.  That has already been done when the macro is run.
29238      To determine which registers to save, the macro can refer to the
29239      array `regs_ever_live': element R is nonzero if hard register R is
29240      used anywhere within the function.  This implies the function
29241      prologue should save register R, provided it is not one of the
29242      call-used registers.  (`TARGET_ASM_FUNCTION_EPILOGUE' must
29243      likewise use `regs_ever_live'.)
29245      On machines that have "register windows", the function entry code
29246      does not save on the stack the registers that are in the windows,
29247      even if they are supposed to be preserved by function calls;
29248      instead it takes appropriate steps to "push" the register stack,
29249      if any non-call-used registers are used in the function.
29251      On machines where functions may or may not have frame-pointers, the
29252      function entry code must vary accordingly; it must set up the frame
29253      pointer if one is wanted, and not otherwise.  To determine whether
29254      a frame pointer is in wanted, the macro can refer to the variable
29255      `frame_pointer_needed'.  The variable's value will be 1 at run
29256      time in a function that needs a frame pointer.  *Note
29257      Elimination::.
29259      The function entry code is responsible for allocating any stack
29260      space required for the function.  This stack space consists of the
29261      regions listed below.  In most cases, these regions are allocated
29262      in the order listed, with the last listed region closest to the
29263      top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is
29264      defined, and the highest address if it is not defined).  You can
29265      use a different order for a machine if doing so is more convenient
29266      or required for compatibility reasons.  Except in cases where
29267      required by standard or by a debugger, there is no reason why the
29268      stack layout used by GCC need agree with that used by other
29269      compilers for a machine.
29271  -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE)
29272      If defined, a function that outputs assembler code at the end of a
29273      prologue.  This should be used when the function prologue is being
29274      emitted as RTL, and you have some extra assembler that needs to be
29275      emitted.  *Note prologue instruction pattern::.
29277  -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE)
29278      If defined, a function that outputs assembler code at the start of
29279      an epilogue.  This should be used when the function epilogue is
29280      being emitted as RTL, and you have some extra assembler that needs
29281      to be emitted.  *Note epilogue instruction pattern::.
29283  -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE,
29284           HOST_WIDE_INT SIZE)
29285      If defined, a function that outputs the assembler code for exit
29286      from a function.  The epilogue is responsible for restoring the
29287      saved registers and stack pointer to their values when the
29288      function was called, and returning control to the caller.  This
29289      macro takes the same arguments as the macro
29290      `TARGET_ASM_FUNCTION_PROLOGUE', and the registers to restore are
29291      determined from `regs_ever_live' and `CALL_USED_REGISTERS' in the
29292      same way.
29294      On some machines, there is a single instruction that does all the
29295      work of returning from the function.  On these machines, give that
29296      instruction the name `return' and do not define the macro
29297      `TARGET_ASM_FUNCTION_EPILOGUE' at all.
29299      Do not define a pattern named `return' if you want the
29300      `TARGET_ASM_FUNCTION_EPILOGUE' to be used.  If you want the target
29301      switches to control whether return instructions or epilogues are
29302      used, define a `return' pattern with a validity condition that
29303      tests the target switches appropriately.  If the `return'
29304      pattern's validity condition is false, epilogues will be used.
29306      On machines where functions may or may not have frame-pointers, the
29307      function exit code must vary accordingly.  Sometimes the code for
29308      these two cases is completely different.  To determine whether a
29309      frame pointer is wanted, the macro can refer to the variable
29310      `frame_pointer_needed'.  The variable's value will be 1 when
29311      compiling a function that needs a frame pointer.
29313      Normally, `TARGET_ASM_FUNCTION_PROLOGUE' and
29314      `TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
29315      The C variable `current_function_is_leaf' is nonzero for such a
29316      function.  *Note Leaf Functions::.
29318      On some machines, some functions pop their arguments on exit while
29319      others leave that for the caller to do.  For example, the 68020
29320      when given `-mrtd' pops arguments in functions that take a fixed
29321      number of arguments.
29323      Your definition of the macro `RETURN_POPS_ARGS' decides which
29324      functions pop their own arguments.  `TARGET_ASM_FUNCTION_EPILOGUE'
29325      needs to know what was decided.  The number of bytes of the current
29326      function's arguments that this function should pop is available in
29327      `crtl->args.pops_args'.  *Note Scalar Return::.
29329    * A region of `current_function_pretend_args_size' bytes of
29330      uninitialized space just underneath the first argument arriving on
29331      the stack.  (This may not be at the very start of the allocated
29332      stack region if the calling sequence has pushed anything else
29333      since pushing the stack arguments.  But usually, on such machines,
29334      nothing else has been pushed yet, because the function prologue
29335      itself does all the pushing.)  This region is used on machines
29336      where an argument may be passed partly in registers and partly in
29337      memory, and, in some cases to support the features in `<stdarg.h>'.
29339    * An area of memory used to save certain registers used by the
29340      function.  The size of this area, which may also include space for
29341      such things as the return address and pointers to previous stack
29342      frames, is machine-specific and usually depends on which registers
29343      have been used in the function.  Machines with register windows
29344      often do not require a save area.
29346    * A region of at least SIZE bytes, possibly rounded up to an
29347      allocation boundary, to contain the local variables of the
29348      function.  On some machines, this region and the save area may
29349      occur in the opposite order, with the save area closer to the top
29350      of the stack.
29352    * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a region of
29353      `current_function_outgoing_args_size' bytes to be used for outgoing
29354      argument lists of the function.  *Note Stack Arguments::.
29356  -- Macro: EXIT_IGNORE_STACK
29357      Define this macro as a C expression that is nonzero if the return
29358      instruction or the function epilogue ignores the value of the stack
29359      pointer; in other words, if it is safe to delete an instruction to
29360      adjust the stack pointer before a return from the function.  The
29361      default is 0.
29363      Note that this macro's value is relevant only for functions for
29364      which frame pointers are maintained.  It is never safe to delete a
29365      final stack adjustment in a function that has no frame pointer,
29366      and the compiler knows this regardless of `EXIT_IGNORE_STACK'.
29368  -- Macro: EPILOGUE_USES (REGNO)
29369      Define this macro as a C expression that is nonzero for registers
29370      that are used by the epilogue or the `return' pattern.  The stack
29371      and frame pointer registers are already assumed to be used as
29372      needed.
29374  -- Macro: EH_USES (REGNO)
29375      Define this macro as a C expression that is nonzero for registers
29376      that are used by the exception handling mechanism, and so should
29377      be considered live on entry to an exception edge.
29379  -- Macro: DELAY_SLOTS_FOR_EPILOGUE
29380      Define this macro if the function epilogue contains delay slots to
29381      which instructions from the rest of the function can be "moved".
29382      The definition should be a C expression whose value is an integer
29383      representing the number of delay slots there.
29385  -- Macro: ELIGIBLE_FOR_EPILOGUE_DELAY (INSN, N)
29386      A C expression that returns 1 if INSN can be placed in delay slot
29387      number N of the epilogue.
29389      The argument N is an integer which identifies the delay slot now
29390      being considered (since different slots may have different rules of
29391      eligibility).  It is never negative and is always less than the
29392      number of epilogue delay slots (what `DELAY_SLOTS_FOR_EPILOGUE'
29393      returns).  If you reject a particular insn for a given delay slot,
29394      in principle, it may be reconsidered for a subsequent delay slot.
29395      Also, other insns may (at least in principle) be considered for
29396      the so far unfilled delay slot.
29398      The insns accepted to fill the epilogue delay slots are put in an
29399      RTL list made with `insn_list' objects, stored in the variable
29400      `current_function_epilogue_delay_list'.  The insn for the first
29401      delay slot comes first in the list.  Your definition of the macro
29402      `TARGET_ASM_FUNCTION_EPILOGUE' should fill the delay slots by
29403      outputting the insns in this list, usually by calling
29404      `final_scan_insn'.
29406      You need not define this macro if you did not define
29407      `DELAY_SLOTS_FOR_EPILOGUE'.
29409  -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree
29410           THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
29411           VCALL_OFFSET, tree FUNCTION)
29412      A function that outputs the assembler code for a thunk function,
29413      used to implement C++ virtual function calls with multiple
29414      inheritance.  The thunk acts as a wrapper around a virtual
29415      function, adjusting the implicit object parameter before handing
29416      control off to the real function.
29418      First, emit code to add the integer DELTA to the location that
29419      contains the incoming first argument.  Assume that this argument
29420      contains a pointer, and is the one used to pass the `this' pointer
29421      in C++.  This is the incoming argument _before_ the function
29422      prologue, e.g. `%o0' on a sparc.  The addition must preserve the
29423      values of all other incoming arguments.
29425      Then, if VCALL_OFFSET is nonzero, an additional adjustment should
29426      be made after adding `delta'.  In particular, if P is the adjusted
29427      pointer, the following adjustment should be made:
29429           p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
29431      After the additions, emit code to jump to FUNCTION, which is a
29432      `FUNCTION_DECL'.  This is a direct pure jump, not a call, and does
29433      not touch the return address.  Hence returning from FUNCTION will
29434      return to whoever called the current `thunk'.
29436      The effect must be as if FUNCTION had been called directly with
29437      the adjusted first argument.  This macro is responsible for
29438      emitting all of the code for a thunk function;
29439      `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE'
29440      are not invoked.
29442      The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
29443      been extracted from it.)  It might possibly be useful on some
29444      targets, but probably not.
29446      If you do not define this macro, the target-independent code in
29447      the C++ front end will generate a less efficient heavyweight thunk
29448      that calls FUNCTION instead of jumping to it.  The generic
29449      approach does not support varargs.
29451  -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree
29452           THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
29453           VCALL_OFFSET, const_tree FUNCTION)
29454      A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would
29455      be able to output the assembler code for the thunk function
29456      specified by the arguments it is passed, and false otherwise.  In
29457      the latter case, the generic approach will be used by the C++
29458      front end, with the limitations previously exposed.
29460 \x1f
29461 File: gccint.info,  Node: Profiling,  Next: Tail Calls,  Prev: Function Entry,  Up: Stack and Calling
29463 17.10.12 Generating Code for Profiling
29464 --------------------------------------
29466 These macros will help you generate code for profiling.
29468  -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
29469      A C statement or compound statement to output to FILE some
29470      assembler code to call the profiling subroutine `mcount'.
29472      The details of how `mcount' expects to be called are determined by
29473      your operating system environment, not by GCC.  To figure them out,
29474      compile a small program for profiling using the system's installed
29475      C compiler and look at the assembler code that results.
29477      Older implementations of `mcount' expect the address of a counter
29478      variable to be loaded into some register.  The name of this
29479      variable is `LP' followed by the number LABELNO, so you would
29480      generate the name using `LP%d' in a `fprintf'.
29482  -- Macro: PROFILE_HOOK
29483      A C statement or compound statement to output to FILE some assembly
29484      code to call the profiling subroutine `mcount' even the target does
29485      not support profiling.
29487  -- Macro: NO_PROFILE_COUNTERS
29488      Define this macro to be an expression with a nonzero value if the
29489      `mcount' subroutine on your system does not need a counter variable
29490      allocated for each function.  This is true for almost all modern
29491      implementations.  If you define this macro, you must not use the
29492      LABELNO argument to `FUNCTION_PROFILER'.
29494  -- Macro: PROFILE_BEFORE_PROLOGUE
29495      Define this macro if the code for function profiling should come
29496      before the function prologue.  Normally, the profiling code comes
29497      after.
29499 \x1f
29500 File: gccint.info,  Node: Tail Calls,  Next: Stack Smashing Protection,  Prev: Profiling,  Up: Stack and Calling
29502 17.10.13 Permitting tail calls
29503 ------------------------------
29505  -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
29506           EXP)
29507      True if it is ok to do sibling call optimization for the specified
29508      call expression EXP.  DECL will be the called function, or `NULL'
29509      if this is an indirect call.
29511      It is not uncommon for limitations of calling conventions to
29512      prevent tail calls to functions outside the current unit of
29513      translation, or during PIC compilation.  The hook is used to
29514      enforce these restrictions, as the `sibcall' md pattern can not
29515      fail, or fall over to a "normal" call.  The criteria for
29516      successful sibling call optimization may vary greatly between
29517      different architectures.
29519  -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS)
29520      Add any hard registers to REGS that are live on entry to the
29521      function.  This hook only needs to be defined to provide registers
29522      that cannot be found by examination of FUNCTION_ARG_REGNO_P, the
29523      callee saved registers, STATIC_CHAIN_INCOMING_REGNUM,
29524      STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX,
29525      FRAME_POINTER_REGNUM, EH_USES, FRAME_POINTER_REGNUM,
29526      ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM.
29528 \x1f
29529 File: gccint.info,  Node: Stack Smashing Protection,  Prev: Tail Calls,  Up: Stack and Calling
29531 17.10.14 Stack smashing protection
29532 ----------------------------------
29534  -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
29535      This hook returns a `DECL' node for the external variable to use
29536      for the stack protection guard.  This variable is initialized by
29537      the runtime to some random value and is used to initialize the
29538      guard value that is placed at the top of the local stack frame.
29539      The type of this variable must be `ptr_type_node'.
29541      The default version of this hook creates a variable called
29542      `__stack_chk_guard', which is normally defined in `libgcc2.c'.
29544  -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
29545      This hook returns a tree expression that alerts the runtime that
29546      the stack protect guard variable has been modified.  This
29547      expression should involve a call to a `noreturn' function.
29549      The default version of this hook invokes a function called
29550      `__stack_chk_fail', taking no arguments.  This function is
29551      normally defined in `libgcc2.c'.
29553 \x1f
29554 File: gccint.info,  Node: Varargs,  Next: Trampolines,  Prev: Stack and Calling,  Up: Target Macros
29556 17.11 Implementing the Varargs Macros
29557 =====================================
29559 GCC comes with an implementation of `<varargs.h>' and `<stdarg.h>' that
29560 work without change on machines that pass arguments on the stack.
29561 Other machines require their own implementations of varargs, and the
29562 two machine independent header files must have conditionals to include
29565  ISO `<stdarg.h>' differs from traditional `<varargs.h>' mainly in the
29566 calling convention for `va_start'.  The traditional implementation
29567 takes just one argument, which is the variable in which to store the
29568 argument pointer.  The ISO implementation of `va_start' takes an
29569 additional second argument.  The user is supposed to write the last
29570 named argument of the function here.
29572  However, `va_start' should not use this argument.  The way to find the
29573 end of the named arguments is with the built-in functions described
29574 below.
29576  -- Macro: __builtin_saveregs ()
29577      Use this built-in function to save the argument registers in
29578      memory so that the varargs mechanism can access them.  Both ISO
29579      and traditional versions of `va_start' must use
29580      `__builtin_saveregs', unless you use
29581      `TARGET_SETUP_INCOMING_VARARGS' (see below) instead.
29583      On some machines, `__builtin_saveregs' is open-coded under the
29584      control of the target hook `TARGET_EXPAND_BUILTIN_SAVEREGS'.  On
29585      other machines, it calls a routine written in assembler language,
29586      found in `libgcc2.c'.
29588      Code generated for the call to `__builtin_saveregs' appears at the
29589      beginning of the function, as opposed to where the call to
29590      `__builtin_saveregs' is written, regardless of what the code is.
29591      This is because the registers must be saved before the function
29592      starts to use them for its own purposes.
29594  -- Macro: __builtin_args_info (CATEGORY)
29595      Use this built-in function to find the first anonymous arguments in
29596      registers.
29598      In general, a machine may have several categories of registers
29599      used for arguments, each for a particular category of data types.
29600      (For example, on some machines, floating-point registers are used
29601      for floating-point arguments while other arguments are passed in
29602      the general registers.)  To make non-varargs functions use the
29603      proper calling convention, you have defined the `CUMULATIVE_ARGS'
29604      data type to record how many registers in each category have been
29605      used so far
29607      `__builtin_args_info' accesses the same data structure of type
29608      `CUMULATIVE_ARGS' after the ordinary argument layout is finished
29609      with it, with CATEGORY specifying which word to access.  Thus, the
29610      value indicates the first unused register in a given category.
29612      Normally, you would use `__builtin_args_info' in the implementation
29613      of `va_start', accessing each category just once and storing the
29614      value in the `va_list' object.  This is because `va_list' will
29615      have to update the values, and there is no way to alter the values
29616      accessed by `__builtin_args_info'.
29618  -- Macro: __builtin_next_arg (LASTARG)
29619      This is the equivalent of `__builtin_args_info', for stack
29620      arguments.  It returns the address of the first anonymous stack
29621      argument, as type `void *'.  If `ARGS_GROW_DOWNWARD', it returns
29622      the address of the location above the first anonymous stack
29623      argument.  Use it in `va_start' to initialize the pointer for
29624      fetching arguments from the stack.  Also use it in `va_start' to
29625      verify that the second parameter LASTARG is the last named argument
29626      of the current function.
29628  -- Macro: __builtin_classify_type (OBJECT)
29629      Since each machine has its own conventions for which data types are
29630      passed in which kind of register, your implementation of `va_arg'
29631      has to embody these conventions.  The easiest way to categorize the
29632      specified data type is to use `__builtin_classify_type' together
29633      with `sizeof' and `__alignof__'.
29635      `__builtin_classify_type' ignores the value of OBJECT, considering
29636      only its data type.  It returns an integer describing what kind of
29637      type that is--integer, floating, pointer, structure, and so on.
29639      The file `typeclass.h' defines an enumeration that you can use to
29640      interpret the values of `__builtin_classify_type'.
29642  These machine description macros help implement varargs:
29644  -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
29645      If defined, this hook produces the machine-specific code for a
29646      call to `__builtin_saveregs'.  This code will be moved to the very
29647      beginning of the function, before any parameter access are made.
29648      The return value of this function should be an RTX that contains
29649      the value to use as the return of `__builtin_saveregs'.
29651  -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS
29652           *ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int
29653           *PRETEND_ARGS_SIZE, int SECOND_TIME)
29654      This target hook offers an alternative to using
29655      `__builtin_saveregs' and defining the hook
29656      `TARGET_EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous
29657      register arguments into the stack so that all the arguments appear
29658      to have been passed consecutively on the stack.  Once this is
29659      done, you can use the standard implementation of varargs that
29660      works for machines that pass all their arguments on the stack.
29662      The argument ARGS_SO_FAR points to the `CUMULATIVE_ARGS' data
29663      structure, containing the values that are obtained after
29664      processing the named arguments.  The arguments MODE and TYPE
29665      describe the last named argument--its machine mode and its data
29666      type as a tree node.
29668      The target hook should do two things: first, push onto the stack
29669      all the argument registers _not_ used for the named arguments, and
29670      second, store the size of the data thus pushed into the
29671      `int'-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
29672      that you store here will serve as additional offset for setting up
29673      the stack frame.
29675      Because you must generate code to push the anonymous arguments at
29676      compile time without knowing their data types,
29677      `TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
29678      have just a single category of argument register and use it
29679      uniformly for all data types.
29681      If the argument SECOND_TIME is nonzero, it means that the
29682      arguments of the function are being analyzed for the second time.
29683      This happens for an inline function, which is not actually
29684      compiled until the end of the source file.  The hook
29685      `TARGET_SETUP_INCOMING_VARARGS' should not generate any
29686      instructions in this case.
29688  -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS
29689           *CA)
29690      Define this hook to return `true' if the location where a function
29691      argument is passed depends on whether or not it is a named
29692      argument.
29694      This hook controls how the NAMED argument to `FUNCTION_ARG' is set
29695      for varargs and stdarg functions.  If this hook returns `true',
29696      the NAMED argument is always true for named arguments, and false
29697      for unnamed arguments.  If it returns `false', but
29698      `TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns `true', then all
29699      arguments are treated as named.  Otherwise, all named arguments
29700      except the last are treated as named.
29702      You need not define this hook if it always returns `false'.
29704  -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
29705           (CUMULATIVE_ARGS *CA)
29706      If you need to conditionally change ABIs so that one works with
29707      `TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
29708      `TARGET_SETUP_INCOMING_VARARGS' nor
29709      `TARGET_STRICT_ARGUMENT_NAMING' was defined, then define this hook
29710      to return `true' if `TARGET_SETUP_INCOMING_VARARGS' is used,
29711      `false' otherwise.  Otherwise, you should not define this hook.
29713 \x1f
29714 File: gccint.info,  Node: Trampolines,  Next: Library Calls,  Prev: Varargs,  Up: Target Macros
29716 17.12 Trampolines for Nested Functions
29717 ======================================
29719 A "trampoline" is a small piece of code that is created at run time
29720 when the address of a nested function is taken.  It normally resides on
29721 the stack, in the stack frame of the containing function.  These macros
29722 tell GCC how to generate code to allocate and initialize a trampoline.
29724  The instructions in the trampoline must do two things: load a constant
29725 address into the static chain register, and jump to the real address of
29726 the nested function.  On CISC machines such as the m68k, this requires
29727 two instructions, a move immediate and a jump.  Then the two addresses
29728 exist in the trampoline as word-long immediate operands.  On RISC
29729 machines, it is often necessary to load each address into a register in
29730 two parts.  Then pieces of each address form separate immediate
29731 operands.
29733  The code generated to initialize the trampoline must store the variable
29734 parts--the static chain value and the function address--into the
29735 immediate operands of the instructions.  On a CISC machine, this is
29736 simply a matter of copying each address to a memory reference at the
29737 proper offset from the start of the trampoline.  On a RISC machine, it
29738 may be necessary to take out pieces of the address and store them
29739 separately.
29741  -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F)
29742      This hook is called by `assemble_trampoline_template' to output,
29743      on the stream F, assembler code for a block of data that contains
29744      the constant parts of a trampoline.  This code should not include a
29745      label--the label is taken care of automatically.
29747      If you do not define this hook, it means no template is needed for
29748      the target.  Do not define this hook on systems where the block
29749      move code to copy the trampoline into place would be larger than
29750      the code to generate it on the spot.
29752  -- Macro: TRAMPOLINE_SECTION
29753      Return the section into which the trampoline template is to be
29754      placed (*note Sections::).  The default value is
29755      `readonly_data_section'.
29757  -- Macro: TRAMPOLINE_SIZE
29758      A C expression for the size in bytes of the trampoline, as an
29759      integer.
29761  -- Macro: TRAMPOLINE_ALIGNMENT
29762      Alignment required for trampolines, in bits.
29764      If you don't define this macro, the value of `FUNCTION_ALIGNMENT'
29765      is used for aligning trampolines.
29767  -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL,
29768           rtx STATIC_CHAIN)
29769      This hook is called to initialize a trampoline.  M_TRAMP is an RTX
29770      for the memory block for the trampoline; FNDECL is the
29771      `FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX
29772      for the static chain value that should be passed to the function
29773      when it is called.
29775      If the target defines `TARGET_ASM_TRAMPOLINE_TEMPLATE', then the
29776      first thing this hook should do is emit a block move into M_TRAMP
29777      from the memory block returned by `assemble_trampoline_template'.
29778      Note that the block move need only cover the constant parts of the
29779      trampoline.  If the target isolates the variable parts of the
29780      trampoline to the end, not all `TRAMPOLINE_SIZE' bytes need be
29781      copied.
29783      If the target requires any other actions, such as flushing caches
29784      or enabling stack execution, these actions should be performed
29785      after initializing the trampoline proper.
29787  -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR)
29788      This hook should perform any machine-specific adjustment in the
29789      address of the trampoline.  Its argument contains the address of
29790      the memory block that was passed to `TARGET_TRAMPOLINE_INIT'.  In
29791      case the address to be used for a function call should be
29792      different from the address at which the template was stored, the
29793      different address should be returned; otherwise ADDR should be
29794      returned unchanged.  If this hook is not defined, ADDR will be
29795      used for function calls.
29797  Implementing trampolines is difficult on many machines because they
29798 have separate instruction and data caches.  Writing into a stack
29799 location fails to clear the memory in the instruction cache, so when
29800 the program jumps to that location, it executes the old contents.
29802  Here are two possible solutions.  One is to clear the relevant parts of
29803 the instruction cache whenever a trampoline is set up.  The other is to
29804 make all trampolines identical, by having them jump to a standard
29805 subroutine.  The former technique makes trampoline execution faster; the
29806 latter makes initialization faster.
29808  To clear the instruction cache when a trampoline is initialized, define
29809 the following macro.
29811  -- Macro: CLEAR_INSN_CACHE (BEG, END)
29812      If defined, expands to a C expression clearing the _instruction
29813      cache_ in the specified interval.  The definition of this macro
29814      would typically be a series of `asm' statements.  Both BEG and END
29815      are both pointer expressions.
29817  The operating system may also require the stack to be made executable
29818 before calling the trampoline.  To implement this requirement, define
29819 the following macro.
29821  -- Macro: ENABLE_EXECUTE_STACK
29822      Define this macro if certain operations must be performed before
29823      executing code located on the stack.  The macro should expand to a
29824      series of C file-scope constructs (e.g. functions) and provide a
29825      unique entry point named `__enable_execute_stack'.  The target is
29826      responsible for emitting calls to the entry point in the code, for
29827      example from the `TARGET_TRAMPOLINE_INIT' hook.
29829  To use a standard subroutine, define the following macro.  In addition,
29830 you must make sure that the instructions in a trampoline fill an entire
29831 cache line with identical instructions, or else ensure that the
29832 beginning of the trampoline code is always aligned at the same point in
29833 its cache line.  Look in `m68k.h' as a guide.
29835  -- Macro: TRANSFER_FROM_TRAMPOLINE
29836      Define this macro if trampolines need a special subroutine to do
29837      their work.  The macro should expand to a series of `asm'
29838      statements which will be compiled with GCC.  They go in a library
29839      function named `__transfer_from_trampoline'.
29841      If you need to avoid executing the ordinary prologue code of a
29842      compiled C function when you jump to the subroutine, you can do so
29843      by placing a special label of your own in the assembler code.  Use
29844      one `asm' statement to generate an assembler label, and another to
29845      make the label global.  Then trampolines can use that label to
29846      jump directly to your special assembler code.
29848 \x1f
29849 File: gccint.info,  Node: Library Calls,  Next: Addressing Modes,  Prev: Trampolines,  Up: Target Macros
29851 17.13 Implicit Calls to Library Routines
29852 ========================================
29854 Here is an explanation of implicit calls to library routines.
29856  -- Macro: DECLARE_LIBRARY_RENAMES
29857      This macro, if defined, should expand to a piece of C code that
29858      will get expanded when compiling functions for libgcc.a.  It can
29859      be used to provide alternate names for GCC's internal library
29860      functions if there are ABI-mandated names that the compiler should
29861      provide.
29863  -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
29864      This hook should declare additional library routines or rename
29865      existing ones, using the functions `set_optab_libfunc' and
29866      `init_one_libfunc' defined in `optabs.c'.  `init_optabs' calls
29867      this macro after initializing all the normal library routines.
29869      The default is to do nothing.  Most ports don't need to define
29870      this hook.
29872  -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
29873      This macro should return `true' if the library routine that
29874      implements the floating point comparison operator COMPARISON in
29875      mode MODE will return a boolean, and FALSE if it will return a
29876      tristate.
29878      GCC's own floating point libraries return tristates from the
29879      comparison operators, so the default returns false always.  Most
29880      ports don't need to define this macro.
29882  -- Macro: TARGET_LIB_INT_CMP_BIASED
29883      This macro should evaluate to `true' if the integer comparison
29884      functions (like `__cmpdi2') return 0 to indicate that the first
29885      operand is smaller than the second, 1 to indicate that they are
29886      equal, and 2 to indicate that the first operand is greater than
29887      the second.  If this macro evaluates to `false' the comparison
29888      functions return -1, 0, and 1 instead of 0, 1, and 2.  If the
29889      target uses the routines in `libgcc.a', you do not need to define
29890      this macro.
29892  -- Macro: US_SOFTWARE_GOFAST
29893      Define this macro if your system C library uses the US Software
29894      GOFAST library to provide floating point emulation.
29896      In addition to defining this macro, your architecture must set
29897      `TARGET_INIT_LIBFUNCS' to `gofast_maybe_init_libfuncs', or else
29898      call that function from its version of that hook.  It is defined
29899      in `config/gofast.h', which must be included by your
29900      architecture's `CPU.c' file.  See `sparc/sparc.c' for an example.
29902      If this macro is defined, the
29903      `TARGET_FLOAT_LIB_COMPARE_RETURNS_BOOL' target hook must return
29904      false for `SFmode' and `DFmode' comparisons.
29906  -- Macro: TARGET_EDOM
29907      The value of `EDOM' on the target machine, as a C integer constant
29908      expression.  If you don't define this macro, GCC does not attempt
29909      to deposit the value of `EDOM' into `errno' directly.  Look in
29910      `/usr/include/errno.h' to find the value of `EDOM' on your system.
29912      If you do not define `TARGET_EDOM', then compiled code reports
29913      domain errors by calling the library function and letting it
29914      report the error.  If mathematical functions on your system use
29915      `matherr' when there is an error, then you should leave
29916      `TARGET_EDOM' undefined so that `matherr' is used normally.
29918  -- Macro: GEN_ERRNO_RTX
29919      Define this macro as a C expression to create an rtl expression
29920      that refers to the global "variable" `errno'.  (On certain systems,
29921      `errno' may not actually be a variable.)  If you don't define this
29922      macro, a reasonable default is used.
29924  -- Macro: TARGET_C99_FUNCTIONS
29925      When this macro is nonzero, GCC will implicitly optimize `sin'
29926      calls into `sinf' and similarly for other functions defined by C99
29927      standard.  The default is zero because a number of existing
29928      systems lack support for these functions in their runtime so this
29929      macro needs to be redefined to one on systems that do support the
29930      C99 runtime.
29932  -- Macro: TARGET_HAS_SINCOS
29933      When this macro is nonzero, GCC will implicitly optimize calls to
29934      `sin' and `cos' with the same argument to a call to `sincos'.  The
29935      default is zero.  The target has to provide the following
29936      functions:
29937           void sincos(double x, double *sin, double *cos);
29938           void sincosf(float x, float *sin, float *cos);
29939           void sincosl(long double x, long double *sin, long double *cos);
29941  -- Macro: NEXT_OBJC_RUNTIME
29942      Define this macro to generate code for Objective-C message sending
29943      using the calling convention of the NeXT system.  This calling
29944      convention involves passing the object, the selector and the
29945      method arguments all at once to the method-lookup library function.
29947      The default calling convention passes just the object and the
29948      selector to the lookup function, which returns a pointer to the
29949      method.
29951 \x1f
29952 File: gccint.info,  Node: Addressing Modes,  Next: Anchored Addresses,  Prev: Library Calls,  Up: Target Macros
29954 17.14 Addressing Modes
29955 ======================
29957 This is about addressing modes.
29959  -- Macro: HAVE_PRE_INCREMENT
29960  -- Macro: HAVE_PRE_DECREMENT
29961  -- Macro: HAVE_POST_INCREMENT
29962  -- Macro: HAVE_POST_DECREMENT
29963      A C expression that is nonzero if the machine supports
29964      pre-increment, pre-decrement, post-increment, or post-decrement
29965      addressing respectively.
29967  -- Macro: HAVE_PRE_MODIFY_DISP
29968  -- Macro: HAVE_POST_MODIFY_DISP
29969      A C expression that is nonzero if the machine supports pre- or
29970      post-address side-effect generation involving constants other than
29971      the size of the memory operand.
29973  -- Macro: HAVE_PRE_MODIFY_REG
29974  -- Macro: HAVE_POST_MODIFY_REG
29975      A C expression that is nonzero if the machine supports pre- or
29976      post-address side-effect generation involving a register
29977      displacement.
29979  -- Macro: CONSTANT_ADDRESS_P (X)
29980      A C expression that is 1 if the RTX X is a constant which is a
29981      valid address.  On most machines the default definition of
29982      `(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable,
29983      but a few machines are more restrictive as to which constant
29984      addresses are supported.
29986  -- Macro: CONSTANT_P (X)
29987      `CONSTANT_P', which is defined by target-independent code, accepts
29988      integer-values expressions whose values are not explicitly known,
29989      such as `symbol_ref', `label_ref', and `high' expressions and
29990      `const' arithmetic expressions, in addition to `const_int' and
29991      `const_double' expressions.
29993  -- Macro: MAX_REGS_PER_ADDRESS
29994      A number, the maximum number of registers that can appear in a
29995      valid memory address.  Note that it is up to you to specify a
29996      value equal to the maximum number that
29997      `TARGET_LEGITIMATE_ADDRESS_P' would ever accept.
29999  -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode
30000           MODE, rtx X, bool STRICT)
30001      A function that returns whether X (an RTX) is a legitimate memory
30002      address on the target machine for a memory operand of mode MODE.
30004      Legitimate addresses are defined in two variants: a strict variant
30005      and a non-strict one.  The STRICT parameter chooses which variant
30006      is desired by the caller.
30008      The strict variant is used in the reload pass.  It must be defined
30009      so that any pseudo-register that has not been allocated a hard
30010      register is considered a memory reference.  This is because in
30011      contexts where some kind of register is required, a
30012      pseudo-register with no hard register must be rejected.  For
30013      non-hard registers, the strict variant should look up the
30014      `reg_renumber' array; it should then proceed using the hard
30015      register number in the array, or treat the pseudo as a memory
30016      reference if the array holds `-1'.
30018      The non-strict variant is used in other passes.  It must be
30019      defined to accept all pseudo-registers in every context where some
30020      kind of register is required.
30022      Normally, constant addresses which are the sum of a `symbol_ref'
30023      and an integer are stored inside a `const' RTX to mark them as
30024      constant.  Therefore, there is no need to recognize such sums
30025      specifically as legitimate addresses.  Normally you would simply
30026      recognize any `const' as legitimate.
30028      Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant
30029      sums that are not marked with  `const'.  It assumes that a naked
30030      `plus' indicates indexing.  If so, then you _must_ reject such
30031      naked constant sums as illegitimate addresses, so that none of
30032      them will be given to `PRINT_OPERAND_ADDRESS'.
30034      On some machines, whether a symbolic address is legitimate depends
30035      on the section that the address refers to.  On these machines,
30036      define the target hook `TARGET_ENCODE_SECTION_INFO' to store the
30037      information into the `symbol_ref', and then check for it here.
30038      When you see a `const', you will have to look inside it to find the
30039      `symbol_ref' in order to determine the section.  *Note Assembler
30040      Format::.
30042      Some ports are still using a deprecated legacy substitute for this
30043      hook, the `GO_IF_LEGITIMATE_ADDRESS' macro.  This macro has this
30044      syntax:
30046           #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
30048      and should `goto LABEL' if the address X is a valid address on the
30049      target machine for a memory operand of mode MODE.  Whether the
30050      strict or non-strict variants are desired is defined by the
30051      `REG_OK_STRICT' macro introduced earlier in this section.  Using
30052      the hook is usually simpler because it limits the number of files
30053      that are recompiled when changes are made.
30055  -- Macro: TARGET_MEM_CONSTRAINT
30056      A single character to be used instead of the default `'m''
30057      character for general memory addresses.  This defines the
30058      constraint letter which matches the memory addresses accepted by
30059      `TARGET_LEGITIMATE_ADDRESS_P'.  Define this macro if you want to
30060      support new address formats in your back end without changing the
30061      semantics of the `'m'' constraint.  This is necessary in order to
30062      preserve functionality of inline assembly constructs using the
30063      `'m'' constraint.
30065  -- Macro: FIND_BASE_TERM (X)
30066      A C expression to determine the base term of address X, or to
30067      provide a simplified version of X from which `alias.c' can easily
30068      find the base term.  This macro is used in only two places:
30069      `find_base_value' and `find_base_term' in `alias.c'.
30071      It is always safe for this macro to not be defined.  It exists so
30072      that alias analysis can understand machine-dependent addresses.
30074      The typical use of this macro is to handle addresses containing a
30075      label_ref or symbol_ref within an UNSPEC.
30077  -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, enum
30078           machine_mode MODE)
30079      This hook is given an invalid memory address X for an operand of
30080      mode MODE and should try to return a valid memory address.
30082      X will always be the result of a call to `break_out_memory_refs',
30083      and OLDX will be the operand that was given to that function to
30084      produce X.
30086      The code of the hook should not alter the substructure of X.  If
30087      it transforms X into a more legitimate form, it should return the
30088      new X.
30090      It is not necessary for this hook to come up with a legitimate
30091      address.  The compiler has standard ways of doing so in all cases.
30092      In fact, it is safe to omit this hook or make it return X if it
30093      cannot find a valid way to legitimize the address.  But often a
30094      machine-dependent strategy can generate better code.
30096  -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
30097           WIN)
30098      A C compound statement that attempts to replace X, which is an
30099      address that needs reloading, with a valid memory address for an
30100      operand of mode MODE.  WIN will be a C statement label elsewhere
30101      in the code.  It is not necessary to define this macro, but it
30102      might be useful for performance reasons.
30104      For example, on the i386, it is sometimes possible to use a single
30105      reload register instead of two by reloading a sum of two pseudo
30106      registers into a register.  On the other hand, for number of RISC
30107      processors offsets are limited so that often an intermediate
30108      address needs to be generated in order to address a stack slot.
30109      By defining `LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
30110      intermediate addresses generated for adjacent some stack slots can
30111      be made identical, and thus be shared.
30113      _Note_: This macro should be used with caution.  It is necessary
30114      to know something of how reload works in order to effectively use
30115      this, and it is quite easy to produce macros that build in too
30116      much knowledge of reload internals.
30118      _Note_: This macro must be able to reload an address created by a
30119      previous invocation of this macro.  If it fails to handle such
30120      addresses then the compiler may generate incorrect code or abort.
30122      The macro definition should use `push_reload' to indicate parts
30123      that need reloading; OPNUM, TYPE and IND_LEVELS are usually
30124      suitable to be passed unaltered to `push_reload'.
30126      The code generated by this macro must not alter the substructure of
30127      X.  If it transforms X into a more legitimate form, it should
30128      assign X (which will always be a C variable) a new value.  This
30129      also applies to parts that you change indirectly by calling
30130      `push_reload'.
30132      The macro definition may use `strict_memory_address_p' to test if
30133      the address has become legitimate.
30135      If you want to change only a part of X, one standard way of doing
30136      this is to use `copy_rtx'.  Note, however, that it unshares only a
30137      single level of rtl.  Thus, if the part to be changed is not at the
30138      top level, you'll need to replace first the top level.  It is not
30139      necessary for this macro to come up with a legitimate address;
30140      but often a machine-dependent strategy can generate better code.
30142  -- Macro: GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)
30143      A C statement or compound statement with a conditional `goto
30144      LABEL;' executed if memory address X (an RTX) can have different
30145      meanings depending on the machine mode of the memory reference it
30146      is used for or if the address is valid for some modes but not
30147      others.
30149      Autoincrement and autodecrement addresses typically have
30150      mode-dependent effects because the amount of the increment or
30151      decrement is the size of the operand being addressed.  Some
30152      machines have other mode-dependent addresses.  Many RISC machines
30153      have no mode-dependent addresses.
30155      You may assume that ADDR is a valid address for the machine.
30157  -- Macro: LEGITIMATE_CONSTANT_P (X)
30158      A C expression that is nonzero if X is a legitimate constant for
30159      an immediate operand on the target machine.  You can assume that X
30160      satisfies `CONSTANT_P', so you need not check this.  In fact, `1'
30161      is a suitable definition for this macro on machines where anything
30162      `CONSTANT_P' is valid.
30164  -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
30165      This hook is used to undo the possibly obfuscating effects of the
30166      `LEGITIMIZE_ADDRESS' and `LEGITIMIZE_RELOAD_ADDRESS' target
30167      macros.  Some backend implementations of these macros wrap symbol
30168      references inside an `UNSPEC' rtx to represent PIC or similar
30169      addressing modes.  This target hook allows GCC's optimizers to
30170      understand the semantics of these opaque `UNSPEC's by converting
30171      them back into their original form.
30173  -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (rtx X)
30174      This hook should return true if X is of a form that cannot (or
30175      should not) be spilled to the constant pool.  The default version
30176      of this hook returns false.
30178      The primary reason to define this hook is to prevent reload from
30179      deciding that a non-legitimate constant would be better reloaded
30180      from the constant pool instead of spilling and reloading a register
30181      holding the constant.  This restriction is often true of addresses
30182      of TLS symbols for various targets.
30184  -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum
30185           machine_mode MODE, const_rtx X)
30186      This hook should return true if pool entries for constant X can be
30187      placed in an `object_block' structure.  MODE is the mode of X.
30189      The default version returns false for all constants.
30191  -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (unsigned FN, bool
30192           MD_FN, bool SQRT)
30193      This hook should return the DECL of a function that implements
30194      reciprocal of the builtin function with builtin function code FN,
30195      or `NULL_TREE' if such a function is not available.  MD_FN is true
30196      when FN is a code of a machine-dependent builtin function.  When
30197      SQRT is true, additional optimizations that apply only to the
30198      reciprocal of a square root function are performed, and only
30199      reciprocals of `sqrt' function are valid.
30201  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
30202      This hook should return the DECL of a function F that given an
30203      address ADDR as an argument returns a mask M that can be used to
30204      extract from two vectors the relevant data that resides in ADDR in
30205      case ADDR is not properly aligned.
30207      The autovectorizer, when vectorizing a load operation from an
30208      address ADDR that may be unaligned, will generate two vector loads
30209      from the two aligned addresses around ADDR. It then generates a
30210      `REALIGN_LOAD' operation to extract the relevant data from the two
30211      loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and
30212      V2, are the two vectors, each of size VS, and the third argument,
30213      OFF, defines how the data will be extracted from these two
30214      vectors: if OFF is 0, then the returned vector is V2; otherwise,
30215      the returned vector is composed from the last VS-OFF elements of
30216      V1 concatenated to the first OFF elements of V2.
30218      If this hook is defined, the autovectorizer will generate a call
30219      to F (using the DECL tree that this hook returns) and will use the
30220      return value of F as the argument OFF to `REALIGN_LOAD'.
30221      Therefore, the mask M returned by F should comply with the
30222      semantics expected by `REALIGN_LOAD' described above.  If this
30223      hook is not defined, then ADDR will be used as the argument OFF to
30224      `REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR
30225      will be considered.
30227  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN (tree X)
30228      This hook should return the DECL of a function F that implements
30229      widening multiplication of the even elements of two input vectors
30230      of type X.
30232      If this hook is defined, the autovectorizer will use it along with
30233      the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD' target hook when
30234      vectorizing widening multiplication in cases that the order of the
30235      results does not have to be preserved (e.g. used only by a
30236      reduction computation). Otherwise, the `widen_mult_hi/lo' idioms
30237      will be used.
30239  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD (tree X)
30240      This hook should return the DECL of a function F that implements
30241      widening multiplication of the odd elements of two input vectors
30242      of type X.
30244      If this hook is defined, the autovectorizer will use it along with
30245      the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN' target hook when
30246      vectorizing widening multiplication in cases that the order of the
30247      results does not have to be preserved (e.g. used only by a
30248      reduction computation). Otherwise, the `widen_mult_hi/lo' idioms
30249      will be used.
30251  -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (bool
30252           RUNTIME_TEST)
30253      Returns the cost to be added to the overhead involved with
30254      executing the vectorized version of a loop.
30256  -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
30257           (const_tree TYPE, bool IS_PACKED)
30258      Return true if vector alignment is reachable (by peeling N
30259      iterations) for the given type.
30261  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VEC_PERM (tree TYPE,
30262           tree *MASK_ELEMENT_TYPE)
30263      Target builtin that implements vector permute.
30265  -- Target Hook: bool TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK (tree
30266           VEC_TYPE, tree MASK)
30267      Return true if a vector created for `builtin_vec_perm' is valid.
30269  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned
30270           CODE, tree TYPE)
30271      This hook should return the DECL of a function that implements
30272      conversion of the input vector of type TYPE.  If TYPE is an
30273      integral type, the result of the conversion is a vector of
30274      floating-point type of the same size.  If TYPE is a floating-point
30275      type, the result of the conversion is a vector of integral type of
30276      the same size.  The value of CODE is one of the enumerators in
30277      `enum tree_code' and specifies how the conversion is to be applied
30278      (truncation, rounding, etc.).
30280      If this hook is defined, the autovectorizer will use the
30281      `TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing
30282      conversion. Otherwise, it will return `NULL_TREE'.
30284  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
30285           (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
30286      This hook should return the decl of a function that implements the
30287      vectorized variant of the builtin function with builtin function
30288      code CODE or `NULL_TREE' if such a function is not available.  The
30289      value of FNDECL is the builtin function declaration.  The return
30290      type of the vectorized function shall be of vector type
30291      VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
30293  -- Target Hook: bool TARGET_SUPPORT_VECTOR_MISALIGNMENT (enum
30294           machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool
30295           IS_PACKED)
30296      This hook should return true if the target supports misaligned
30297      vector store/load of a specific factor denoted in the MISALIGNMENT
30298      parameter.  The vector store/load should be of machine mode MODE
30299      and the elements in the vectors should be of type TYPE.  IS_PACKED
30300      parameter is true if the memory access is defined in a packed
30301      struct.
30303 \x1f
30304 File: gccint.info,  Node: Anchored Addresses,  Next: Condition Code,  Prev: Addressing Modes,  Up: Target Macros
30306 17.15 Anchored Addresses
30307 ========================
30309 GCC usually addresses every static object as a separate entity.  For
30310 example, if we have:
30312      static int a, b, c;
30313      int foo (void) { return a + b + c; }
30315  the code for `foo' will usually calculate three separate symbolic
30316 addresses: those of `a', `b' and `c'.  On some targets, it would be
30317 better to calculate just one symbolic address and access the three
30318 variables relative to it.  The equivalent pseudocode would be something
30319 like:
30321      int foo (void)
30322      {
30323        register int *xr = &x;
30324        return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
30325      }
30327  (which isn't valid C).  We refer to shared addresses like `x' as
30328 "section anchors".  Their use is controlled by `-fsection-anchors'.
30330  The hooks below describe the target properties that GCC needs to know
30331 in order to make effective use of section anchors.  It won't use
30332 section anchors at all unless either `TARGET_MIN_ANCHOR_OFFSET' or
30333 `TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value.
30335  -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
30336      The minimum offset that should be applied to a section anchor.  On
30337      most targets, it should be the smallest offset that can be applied
30338      to a base register while still giving a legitimate address for
30339      every mode.  The default value is 0.
30341  -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
30342      Like `TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive)
30343      offset that should be applied to section anchors.  The default
30344      value is 0.
30346  -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
30347      Write the assembly code to define section anchor X, which is a
30348      `SYMBOL_REF' for which `SYMBOL_REF_ANCHOR_P (X)' is true.  The
30349      hook is called with the assembly output position set to the
30350      beginning of `SYMBOL_REF_BLOCK (X)'.
30352      If `ASM_OUTPUT_DEF' is available, the hook's default definition
30353      uses it to define the symbol as `. + SYMBOL_REF_BLOCK_OFFSET (X)'.
30354      If `ASM_OUTPUT_DEF' is not available, the hook's default definition
30355      is `NULL', which disables the use of section anchors altogether.
30357  -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X)
30358      Return true if GCC should attempt to use anchors to access
30359      `SYMBOL_REF' X.  You can assume `SYMBOL_REF_HAS_BLOCK_INFO_P (X)'
30360      and `!SYMBOL_REF_ANCHOR_P (X)'.
30362      The default version is correct for most targets, but you might
30363      need to intercept this hook to handle things like target-specific
30364      attributes or target-specific sections.
30366 \x1f
30367 File: gccint.info,  Node: Condition Code,  Next: Costs,  Prev: Anchored Addresses,  Up: Target Macros
30369 17.16 Condition Code Status
30370 ===========================
30372 The macros in this section can be split in two families, according to
30373 the two ways of representing condition codes in GCC.
30375  The first representation is the so called `(cc0)' representation
30376 (*note Jump Patterns::), where all instructions can have an implicit
30377 clobber of the condition codes.  The second is the condition code
30378 register representation, which provides better schedulability for
30379 architectures that do have a condition code register, but on which most
30380 instructions do not affect it.  The latter category includes most RISC
30381 machines.
30383  The implicit clobbering poses a strong restriction on the placement of
30384 the definition and use of the condition code, which need to be in
30385 adjacent insns for machines using `(cc0)'.  This can prevent important
30386 optimizations on some machines.  For example, on the IBM RS/6000, there
30387 is a delay for taken branches unless the condition code register is set
30388 three instructions earlier than the conditional branch.  The instruction
30389 scheduler cannot perform this optimization if it is not permitted to
30390 separate the definition and use of the condition code register.
30392  For this reason, it is possible and suggested to use a register to
30393 represent the condition code for new ports.  If there is a specific
30394 condition code register in the machine, use a hard register.  If the
30395 condition code or comparison result can be placed in any general
30396 register, or if there are multiple condition registers, use a pseudo
30397 register.  Registers used to store the condition code value will
30398 usually have a mode that is in class `MODE_CC'.
30400  Alternatively, you can use `BImode' if the comparison operator is
30401 specified already in the compare instruction.  In this case, you are not
30402 interested in most macros in this section.
30404 * Menu:
30406 * CC0 Condition Codes::      Old style representation of condition codes.
30407 * MODE_CC Condition Codes::  Modern representation of condition codes.
30408 * Cond. Exec. Macros::       Macros to control conditional execution.
30410 \x1f
30411 File: gccint.info,  Node: CC0 Condition Codes,  Next: MODE_CC Condition Codes,  Up: Condition Code
30413 17.16.1 Representation of condition codes using `(cc0)'
30414 -------------------------------------------------------
30416 The file `conditions.h' defines a variable `cc_status' to describe how
30417 the condition code was computed (in case the interpretation of the
30418 condition code depends on the instruction that it was set by).  This
30419 variable contains the RTL expressions on which the condition code is
30420 currently based, and several standard flags.
30422  Sometimes additional machine-specific flags must be defined in the
30423 machine description header file.  It can also add additional
30424 machine-specific information by defining `CC_STATUS_MDEP'.
30426  -- Macro: CC_STATUS_MDEP
30427      C code for a data type which is used for declaring the `mdep'
30428      component of `cc_status'.  It defaults to `int'.
30430      This macro is not used on machines that do not use `cc0'.
30432  -- Macro: CC_STATUS_MDEP_INIT
30433      A C expression to initialize the `mdep' field to "empty".  The
30434      default definition does nothing, since most machines don't use the
30435      field anyway.  If you want to use the field, you should probably
30436      define this macro to initialize it.
30438      This macro is not used on machines that do not use `cc0'.
30440  -- Macro: NOTICE_UPDATE_CC (EXP, INSN)
30441      A C compound statement to set the components of `cc_status'
30442      appropriately for an insn INSN whose body is EXP.  It is this
30443      macro's responsibility to recognize insns that set the condition
30444      code as a byproduct of other activity as well as those that
30445      explicitly set `(cc0)'.
30447      This macro is not used on machines that do not use `cc0'.
30449      If there are insns that do not set the condition code but do alter
30450      other machine registers, this macro must check to see whether they
30451      invalidate the expressions that the condition code is recorded as
30452      reflecting.  For example, on the 68000, insns that store in address
30453      registers do not set the condition code, which means that usually
30454      `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns.
30455      But suppose that the previous insn set the condition code based
30456      on location `a4@(102)' and the current insn stores a new value in
30457      `a4'.  Although the condition code is not changed by this, it will
30458      no longer be true that it reflects the contents of `a4@(102)'.
30459      Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case
30460      to say that nothing is known about the condition code value.
30462      The definition of `NOTICE_UPDATE_CC' must be prepared to deal with
30463      the results of peephole optimization: insns whose patterns are
30464      `parallel' RTXs containing various `reg', `mem' or constants which
30465      are just the operands.  The RTL structure of these insns is not
30466      sufficient to indicate what the insns actually do.  What
30467      `NOTICE_UPDATE_CC' should do when it sees one is just to run
30468      `CC_STATUS_INIT'.
30470      A possible definition of `NOTICE_UPDATE_CC' is to call a function
30471      that looks at an attribute (*note Insn Attributes::) named, for
30472      example, `cc'.  This avoids having detailed information about
30473      patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'.
30475 \x1f
30476 File: gccint.info,  Node: MODE_CC Condition Codes,  Next: Cond. Exec. Macros,  Prev: CC0 Condition Codes,  Up: Condition Code
30478 17.16.2 Representation of condition codes using registers
30479 ---------------------------------------------------------
30481  -- Macro: SELECT_CC_MODE (OP, X, Y)
30482      On many machines, the condition code may be produced by other
30483      instructions than compares, for example the branch can use
30484      directly the condition code set by a subtract instruction.
30485      However, on some machines when the condition code is set this way
30486      some bits (such as the overflow bit) are not set in the same way
30487      as a test instruction, so that a different branch instruction must
30488      be used for some conditional branches.  When this happens, use the
30489      machine mode of the condition code register to record different
30490      formats of the condition code register.  Modes can also be used to
30491      record which compare instruction (e.g. a signed or an unsigned
30492      comparison) produced the condition codes.
30494      If other modes than `CCmode' are required, add them to
30495      `MACHINE-modes.def' and define `SELECT_CC_MODE' to choose a mode
30496      given an operand of a compare.  This is needed because the modes
30497      have to be chosen not only during RTL generation but also, for
30498      example, by instruction combination.  The result of
30499      `SELECT_CC_MODE' should be consistent with the mode used in the
30500      patterns; for example to support the case of the add on the SPARC
30501      discussed above, we have the pattern
30503           (define_insn ""
30504             [(set (reg:CC_NOOV 0)
30505                   (compare:CC_NOOV
30506                     (plus:SI (match_operand:SI 0 "register_operand" "%r")
30507                              (match_operand:SI 1 "arith_operand" "rI"))
30508                     (const_int 0)))]
30509             ""
30510             "...")
30512      together with a `SELECT_CC_MODE' that returns `CC_NOOVmode' for
30513      comparisons whose argument is a `plus':
30515           #define SELECT_CC_MODE(OP,X,Y) \
30516             (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
30517              ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
30518              : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
30519                  || GET_CODE (X) == NEG) \
30520                 ? CC_NOOVmode : CCmode))
30522      Another reason to use modes is to retain information on which
30523      operands were used by the comparison; see `REVERSIBLE_CC_MODE'
30524      later in this section.
30526      You should define this macro if and only if you define extra CC
30527      modes in `MACHINE-modes.def'.
30529  -- Macro: CANONICALIZE_COMPARISON (CODE, OP0, OP1)
30530      On some machines not all possible comparisons are defined, but you
30531      can convert an invalid comparison into a valid one.  For example,
30532      the Alpha does not have a `GT' comparison, but you can use an `LT'
30533      comparison instead and swap the order of the operands.
30535      On such machines, define this macro to be a C statement to do any
30536      required conversions.  CODE is the initial comparison code and OP0
30537      and OP1 are the left and right operands of the comparison,
30538      respectively.  You should modify CODE, OP0, and OP1 as required.
30540      GCC will not assume that the comparison resulting from this macro
30541      is valid but will see if the resulting insn matches a pattern in
30542      the `md' file.
30544      You need not define this macro if it would never change the
30545      comparison code or operands.
30547  -- Macro: REVERSIBLE_CC_MODE (MODE)
30548      A C expression whose value is one if it is always safe to reverse a
30549      comparison whose mode is MODE.  If `SELECT_CC_MODE' can ever
30550      return MODE for a floating-point inequality comparison, then
30551      `REVERSIBLE_CC_MODE (MODE)' must be zero.
30553      You need not define this macro if it would always returns zero or
30554      if the floating-point format is anything other than
30555      `IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
30556      the SPARC, where floating-point inequality comparisons are always
30557      given `CCFPEmode':
30559           #define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)
30561  -- Macro: REVERSE_CONDITION (CODE, MODE)
30562      A C expression whose value is reversed condition code of the CODE
30563      for comparison done in CC_MODE MODE.  The macro is used only in
30564      case `REVERSIBLE_CC_MODE (MODE)' is nonzero.  Define this macro in
30565      case machine has some non-standard way how to reverse certain
30566      conditionals.  For instance in case all floating point conditions
30567      are non-trapping, compiler may freely convert unordered compares
30568      to ordered one.  Then definition may look like:
30570           #define REVERSE_CONDITION(CODE, MODE) \
30571              ((MODE) != CCFPmode ? reverse_condition (CODE) \
30572               : reverse_condition_maybe_unordered (CODE))
30574  -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int
30575           *P1, unsigned int *P2)
30576      On targets which do not use `(cc0)', and which use a hard register
30577      rather than a pseudo-register to hold condition codes, the regular
30578      CSE passes are often not able to identify cases in which the hard
30579      register is set to a common value.  Use this hook to enable a
30580      small pass which optimizes such cases.  This hook should return
30581      true to enable this pass, and it should set the integers to which
30582      its arguments point to the hard register numbers used for
30583      condition codes.  When there is only one such register, as is true
30584      on most systems, the integer pointed to by P2 should be set to
30585      `INVALID_REGNUM'.
30587      The default version of this hook returns false.
30589  -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum
30590           machine_mode M1, enum machine_mode M2)
30591      On targets which use multiple condition code modes in class
30592      `MODE_CC', it is sometimes the case that a comparison can be
30593      validly done in more than one mode.  On such a system, define this
30594      target hook to take two mode arguments and to return a mode in
30595      which both comparisons may be validly done.  If there is no such
30596      mode, return `VOIDmode'.
30598      The default version of this hook checks whether the modes are the
30599      same.  If they are, it returns that mode.  If they are different,
30600      it returns `VOIDmode'.
30602 \x1f
30603 File: gccint.info,  Node: Cond. Exec. Macros,  Prev: MODE_CC Condition Codes,  Up: Condition Code
30605 17.16.3 Macros to control conditional execution
30606 -----------------------------------------------
30608 There is one macro that may need to be defined for targets supporting
30609 conditional execution, independent of how they represent conditional
30610 branches.
30612  -- Macro: REVERSE_CONDEXEC_PREDICATES_P (OP1, OP2)
30613      A C expression that returns true if the conditional execution
30614      predicate OP1, a comparison operation, is the inverse of OP2 and
30615      vice versa.  Define this to return 0 if the target has conditional
30616      execution predicates that cannot be reversed safely.  There is no
30617      need to validate that the arguments of op1 and op2 are the same,
30618      this is done separately.  If no expansion is specified, this macro
30619      is defined as follows:
30621           #define REVERSE_CONDEXEC_PREDICATES_P (x, y) \
30622              (GET_CODE ((x)) == reversed_comparison_code ((y), NULL))
30624 \x1f
30625 File: gccint.info,  Node: Costs,  Next: Scheduling,  Prev: Condition Code,  Up: Target Macros
30627 17.17 Describing Relative Costs of Operations
30628 =============================================
30630 These macros let you describe the relative speed of various operations
30631 on the target machine.
30633  -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
30634      A C expression for the cost of moving data of mode MODE from a
30635      register in class FROM to one in class TO.  The classes are
30636      expressed using the enumeration values such as `GENERAL_REGS'.  A
30637      value of 2 is the default; other values are interpreted relative to
30638      that.
30640      It is not required that the cost always equal 2 when FROM is the
30641      same as TO; on some machines it is expensive to move between
30642      registers if they are not general registers.
30644      If reload sees an insn consisting of a single `set' between two
30645      hard registers, and if `REGISTER_MOVE_COST' applied to their
30646      classes returns a value of 2, reload does not check to ensure that
30647      the constraints of the insn are met.  Setting a cost of other than
30648      2 will allow reload to verify that the constraints are met.  You
30649      should do this if the `movM' pattern's constraints do not allow
30650      such copying.
30652  -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN)
30653      A C expression for the cost of moving data of mode MODE between a
30654      register of class CLASS and memory; IN is zero if the value is to
30655      be written to memory, nonzero if it is to be read in.  This cost
30656      is relative to those in `REGISTER_MOVE_COST'.  If moving between
30657      registers and memory is more expensive than between two registers,
30658      you should define this macro to express the relative cost.
30660      If you do not define this macro, GCC uses a default cost of 4 plus
30661      the cost of copying via a secondary reload register, if one is
30662      needed.  If your machine requires a secondary reload register to
30663      copy between memory and a register of CLASS but the reload
30664      mechanism is more complex than copying via an intermediate, define
30665      this macro to reflect the actual cost of the move.
30667      GCC defines the function `memory_move_secondary_cost' if secondary
30668      reloads are needed.  It computes the costs due to copying via a
30669      secondary register.  If your machine copies from memory using a
30670      secondary register in the conventional way but the default base
30671      value of 4 is not correct for your machine, define this macro to
30672      add some other value to the result of that function.  The
30673      arguments to that function are the same as to this macro.
30675  -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P)
30676      A C expression for the cost of a branch instruction.  A value of 1
30677      is the default; other values are interpreted relative to that.
30678      Parameter SPEED_P is true when the branch in question should be
30679      optimized for speed.  When it is false, `BRANCH_COST' should be
30680      returning value optimal for code size rather then performance
30681      considerations.  PREDICTABLE_P is true for well predictable
30682      branches. On many architectures the `BRANCH_COST' can be reduced
30683      then.
30685  Here are additional macros which do not specify precise relative costs,
30686 but only that certain actions are more expensive than GCC would
30687 ordinarily expect.
30689  -- Macro: SLOW_BYTE_ACCESS
30690      Define this macro as a C expression which is nonzero if accessing
30691      less than a word of memory (i.e. a `char' or a `short') is no
30692      faster than accessing a word of memory, i.e., if such access
30693      require more than one instruction or if there is no difference in
30694      cost between byte and (aligned) word loads.
30696      When this macro is not defined, the compiler will access a field by
30697      finding the smallest containing object; when it is defined, a
30698      fullword load will be used if alignment permits.  Unless bytes
30699      accesses are faster than word accesses, using word accesses is
30700      preferable since it may eliminate subsequent memory access if
30701      subsequent accesses occur to other fields in the same word of the
30702      structure, but to different bytes.
30704  -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT)
30705      Define this macro to be the value 1 if memory accesses described
30706      by the MODE and ALIGNMENT parameters have a cost many times greater
30707      than aligned accesses, for example if they are emulated in a trap
30708      handler.
30710      When this macro is nonzero, the compiler will act as if
30711      `STRICT_ALIGNMENT' were nonzero when generating code for block
30712      moves.  This can cause significantly more instructions to be
30713      produced.  Therefore, do not set this macro nonzero if unaligned
30714      accesses only add a cycle or two to the time for a memory access.
30716      If the value of this macro is always zero, it need not be defined.
30717      If this macro is defined, it should produce a nonzero value when
30718      `STRICT_ALIGNMENT' is nonzero.
30720  -- Macro: MOVE_RATIO (SPEED)
30721      The threshold of number of scalar memory-to-memory move insns,
30722      _below_ which a sequence of insns should be generated instead of a
30723      string move insn or a library call.  Increasing the value will
30724      always make code faster, but eventually incurs high cost in
30725      increased code size.
30727      Note that on machines where the corresponding move insn is a
30728      `define_expand' that emits a sequence of insns, this macro counts
30729      the number of such sequences.
30731      The parameter SPEED is true if the code is currently being
30732      optimized for speed rather than size.
30734      If you don't define this, a reasonable default is used.
30736  -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT)
30737      A C expression used to determine whether `move_by_pieces' will be
30738      used to copy a chunk of memory, or whether some other block move
30739      mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
30740      returns less than `MOVE_RATIO'.
30742  -- Macro: MOVE_MAX_PIECES
30743      A C expression used by `move_by_pieces' to determine the largest
30744      unit a load or store used to copy memory is.  Defaults to
30745      `MOVE_MAX'.
30747  -- Macro: CLEAR_RATIO (SPEED)
30748      The threshold of number of scalar move insns, _below_ which a
30749      sequence of insns should be generated to clear memory instead of a
30750      string clear insn or a library call.  Increasing the value will
30751      always make code faster, but eventually incurs high cost in
30752      increased code size.
30754      The parameter SPEED is true if the code is currently being
30755      optimized for speed rather than size.
30757      If you don't define this, a reasonable default is used.
30759  -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT)
30760      A C expression used to determine whether `clear_by_pieces' will be
30761      used to clear a chunk of memory, or whether some other block clear
30762      mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
30763      returns less than `CLEAR_RATIO'.
30765  -- Macro: SET_RATIO (SPEED)
30766      The threshold of number of scalar move insns, _below_ which a
30767      sequence of insns should be generated to set memory to a constant
30768      value, instead of a block set insn or a library call.  Increasing
30769      the value will always make code faster, but eventually incurs high
30770      cost in increased code size.
30772      The parameter SPEED is true if the code is currently being
30773      optimized for speed rather than size.
30775      If you don't define this, it defaults to the value of `MOVE_RATIO'.
30777  -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT)
30778      A C expression used to determine whether `store_by_pieces' will be
30779      used to set a chunk of memory to a constant value, or whether some
30780      other mechanism will be used.  Used by `__builtin_memset' when
30781      storing values other than constant zero.  Defaults to 1 if
30782      `move_by_pieces_ninsns' returns less than `SET_RATIO'.
30784  -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT)
30785      A C expression used to determine whether `store_by_pieces' will be
30786      used to set a chunk of memory to a constant string value, or
30787      whether some other mechanism will be used.  Used by
30788      `__builtin_strcpy' when called with a constant source string.
30789      Defaults to 1 if `move_by_pieces_ninsns' returns less than
30790      `MOVE_RATIO'.
30792  -- Macro: USE_LOAD_POST_INCREMENT (MODE)
30793      A C expression used to determine whether a load postincrement is a
30794      good thing to use for a given mode.  Defaults to the value of
30795      `HAVE_POST_INCREMENT'.
30797  -- Macro: USE_LOAD_POST_DECREMENT (MODE)
30798      A C expression used to determine whether a load postdecrement is a
30799      good thing to use for a given mode.  Defaults to the value of
30800      `HAVE_POST_DECREMENT'.
30802  -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
30803      A C expression used to determine whether a load preincrement is a
30804      good thing to use for a given mode.  Defaults to the value of
30805      `HAVE_PRE_INCREMENT'.
30807  -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
30808      A C expression used to determine whether a load predecrement is a
30809      good thing to use for a given mode.  Defaults to the value of
30810      `HAVE_PRE_DECREMENT'.
30812  -- Macro: USE_STORE_POST_INCREMENT (MODE)
30813      A C expression used to determine whether a store postincrement is
30814      a good thing to use for a given mode.  Defaults to the value of
30815      `HAVE_POST_INCREMENT'.
30817  -- Macro: USE_STORE_POST_DECREMENT (MODE)
30818      A C expression used to determine whether a store postdecrement is
30819      a good thing to use for a given mode.  Defaults to the value of
30820      `HAVE_POST_DECREMENT'.
30822  -- Macro: USE_STORE_PRE_INCREMENT (MODE)
30823      This macro is used to determine whether a store preincrement is a
30824      good thing to use for a given mode.  Defaults to the value of
30825      `HAVE_PRE_INCREMENT'.
30827  -- Macro: USE_STORE_PRE_DECREMENT (MODE)
30828      This macro is used to determine whether a store predecrement is a
30829      good thing to use for a given mode.  Defaults to the value of
30830      `HAVE_PRE_DECREMENT'.
30832  -- Macro: NO_FUNCTION_CSE
30833      Define this macro if it is as good or better to call a constant
30834      function address than to call an address kept in a register.
30836  -- Macro: RANGE_TEST_NON_SHORT_CIRCUIT
30837      Define this macro if a non-short-circuit operation produced by
30838      `fold_range_test ()' is optimal.  This macro defaults to true if
30839      `BRANCH_COST' is greater than or equal to the value 2.
30841  -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int
30842           OUTER_CODE, int *TOTAL, bool SPEED)
30843      This target hook describes the relative costs of RTL expressions.
30845      The cost may depend on the precise form of the expression, which is
30846      available for examination in X, and the rtx code of the expression
30847      in which it is contained, found in OUTER_CODE.  CODE is the
30848      expression code--redundant, since it can be obtained with
30849      `GET_CODE (X)'.
30851      In implementing this hook, you can use the construct
30852      `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions.
30854      On entry to the hook, `*TOTAL' contains a default estimate for the
30855      cost of the expression.  The hook should modify this value as
30856      necessary.  Traditionally, the default costs are `COSTS_N_INSNS
30857      (5)' for multiplications, `COSTS_N_INSNS (7)' for division and
30858      modulus operations, and `COSTS_N_INSNS (1)' for all other
30859      operations.
30861      When optimizing for code size, i.e. when `speed' is false, this
30862      target hook should be used to estimate the relative size cost of
30863      an expression, again relative to `COSTS_N_INSNS'.
30865      The hook returns true when all subexpressions of X have been
30866      processed, and false when `rtx_cost' should recurse.
30868  -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, bool SPEED)
30869      This hook computes the cost of an addressing mode that contains
30870      ADDRESS.  If not defined, the cost is computed from the ADDRESS
30871      expression and the `TARGET_RTX_COST' hook.
30873      For most CISC machines, the default cost is a good approximation
30874      of the true cost of the addressing mode.  However, on RISC
30875      machines, all instructions normally have the same length and
30876      execution time.  Hence all addresses will have equal costs.
30878      In cases where more than one form of an address is known, the form
30879      with the lowest cost will be used.  If multiple forms have the
30880      same, lowest, cost, the one that is the most complex will be used.
30882      For example, suppose an address that is equal to the sum of a
30883      register and a constant is used twice in the same basic block.
30884      When this macro is not defined, the address will be computed in a
30885      register and memory references will be indirect through that
30886      register.  On machines where the cost of the addressing mode
30887      containing the sum is no higher than that of a simple indirect
30888      reference, this will produce an additional instruction and
30889      possibly require an additional register.  Proper specification of
30890      this macro eliminates this overhead for such machines.
30892      This hook is never called with an invalid address.
30894      On machines where an address involving more than one register is as
30895      cheap as an address computation involving only one register,
30896      defining `TARGET_ADDRESS_COST' to reflect this can cause two
30897      registers to be live over a region of code where only one would
30898      have been if `TARGET_ADDRESS_COST' were not defined in that
30899      manner.  This effect should be considered in the definition of
30900      this macro.  Equivalent costs should probably only be given to
30901      addresses with different numbers of registers on machines with
30902      lots of registers.
30904 \x1f
30905 File: gccint.info,  Node: Scheduling,  Next: Sections,  Prev: Costs,  Up: Target Macros
30907 17.18 Adjusting the Instruction Scheduler
30908 =========================================
30910 The instruction scheduler may need a fair amount of machine-specific
30911 adjustment in order to produce good code.  GCC provides several target
30912 hooks for this purpose.  It is usually enough to define just a few of
30913 them: try the first ones in this list first.
30915  -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void)
30916      This hook returns the maximum number of instructions that can ever
30917      issue at the same time on the target machine.  The default is one.
30918      Although the insn scheduler can define itself the possibility of
30919      issue an insn on the same cycle, the value can serve as an
30920      additional constraint to issue insns on the same simulated
30921      processor cycle (see hooks `TARGET_SCHED_REORDER' and
30922      `TARGET_SCHED_REORDER2').  This value must be constant over the
30923      entire compilation.  If you need it to vary depending on what the
30924      instructions are, you must use `TARGET_SCHED_VARIABLE_ISSUE'.
30926  -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
30927           VERBOSE, rtx INSN, int MORE)
30928      This hook is executed by the scheduler after it has scheduled an
30929      insn from the ready list.  It should return the number of insns
30930      which can still be issued in the current cycle.  The default is
30931      `MORE - 1' for insns other than `CLOBBER' and `USE', which
30932      normally are not counted against the issue rate.  You should
30933      define this hook if some insns take more machine resources than
30934      others, so that fewer insns can follow them in the same cycle.
30935      FILE is either a null pointer, or a stdio stream to write any
30936      debug output to.  VERBOSE is the verbose level provided by
30937      `-fsched-verbose-N'.  INSN is the instruction that was scheduled.
30939  -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx
30940           DEP_INSN, int COST)
30941      This function corrects the value of COST based on the relationship
30942      between INSN and DEP_INSN through the dependence LINK.  It should
30943      return the new value.  The default is to make no adjustment to
30944      COST.  This can be used for example to specify to the scheduler
30945      using the traditional pipeline description that an output- or
30946      anti-dependence does not incur the same cost as a data-dependence.
30947      If the scheduler using the automaton based pipeline description,
30948      the cost of anti-dependence is zero and the cost of
30949      output-dependence is maximum of one and the difference of latency
30950      times of the first and the second insns.  If these values are not
30951      acceptable, you could use the hook to modify them too.  See also
30952      *note Processor pipeline description::.
30954  -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int
30955           PRIORITY)
30956      This hook adjusts the integer scheduling priority PRIORITY of
30957      INSN.  It should return the new priority.  Increase the priority to
30958      execute INSN earlier, reduce the priority to execute INSN later.
30959      Do not define this hook if you do not need to adjust the
30960      scheduling priorities of insns.
30962  -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx
30963           *READY, int *N_READYP, int CLOCK)
30964      This hook is executed by the scheduler after it has scheduled the
30965      ready list, to allow the machine description to reorder it (for
30966      example to combine two small instructions together on `VLIW'
30967      machines).  FILE is either a null pointer, or a stdio stream to
30968      write any debug output to.  VERBOSE is the verbose level provided
30969      by `-fsched-verbose-N'.  READY is a pointer to the ready list of
30970      instructions that are ready to be scheduled.  N_READYP is a
30971      pointer to the number of elements in the ready list.  The scheduler
30972      reads the ready list in reverse order, starting with
30973      READY[*N_READYP - 1] and going to READY[0].  CLOCK is the timer
30974      tick of the scheduler.  You may modify the ready list and the
30975      number of ready insns.  The return value is the number of insns
30976      that can issue this cycle; normally this is just `issue_rate'.
30977      See also `TARGET_SCHED_REORDER2'.
30979  -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
30980           rtx *READY, int *N_READYP, int CLOCK)
30981      Like `TARGET_SCHED_REORDER', but called at a different time.  That
30982      function is called whenever the scheduler starts a new cycle.
30983      This one is called once per iteration over a cycle, immediately
30984      after `TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list
30985      and return the number of insns to be scheduled in the same cycle.
30986      Defining this hook can be useful if there are frequent situations
30987      where scheduling one insn causes other insns to become ready in
30988      the same cycle.  These other insns can then be taken into account
30989      properly.
30991  -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx
30992           HEAD, rtx TAIL)
30993      This hook is called after evaluation forward dependencies of insns
30994      in chain given by two parameter values (HEAD and TAIL
30995      correspondingly) but before insns scheduling of the insn chain.
30996      For example, it can be used for better insn classification if it
30997      requires analysis of dependencies.  This hook can use backward and
30998      forward dependencies of the insn scheduler because they are already
30999      calculated.
31001  -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
31002           MAX_READY)
31003      This hook is executed by the scheduler at the beginning of each
31004      block of instructions that are to be scheduled.  FILE is either a
31005      null pointer, or a stdio stream to write any debug output to.
31006      VERBOSE is the verbose level provided by `-fsched-verbose-N'.
31007      MAX_READY is the maximum number of insns in the current scheduling
31008      region that can be live at the same time.  This can be used to
31009      allocate scratch space if it is needed, e.g. by
31010      `TARGET_SCHED_REORDER'.
31012  -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
31013      This hook is executed by the scheduler at the end of each block of
31014      instructions that are to be scheduled.  It can be used to perform
31015      cleanup of any actions done by the other scheduling hooks.  FILE
31016      is either a null pointer, or a stdio stream to write any debug
31017      output to.  VERBOSE is the verbose level provided by
31018      `-fsched-verbose-N'.
31020  -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int
31021           VERBOSE, int OLD_MAX_UID)
31022      This hook is executed by the scheduler after function level
31023      initializations.  FILE is either a null pointer, or a stdio stream
31024      to write any debug output to.  VERBOSE is the verbose level
31025      provided by `-fsched-verbose-N'.  OLD_MAX_UID is the maximum insn
31026      uid when scheduling begins.
31028  -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
31029           VERBOSE)
31030      This is the cleanup hook corresponding to
31031      `TARGET_SCHED_INIT_GLOBAL'.  FILE is either a null pointer, or a
31032      stdio stream to write any debug output to.  VERBOSE is the verbose
31033      level provided by `-fsched-verbose-N'.
31035  -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
31036      The hook returns an RTL insn.  The automaton state used in the
31037      pipeline hazard recognizer is changed as if the insn were scheduled
31038      when the new simulated processor cycle starts.  Usage of the hook
31039      may simplify the automaton pipeline description for some VLIW
31040      processors.  If the hook is defined, it is used only for the
31041      automaton based pipeline description.  The default is not to
31042      change the state when the new simulated processor cycle starts.
31044  -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
31045      The hook can be used to initialize data used by the previous hook.
31047  -- Target Hook: rtx TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
31048      The hook is analogous to `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used
31049      to changed the state as if the insn were scheduled when the new
31050      simulated processor cycle finishes.
31052  -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
31053      The hook is analogous to `TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
31054      used to initialize data used by the previous hook.
31056  -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
31057      The hook to notify target that the current simulated cycle is
31058      about to finish.  The hook is analogous to
31059      `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in
31060      more complicated situations - e.g., when advancing state on a
31061      single insn is not enough.
31063  -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
31064      The hook to notify target that new simulated cycle has just
31065      started.  The hook is analogous to
31066      `TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in
31067      more complicated situations - e.g., when advancing state on a
31068      single insn is not enough.
31070  -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
31071           (void)
31072      This hook controls better choosing an insn from the ready insn
31073      queue for the DFA-based insn scheduler.  Usually the scheduler
31074      chooses the first insn from the queue.  If the hook returns a
31075      positive value, an additional scheduler code tries all
31076      permutations of `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
31077      ()' subsequent ready insns to choose an insn whose issue will
31078      result in maximal number of issued insns on the same cycle.  For
31079      the VLIW processor, the code could actually solve the problem of
31080      packing simple insns into the VLIW insn.  Of course, if the rules
31081      of VLIW packing are described in the automaton.
31083      This code also could be used for superscalar RISC processors.  Let
31084      us consider a superscalar RISC processor with 3 pipelines.  Some
31085      insns can be executed in pipelines A or B, some insns can be
31086      executed only in pipelines B or C, and one insn can be executed in
31087      pipeline B.  The processor may issue the 1st insn into A and the
31088      2nd one into B.  In this case, the 3rd insn will wait for freeing B
31089      until the next cycle.  If the scheduler issues the 3rd insn the
31090      first, the processor could issue all 3 insns per cycle.
31092      Actually this code demonstrates advantages of the automaton based
31093      pipeline hazard recognizer.  We try quickly and easy many insn
31094      schedules to choose the best one.
31096      The default is no multipass scheduling.
31098  -- Target Hook: int
31099 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx INSN)
31100      This hook controls what insns from the ready insn queue will be
31101      considered for the multipass insn scheduling.  If the hook returns
31102      zero for INSN, the insn will be not chosen to be issued.
31104      The default is that any ready insns can be chosen to be issued.
31106  -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int
31107           VERBOSE, rtx INSN, int LAST_CLOCK, int CLOCK, int *SORT_P)
31108      This hook is called by the insn scheduler before issuing INSN on
31109      cycle CLOCK.  If the hook returns nonzero, INSN is not issued on
31110      this processor cycle.  Instead, the processor cycle is advanced.
31111      If *SORT_P is zero, the insn ready queue is not sorted on the new
31112      cycle start as usually.  DUMP and VERBOSE specify the file and
31113      verbosity level to use for debugging output.  LAST_CLOCK and CLOCK
31114      are, respectively, the processor cycle on which the previous insn
31115      has been issued, and the current processor cycle.
31117  -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep
31118           *_DEP, int COST, int DISTANCE)
31119      This hook is used to define which dependences are considered
31120      costly by the target, so costly that it is not advisable to
31121      schedule the insns that are involved in the dependence too close
31122      to one another.  The parameters to this hook are as follows:  The
31123      first parameter _DEP is the dependence being evaluated.  The
31124      second parameter COST is the cost of the dependence as estimated
31125      by the scheduler, and the third parameter DISTANCE is the distance
31126      in cycles between the two insns.  The hook returns `true' if
31127      considering the distance between the two insns the dependence
31128      between them is considered costly by the target, and `false'
31129      otherwise.
31131      Defining this hook can be useful in multiple-issue out-of-order
31132      machines, where (a) it's practically hopeless to predict the
31133      actual data/resource delays, however: (b) there's a better chance
31134      to predict the actual grouping that will be formed, and (c)
31135      correctly emulating the grouping can be very important.  In such
31136      targets one may want to allow issuing dependent insns closer to
31137      one another--i.e., closer than the dependence distance;  however,
31138      not in cases of "costly dependences", which this hooks allows to
31139      define.
31141  -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void)
31142      This hook is called by the insn scheduler after emitting a new
31143      instruction to the instruction stream.  The hook notifies a target
31144      backend to extend its per instruction data structures.
31146  -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void)
31147      Return a pointer to a store large enough to hold target scheduling
31148      context.
31150  -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool
31151           CLEAN_P)
31152      Initialize store pointed to by TC to hold target scheduling
31153      context.  It CLEAN_P is true then initialize TC as if scheduler is
31154      at the beginning of the block.  Otherwise, copy the current
31155      context into TC.
31157  -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC)
31158      Copy target scheduling context pointed to by TC to the current
31159      context.
31161  -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC)
31162      Deallocate internal data in target scheduling context pointed to
31163      by TC.
31165  -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC)
31166      Deallocate a store for target scheduling context pointed to by TC.
31168  -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int
31169           REQUEST, rtx *NEW_PAT)
31170      This hook is called by the insn scheduler when INSN has only
31171      speculative dependencies and therefore can be scheduled
31172      speculatively.  The hook is used to check if the pattern of INSN
31173      has a speculative version and, in case of successful check, to
31174      generate that speculative pattern.  The hook should return 1, if
31175      the instruction has a speculative form, or -1, if it doesn't.
31176      REQUEST describes the type of requested speculation.  If the
31177      return value equals 1 then NEW_PAT is assigned the generated
31178      speculative pattern.
31180  -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (int DEP_STATUS)
31181      This hook is called by the insn scheduler during generation of
31182      recovery code for INSN.  It should return `true', if the
31183      corresponding check instruction should branch to recovery code, or
31184      `false' otherwise.
31186  -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx INSN, rtx LABEL,
31187           int MUTATE_P)
31188      This hook is called by the insn scheduler to generate a pattern
31189      for recovery check instruction.  If MUTATE_P is zero, then INSN is
31190      a speculative instruction for which the check should be generated.
31191      LABEL is either a label of a basic block, where recovery code
31192      should be emitted, or a null pointer, when requested check doesn't
31193      branch to recovery code (a simple check).  If MUTATE_P is nonzero,
31194      then a pattern for a branchy check corresponding to a simple check
31195      denoted by INSN should be generated.  In this case LABEL can't be
31196      null.
31198  -- Target Hook: bool
31199 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC (const_rtx
31200           INSN)
31201      This hook is used as a workaround for
31202      `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being
31203      called on the first instruction of the ready list.  The hook is
31204      used to discard speculative instructions that stand first in the
31205      ready list from being scheduled on the current cycle.  If the hook
31206      returns `false', INSN will not be chosen to be issued.  For
31207      non-speculative instructions, the hook should always return
31208      `true'.  For example, in the ia64 backend the hook is used to
31209      cancel data speculative insns when the ALAT table is nearly full.
31211  -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct
31212           spec_info_def *SPEC_INFO)
31213      This hook is used by the insn scheduler to find out what features
31214      should be enabled/used.  The structure *SPEC_INFO should be filled
31215      in by the target.  The structure describes speculation types that
31216      can be used in the scheduler.
31218  -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
31219      This hook is called by the swing modulo scheduler to calculate a
31220      resource-based lower bound which is based on the resources
31221      available in the machine and the resources required by each
31222      instruction.  The target backend can use G to calculate such
31223      bound.  A very simple lower bound will be used in case this hook
31224      is not implemented: the total number of instructions divided by
31225      the issue rate.
31227 \x1f
31228 File: gccint.info,  Node: Sections,  Next: PIC,  Prev: Scheduling,  Up: Target Macros
31230 17.19 Dividing the Output into Sections (Texts, Data, ...)
31231 ==========================================================
31233 An object file is divided into sections containing different types of
31234 data.  In the most common case, there are three sections: the "text
31235 section", which holds instructions and read-only data; the "data
31236 section", which holds initialized writable data; and the "bss section",
31237 which holds uninitialized data.  Some systems have other kinds of
31238 sections.
31240  `varasm.c' provides several well-known sections, such as
31241 `text_section', `data_section' and `bss_section'.  The normal way of
31242 controlling a `FOO_section' variable is to define the associated
31243 `FOO_SECTION_ASM_OP' macro, as described below.  The macros are only
31244 read once, when `varasm.c' initializes itself, so their values must be
31245 run-time constants.  They may however depend on command-line flags.
31247  _Note:_ Some run-time files, such `crtstuff.c', also make use of the
31248 `FOO_SECTION_ASM_OP' macros, and expect them to be string literals.
31250  Some assemblers require a different string to be written every time a
31251 section is selected.  If your assembler falls into this category, you
31252 should define the `TARGET_ASM_INIT_SECTIONS' hook and use
31253 `get_unnamed_section' to set up the sections.
31255  You must always create a `text_section', either by defining
31256 `TEXT_SECTION_ASM_OP' or by initializing `text_section' in
31257 `TARGET_ASM_INIT_SECTIONS'.  The same is true of `data_section' and
31258 `DATA_SECTION_ASM_OP'.  If you do not create a distinct
31259 `readonly_data_section', the default is to reuse `text_section'.
31261  All the other `varasm.c' sections are optional, and are null if the
31262 target does not provide them.
31264  -- Macro: TEXT_SECTION_ASM_OP
31265      A C expression whose value is a string, including spacing,
31266      containing the assembler operation that should precede
31267      instructions and read-only data.  Normally `"\t.text"' is right.
31269  -- Macro: HOT_TEXT_SECTION_NAME
31270      If defined, a C string constant for the name of the section
31271      containing most frequently executed functions of the program.  If
31272      not defined, GCC will provide a default definition if the target
31273      supports named sections.
31275  -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME
31276      If defined, a C string constant for the name of the section
31277      containing unlikely executed functions in the program.
31279  -- Macro: DATA_SECTION_ASM_OP
31280      A C expression whose value is a string, including spacing,
31281      containing the assembler operation to identify the following data
31282      as writable initialized data.  Normally `"\t.data"' is right.
31284  -- Macro: SDATA_SECTION_ASM_OP
31285      If defined, a C expression whose value is a string, including
31286      spacing, containing the assembler operation to identify the
31287      following data as initialized, writable small data.
31289  -- Macro: READONLY_DATA_SECTION_ASM_OP
31290      A C expression whose value is a string, including spacing,
31291      containing the assembler operation to identify the following data
31292      as read-only initialized data.
31294  -- Macro: BSS_SECTION_ASM_OP
31295      If defined, a C expression whose value is a string, including
31296      spacing, containing the assembler operation to identify the
31297      following data as uninitialized global data.  If not defined, and
31298      neither `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
31299      uninitialized global data will be output in the data section if
31300      `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
31301      used.
31303  -- Macro: SBSS_SECTION_ASM_OP
31304      If defined, a C expression whose value is a string, including
31305      spacing, containing the assembler operation to identify the
31306      following data as uninitialized, writable small data.
31308  -- Macro: TLS_COMMON_ASM_OP
31309      If defined, a C expression whose value is a string containing the
31310      assembler operation to identify the following data as thread-local
31311      common data.  The default is `".tls_common"'.
31313  -- Macro: TLS_SECTION_ASM_FLAG
31314      If defined, a C expression whose value is a character constant
31315      containing the flag used to mark a section as a TLS section.  The
31316      default is `'T''.
31318  -- Macro: INIT_SECTION_ASM_OP
31319      If defined, a C expression whose value is a string, including
31320      spacing, containing the assembler operation to identify the
31321      following data as initialization code.  If not defined, GCC will
31322      assume such a section does not exist.  This section has no
31323      corresponding `init_section' variable; it is used entirely in
31324      runtime code.
31326  -- Macro: FINI_SECTION_ASM_OP
31327      If defined, a C expression whose value is a string, including
31328      spacing, containing the assembler operation to identify the
31329      following data as finalization code.  If not defined, GCC will
31330      assume such a section does not exist.  This section has no
31331      corresponding `fini_section' variable; it is used entirely in
31332      runtime code.
31334  -- Macro: INIT_ARRAY_SECTION_ASM_OP
31335      If defined, a C expression whose value is a string, including
31336      spacing, containing the assembler operation to identify the
31337      following data as part of the `.init_array' (or equivalent)
31338      section.  If not defined, GCC will assume such a section does not
31339      exist.  Do not define both this macro and `INIT_SECTION_ASM_OP'.
31341  -- Macro: FINI_ARRAY_SECTION_ASM_OP
31342      If defined, a C expression whose value is a string, including
31343      spacing, containing the assembler operation to identify the
31344      following data as part of the `.fini_array' (or equivalent)
31345      section.  If not defined, GCC will assume such a section does not
31346      exist.  Do not define both this macro and `FINI_SECTION_ASM_OP'.
31348  -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
31349      If defined, an ASM statement that switches to a different section
31350      via SECTION_OP, calls FUNCTION, and switches back to the text
31351      section.  This is used in `crtstuff.c' if `INIT_SECTION_ASM_OP' or
31352      `FINI_SECTION_ASM_OP' to calls to initialization and finalization
31353      functions from the init and fini sections.  By default, this macro
31354      uses a simple function call.  Some ports need hand-crafted
31355      assembly code to avoid dependencies on registers initialized in
31356      the function prologue or to ensure that constant pools don't end
31357      up too far way in the text section.
31359  -- Macro: TARGET_LIBGCC_SDATA_SECTION
31360      If defined, a string which names the section into which small
31361      variables defined in crtstuff and libgcc should go.  This is useful
31362      when the target has options for optimizing access to small data,
31363      and you want the crtstuff and libgcc routines to be conservative
31364      in what they expect of your application yet liberal in what your
31365      application expects.  For example, for targets with a `.sdata'
31366      section (like MIPS), you could compile crtstuff with `-G 0' so
31367      that it doesn't require small data support from your application,
31368      but use this macro to put small data into `.sdata' so that your
31369      application can access these variables whether it uses small data
31370      or not.
31372  -- Macro: FORCE_CODE_SECTION_ALIGN
31373      If defined, an ASM statement that aligns a code section to some
31374      arbitrary boundary.  This is used to force all fragments of the
31375      `.init' and `.fini' sections to have to same alignment and thus
31376      prevent the linker from having to add any padding.
31378  -- Macro: JUMP_TABLES_IN_TEXT_SECTION
31379      Define this macro to be an expression with a nonzero value if jump
31380      tables (for `tablejump' insns) should be output in the text
31381      section, along with the assembler instructions.  Otherwise, the
31382      readonly data section is used.
31384      This macro is irrelevant if there is no separate readonly data
31385      section.
31387  -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
31388      Define this hook if you need to do something special to set up the
31389      `varasm.c' sections, or if your target has some special sections
31390      of its own that you need to create.
31392      GCC calls this hook after processing the command line, but before
31393      writing any assembly code, and before calling any of the
31394      section-returning hooks described below.
31396  -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void)
31397      Return a mask describing how relocations should be treated when
31398      selecting sections.  Bit 1 should be set if global relocations
31399      should be placed in a read-write section; bit 0 should be set if
31400      local relocations should be placed in a read-write section.
31402      The default version of this function returns 3 when `-fpic' is in
31403      effect, and 0 otherwise.  The hook is typically redefined when the
31404      target cannot support (some kinds of) dynamic relocations in
31405      read-only sections even in executables.
31407  -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
31408           RELOC, unsigned HOST_WIDE_INT ALIGN)
31409      Return the section into which EXP should be placed.  You can
31410      assume that EXP is either a `VAR_DECL' node or a constant of some
31411      sort.  RELOC indicates whether the initial value of EXP requires
31412      link-time relocations.  Bit 0 is set when variable contains local
31413      relocations only, while bit 1 is set for global relocations.
31414      ALIGN is the constant alignment in bits.
31416      The default version of this function takes care of putting
31417      read-only variables in `readonly_data_section'.
31419      See also USE_SELECT_SECTION_FOR_FUNCTIONS.
31421  -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
31422      Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
31423      called for `FUNCTION_DECL's as well as for variables and constants.
31425      In the case of a `FUNCTION_DECL', RELOC will be zero if the
31426      function has been determined to be likely to be called, and
31427      nonzero if it is unlikely to be called.
31429  -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
31430      Build up a unique section name, expressed as a `STRING_CST' node,
31431      and assign it to `DECL_SECTION_NAME (DECL)'.  As with
31432      `TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
31433      value of EXP requires link-time relocations.
31435      The default version of this function appends the symbol name to the
31436      ELF section name that would normally be used for the symbol.  For
31437      example, the function `foo' would be placed in `.text.foo'.
31438      Whatever the actual target object format, this is often good
31439      enough.
31441  -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
31442           DECL)
31443      Return the readonly data section associated with
31444      `DECL_SECTION_NAME (DECL)'.  The default version of this function
31445      selects `.gnu.linkonce.r.name' if the function's section is
31446      `.gnu.linkonce.t.name', `.rodata.name' if function is in
31447      `.text.name', and the normal readonly-data section otherwise.
31449  -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum
31450           machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
31451      Return the section into which a constant X, of mode MODE, should
31452      be placed.  You can assume that X is some kind of constant in RTL.
31453      The argument MODE is redundant except in the case of a
31454      `const_int' rtx.  ALIGN is the constant alignment in bits.
31456      The default version of this function takes care of putting symbolic
31457      constants in `flag_pic' mode in `data_section' and everything else
31458      in `readonly_data_section'.
31460  -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL,
31461           tree ID)
31462      Define this hook if you need to postprocess the assembler name
31463      generated by target-independent code.  The ID provided to this
31464      hook will be the computed name (e.g., the macro `DECL_NAME' of the
31465      DECL in C, or the mangled name of the DECL in C++).  The return
31466      value of the hook is an `IDENTIFIER_NODE' for the appropriate
31467      mangled name on your target system.  The default implementation of
31468      this hook just returns the ID provided.
31470  -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
31471           int NEW_DECL_P)
31472      Define this hook if references to a symbol or a constant must be
31473      treated differently depending on something about the variable or
31474      function named by the symbol (such as what section it is in).
31476      The hook is executed immediately after rtl has been created for
31477      DECL, which may be a variable or function declaration or an entry
31478      in the constant pool.  In either case, RTL is the rtl in question.
31479      Do _not_ use `DECL_RTL (DECL)' in this hook; that field may not
31480      have been initialized yet.
31482      In the case of a constant, it is safe to assume that the rtl is a
31483      `mem' whose address is a `symbol_ref'.  Most decls will also have
31484      this form, but that is not guaranteed.  Global register variables,
31485      for instance, will have a `reg' for their rtl.  (Normally the
31486      right thing to do with such unusual rtl is leave it alone.)
31488      The NEW_DECL_P argument will be true if this is the first time
31489      that `TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.
31490      It will be false for subsequent invocations, which will happen for
31491      duplicate declarations.  Whether or not anything must be done for
31492      the duplicate declaration depends on whether the hook examines
31493      `DECL_ATTRIBUTES'.  NEW_DECL_P is always true when the hook is
31494      called for a constant.
31496      The usual thing for this hook to do is to record flags in the
31497      `symbol_ref', using `SYMBOL_REF_FLAG' or `SYMBOL_REF_FLAGS'.
31498      Historically, the name string was modified if it was necessary to
31499      encode more than one bit of information, but this practice is now
31500      discouraged; use `SYMBOL_REF_FLAGS'.
31502      The default definition of this hook, `default_encode_section_info'
31503      in `varasm.c', sets a number of commonly-useful bits in
31504      `SYMBOL_REF_FLAGS'.  Check whether the default does what you need
31505      before overriding it.
31507  -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char
31508           *NAME)
31509      Decode NAME and return the real name part, sans the characters
31510      that `TARGET_ENCODE_SECTION_INFO' may have added.
31512  -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP)
31513      Returns true if EXP should be placed into a "small data" section.
31514      The default version of this hook always returns false.
31516  -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION
31517      Contains the value true if the target places read-only "small
31518      data" into a separate section.  The default value is false.
31520  -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP)
31521      Returns true if EXP names an object for which name resolution
31522      rules must resolve to the current "module" (dynamic shared library
31523      or executable image).
31525      The default version of this hook implements the name resolution
31526      rules for ELF, which has a looser model of global name binding
31527      than other currently supported object file formats.
31529  -- Target Hook: bool TARGET_HAVE_TLS
31530      Contains the value true if the target supports thread-local
31531      storage.  The default value is false.
31533 \x1f
31534 File: gccint.info,  Node: PIC,  Next: Assembler Format,  Prev: Sections,  Up: Target Macros
31536 17.20 Position Independent Code
31537 ===============================
31539 This section describes macros that help implement generation of position
31540 independent code.  Simply defining these macros is not enough to
31541 generate valid PIC; you must also add support to the hook
31542 `TARGET_LEGITIMATE_ADDRESS_P' and to the macro `PRINT_OPERAND_ADDRESS',
31543 as well as `LEGITIMIZE_ADDRESS'.  You must modify the definition of
31544 `movsi' to do something appropriate when the source operand contains a
31545 symbolic address.  You may also need to alter the handling of switch
31546 statements so that they use relative addresses.
31548  -- Macro: PIC_OFFSET_TABLE_REGNUM
31549      The register number of the register used to address a table of
31550      static data addresses in memory.  In some cases this register is
31551      defined by a processor's "application binary interface" (ABI).
31552      When this macro is defined, RTL is generated for this register
31553      once, as with the stack pointer and frame pointer registers.  If
31554      this macro is not defined, it is up to the machine-dependent files
31555      to allocate such a register (if necessary).  Note that this
31556      register must be fixed when in use (e.g.  when `flag_pic' is true).
31558  -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
31559      Define this macro if the register defined by
31560      `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  Do not define
31561      this macro if `PIC_OFFSET_TABLE_REGNUM' is not defined.
31563  -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
31564      A C expression that is nonzero if X is a legitimate immediate
31565      operand on the target machine when generating position independent
31566      code.  You can assume that X satisfies `CONSTANT_P', so you need
31567      not check this.  You can also assume FLAG_PIC is true, so you need
31568      not check it either.  You need not define this macro if all
31569      constants (including `SYMBOL_REF') can be immediate operands when
31570      generating position independent code.
31572 \x1f
31573 File: gccint.info,  Node: Assembler Format,  Next: Debugging Info,  Prev: PIC,  Up: Target Macros
31575 17.21 Defining the Output Assembler Language
31576 ============================================
31578 This section describes macros whose principal purpose is to describe how
31579 to write instructions in assembler language--rather than what the
31580 instructions do.
31582 * Menu:
31584 * File Framework::       Structural information for the assembler file.
31585 * Data Output::          Output of constants (numbers, strings, addresses).
31586 * Uninitialized Data::   Output of uninitialized variables.
31587 * Label Output::         Output and generation of labels.
31588 * Initialization::       General principles of initialization
31589                          and termination routines.
31590 * Macros for Initialization::
31591                          Specific macros that control the handling of
31592                          initialization and termination routines.
31593 * Instruction Output::   Output of actual instructions.
31594 * Dispatch Tables::      Output of jump tables.
31595 * Exception Region Output:: Output of exception region code.
31596 * Alignment Output::     Pseudo ops for alignment and skipping data.
31598 \x1f
31599 File: gccint.info,  Node: File Framework,  Next: Data Output,  Up: Assembler Format
31601 17.21.1 The Overall Framework of an Assembler File
31602 --------------------------------------------------
31604 This describes the overall framework of an assembly file.
31606  -- Target Hook: void TARGET_ASM_FILE_START (void)
31607      Output to `asm_out_file' any text which the assembler expects to
31608      find at the beginning of a file.  The default behavior is
31609      controlled by two flags, documented below.  Unless your target's
31610      assembler is quite unusual, if you override the default, you
31611      should call `default_file_start' at some point in your target
31612      hook.  This lets other target files rely on these variables.
31614  -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
31615      If this flag is true, the text of the macro `ASM_APP_OFF' will be
31616      printed as the very first line in the assembly file, unless
31617      `-fverbose-asm' is in effect.  (If that macro has been defined to
31618      the empty string, this variable has no effect.)  With the normal
31619      definition of `ASM_APP_OFF', the effect is to notify the GNU
31620      assembler that it need not bother stripping comments or extra
31621      whitespace from its input.  This allows it to work a bit faster.
31623      The default is false.  You should not set it to true unless you
31624      have verified that your port does not generate any extra
31625      whitespace or comments that will cause GAS to issue errors in
31626      NO_APP mode.
31628  -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
31629      If this flag is true, `output_file_directive' will be called for
31630      the primary source file, immediately after printing `ASM_APP_OFF'
31631      (if that is enabled).  Most ELF assemblers expect this to be done.
31632      The default is false.
31634  -- Target Hook: void TARGET_ASM_FILE_END (void)
31635      Output to `asm_out_file' any text which the assembler expects to
31636      find at the end of a file.  The default is to output nothing.
31638  -- Function: void file_end_indicate_exec_stack ()
31639      Some systems use a common convention, the `.note.GNU-stack'
31640      special section, to indicate whether or not an object file relies
31641      on the stack being executable.  If your system uses this
31642      convention, you should define `TARGET_ASM_FILE_END' to this
31643      function.  If you need to do other things in that hook, have your
31644      hook function call this function.
31646  -- Target Hook: void TARGET_ASM_LTO_START (void)
31647      Output to `asm_out_file' any text which the assembler expects to
31648      find at the start of an LTO section.  The default is to output
31649      nothing.
31651  -- Target Hook: void TARGET_ASM_LTO_END (void)
31652      Output to `asm_out_file' any text which the assembler expects to
31653      find at the end of an LTO section.  The default is to output
31654      nothing.
31656  -- Target Hook: void TARGET_ASM_CODE_END (void)
31657      Output to `asm_out_file' any text which is needed before emitting
31658      unwind info and debug info at the end of a file.  Some targets emit
31659      here PIC setup thunks that cannot be emitted at the end of file,
31660      because they couldn't have unwind info then.  The default is to
31661      output nothing.
31663  -- Macro: ASM_COMMENT_START
31664      A C string constant describing how to begin a comment in the target
31665      assembler language.  The compiler assumes that the comment will
31666      end at the end of the line.
31668  -- Macro: ASM_APP_ON
31669      A C string constant for text to be output before each `asm'
31670      statement or group of consecutive ones.  Normally this is
31671      `"#APP"', which is a comment that has no effect on most assemblers
31672      but tells the GNU assembler that it must check the lines that
31673      follow for all valid assembler constructs.
31675  -- Macro: ASM_APP_OFF
31676      A C string constant for text to be output after each `asm'
31677      statement or group of consecutive ones.  Normally this is
31678      `"#NO_APP"', which tells the GNU assembler to resume making the
31679      time-saving assumptions that are valid for ordinary compiler
31680      output.
31682  -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)
31683      A C statement to output COFF information or DWARF debugging
31684      information which indicates that filename NAME is the current
31685      source file to the stdio stream STREAM.
31687      This macro need not be defined if the standard form of output for
31688      the file format in use is appropriate.
31690  -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
31691      A C statement to output the string STRING to the stdio stream
31692      STREAM.  If you do not call the function `output_quoted_string' in
31693      your config files, GCC will only call it to output filenames to
31694      the assembler source.  So you can use it to canonicalize the format
31695      of the filename using this macro.
31697  -- Macro: ASM_OUTPUT_IDENT (STREAM, STRING)
31698      A C statement to output something to the assembler file to handle a
31699      `#ident' directive containing the text STRING.  If this macro is
31700      not defined, nothing is output for a `#ident' directive.
31702  -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME,
31703           unsigned int FLAGS, tree DECL)
31704      Output assembly directives to switch to section NAME.  The section
31705      should have attributes as specified by FLAGS, which is a bit mask
31706      of the `SECTION_*' flags defined in `output.h'.  If DECL is
31707      non-NULL, it is the `VAR_DECL' or `FUNCTION_DECL' with which this
31708      section is associated.
31710  -- Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
31711      This flag is true if the target supports
31712      `TARGET_ASM_NAMED_SECTION'.
31714  -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
31715      This flag is true if we can create zeroed data by switching to a
31716      BSS section and then using `ASM_OUTPUT_SKIP' to allocate the space.
31717      This is true on most ELF targets.
31719  -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
31720           const char *NAME, int RELOC)
31721      Choose a set of section attributes for use by
31722      `TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a
31723      section name, and whether or not the declaration's initializer may
31724      contain runtime relocations.  DECL may be null, in which case
31725      read-write data should be assumed.
31727      The default version of this function handles choosing code vs data,
31728      read-only vs read-write data, and `flag_pic'.  You should only
31729      need to override this if your target has special flags that might
31730      be set via `__attribute__'.
31732  -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type
31733           TYPE, const char *TEXT)
31734      Provides the target with the ability to record the gcc command line
31735      switches that have been passed to the compiler, and options that
31736      are enabled.  The TYPE argument specifies what is being recorded.
31737      It can take the following values:
31739     `SWITCH_TYPE_PASSED'
31740           TEXT is a command line switch that has been set by the user.
31742     `SWITCH_TYPE_ENABLED'
31743           TEXT is an option which has been enabled.  This might be as a
31744           direct result of a command line switch, or because it is
31745           enabled by default or because it has been enabled as a side
31746           effect of a different command line switch.  For example, the
31747           `-O2' switch enables various different individual
31748           optimization passes.
31750     `SWITCH_TYPE_DESCRIPTIVE'
31751           TEXT is either NULL or some descriptive text which should be
31752           ignored.  If TEXT is NULL then it is being used to warn the
31753           target hook that either recording is starting or ending.  The
31754           first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL,
31755           the warning is for start up and the second time the warning
31756           is for wind down.  This feature is to allow the target hook
31757           to make any necessary preparations before it starts to record
31758           switches and to perform any necessary tidying up after it has
31759           finished recording switches.
31761     `SWITCH_TYPE_LINE_START'
31762           This option can be ignored by this target hook.
31764     `SWITCH_TYPE_LINE_END'
31765           This option can be ignored by this target hook.
31767      The hook's return value must be zero.  Other return values may be
31768      supported in the future.
31770      By default this hook is set to NULL, but an example implementation
31771      is provided for ELF based targets.  Called ELF_RECORD_GCC_SWITCHES,
31772      it records the switches as ASCII text inside a new, string
31773      mergeable section in the assembler output file.  The name of the
31774      new section is provided by the
31775      `TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook.
31777  -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
31778      This is the name of the section that will be created by the example
31779      ELF implementation of the `TARGET_ASM_RECORD_GCC_SWITCHES' target
31780      hook.
31782 \x1f
31783 File: gccint.info,  Node: Data Output,  Next: Uninitialized Data,  Prev: File Framework,  Up: Assembler Format
31785 17.21.2 Output of Data
31786 ----------------------
31788  -- Target Hook: const char * TARGET_ASM_BYTE_OP
31789  -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP
31790  -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP
31791  -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP
31792  -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP
31793  -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP
31794  -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP
31795  -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP
31796  -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
31797      These hooks specify assembly directives for creating certain kinds
31798      of integer object.  The `TARGET_ASM_BYTE_OP' directive creates a
31799      byte-sized object, the `TARGET_ASM_ALIGNED_HI_OP' one creates an
31800      aligned two-byte object, and so on.  Any of the hooks may be
31801      `NULL', indicating that no suitable directive is available.
31803      The compiler will print these strings at the start of a new line,
31804      followed immediately by the object's initial value.  In most cases,
31805      the string should contain a tab, a pseudo-op, and then another tab.
31807  -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
31808           ALIGNED_P)
31809      The `assemble_integer' function uses this hook to output an
31810      integer object.  X is the object's value, SIZE is its size in
31811      bytes and ALIGNED_P indicates whether it is aligned.  The function
31812      should return `true' if it was able to output the object.  If it
31813      returns false, `assemble_integer' will try to split the object
31814      into smaller parts.
31816      The default implementation of this hook will use the
31817      `TARGET_ASM_BYTE_OP' family of strings, returning `false' when the
31818      relevant string is `NULL'.
31820  -- Macro: OUTPUT_ADDR_CONST_EXTRA (STREAM, X, FAIL)
31821      A C statement to recognize RTX patterns that `output_addr_const'
31822      can't deal with, and output assembly code to STREAM corresponding
31823      to the pattern X.  This may be used to allow machine-dependent
31824      `UNSPEC's to appear within constants.
31826      If `OUTPUT_ADDR_CONST_EXTRA' fails to recognize a pattern, it must
31827      `goto fail', so that a standard error message is printed.  If it
31828      prints an error message itself, by calling, for example,
31829      `output_operand_lossage', it may just complete normally.
31831  -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
31832      A C statement to output to the stdio stream STREAM an assembler
31833      instruction to assemble a string constant containing the LEN bytes
31834      at PTR.  PTR will be a C expression of type `char *' and LEN a C
31835      expression of type `int'.
31837      If the assembler has a `.ascii' pseudo-op as found in the Berkeley
31838      Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'.
31840  -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
31841      A C statement to output word N of a function descriptor for DECL.
31842      This must be defined if `TARGET_VTABLE_USES_DESCRIPTORS' is
31843      defined, and is otherwise unused.
31845  -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
31846      You may define this macro as a C expression.  You should define the
31847      expression to have a nonzero value if GCC should output the
31848      constant pool for a function before the code for the function, or
31849      a zero value if GCC should output the constant pool after the
31850      function.  If you do not define this macro, the usual case, GCC
31851      will output the constant pool before the function.
31853  -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE)
31854      A C statement to output assembler commands to define the start of
31855      the constant pool for a function.  FUNNAME is a string giving the
31856      name of the function.  Should the return type of the function be
31857      required, it can be obtained via FUNDECL.  SIZE is the size, in
31858      bytes, of the constant pool that will be written immediately after
31859      this call.
31861      If no constant-pool prefix is required, the usual case, this macro
31862      need not be defined.
31864  -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN,
31865           LABELNO, JUMPTO)
31866      A C statement (with or without semicolon) to output a constant in
31867      the constant pool, if it needs special treatment.  (This macro
31868      need not do anything for RTL expressions that can be output
31869      normally.)
31871      The argument FILE is the standard I/O stream to output the
31872      assembler code on.  X is the RTL expression for the constant to
31873      output, and MODE is the machine mode (in case X is a `const_int').
31874      ALIGN is the required alignment for the value X; you should
31875      output an assembler directive to force this much alignment.
31877      The argument LABELNO is a number to use in an internal label for
31878      the address of this pool entry.  The definition of this macro is
31879      responsible for outputting the label definition at the proper
31880      place.  Here is how to do this:
31882           `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO);
31884      When you output a pool entry specially, you should end with a
31885      `goto' to the label JUMPTO.  This will prevent the same pool entry
31886      from being output a second time in the usual manner.
31888      You need not define this macro if it would do nothing.
31890  -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE)
31891      A C statement to output assembler commands to at the end of the
31892      constant pool for a function.  FUNNAME is a string giving the name
31893      of the function.  Should the return type of the function be
31894      required, you can obtain it via FUNDECL.  SIZE is the size, in
31895      bytes, of the constant pool that GCC wrote immediately before this
31896      call.
31898      If no constant-pool epilogue is required, the usual case, you need
31899      not define this macro.
31901  -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR)
31902      Define this macro as a C expression which is nonzero if C is used
31903      as a logical line separator by the assembler.  STR points to the
31904      position in the string where C was found; this can be used if a
31905      line separator uses multiple characters.
31907      If you do not define this macro, the default is that only the
31908      character `;' is treated as a logical line separator.
31910  -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
31911  -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
31912      These target hooks are C string constants, describing the syntax
31913      in the assembler for grouping arithmetic expressions.  If not
31914      overridden, they default to normal parentheses, which is correct
31915      for most assemblers.
31917  These macros are provided by `real.h' for writing the definitions of
31918 `ASM_OUTPUT_DOUBLE' and the like:
31920  -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
31921  -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
31922  -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)
31923  -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
31924  -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
31925  -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
31926      These translate X, of type `REAL_VALUE_TYPE', to the target's
31927      floating point representation, and store its bit pattern in the
31928      variable L.  For `REAL_VALUE_TO_TARGET_SINGLE' and
31929      `REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple
31930      `long int'.  For the others, it should be an array of `long int'.
31931      The number of elements in this array is determined by the size of
31932      the desired target floating point data type: 32 bits of it go in
31933      each `long int' array element.  Each array element holds 32 bits
31934      of the result, even if `long int' is wider than 32 bits on the
31935      host machine.
31937      The array element values are designed so that you can print them
31938      out using `fprintf' in the order they should appear in the target
31939      machine's memory.
31941 \x1f
31942 File: gccint.info,  Node: Uninitialized Data,  Next: Label Output,  Prev: Data Output,  Up: Assembler Format
31944 17.21.3 Output of Uninitialized Variables
31945 -----------------------------------------
31947 Each of the macros in this section is used to do the whole job of
31948 outputting a single uninitialized variable.
31950  -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)
31951      A C statement (sans semicolon) to output to the stdio stream
31952      STREAM the assembler definition of a common-label named NAME whose
31953      size is SIZE bytes.  The variable ROUNDED is the size rounded up
31954      to whatever alignment the caller wants.  It is possible that SIZE
31955      may be zero, for instance if a struct with no other member than a
31956      zero-length array is defined.  In this case, the backend must
31957      output a symbol definition that allocates at least one byte, both
31958      so that the address of the resulting object does not compare equal
31959      to any other, and because some object formats cannot even express
31960      the concept of a zero-sized common symbol, as that is how they
31961      represent an ordinary undefined external.
31963      Use the expression `assemble_name (STREAM, NAME)' to output the
31964      name itself; before and after that, output the additional
31965      assembler syntax for defining the name, and a newline.
31967      This macro controls how the assembler definitions of uninitialized
31968      common global variables are output.
31970  -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
31971      Like `ASM_OUTPUT_COMMON' except takes the required alignment as a
31972      separate, explicit argument.  If you define this macro, it is used
31973      in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in
31974      handling the required alignment of the variable.  The alignment is
31975      specified as the number of bits.
31977  -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
31978           ALIGNMENT)
31979      Like `ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
31980      to be output, if there is one, or `NULL_TREE' if there is no
31981      corresponding variable.  If you define this macro, GCC will use it
31982      in place of both `ASM_OUTPUT_COMMON' and
31983      `ASM_OUTPUT_ALIGNED_COMMON'.  Define this macro when you need to
31984      see the variable's decl in order to chose what to output.
31986  -- Macro: ASM_OUTPUT_BSS (STREAM, DECL, NAME, SIZE, ROUNDED)
31987      A C statement (sans semicolon) to output to the stdio stream
31988      STREAM the assembler definition of uninitialized global DECL named
31989      NAME whose size is SIZE bytes.  The variable ROUNDED is the size
31990      rounded up to whatever alignment the caller wants.
31992      Try to use function `asm_output_bss' defined in `varasm.c' when
31993      defining this macro.  If unable, use the expression `assemble_name
31994      (STREAM, NAME)' to output the name itself; before and after that,
31995      output the additional assembler syntax for defining the name, and
31996      a newline.
31998      There are two ways of handling global BSS.  One is to define either
31999      this macro or its aligned counterpart, `ASM_OUTPUT_ALIGNED_BSS'.
32000      The other is to have `TARGET_ASM_SELECT_SECTION' return a
32001      switchable BSS section (*note
32002      TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::).  You do not need to do
32003      both.
32005      Some languages do not have `common' data, and require a non-common
32006      form of global BSS in order to handle uninitialized globals
32007      efficiently.  C++ is one example of this.  However, if the target
32008      does not support global BSS, the front end may choose to make
32009      globals common in order to save space in the object file.
32011  -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
32012      Like `ASM_OUTPUT_BSS' except takes the required alignment as a
32013      separate, explicit argument.  If you define this macro, it is used
32014      in place of `ASM_OUTPUT_BSS', and gives you more flexibility in
32015      handling the required alignment of the variable.  The alignment is
32016      specified as the number of bits.
32018      Try to use function `asm_output_aligned_bss' defined in file
32019      `varasm.c' when defining this macro.
32021  -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)
32022      A C statement (sans semicolon) to output to the stdio stream
32023      STREAM the assembler definition of a local-common-label named NAME
32024      whose size is SIZE bytes.  The variable ROUNDED is the size
32025      rounded up to whatever alignment the caller wants.
32027      Use the expression `assemble_name (STREAM, NAME)' to output the
32028      name itself; before and after that, output the additional
32029      assembler syntax for defining the name, and a newline.
32031      This macro controls how the assembler definitions of uninitialized
32032      static variables are output.
32034  -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
32035      Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a
32036      separate, explicit argument.  If you define this macro, it is used
32037      in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in
32038      handling the required alignment of the variable.  The alignment is
32039      specified as the number of bits.
32041  -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
32042           ALIGNMENT)
32043      Like `ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to
32044      be output, if there is one, or `NULL_TREE' if there is no
32045      corresponding variable.  If you define this macro, GCC will use it
32046      in place of both `ASM_OUTPUT_DECL' and `ASM_OUTPUT_ALIGNED_DECL'.
32047      Define this macro when you need to see the variable's decl in
32048      order to chose what to output.
32050 \x1f
32051 File: gccint.info,  Node: Label Output,  Next: Initialization,  Prev: Uninitialized Data,  Up: Assembler Format
32053 17.21.4 Output and Generation of Labels
32054 ---------------------------------------
32056 This is about outputting labels.
32058  -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
32059      A C statement (sans semicolon) to output to the stdio stream
32060      STREAM the assembler definition of a label named NAME.  Use the
32061      expression `assemble_name (STREAM, NAME)' to output the name
32062      itself; before and after that, output the additional assembler
32063      syntax for defining the name, and a newline.  A default definition
32064      of this macro is provided which is correct for most systems.
32066  -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
32067      Identical to `ASM_OUTPUT_LABEL', except that NAME is known to
32068      refer to a compiler-generated label.  The default definition uses
32069      `assemble_name_raw', which is like `assemble_name' except that it
32070      is more efficient.
32072  -- Macro: SIZE_ASM_OP
32073      A C string containing the appropriate assembler directive to
32074      specify the size of a symbol, without any arguments.  On systems
32075      that use ELF, the default (in `config/elfos.h') is `"\t.size\t"';
32076      on other systems, the default is not to define this macro.
32078      Define this macro only if it is correct to use the default
32079      definitions of `ASM_OUTPUT_SIZE_DIRECTIVE' and
32080      `ASM_OUTPUT_MEASURED_SIZE' for your system.  If you need your own
32081      custom definitions of those macros, or if you do not need explicit
32082      symbol sizes at all, do not define this macro.
32084  -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
32085      A C statement (sans semicolon) to output to the stdio stream
32086      STREAM a directive telling the assembler that the size of the
32087      symbol NAME is SIZE.  SIZE is a `HOST_WIDE_INT'.  If you define
32088      `SIZE_ASM_OP', a default definition of this macro is provided.
32090  -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
32091      A C statement (sans semicolon) to output to the stdio stream
32092      STREAM a directive telling the assembler to calculate the size of
32093      the symbol NAME by subtracting its address from the current
32094      address.
32096      If you define `SIZE_ASM_OP', a default definition of this macro is
32097      provided.  The default assumes that the assembler recognizes a
32098      special `.' symbol as referring to the current address, and can
32099      calculate the difference between this and another symbol.  If your
32100      assembler does not recognize `.' or cannot do calculations with
32101      it, you will need to redefine `ASM_OUTPUT_MEASURED_SIZE' to use
32102      some other technique.
32104  -- Macro: TYPE_ASM_OP
32105      A C string containing the appropriate assembler directive to
32106      specify the type of a symbol, without any arguments.  On systems
32107      that use ELF, the default (in `config/elfos.h') is `"\t.type\t"';
32108      on other systems, the default is not to define this macro.
32110      Define this macro only if it is correct to use the default
32111      definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
32112      need your own custom definition of this macro, or if you do not
32113      need explicit symbol types at all, do not define this macro.
32115  -- Macro: TYPE_OPERAND_FMT
32116      A C string which specifies (using `printf' syntax) the format of
32117      the second operand to `TYPE_ASM_OP'.  On systems that use ELF, the
32118      default (in `config/elfos.h') is `"@%s"'; on other systems, the
32119      default is not to define this macro.
32121      Define this macro only if it is correct to use the default
32122      definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
32123      need your own custom definition of this macro, or if you do not
32124      need explicit symbol types at all, do not define this macro.
32126  -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE)
32127      A C statement (sans semicolon) to output to the stdio stream
32128      STREAM a directive telling the assembler that the type of the
32129      symbol NAME is TYPE.  TYPE is a C string; currently, that string
32130      is always either `"function"' or `"object"', but you should not
32131      count on this.
32133      If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default
32134      definition of this macro is provided.
32136  -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
32137      A C statement (sans semicolon) to output to the stdio stream
32138      STREAM any text necessary for declaring the name NAME of a
32139      function which is being defined.  This macro is responsible for
32140      outputting the label definition (perhaps using
32141      `ASM_OUTPUT_LABEL').  The argument DECL is the `FUNCTION_DECL'
32142      tree node representing the function.
32144      If this macro is not defined, then the function name is defined in
32145      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
32147      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
32148      of this macro.
32150  -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
32151      A C statement (sans semicolon) to output to the stdio stream
32152      STREAM any text necessary for declaring the size of a function
32153      which is being defined.  The argument NAME is the name of the
32154      function.  The argument DECL is the `FUNCTION_DECL' tree node
32155      representing the function.
32157      If this macro is not defined, then the function size is not
32158      defined.
32160      You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition
32161      of this macro.
32163  -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
32164      A C statement (sans semicolon) to output to the stdio stream
32165      STREAM any text necessary for declaring the name NAME of an
32166      initialized variable which is being defined.  This macro must
32167      output the label definition (perhaps using `ASM_OUTPUT_LABEL').
32168      The argument DECL is the `VAR_DECL' tree node representing the
32169      variable.
32171      If this macro is not defined, then the variable name is defined in
32172      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
32174      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or
32175      `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
32177  -- Macro: ASM_DECLARE_CONSTANT_NAME (STREAM, NAME, EXP, SIZE)
32178      A C statement (sans semicolon) to output to the stdio stream
32179      STREAM any text necessary for declaring the name NAME of a
32180      constant which is being defined.  This macro is responsible for
32181      outputting the label definition (perhaps using
32182      `ASM_OUTPUT_LABEL').  The argument EXP is the value of the
32183      constant, and SIZE is the size of the constant in bytes.  NAME
32184      will be an internal label.
32186      If this macro is not defined, then the NAME is defined in the
32187      usual manner as a label (by means of `ASM_OUTPUT_LABEL').
32189      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
32190      of this macro.
32192  -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
32193      A C statement (sans semicolon) to output to the stdio stream
32194      STREAM any text necessary for claiming a register REGNO for a
32195      global variable DECL with name NAME.
32197      If you don't define this macro, that is equivalent to defining it
32198      to do nothing.
32200  -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)
32201      A C statement (sans semicolon) to finish up declaring a variable
32202      name once the compiler has processed its initializer fully and
32203      thus has had a chance to determine the size of an array when
32204      controlled by an initializer.  This is used on systems where it's
32205      necessary to declare something about the size of the object.
32207      If you don't define this macro, that is equivalent to defining it
32208      to do nothing.
32210      You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or
32211      `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
32213  -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
32214           char *NAME)
32215      This target hook is a function to output to the stdio stream
32216      STREAM some commands that will make the label NAME global; that
32217      is, available for reference from other files.
32219      The default implementation relies on a proper definition of
32220      `GLOBAL_ASM_OP'.
32222  -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM,
32223           tree DECL)
32224      This target hook is a function to output to the stdio stream
32225      STREAM some commands that will make the name associated with DECL
32226      global; that is, available for reference from other files.
32228      The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL
32229      target hook.
32231  -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME)
32232      A C statement (sans semicolon) to output to the stdio stream
32233      STREAM some commands that will make the label NAME weak; that is,
32234      available for reference from other files but only used if no other
32235      definition is available.  Use the expression `assemble_name
32236      (STREAM, NAME)' to output the name itself; before and after that,
32237      output the additional assembler syntax for making that name weak,
32238      and a newline.
32240      If you don't define this macro or `ASM_WEAKEN_DECL', GCC will not
32241      support weak symbols and you should not define the `SUPPORTS_WEAK'
32242      macro.
32244  -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
32245      Combines (and replaces) the function of `ASM_WEAKEN_LABEL' and
32246      `ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
32247      or variable decl.  If VALUE is not `NULL', this C statement should
32248      output to the stdio stream STREAM assembler code which defines
32249      (equates) the weak symbol NAME to have the value VALUE.  If VALUE
32250      is `NULL', it should output commands to make NAME weak.
32252  -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
32253      Outputs a directive that enables NAME to be used to refer to
32254      symbol VALUE with weak-symbol semantics.  `decl' is the
32255      declaration of `name'.
32257  -- Macro: SUPPORTS_WEAK
32258      A C expression which evaluates to true if the target supports weak
32259      symbols.
32261      If you don't define this macro, `defaults.h' provides a default
32262      definition.  If either `ASM_WEAKEN_LABEL' or `ASM_WEAKEN_DECL' is
32263      defined, the default definition is `1'; otherwise, it is `0'.
32264      Define this macro if you want to control weak symbol support with
32265      a compiler flag such as `-melf'.
32267  -- Macro: MAKE_DECL_ONE_ONLY (DECL)
32268      A C statement (sans semicolon) to mark DECL to be emitted as a
32269      public symbol such that extra copies in multiple translation units
32270      will be discarded by the linker.  Define this macro if your object
32271      file format provides support for this concept, such as the `COMDAT'
32272      section flags in the Microsoft Windows PE/COFF format, and this
32273      support requires changes to DECL, such as putting it in a separate
32274      section.
32276  -- Macro: SUPPORTS_ONE_ONLY
32277      A C expression which evaluates to true if the target supports
32278      one-only semantics.
32280      If you don't define this macro, `varasm.c' provides a default
32281      definition.  If `MAKE_DECL_ONE_ONLY' is defined, the default
32282      definition is `1'; otherwise, it is `0'.  Define this macro if you
32283      want to control one-only symbol support with a compiler flag, or if
32284      setting the `DECL_ONE_ONLY' flag is enough to mark a declaration to
32285      be emitted as one-only.
32287  -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int
32288           VISIBILITY)
32289      This target hook is a function to output to ASM_OUT_FILE some
32290      commands that will make the symbol(s) associated with DECL have
32291      hidden, protected or internal visibility as specified by
32292      VISIBILITY.
32294  -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
32295      A C expression that evaluates to true if the target's linker
32296      expects that weak symbols do not appear in a static archive's
32297      table of contents.  The default is `0'.
32299      Leaving weak symbols out of an archive's table of contents means
32300      that, if a symbol will only have a definition in one translation
32301      unit and will have undefined references from other translation
32302      units, that symbol should not be weak.  Defining this macro to be
32303      nonzero will thus have the effect that certain symbols that would
32304      normally be weak (explicit template instantiations, and vtables
32305      for polymorphic classes with noninline key methods) will instead
32306      be nonweak.
32308      The C++ ABI requires this macro to be zero.  Define this macro for
32309      targets where full C++ ABI compliance is impossible and where
32310      linker restrictions require weak symbols to be left out of a
32311      static archive's table of contents.
32313  -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)
32314      A C statement (sans semicolon) to output to the stdio stream
32315      STREAM any text necessary for declaring the name of an external
32316      symbol named NAME which is referenced in this compilation but not
32317      defined.  The value of DECL is the tree node for the declaration.
32319      This macro need not be defined if it does not need to output
32320      anything.  The GNU assembler and most Unix assemblers don't
32321      require anything.
32323  -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF)
32324      This target hook is a function to output to ASM_OUT_FILE an
32325      assembler pseudo-op to declare a library function name external.
32326      The name of the library function is given by SYMREF, which is a
32327      `symbol_ref'.
32329  -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char
32330           *SYMBOL)
32331      This target hook is a function to output to ASM_OUT_FILE an
32332      assembler directive to annotate SYMBOL as used.  The Darwin target
32333      uses the .no_dead_code_strip directive.
32335  -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
32336      A C statement (sans semicolon) to output to the stdio stream
32337      STREAM a reference in assembler syntax to a label named NAME.
32338      This should add `_' to the front of the name, if that is customary
32339      on your operating system, as it is in most Berkeley Unix systems.
32340      This macro is used in `assemble_name'.
32342  -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
32343      A C statement (sans semicolon) to output a reference to
32344      `SYMBOL_REF' SYM.  If not defined, `assemble_name' will be used to
32345      output the name of the symbol.  This macro may be used to modify
32346      the way a symbol is referenced depending on information encoded by
32347      `TARGET_ENCODE_SECTION_INFO'.
32349  -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
32350      A C statement (sans semicolon) to output a reference to BUF, the
32351      result of `ASM_GENERATE_INTERNAL_LABEL'.  If not defined,
32352      `assemble_name' will be used to output the name of the symbol.
32353      This macro is not used by `output_asm_label', or the `%l'
32354      specifier that calls it; the intention is that this macro should
32355      be set when it is necessary to output a label differently when its
32356      address is being taken.
32358  -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const
32359           char *PREFIX, unsigned long LABELNO)
32360      A function to output to the stdio stream STREAM a label whose name
32361      is made from the string PREFIX and the number LABELNO.
32363      It is absolutely essential that these labels be distinct from the
32364      labels used for user-level functions and variables.  Otherwise,
32365      certain programs will have name conflicts with internal labels.
32367      It is desirable to exclude internal labels from the symbol table
32368      of the object file.  Most assemblers have a naming convention for
32369      labels that should be excluded; on many systems, the letter `L' at
32370      the beginning of a label has this effect.  You should find out what
32371      convention your system uses, and follow it.
32373      The default version of this function utilizes
32374      `ASM_GENERATE_INTERNAL_LABEL'.
32376  -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
32377      A C statement to output to the stdio stream STREAM a debug info
32378      label whose name is made from the string PREFIX and the number
32379      NUM.  This is useful for VLIW targets, where debug info labels may
32380      need to be treated differently than branch target labels.  On some
32381      systems, branch target labels must be at the beginning of
32382      instruction bundles, but debug info labels can occur in the middle
32383      of instruction bundles.
32385      If this macro is not defined, then
32386      `(*targetm.asm_out.internal_label)' will be used.
32388  -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
32389      A C statement to store into the string STRING a label whose name
32390      is made from the string PREFIX and the number NUM.
32392      This string, when output subsequently by `assemble_name', should
32393      produce the output that `(*targetm.asm_out.internal_label)' would
32394      produce with the same PREFIX and NUM.
32396      If the string begins with `*', then `assemble_name' will output
32397      the rest of the string unchanged.  It is often convenient for
32398      `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way.  If the
32399      string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to
32400      output the string, and may change it.  (Of course,
32401      `ASM_OUTPUT_LABELREF' is also part of your machine description, so
32402      you should know what it does on your machine.)
32404  -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
32405      A C expression to assign to OUTVAR (which is a variable of type
32406      `char *') a newly allocated string made from the string NAME and
32407      the number NUMBER, with some suitable punctuation added.  Use
32408      `alloca' to get space for the string.
32410      The string will be used as an argument to `ASM_OUTPUT_LABELREF' to
32411      produce an assembler label for an internal static variable whose
32412      name is NAME.  Therefore, the string must be such as to result in
32413      valid assembler code.  The argument NUMBER is different each time
32414      this macro is executed; it prevents conflicts between
32415      similarly-named internal static variables in different scopes.
32417      Ideally this string should not be a valid C identifier, to prevent
32418      any conflict with the user's own symbols.  Most assemblers allow
32419      periods or percent signs in assembler symbols; putting at least
32420      one of these between the name and the number will suffice.
32422      If this macro is not defined, a default definition will be provided
32423      which is correct for most systems.
32425  -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE)
32426      A C statement to output to the stdio stream STREAM assembler code
32427      which defines (equates) the symbol NAME to have the value VALUE.
32429      If `SET_ASM_OP' is defined, a default definition is provided which
32430      is correct for most systems.
32432  -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
32433           DECL_OF_VALUE)
32434      A C statement to output to the stdio stream STREAM assembler code
32435      which defines (equates) the symbol whose tree node is DECL_OF_NAME
32436      to have the value of the tree node DECL_OF_VALUE.  This macro will
32437      be used in preference to `ASM_OUTPUT_DEF' if it is defined and if
32438      the tree nodes are available.
32440      If `SET_ASM_OP' is defined, a default definition is provided which
32441      is correct for most systems.
32443  -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
32444      A C statement that evaluates to true if the assembler code which
32445      defines (equates) the symbol whose tree node is DECL_OF_NAME to
32446      have the value of the tree node DECL_OF_VALUE should be emitted
32447      near the end of the current compilation unit.  The default is to
32448      not defer output of defines.  This macro affects defines output by
32449      `ASM_OUTPUT_DEF' and `ASM_OUTPUT_DEF_FROM_DECLS'.
32451  -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
32452      A C statement to output to the stdio stream STREAM assembler code
32453      which defines (equates) the weak symbol NAME to have the value
32454      VALUE.  If VALUE is `NULL', it defines NAME as an undefined weak
32455      symbol.
32457      Define this macro if the target only supports weak aliases; define
32458      `ASM_OUTPUT_DEF' instead if possible.
32460  -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
32461           SEL_NAME)
32462      Define this macro to override the default assembler names used for
32463      Objective-C methods.
32465      The default name is a unique method number followed by the name of
32466      the class (e.g. `_1_Foo').  For methods in categories, the name of
32467      the category is also included in the assembler name (e.g.
32468      `_1_Foo_Bar').
32470      These names are safe on most systems, but make debugging difficult
32471      since the method's selector is not present in the name.
32472      Therefore, particular systems define other ways of computing names.
32474      BUF is an expression of type `char *' which gives you a buffer in
32475      which to store the name; its length is as long as CLASS_NAME,
32476      CAT_NAME and SEL_NAME put together, plus 50 characters extra.
32478      The argument IS_INST specifies whether the method is an instance
32479      method or a class method; CLASS_NAME is the name of the class;
32480      CAT_NAME is the name of the category (or `NULL' if the method is
32481      not in a category); and SEL_NAME is the name of the selector.
32483      On systems where the assembler can handle quoted names, you can
32484      use this macro to provide more human-readable names.
32486  -- Macro: ASM_DECLARE_CLASS_REFERENCE (STREAM, NAME)
32487      A C statement (sans semicolon) to output to the stdio stream
32488      STREAM commands to declare that the label NAME is an Objective-C
32489      class reference.  This is only needed for targets whose linkers
32490      have special support for NeXT-style runtimes.
32492  -- Macro: ASM_DECLARE_UNRESOLVED_REFERENCE (STREAM, NAME)
32493      A C statement (sans semicolon) to output to the stdio stream
32494      STREAM commands to declare that the label NAME is an unresolved
32495      Objective-C class reference.  This is only needed for targets
32496      whose linkers have special support for NeXT-style runtimes.
32498 \x1f
32499 File: gccint.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format
32501 17.21.5 How Initialization Functions Are Handled
32502 ------------------------------------------------
32504 The compiled code for certain languages includes "constructors" (also
32505 called "initialization routines")--functions to initialize data in the
32506 program when the program is started.  These functions need to be called
32507 before the program is "started"--that is to say, before `main' is
32508 called.
32510  Compiling some languages generates "destructors" (also called
32511 "termination routines") that should be called when the program
32512 terminates.
32514  To make the initialization and termination functions work, the compiler
32515 must output something in the assembler code to cause those functions to
32516 be called at the appropriate time.  When you port the compiler to a new
32517 system, you need to specify how to do this.
32519  There are two major ways that GCC currently supports the execution of
32520 initialization and termination functions.  Each way has two variants.
32521 Much of the structure is common to all four variations.
32523  The linker must build two lists of these functions--a list of
32524 initialization functions, called `__CTOR_LIST__', and a list of
32525 termination functions, called `__DTOR_LIST__'.
32527  Each list always begins with an ignored function pointer (which may
32528 hold 0, -1, or a count of the function pointers after it, depending on
32529 the environment).  This is followed by a series of zero or more function
32530 pointers to constructors (or destructors), followed by a function
32531 pointer containing zero.
32533  Depending on the operating system and its executable file format,
32534 either `crtstuff.c' or `libgcc2.c' traverses these lists at startup
32535 time and exit time.  Constructors are called in reverse order of the
32536 list; destructors in forward order.
32538  The best way to handle static constructors works only for object file
32539 formats which provide arbitrarily-named sections.  A section is set
32540 aside for a list of constructors, and another for a list of destructors.
32541 Traditionally these are called `.ctors' and `.dtors'.  Each object file
32542 that defines an initialization function also puts a word in the
32543 constructor section to point to that function.  The linker accumulates
32544 all these words into one contiguous `.ctors' section.  Termination
32545 functions are handled similarly.
32547  This method will be chosen as the default by `target-def.h' if
32548 `TARGET_ASM_NAMED_SECTION' is defined.  A target that does not support
32549 arbitrary sections, but does support special designated constructor and
32550 destructor sections may define `CTORS_SECTION_ASM_OP' and
32551 `DTORS_SECTION_ASM_OP' to achieve the same effect.
32553  When arbitrary sections are available, there are two variants,
32554 depending upon how the code in `crtstuff.c' is called.  On systems that
32555 support a ".init" section which is executed at program startup, parts
32556 of `crtstuff.c' are compiled into that section.  The program is linked
32557 by the `gcc' driver like this:
32559      ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
32561  The prologue of a function (`__init') appears in the `.init' section
32562 of `crti.o'; the epilogue appears in `crtn.o'.  Likewise for the
32563 function `__fini' in the ".fini" section.  Normally these files are
32564 provided by the operating system or by the GNU C library, but are
32565 provided by GCC for a few targets.
32567  The objects `crtbegin.o' and `crtend.o' are (for most targets)
32568 compiled from `crtstuff.c'.  They contain, among other things, code
32569 fragments within the `.init' and `.fini' sections that branch to
32570 routines in the `.text' section.  The linker will pull all parts of a
32571 section together, which results in a complete `__init' function that
32572 invokes the routines we need at startup.
32574  To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
32575 properly.
32577  If no init section is available, when GCC compiles any function called
32578 `main' (or more accurately, any function designated as a program entry
32579 point by the language front end calling `expand_main_function'), it
32580 inserts a procedure call to `__main' as the first executable code after
32581 the function prologue.  The `__main' function is defined in `libgcc2.c'
32582 and runs the global constructors.
32584  In file formats that don't support arbitrary sections, there are again
32585 two variants.  In the simplest variant, the GNU linker (GNU `ld') and
32586 an `a.out' format must be used.  In this case, `TARGET_ASM_CONSTRUCTOR'
32587 is defined to produce a `.stabs' entry of type `N_SETT', referencing
32588 the name `__CTOR_LIST__', and with the address of the void function
32589 containing the initialization code as its value.  The GNU linker
32590 recognizes this as a request to add the value to a "set"; the values
32591 are accumulated, and are eventually placed in the executable as a
32592 vector in the format described above, with a leading (ignored) count
32593 and a trailing zero element.  `TARGET_ASM_DESTRUCTOR' is handled
32594 similarly.  Since no init section is available, the absence of
32595 `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main'
32596 as above, starting the initialization process.
32598  The last variant uses neither arbitrary sections nor the GNU linker.
32599 This is preferable when you want to do dynamic linking and when using
32600 file formats which the GNU linker does not support, such as `ECOFF'.  In
32601 this case, `TARGET_HAVE_CTORS_DTORS' is false, initialization and
32602 termination functions are recognized simply by their names.  This
32603 requires an extra program in the linkage step, called `collect2'.  This
32604 program pretends to be the linker, for use with GCC; it does its job by
32605 running the ordinary linker, but also arranges to include the vectors of
32606 initialization and termination functions.  These functions are called
32607 via `__main' as described above.  In order to use this method,
32608 `use_collect2' must be defined in the target in `config.gcc'.
32610  The following section describes the specific macros that control and
32611 customize the handling of initialization and termination functions.
32613 \x1f
32614 File: gccint.info,  Node: Macros for Initialization,  Next: Instruction Output,  Prev: Initialization,  Up: Assembler Format
32616 17.21.6 Macros Controlling Initialization Routines
32617 --------------------------------------------------
32619 Here are the macros that control how the compiler handles initialization
32620 and termination functions:
32622  -- Macro: INIT_SECTION_ASM_OP
32623      If defined, a C string constant, including spacing, for the
32624      assembler operation to identify the following data as
32625      initialization code.  If not defined, GCC will assume such a
32626      section does not exist.  When you are using special sections for
32627      initialization and termination functions, this macro also controls
32628      how `crtstuff.c' and `libgcc2.c' arrange to run the initialization
32629      functions.
32631  -- Macro: HAS_INIT_SECTION
32632      If defined, `main' will not call `__main' as described above.
32633      This macro should be defined for systems that control start-up code
32634      on a symbol-by-symbol basis, such as OSF/1, and should not be
32635      defined explicitly for systems that support `INIT_SECTION_ASM_OP'.
32637  -- Macro: LD_INIT_SWITCH
32638      If defined, a C string constant for a switch that tells the linker
32639      that the following symbol is an initialization routine.
32641  -- Macro: LD_FINI_SWITCH
32642      If defined, a C string constant for a switch that tells the linker
32643      that the following symbol is a finalization routine.
32645  -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC)
32646      If defined, a C statement that will write a function that can be
32647      automatically called when a shared library is loaded.  The function
32648      should call FUNC, which takes no arguments.  If not defined, and
32649      the object format requires an explicit initialization function,
32650      then a function called `_GLOBAL__DI' will be generated.
32652      This function and the following one are used by collect2 when
32653      linking a shared library that needs constructors or destructors,
32654      or has DWARF2 exception tables embedded in the code.
32656  -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC)
32657      If defined, a C statement that will write a function that can be
32658      automatically called when a shared library is unloaded.  The
32659      function should call FUNC, which takes no arguments.  If not
32660      defined, and the object format requires an explicit finalization
32661      function, then a function called `_GLOBAL__DD' will be generated.
32663  -- Macro: INVOKE__main
32664      If defined, `main' will call `__main' despite the presence of
32665      `INIT_SECTION_ASM_OP'.  This macro should be defined for systems
32666      where the init section is not actually run automatically, but is
32667      still useful for collecting the lists of constructors and
32668      destructors.
32670  -- Macro: SUPPORTS_INIT_PRIORITY
32671      If nonzero, the C++ `init_priority' attribute is supported and the
32672      compiler should emit instructions to control the order of
32673      initialization of objects.  If zero, the compiler will issue an
32674      error message upon encountering an `init_priority' attribute.
32676  -- Target Hook: bool TARGET_HAVE_CTORS_DTORS
32677      This value is true if the target supports some "native" method of
32678      collecting constructors and destructors to be run at startup and
32679      exit.  It is false if we must use `collect2'.
32681  -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
32682      If defined, a function that outputs assembler code to arrange to
32683      call the function referenced by SYMBOL at initialization time.
32685      Assume that SYMBOL is a `SYMBOL_REF' for a function taking no
32686      arguments and with no return value.  If the target supports
32687      initialization priorities, PRIORITY is a value between 0 and
32688      `MAX_INIT_PRIORITY'; otherwise it must be `DEFAULT_INIT_PRIORITY'.
32690      If this macro is not defined by the target, a suitable default will
32691      be chosen if (1) the target supports arbitrary section names, (2)
32692      the target defines `CTORS_SECTION_ASM_OP', or (3) `USE_COLLECT2'
32693      is not defined.
32695  -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
32696      This is like `TARGET_ASM_CONSTRUCTOR' but used for termination
32697      functions rather than initialization functions.
32699  If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
32700 generated for the generated object file will have static linkage.
32702  If your system uses `collect2' as the means of processing
32703 constructors, then that program normally uses `nm' to scan an object
32704 file for constructor functions to be called.
32706  On certain kinds of systems, you can define this macro to make
32707 `collect2' work faster (and, in some cases, make it work at all):
32709  -- Macro: OBJECT_FORMAT_COFF
32710      Define this macro if the system uses COFF (Common Object File
32711      Format) object files, so that `collect2' can assume this format
32712      and scan object files directly for dynamic constructor/destructor
32713      functions.
32715      This macro is effective only in a native compiler; `collect2' as
32716      part of a cross compiler always uses `nm' for the target machine.
32718  -- Macro: REAL_NM_FILE_NAME
32719      Define this macro as a C string constant containing the file name
32720      to use to execute `nm'.  The default is to search the path
32721      normally for `nm'.
32723      If your system supports shared libraries and has a program to list
32724      the dynamic dependencies of a given library or executable, you can
32725      define these macros to enable support for running initialization
32726      and termination functions in shared libraries:
32728  -- Macro: LDD_SUFFIX
32729      Define this macro to a C string constant containing the name of
32730      the program which lists dynamic dependencies, like `"ldd"' under
32731      SunOS 4.
32733  -- Macro: PARSE_LDD_OUTPUT (PTR)
32734      Define this macro to be C code that extracts filenames from the
32735      output of the program denoted by `LDD_SUFFIX'.  PTR is a variable
32736      of type `char *' that points to the beginning of a line of output
32737      from `LDD_SUFFIX'.  If the line lists a dynamic dependency, the
32738      code must advance PTR to the beginning of the filename on that
32739      line.  Otherwise, it must set PTR to `NULL'.
32741  -- Macro: SHLIB_SUFFIX
32742      Define this macro to a C string constant containing the default
32743      shared library extension of the target (e.g., `".so"').  `collect2'
32744      strips version information after this suffix when generating global
32745      constructor and destructor names.  This define is only needed on
32746      targets that use `collect2' to process constructors and
32747      destructors.
32749 \x1f
32750 File: gccint.info,  Node: Instruction Output,  Next: Dispatch Tables,  Prev: Macros for Initialization,  Up: Assembler Format
32752 17.21.7 Output of Assembler Instructions
32753 ----------------------------------------
32755 This describes assembler instruction output.
32757  -- Macro: REGISTER_NAMES
32758      A C initializer containing the assembler's names for the machine
32759      registers, each one as a C string constant.  This is what
32760      translates register numbers in the compiler into assembler
32761      language.
32763  -- Macro: ADDITIONAL_REGISTER_NAMES
32764      If defined, a C initializer for an array of structures containing
32765      a name and a register number.  This macro defines additional names
32766      for hard registers, thus allowing the `asm' option in declarations
32767      to refer to registers using alternate names.
32769  -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR)
32770      Define this macro if you are using an unusual assembler that
32771      requires different names for the machine instructions.
32773      The definition is a C statement or statements which output an
32774      assembler instruction opcode to the stdio stream STREAM.  The
32775      macro-operand PTR is a variable of type `char *' which points to
32776      the opcode name in its "internal" form--the form that is written
32777      in the machine description.  The definition should output the
32778      opcode name to STREAM, performing any translation you desire, and
32779      increment the variable PTR to point at the end of the opcode so
32780      that it will not be output twice.
32782      In fact, your macro definition may process less than the entire
32783      opcode name, or more than the opcode name; but if you want to
32784      process text that includes `%'-sequences to substitute operands,
32785      you must take care of the substitution yourself.  Just be sure to
32786      increment PTR over whatever text should not be output normally.
32788      If you need to look at the operand values, they can be found as the
32789      elements of `recog_data.operand'.
32791      If the macro definition does nothing, the instruction is output in
32792      the usual way.
32794  -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)
32795      If defined, a C statement to be executed just prior to the output
32796      of assembler code for INSN, to modify the extracted operands so
32797      they will be output differently.
32799      Here the argument OPVEC is the vector containing the operands
32800      extracted from INSN, and NOPERANDS is the number of elements of
32801      the vector which contain meaningful data for this insn.  The
32802      contents of this vector are what will be used to convert the insn
32803      template into assembler code, so you can change the assembler
32804      output by changing the contents of the vector.
32806      This macro is useful when various assembler syntaxes share a single
32807      file of instruction patterns; by defining this macro differently,
32808      you can cause a large class of instructions to be output
32809      differently (such as with rearranged operands).  Naturally,
32810      variations in assembler syntax affecting individual insn patterns
32811      ought to be handled by writing conditional output routines in
32812      those patterns.
32814      If this macro is not defined, it is equivalent to a null statement.
32816  -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, rtx
32817           INSN, rtx *OPVEC, int NOPERANDS)
32818      If defined, this target hook is a function which is executed just
32819      after the output of assembler code for INSN, to change the mode of
32820      the assembler if necessary.
32822      Here the argument OPVEC is the vector containing the operands
32823      extracted from INSN, and NOPERANDS is the number of elements of
32824      the vector which contain meaningful data for this insn.  The
32825      contents of this vector are what was used to convert the insn
32826      template into assembler code, so you can change the assembler mode
32827      by checking the contents of the vector.
32829  -- Macro: PRINT_OPERAND (STREAM, X, CODE)
32830      A C compound statement to output to stdio stream STREAM the
32831      assembler syntax for an instruction operand X.  X is an RTL
32832      expression.
32834      CODE is a value that can be used to specify one of several ways of
32835      printing the operand.  It is used when identical operands must be
32836      printed differently depending on the context.  CODE comes from the
32837      `%' specification that was used to request printing of the
32838      operand.  If the specification was just `%DIGIT' then CODE is 0;
32839      if the specification was `%LTR DIGIT' then CODE is the ASCII code
32840      for LTR.
32842      If X is a register, this macro should print the register's name.
32843      The names can be found in an array `reg_names' whose type is `char
32844      *[]'.  `reg_names' is initialized from `REGISTER_NAMES'.
32846      When the machine description has a specification `%PUNCT' (a `%'
32847      followed by a punctuation character), this macro is called with a
32848      null pointer for X and the punctuation character for CODE.
32850  -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
32851      A C expression which evaluates to true if CODE is a valid
32852      punctuation character for use in the `PRINT_OPERAND' macro.  If
32853      `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
32854      punctuation characters (except for the standard one, `%') are used
32855      in this way.
32857  -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
32858      A C compound statement to output to stdio stream STREAM the
32859      assembler syntax for an instruction operand that is a memory
32860      reference whose address is X.  X is an RTL expression.
32862      On some machines, the syntax for a symbolic address depends on the
32863      section that the address refers to.  On these machines, define the
32864      hook `TARGET_ENCODE_SECTION_INFO' to store the information into the
32865      `symbol_ref', and then check for it here.  *Note Assembler
32866      Format::.
32868  -- Macro: DBR_OUTPUT_SEQEND (FILE)
32869      A C statement, to be executed after all slot-filler instructions
32870      have been output.  If necessary, call `dbr_sequence_length' to
32871      determine the number of slots filled in a sequence (zero if not
32872      currently outputting a sequence), to decide how many no-ops to
32873      output, or whatever.
32875      Don't define this macro if it has nothing to do, but it is helpful
32876      in reading assembly output if the extent of the delay sequence is
32877      made explicit (e.g. with white space).
32879  Note that output routines for instructions with delay slots must be
32880 prepared to deal with not being output as part of a sequence (i.e. when
32881 the scheduling pass is not run, or when no slot fillers could be
32882 found.)  The variable `final_sequence' is null when not processing a
32883 sequence, otherwise it contains the `sequence' rtx being output.
32885  -- Macro: REGISTER_PREFIX
32886  -- Macro: LOCAL_LABEL_PREFIX
32887  -- Macro: USER_LABEL_PREFIX
32888  -- Macro: IMMEDIATE_PREFIX
32889      If defined, C string expressions to be used for the `%R', `%L',
32890      `%U', and `%I' options of `asm_fprintf' (see `final.c').  These
32891      are useful when a single `md' file must support multiple assembler
32892      formats.  In that case, the various `tm.h' files can define these
32893      macros differently.
32895  -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
32896      If defined this macro should expand to a series of `case'
32897      statements which will be parsed inside the `switch' statement of
32898      the `asm_fprintf' function.  This allows targets to define extra
32899      printf formats which may useful when generating their assembler
32900      statements.  Note that uppercase letters are reserved for future
32901      generic extensions to asm_fprintf, and so are not available to
32902      target specific code.  The output file is given by the parameter
32903      FILE.  The varargs input pointer is ARGPTR and the rest of the
32904      format string, starting the character after the one that is being
32905      switched upon, is pointed to by FORMAT.
32907  -- Macro: ASSEMBLER_DIALECT
32908      If your target supports multiple dialects of assembler language
32909      (such as different opcodes), define this macro as a C expression
32910      that gives the numeric index of the assembler language dialect to
32911      use, with zero as the first variant.
32913      If this macro is defined, you may use constructs of the form
32914           `{option0|option1|option2...}'
32915      in the output templates of patterns (*note Output Template::) or
32916      in the first argument of `asm_fprintf'.  This construct outputs
32917      `option0', `option1', `option2', etc., if the value of
32918      `ASSEMBLER_DIALECT' is zero, one, two, etc.  Any special characters
32919      within these strings retain their usual meaning.  If there are
32920      fewer alternatives within the braces than the value of
32921      `ASSEMBLER_DIALECT', the construct outputs nothing.
32923      If you do not define this macro, the characters `{', `|' and `}'
32924      do not have any special meaning when used in templates or operands
32925      to `asm_fprintf'.
32927      Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX',
32928      `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the
32929      variations in assembler language syntax with that mechanism.
32930      Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax
32931      if the syntax variant are larger and involve such things as
32932      different opcodes or operand order.
32934  -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO)
32935      A C expression to output to STREAM some assembler code which will
32936      push hard register number REGNO onto the stack.  The code need not
32937      be optimal, since this macro is used only when profiling.
32939  -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO)
32940      A C expression to output to STREAM some assembler code which will
32941      pop hard register number REGNO off of the stack.  The code need
32942      not be optimal, since this macro is used only when profiling.
32944 \x1f
32945 File: gccint.info,  Node: Dispatch Tables,  Next: Exception Region Output,  Prev: Instruction Output,  Up: Assembler Format
32947 17.21.8 Output of Dispatch Tables
32948 ---------------------------------
32950 This concerns dispatch tables.
32952  -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
32953      A C statement to output to the stdio stream STREAM an assembler
32954      pseudo-instruction to generate a difference between two labels.
32955      VALUE and REL are the numbers of two internal labels.  The
32956      definitions of these labels are output using
32957      `(*targetm.asm_out.internal_label)', and they must be printed in
32958      the same way here.  For example,
32960           fprintf (STREAM, "\t.word L%d-L%d\n",
32961                    VALUE, REL)
32963      You must provide this macro on machines where the addresses in a
32964      dispatch table are relative to the table's own address.  If
32965      defined, GCC will also use this macro on all machines when
32966      producing PIC.  BODY is the body of the `ADDR_DIFF_VEC'; it is
32967      provided so that the mode and flags can be read.
32969  -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
32970      This macro should be provided on machines where the addresses in a
32971      dispatch table are absolute.
32973      The definition should be a C statement to output to the stdio
32974      stream STREAM an assembler pseudo-instruction to generate a
32975      reference to a label.  VALUE is the number of an internal label
32976      whose definition is output using
32977      `(*targetm.asm_out.internal_label)'.  For example,
32979           fprintf (STREAM, "\t.word L%d\n", VALUE)
32981  -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
32982      Define this if the label before a jump-table needs to be output
32983      specially.  The first three arguments are the same as for
32984      `(*targetm.asm_out.internal_label)'; the fourth argument is the
32985      jump-table which follows (a `jump_insn' containing an `addr_vec'
32986      or `addr_diff_vec').
32988      This feature is used on system V to output a `swbeg' statement for
32989      the table.
32991      If this macro is not defined, these labels are output with
32992      `(*targetm.asm_out.internal_label)'.
32994  -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
32995      Define this if something special must be output at the end of a
32996      jump-table.  The definition should be a C statement to be executed
32997      after the assembler code for the table is written.  It should write
32998      the appropriate code to stdio stream STREAM.  The argument TABLE
32999      is the jump-table insn, and NUM is the label-number of the
33000      preceding label.
33002      If this macro is not defined, nothing special is output at the end
33003      of the jump-table.
33005  -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree
33006           DECL, int FOR_EH, int EMPTY)
33007      This target hook emits a label at the beginning of each FDE.  It
33008      should be defined on targets where FDEs need special labels, and it
33009      should write the appropriate label, for the FDE associated with the
33010      function declaration DECL, to the stdio stream STREAM.  The third
33011      argument, FOR_EH, is a boolean: true if this is for an exception
33012      table.  The fourth argument, EMPTY, is a boolean: true if this is
33013      a placeholder label for an omitted FDE.
33015      The default is that FDEs are not given nonlocal labels.
33017  -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM)
33018      This target hook emits a label at the beginning of the exception
33019      table.  It should be defined on targets where it is desirable for
33020      the table to be broken up according to function.
33022      The default is that no label is emitted.
33024  -- Target Hook: void TARGET_UNWIND_EMIT (FILE *STREAM, rtx INSN)
33025      This target hook emits assembly directives required to unwind the
33026      given instruction.  This is only used when TARGET_UNWIND_INFO is
33027      set.
33029 \x1f
33030 File: gccint.info,  Node: Exception Region Output,  Next: Alignment Output,  Prev: Dispatch Tables,  Up: Assembler Format
33032 17.21.9 Assembler Commands for Exception Regions
33033 ------------------------------------------------
33035 This describes commands marking the start and the end of an exception
33036 region.
33038  -- Macro: EH_FRAME_SECTION_NAME
33039      If defined, a C string constant for the name of the section
33040      containing exception handling frame unwind information.  If not
33041      defined, GCC will provide a default definition if the target
33042      supports named sections.  `crtstuff.c' uses this macro to switch
33043      to the appropriate section.
33045      You should define this symbol if your target supports DWARF 2 frame
33046      unwind information and the default definition does not work.
33048  -- Macro: EH_FRAME_IN_DATA_SECTION
33049      If defined, DWARF 2 frame unwind information will be placed in the
33050      data section even though the target supports named sections.  This
33051      might be necessary, for instance, if the system linker does garbage
33052      collection and sections cannot be marked as not to be collected.
33054      Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also
33055      defined.
33057  -- Macro: EH_TABLES_CAN_BE_READ_ONLY
33058      Define this macro to 1 if your target is such that no frame unwind
33059      information encoding used with non-PIC code will ever require a
33060      runtime relocation, but the linker may not support merging
33061      read-only and read-write sections into a single read-write section.
33063  -- Macro: MASK_RETURN_ADDR
33064      An rtx used to mask the return address found via
33065      `RETURN_ADDR_RTX', so that it does not contain any extraneous set
33066      bits in it.
33068  -- Macro: DWARF2_UNWIND_INFO
33069      Define this macro to 0 if your target supports DWARF 2 frame unwind
33070      information, but it does not yet work with exception handling.
33071      Otherwise, if your target supports this information (if it defines
33072      `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or
33073      `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1.
33075      If `TARGET_UNWIND_INFO' is defined, the target specific unwinder
33076      will be used in all cases.  Defining this macro will enable the
33077      generation of DWARF 2 frame debugging information.
33079      If `TARGET_UNWIND_INFO' is not defined, and this macro is defined
33080      to 1, the DWARF 2 unwinder will be the default exception handling
33081      mechanism; otherwise, the `setjmp'/`longjmp'-based scheme will be
33082      used by default.
33084  -- Macro: TARGET_UNWIND_INFO
33085      Define this macro if your target has ABI specified unwind tables.
33086      Usually these will be output by `TARGET_UNWIND_EMIT'.
33088  -- Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT
33089      This variable should be set to `true' if the target ABI requires
33090      unwinding tables even when exceptions are not used.
33092  -- Macro: MUST_USE_SJLJ_EXCEPTIONS
33093      This macro need only be defined if `DWARF2_UNWIND_INFO' is
33094      runtime-variable.  In that case, `except.h' cannot correctly
33095      determine the corresponding definition of
33096      `MUST_USE_SJLJ_EXCEPTIONS', so the target must provide it directly.
33098  -- Macro: DONT_USE_BUILTIN_SETJMP
33099      Define this macro to 1 if the `setjmp'/`longjmp'-based scheme
33100      should use the `setjmp'/`longjmp' functions from the C library
33101      instead of the `__builtin_setjmp'/`__builtin_longjmp' machinery.
33103  -- Macro: DWARF_CIE_DATA_ALIGNMENT
33104      This macro need only be defined if the target might save registers
33105      in the function prologue at an offset to the stack pointer that is
33106      not aligned to `UNITS_PER_WORD'.  The definition should be the
33107      negative minimum alignment if `STACK_GROWS_DOWNWARD' is defined,
33108      and the positive minimum alignment otherwise.  *Note SDB and
33109      DWARF::.  Only applicable if the target supports DWARF 2 frame
33110      unwind information.
33112  -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
33113      Contains the value true if the target should add a zero word onto
33114      the end of a Dwarf-2 frame info section when used for exception
33115      handling.  Default value is false if `EH_FRAME_SECTION_NAME' is
33116      defined, and true otherwise.
33118  -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
33119      Given a register, this hook should return a parallel of registers
33120      to represent where to find the register pieces.  Define this hook
33121      if the register and its mode are represented in Dwarf in
33122      non-contiguous locations, or if the register should be represented
33123      in more than one register in Dwarf.  Otherwise, this hook should
33124      return `NULL_RTX'.  If not defined, the default is to return
33125      `NULL_RTX'.
33127  -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS)
33128      If some registers are represented in Dwarf-2 unwind information in
33129      multiple pieces, define this hook to fill in information about the
33130      sizes of those pieces in the table used by the unwinder at runtime.
33131      It will be called by `expand_builtin_init_dwarf_reg_sizes' after
33132      filling in a single size corresponding to each hard register;
33133      ADDRESS is the address of the table.
33135  -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
33136      This hook is used to output a reference from a frame unwinding
33137      table to the type_info object identified by SYM.  It should return
33138      `true' if the reference was output.  Returning `false' will cause
33139      the reference to be output using the normal Dwarf2 routines.
33141  -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
33142      This flag should be set to `true' on targets that use an ARM EABI
33143      based unwinding library, and `false' on other targets.  This
33144      effects the format of unwinding tables, and how the unwinder in
33145      entered after running a cleanup.  The default is `false'.
33147 \x1f
33148 File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format
33150 17.21.10 Assembler Commands for Alignment
33151 -----------------------------------------
33153 This describes commands for alignment.
33155  -- Macro: JUMP_ALIGN (LABEL)
33156      The alignment (log base 2) to put in front of LABEL, which is a
33157      common destination of jumps and has no fallthru incoming edge.
33159      This macro need not be defined if you don't want any special
33160      alignment to be done at such a time.  Most machine descriptions do
33161      not currently define the macro.
33163      Unless it's necessary to inspect the LABEL parameter, it is better
33164      to set the variable ALIGN_JUMPS in the target's
33165      `OVERRIDE_OPTIONS'.  Otherwise, you should try to honor the user's
33166      selection in ALIGN_JUMPS in a `JUMP_ALIGN' implementation.
33168  -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
33169      The alignment (log base 2) to put in front of LABEL, which follows
33170      a `BARRIER'.
33172      This macro need not be defined if you don't want any special
33173      alignment to be done at such a time.  Most machine descriptions do
33174      not currently define the macro.
33176  -- Macro: LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
33177      The maximum number of bytes to skip when applying
33178      `LABEL_ALIGN_AFTER_BARRIER'.  This works only if
33179      `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
33181  -- Macro: LOOP_ALIGN (LABEL)
33182      The alignment (log base 2) to put in front of LABEL, which follows
33183      a `NOTE_INSN_LOOP_BEG' note.
33185      This macro need not be defined if you don't want any special
33186      alignment to be done at such a time.  Most machine descriptions do
33187      not currently define the macro.
33189      Unless it's necessary to inspect the LABEL parameter, it is better
33190      to set the variable `align_loops' in the target's
33191      `OVERRIDE_OPTIONS'.  Otherwise, you should try to honor the user's
33192      selection in `align_loops' in a `LOOP_ALIGN' implementation.
33194  -- Macro: LOOP_ALIGN_MAX_SKIP
33195      The maximum number of bytes to skip when applying `LOOP_ALIGN'.
33196      This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
33198  -- Macro: LABEL_ALIGN (LABEL)
33199      The alignment (log base 2) to put in front of LABEL.  If
33200      `LABEL_ALIGN_AFTER_BARRIER' / `LOOP_ALIGN' specify a different
33201      alignment, the maximum of the specified values is used.
33203      Unless it's necessary to inspect the LABEL parameter, it is better
33204      to set the variable `align_labels' in the target's
33205      `OVERRIDE_OPTIONS'.  Otherwise, you should try to honor the user's
33206      selection in `align_labels' in a `LABEL_ALIGN' implementation.
33208  -- Macro: LABEL_ALIGN_MAX_SKIP
33209      The maximum number of bytes to skip when applying `LABEL_ALIGN'.
33210      This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
33212  -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
33213      A C statement to output to the stdio stream STREAM an assembler
33214      instruction to advance the location counter by NBYTES bytes.
33215      Those bytes should be zero when loaded.  NBYTES will be a C
33216      expression of type `unsigned HOST_WIDE_INT'.
33218  -- Macro: ASM_NO_SKIP_IN_TEXT
33219      Define this macro if `ASM_OUTPUT_SKIP' should not be used in the
33220      text section because it fails to put zeros in the bytes that are
33221      skipped.  This is true on many Unix systems, where the pseudo-op
33222      to skip bytes produces no-op instructions rather than zeros when
33223      used in the text section.
33225  -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
33226      A C statement to output to the stdio stream STREAM an assembler
33227      command to advance the location counter to a multiple of 2 to the
33228      POWER bytes.  POWER will be a C expression of type `int'.
33230  -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
33231      Like `ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
33232      for padding, if necessary.
33234  -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
33235      A C statement to output to the stdio stream STREAM an assembler
33236      command to advance the location counter to a multiple of 2 to the
33237      POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
33238      satisfy the alignment request.  POWER and MAX_SKIP will be a C
33239      expression of type `int'.
33241 \x1f
33242 File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros
33244 17.22 Controlling Debugging Information Format
33245 ==============================================
33247 This describes how to specify debugging information.
33249 * Menu:
33251 * All Debuggers::      Macros that affect all debugging formats uniformly.
33252 * DBX Options::        Macros enabling specific options in DBX format.
33253 * DBX Hooks::          Hook macros for varying DBX format.
33254 * File Names and DBX:: Macros controlling output of file names in DBX format.
33255 * SDB and DWARF::      Macros for SDB (COFF) and DWARF formats.
33256 * VMS Debug::          Macros for VMS debug format.
33258 \x1f
33259 File: gccint.info,  Node: All Debuggers,  Next: DBX Options,  Up: Debugging Info
33261 17.22.1 Macros Affecting All Debugging Formats
33262 ----------------------------------------------
33264 These macros affect all debugging formats.
33266  -- Macro: DBX_REGISTER_NUMBER (REGNO)
33267      A C expression that returns the DBX register number for the
33268      compiler register number REGNO.  In the default macro provided,
33269      the value of this expression will be REGNO itself.  But sometimes
33270      there are some registers that the compiler knows about and DBX
33271      does not, or vice versa.  In such cases, some register may need to
33272      have one number in the compiler and another for DBX.
33274      If two registers have consecutive numbers inside GCC, and they can
33275      be used as a pair to hold a multiword value, then they _must_ have
33276      consecutive numbers after renumbering with `DBX_REGISTER_NUMBER'.
33277      Otherwise, debuggers will be unable to access such a pair, because
33278      they expect register pairs to be consecutive in their own
33279      numbering scheme.
33281      If you find yourself defining `DBX_REGISTER_NUMBER' in way that
33282      does not preserve register pairs, then what you must do instead is
33283      redefine the actual register numbering scheme.
33285  -- Macro: DEBUGGER_AUTO_OFFSET (X)
33286      A C expression that returns the integer offset value for an
33287      automatic variable having address X (an RTL expression).  The
33288      default computation assumes that X is based on the frame-pointer
33289      and gives the offset from the frame-pointer.  This is required for
33290      targets that produce debugging output for DBX or COFF-style
33291      debugging output for SDB and allow the frame-pointer to be
33292      eliminated when the `-g' options is used.
33294  -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
33295      A C expression that returns the integer offset value for an
33296      argument having address X (an RTL expression).  The nominal offset
33297      is OFFSET.
33299  -- Macro: PREFERRED_DEBUGGING_TYPE
33300      A C expression that returns the type of debugging output GCC should
33301      produce when the user specifies just `-g'.  Define this if you
33302      have arranged for GCC to support more than one format of debugging
33303      output.  Currently, the allowable values are `DBX_DEBUG',
33304      `SDB_DEBUG', `DWARF_DEBUG', `DWARF2_DEBUG', `XCOFF_DEBUG',
33305      `VMS_DEBUG', and `VMS_AND_DWARF2_DEBUG'.
33307      When the user specifies `-ggdb', GCC normally also uses the value
33308      of this macro to select the debugging output format, but with two
33309      exceptions.  If `DWARF2_DEBUGGING_INFO' is defined, GCC uses the
33310      value `DWARF2_DEBUG'.  Otherwise, if `DBX_DEBUGGING_INFO' is
33311      defined, GCC uses `DBX_DEBUG'.
33313      The value of this macro only affects the default debugging output;
33314      the user can always get a specific type of output by using
33315      `-gstabs', `-gcoff', `-gdwarf-2', `-gxcoff', or `-gvms'.
33317 \x1f
33318 File: gccint.info,  Node: DBX Options,  Next: DBX Hooks,  Prev: All Debuggers,  Up: Debugging Info
33320 17.22.2 Specific Options for DBX Output
33321 ---------------------------------------
33323 These are specific options for DBX output.
33325  -- Macro: DBX_DEBUGGING_INFO
33326      Define this macro if GCC should produce debugging output for DBX
33327      in response to the `-g' option.
33329  -- Macro: XCOFF_DEBUGGING_INFO
33330      Define this macro if GCC should produce XCOFF format debugging
33331      output in response to the `-g' option.  This is a variant of DBX
33332      format.
33334  -- Macro: DEFAULT_GDB_EXTENSIONS
33335      Define this macro to control whether GCC should by default generate
33336      GDB's extended version of DBX debugging information (assuming
33337      DBX-format debugging information is enabled at all).  If you don't
33338      define the macro, the default is 1: always generate the extended
33339      information if there is any occasion to.
33341  -- Macro: DEBUG_SYMS_TEXT
33342      Define this macro if all `.stabs' commands should be output while
33343      in the text section.
33345  -- Macro: ASM_STABS_OP
33346      A C string constant, including spacing, naming the assembler
33347      pseudo op to use instead of `"\t.stabs\t"' to define an ordinary
33348      debugging symbol.  If you don't define this macro, `"\t.stabs\t"'
33349      is used.  This macro applies only to DBX debugging information
33350      format.
33352  -- Macro: ASM_STABD_OP
33353      A C string constant, including spacing, naming the assembler
33354      pseudo op to use instead of `"\t.stabd\t"' to define a debugging
33355      symbol whose value is the current location.  If you don't define
33356      this macro, `"\t.stabd\t"' is used.  This macro applies only to
33357      DBX debugging information format.
33359  -- Macro: ASM_STABN_OP
33360      A C string constant, including spacing, naming the assembler
33361      pseudo op to use instead of `"\t.stabn\t"' to define a debugging
33362      symbol with no name.  If you don't define this macro,
33363      `"\t.stabn\t"' is used.  This macro applies only to DBX debugging
33364      information format.
33366  -- Macro: DBX_NO_XREFS
33367      Define this macro if DBX on your system does not support the
33368      construct `xsTAGNAME'.  On some systems, this construct is used to
33369      describe a forward reference to a structure named TAGNAME.  On
33370      other systems, this construct is not supported at all.
33372  -- Macro: DBX_CONTIN_LENGTH
33373      A symbol name in DBX-format debugging information is normally
33374      continued (split into two separate `.stabs' directives) when it
33375      exceeds a certain length (by default, 80 characters).  On some
33376      operating systems, DBX requires this splitting; on others,
33377      splitting must not be done.  You can inhibit splitting by defining
33378      this macro with the value zero.  You can override the default
33379      splitting-length by defining this macro as an expression for the
33380      length you desire.
33382  -- Macro: DBX_CONTIN_CHAR
33383      Normally continuation is indicated by adding a `\' character to
33384      the end of a `.stabs' string when a continuation follows.  To use
33385      a different character instead, define this macro as a character
33386      constant for the character you want to use.  Do not define this
33387      macro if backslash is correct for your system.
33389  -- Macro: DBX_STATIC_STAB_DATA_SECTION
33390      Define this macro if it is necessary to go to the data section
33391      before outputting the `.stabs' pseudo-op for a non-global static
33392      variable.
33394  -- Macro: DBX_TYPE_DECL_STABS_CODE
33395      The value to use in the "code" field of the `.stabs' directive for
33396      a typedef.  The default is `N_LSYM'.
33398  -- Macro: DBX_STATIC_CONST_VAR_CODE
33399      The value to use in the "code" field of the `.stabs' directive for
33400      a static variable located in the text section.  DBX format does not
33401      provide any "right" way to do this.  The default is `N_FUN'.
33403  -- Macro: DBX_REGPARM_STABS_CODE
33404      The value to use in the "code" field of the `.stabs' directive for
33405      a parameter passed in registers.  DBX format does not provide any
33406      "right" way to do this.  The default is `N_RSYM'.
33408  -- Macro: DBX_REGPARM_STABS_LETTER
33409      The letter to use in DBX symbol data to identify a symbol as a
33410      parameter passed in registers.  DBX format does not customarily
33411      provide any way to do this.  The default is `'P''.
33413  -- Macro: DBX_FUNCTION_FIRST
33414      Define this macro if the DBX information for a function and its
33415      arguments should precede the assembler code for the function.
33416      Normally, in DBX format, the debugging information entirely
33417      follows the assembler code.
33419  -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE
33420      Define this macro, with value 1, if the value of a symbol
33421      describing the scope of a block (`N_LBRAC' or `N_RBRAC') should be
33422      relative to the start of the enclosing function.  Normally, GCC
33423      uses an absolute address.
33425  -- Macro: DBX_LINES_FUNCTION_RELATIVE
33426      Define this macro, with value 1, if the value of a symbol
33427      indicating the current line number (`N_SLINE') should be relative
33428      to the start of the enclosing function.  Normally, GCC uses an
33429      absolute address.
33431  -- Macro: DBX_USE_BINCL
33432      Define this macro if GCC should generate `N_BINCL' and `N_EINCL'
33433      stabs for included header files, as on Sun systems.  This macro
33434      also directs GCC to output a type number as a pair of a file
33435      number and a type number within the file.  Normally, GCC does not
33436      generate `N_BINCL' or `N_EINCL' stabs, and it outputs a single
33437      number for a type number.
33439 \x1f
33440 File: gccint.info,  Node: DBX Hooks,  Next: File Names and DBX,  Prev: DBX Options,  Up: Debugging Info
33442 17.22.3 Open-Ended Hooks for DBX Format
33443 ---------------------------------------
33445 These are hooks for DBX format.
33447  -- Macro: DBX_OUTPUT_LBRAC (STREAM, NAME)
33448      Define this macro to say how to output to STREAM the debugging
33449      information for the start of a scope level for variable names.  The
33450      argument NAME is the name of an assembler symbol (for use with
33451      `assemble_name') whose value is the address where the scope begins.
33453  -- Macro: DBX_OUTPUT_RBRAC (STREAM, NAME)
33454      Like `DBX_OUTPUT_LBRAC', but for the end of a scope level.
33456  -- Macro: DBX_OUTPUT_NFUN (STREAM, LSCOPE_LABEL, DECL)
33457      Define this macro if the target machine requires special handling
33458      to output an `N_FUN' entry for the function DECL.
33460  -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER)
33461      A C statement to output DBX debugging information before code for
33462      line number LINE of the current source file to the stdio stream
33463      STREAM.  COUNTER is the number of time the macro was invoked,
33464      including the current invocation; it is intended to generate
33465      unique labels in the assembly output.
33467      This macro should not be defined if the default output is correct,
33468      or if it can be made correct by defining
33469      `DBX_LINES_FUNCTION_RELATIVE'.
33471  -- Macro: NO_DBX_FUNCTION_END
33472      Some stabs encapsulation formats (in particular ECOFF), cannot
33473      handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx
33474      extension construct.  On those machines, define this macro to turn
33475      this feature off without disturbing the rest of the gdb extensions.
33477  -- Macro: NO_DBX_BNSYM_ENSYM
33478      Some assemblers cannot handle the `.stabd BNSYM/ENSYM,0,0' gdb dbx
33479      extension construct.  On those machines, define this macro to turn
33480      this feature off without disturbing the rest of the gdb extensions.
33482 \x1f
33483 File: gccint.info,  Node: File Names and DBX,  Next: SDB and DWARF,  Prev: DBX Hooks,  Up: Debugging Info
33485 17.22.4 File Names in DBX Format
33486 --------------------------------
33488 This describes file names in DBX format.
33490  -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)
33491      A C statement to output DBX debugging information to the stdio
33492      stream STREAM, which indicates that file NAME is the main source
33493      file--the file specified as the input file for compilation.  This
33494      macro is called only once, at the beginning of compilation.
33496      This macro need not be defined if the standard form of output for
33497      DBX debugging information is appropriate.
33499      It may be necessary to refer to a label equal to the beginning of
33500      the text section.  You can use `assemble_name (stream,
33501      ltext_label_name)' to do so.  If you do this, you must also set
33502      the variable USED_LTEXT_LABEL_NAME to `true'.
33504  -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY
33505      Define this macro, with value 1, if GCC should not emit an
33506      indication of the current directory for compilation and current
33507      source language at the beginning of the file.
33509  -- Macro: NO_DBX_GCC_MARKER
33510      Define this macro, with value 1, if GCC should not emit an
33511      indication that this object file was compiled by GCC.  The default
33512      is to emit an `N_OPT' stab at the beginning of every source file,
33513      with `gcc2_compiled.' for the string and value 0.
33515  -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)
33516      A C statement to output DBX debugging information at the end of
33517      compilation of the main source file NAME.  Output should be
33518      written to the stdio stream STREAM.
33520      If you don't define this macro, nothing special is output at the
33521      end of compilation, which is correct for most machines.
33523  -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
33524      Define this macro _instead of_ defining
33525      `DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at
33526      the end of compilation is an `N_SO' stab with an empty string,
33527      whose value is the highest absolute text address in the file.
33529 \x1f
33530 File: gccint.info,  Node: SDB and DWARF,  Next: VMS Debug,  Prev: File Names and DBX,  Up: Debugging Info
33532 17.22.5 Macros for SDB and DWARF Output
33533 ---------------------------------------
33535 Here are macros for SDB and DWARF output.
33537  -- Macro: SDB_DEBUGGING_INFO
33538      Define this macro if GCC should produce COFF-style debugging output
33539      for SDB in response to the `-g' option.
33541  -- Macro: DWARF2_DEBUGGING_INFO
33542      Define this macro if GCC should produce dwarf version 2 format
33543      debugging output in response to the `-g' option.
33545       -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree
33546                FUNCTION)
33547           Define this to enable the dwarf attribute
33548           `DW_AT_calling_convention' to be emitted for each function.
33549           Instead of an integer return the enum value for the `DW_CC_'
33550           tag.
33552      To support optional call frame debugging information, you must also
33553      define `INCOMING_RETURN_ADDR_RTX' and either set
33554      `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
33555      prologue, or call `dwarf2out_def_cfa' and `dwarf2out_reg_save' as
33556      appropriate from `TARGET_ASM_FUNCTION_PROLOGUE' if you don't.
33558  -- Macro: DWARF2_FRAME_INFO
33559      Define this macro to a nonzero value if GCC should always output
33560      Dwarf 2 frame information.  If `DWARF2_UNWIND_INFO' (*note
33561      Exception Region Output:: is nonzero, GCC will output this
33562      information not matter how you define `DWARF2_FRAME_INFO'.
33564  -- Macro: DWARF2_ASM_LINE_DEBUG_INFO
33565      Define this macro to be a nonzero value if the assembler can
33566      generate Dwarf 2 line debug info sections.  This will result in
33567      much more compact line number tables, and hence is desirable if it
33568      works.
33570  -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2)
33571      A C statement to issue assembly directives that create a difference
33572      LAB1 minus LAB2, using an integer of the given SIZE.
33574  -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION)
33575      A C statement to issue assembly directives that create a
33576      section-relative reference to the given LABEL, using an integer of
33577      the given SIZE.  The label is known to be defined in the given
33578      SECTION.
33580  -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL)
33581      A C statement to issue assembly directives that create a
33582      self-relative reference to the given LABEL, using an integer of
33583      the given SIZE.
33585  -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL)
33586      A C statement to issue assembly directives that create a reference
33587      to the DWARF table identifier LABEL from the current section.  This
33588      is used on some systems to avoid garbage collecting a DWARF table
33589      which is referenced by a function.
33591  -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int
33592           SIZE, rtx X)
33593      If defined, this target hook is a function which outputs a
33594      DTP-relative reference to the given TLS symbol of the specified
33595      size.
33597  -- Macro: PUT_SDB_...
33598      Define these macros to override the assembler syntax for the
33599      special SDB assembler directives.  See `sdbout.c' for a list of
33600      these macros and their arguments.  If the standard syntax is used,
33601      you need not define them yourself.
33603  -- Macro: SDB_DELIM
33604      Some assemblers do not support a semicolon as a delimiter, even
33605      between SDB assembler directives.  In that case, define this macro
33606      to be the delimiter to use (usually `\n').  It is not necessary to
33607      define a new set of `PUT_SDB_OP' macros if this is the only change
33608      required.
33610  -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES
33611      Define this macro to allow references to unknown structure, union,
33612      or enumeration tags to be emitted.  Standard COFF does not allow
33613      handling of unknown references, MIPS ECOFF has support for it.
33615  -- Macro: SDB_ALLOW_FORWARD_REFERENCES
33616      Define this macro to allow references to structure, union, or
33617      enumeration tags that have not yet been seen to be handled.  Some
33618      assemblers choke if forward tags are used, while some require it.
33620  -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE)
33621      A C statement to output SDB debugging information before code for
33622      line number LINE of the current source file to the stdio stream
33623      STREAM.  The default is to emit an `.ln' directive.
33625 \x1f
33626 File: gccint.info,  Node: VMS Debug,  Prev: SDB and DWARF,  Up: Debugging Info
33628 17.22.6 Macros for VMS Debug Format
33629 -----------------------------------
33631 Here are macros for VMS debug format.
33633  -- Macro: VMS_DEBUGGING_INFO
33634      Define this macro if GCC should produce debugging output for VMS
33635      in response to the `-g' option.  The default behavior for VMS is
33636      to generate minimal debug info for a traceback in the absence of
33637      `-g' unless explicitly overridden with `-g0'.  This behavior is
33638      controlled by `OPTIMIZATION_OPTIONS' and `OVERRIDE_OPTIONS'.
33640 \x1f
33641 File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros
33643 17.23 Cross Compilation and Floating Point
33644 ==========================================
33646 While all modern machines use twos-complement representation for
33647 integers, there are a variety of representations for floating point
33648 numbers.  This means that in a cross-compiler the representation of
33649 floating point numbers in the compiled program may be different from
33650 that used in the machine doing the compilation.
33652  Because different representation systems may offer different amounts of
33653 range and precision, all floating point constants must be represented in
33654 the target machine's format.  Therefore, the cross compiler cannot
33655 safely use the host machine's floating point arithmetic; it must emulate
33656 the target's arithmetic.  To ensure consistency, GCC always uses
33657 emulation to work with floating point values, even when the host and
33658 target floating point formats are identical.
33660  The following macros are provided by `real.h' for the compiler to use.
33661 All parts of the compiler which generate or optimize floating-point
33662 calculations must use these macros.  They may evaluate their operands
33663 more than once, so operands must not have side effects.
33665  -- Macro: REAL_VALUE_TYPE
33666      The C data type to be used to hold a floating point value in the
33667      target machine's format.  Typically this is a `struct' containing
33668      an array of `HOST_WIDE_INT', but all code should treat it as an
33669      opaque quantity.
33671  -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
33672      Compares for equality the two values, X and Y.  If the target
33673      floating point format supports negative zeroes and/or NaNs,
33674      `REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and `REAL_VALUES_EQUAL
33675      (NaN, NaN)' is false.
33677  -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
33678      Tests whether X is less than Y.
33680  -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
33681      Truncates X to a signed integer, rounding toward zero.
33683  -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX
33684           (REAL_VALUE_TYPE X)
33685      Truncates X to an unsigned integer, rounding toward zero.  If X is
33686      negative, returns zero.
33688  -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum
33689           machine_mode MODE)
33690      Converts STRING into a floating point number in the target
33691      machine's representation for mode MODE.  This routine can handle
33692      both decimal and hexadecimal floating point constants, using the
33693      syntax defined by the C language for both.
33695  -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
33696      Returns 1 if X is negative (including negative zero), 0 otherwise.
33698  -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
33699      Determines whether X represents infinity (positive or negative).
33701  -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
33702      Determines whether X represents a "NaN" (not-a-number).
33704  -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code
33705           CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
33706      Calculates an arithmetic operation on the two floating point values
33707      X and Y, storing the result in OUTPUT (which must be a variable).
33709      The operation to be performed is specified by CODE.  Only the
33710      following codes are supported: `PLUS_EXPR', `MINUS_EXPR',
33711      `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'.
33713      If `REAL_ARITHMETIC' is asked to evaluate division by zero and the
33714      target's floating point format cannot represent infinity, it will
33715      call `abort'.  Callers should check for this situation first, using
33716      `MODE_HAS_INFINITIES'.  *Note Storage Layout::.
33718  -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
33719      Returns the negative of the floating point value X.
33721  -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
33722      Returns the absolute value of X.
33724  -- Macro: REAL_VALUE_TYPE REAL_VALUE_TRUNCATE (REAL_VALUE_TYPE MODE,
33725           enum machine_mode X)
33726      Truncates the floating point value X to fit in MODE.  The return
33727      value is still a full-size `REAL_VALUE_TYPE', but it has an
33728      appropriate bit pattern to be output as a floating constant whose
33729      precision accords with mode MODE.
33731  -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT
33732           HIGH, REAL_VALUE_TYPE X)
33733      Converts a floating point value X into a double-precision integer
33734      which is then stored into LOW and HIGH.  If the value is not
33735      integral, it is truncated.
33737  -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT
33738           LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE)
33739      Converts a double-precision integer found in LOW and HIGH, into a
33740      floating point value which is then stored into X.  The value is
33741      truncated to fit in mode MODE.
33743 \x1f
33744 File: gccint.info,  Node: Mode Switching,  Next: Target Attributes,  Prev: Floating Point,  Up: Target Macros
33746 17.24 Mode Switching Instructions
33747 =================================
33749 The following macros control mode switching optimizations:
33751  -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY)
33752      Define this macro if the port needs extra instructions inserted
33753      for mode switching in an optimizing compilation.
33755      For an example, the SH4 can perform both single and double
33756      precision floating point operations, but to perform a single
33757      precision operation, the FPSCR PR bit has to be cleared, while for
33758      a double precision operation, this bit has to be set.  Changing
33759      the PR bit requires a general purpose register as a scratch
33760      register, hence these FPSCR sets have to be inserted before
33761      reload, i.e. you can't put this into instruction emitting or
33762      `TARGET_MACHINE_DEPENDENT_REORG'.
33764      You can have multiple entities that are mode-switched, and select
33765      at run time which entities actually need it.
33766      `OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY
33767      that needs mode-switching.  If you define this macro, you also
33768      have to define `NUM_MODES_FOR_MODE_SWITCHING', `MODE_NEEDED',
33769      `MODE_PRIORITY_TO_MODE' and `EMIT_MODE_SET'.  `MODE_AFTER',
33770      `MODE_ENTRY', and `MODE_EXIT' are optional.
33772  -- Macro: NUM_MODES_FOR_MODE_SWITCHING
33773      If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as
33774      initializer for an array of integers.  Each initializer element N
33775      refers to an entity that needs mode switching, and specifies the
33776      number of different modes that might need to be set for this
33777      entity.  The position of the initializer in the
33778      initializer--starting counting at zero--determines the integer
33779      that is used to refer to the mode-switched entity in question.  In
33780      macros that take mode arguments / yield a mode result, modes are
33781      represented as numbers 0 ... N - 1.  N is used to specify that no
33782      mode switch is needed / supplied.
33784  -- Macro: MODE_NEEDED (ENTITY, INSN)
33785      ENTITY is an integer specifying a mode-switched entity.  If
33786      `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
33787      return an integer value not larger than the corresponding element
33788      in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
33789      must be switched into prior to the execution of INSN.
33791  -- Macro: MODE_AFTER (MODE, INSN)
33792      If this macro is defined, it is evaluated for every INSN during
33793      mode switching.  It determines the mode that an insn results in (if
33794      different from the incoming mode).
33796  -- Macro: MODE_ENTRY (ENTITY)
33797      If this macro is defined, it is evaluated for every ENTITY that
33798      needs mode switching.  It should evaluate to an integer, which is
33799      a mode that ENTITY is assumed to be switched to at function entry.
33800      If `MODE_ENTRY' is defined then `MODE_EXIT' must be defined.
33802  -- Macro: MODE_EXIT (ENTITY)
33803      If this macro is defined, it is evaluated for every ENTITY that
33804      needs mode switching.  It should evaluate to an integer, which is
33805      a mode that ENTITY is assumed to be switched to at function exit.
33806      If `MODE_EXIT' is defined then `MODE_ENTRY' must be defined.
33808  -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N)
33809      This macro specifies the order in which modes for ENTITY are
33810      processed.  0 is the highest priority,
33811      `NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest.  The value
33812      of the macro should be an integer designating a mode for ENTITY.
33813      For any fixed ENTITY, `mode_priority_to_mode' (ENTITY, N) shall be
33814      a bijection in 0 ...  `num_modes_for_mode_switching[ENTITY] - 1'.
33816  -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE)
33817      Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE
33818      is the set of hard registers live at the point where the insn(s)
33819      are to be inserted.
33821 \x1f
33822 File: gccint.info,  Node: Target Attributes,  Next: Emulated TLS,  Prev: Mode Switching,  Up: Target Macros
33824 17.25 Defining target-specific uses of `__attribute__'
33825 ======================================================
33827 Target-specific attributes may be defined for functions, data and types.
33828 These are described using the following target hooks; they also need to
33829 be documented in `extend.texi'.
33831  -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
33832      If defined, this target hook points to an array of `struct
33833      attribute_spec' (defined in `tree.h') specifying the machine
33834      specific attributes for this target and some of the restrictions
33835      on the entities to which these attributes are applied and the
33836      arguments they take.
33838  -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1,
33839           const_tree TYPE2)
33840      If defined, this target hook is a function which returns zero if
33841      the attributes on TYPE1 and TYPE2 are incompatible, one if they
33842      are compatible, and two if they are nearly compatible (which
33843      causes a warning to be generated).  If this is not defined,
33844      machine-specific attributes are supposed always to be compatible.
33846  -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
33847      If defined, this target hook is a function which assigns default
33848      attributes to the newly defined TYPE.
33850  -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
33851           TYPE2)
33852      Define this target hook if the merging of type attributes needs
33853      special handling.  If defined, the result is a list of the combined
33854      `TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
33855      `comptypes' has already been called and returned 1.  This function
33856      may call `merge_attributes' to handle machine-independent merging.
33858  -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
33859           NEWDECL)
33860      Define this target hook if the merging of decl attributes needs
33861      special handling.  If defined, the result is a list of the combined
33862      `DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
33863      declaration of OLDDECL.  Examples of when this is needed are when
33864      one attribute overrides another, or when an attribute is nullified
33865      by a subsequent definition.  This function may call
33866      `merge_attributes' to handle machine-independent merging.
33868      If the only target-specific handling you require is `dllimport'
33869      for Microsoft Windows targets, you should define the macro
33870      `TARGET_DLLIMPORT_DECL_ATTRIBUTES' to `1'.  The compiler will then
33871      define a function called `merge_dllimport_decl_attributes' which
33872      can then be defined as the expansion of
33873      `TARGET_MERGE_DECL_ATTRIBUTES'.  You can also add
33874      `handle_dll_attribute' in the attribute table for your port to
33875      perform initial processing of the `dllimport' and `dllexport'
33876      attributes.  This is done in `i386/cygwin.h' and `i386/i386.c',
33877      for example.
33879  -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree
33880           DECL)
33881      DECL is a variable or function with `__attribute__((dllimport))'
33882      specified. Use this hook if the target needs to add extra
33883      validation checks to `handle_dll_attribute'.
33885  -- Macro: TARGET_DECLSPEC
33886      Define this macro to a nonzero value if you want to treat
33887      `__declspec(X)' as equivalent to `__attribute((X))'.  By default,
33888      this behavior is enabled only for targets that define
33889      `TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  The current implementation of
33890      `__declspec' is via a built-in macro, but you should not rely on
33891      this implementation detail.
33893  -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
33894           *ATTR_PTR)
33895      Define this target hook if you want to be able to add attributes
33896      to a decl when it is being created.  This is normally useful for
33897      back ends which wish to implement a pragma by using the attributes
33898      which correspond to the pragma's effect.  The NODE argument is the
33899      decl which is being created.  The ATTR_PTR argument is a pointer
33900      to the attribute list for this decl.  The list itself should not
33901      be modified, since it may be shared with other decls, but
33902      attributes may be chained on the head of the list and `*ATTR_PTR'
33903      modified to point to the new attributes, or a copy of the list may
33904      be made if further changes are needed.
33906  -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree
33907           FNDECL)
33908      This target hook returns `true' if it is ok to inline FNDECL into
33909      the current function, despite its having target-specific
33910      attributes, `false' otherwise.  By default, if a function has a
33911      target specific attribute attached to it, it will not be inlined.
33913  -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL,
33914           tree NAME, tree ARGS, int FLAGS)
33915      This hook is called to parse the `attribute(option("..."))', and
33916      it allows the function to set different target machine compile time
33917      options for the current function that might be different than the
33918      options specified on the command line.  The hook should return
33919      `true' if the options are valid.
33921      The hook should set the DECL_FUNCTION_SPECIFIC_TARGET field in the
33922      function declaration to hold a pointer to a target specific STRUCT
33923      CL_TARGET_OPTION structure.
33925  -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR)
33926      This hook is called to save any additional target specific
33927      information in the STRUCT CL_TARGET_OPTION structure for function
33928      specific options.  *Note Option file format::.
33930  -- Target Hook: void TARGET_OPTION_RESTORE (struct cl_target_option
33931           *PTR)
33932      This hook is called to restore any additional target specific
33933      information in the STRUCT CL_TARGET_OPTION structure for function
33934      specific options.
33936  -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT,
33937           struct cl_target_option *PTR)
33938      This hook is called to print any additional target specific
33939      information in the STRUCT CL_TARGET_OPTION structure for function
33940      specific options.
33942  -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (target ARGS)
33943      This target hook parses the options for `#pragma GCC option' to
33944      set the machine specific options for functions that occur later in
33945      the input stream.  The options should be the same as handled by the
33946      `TARGET_VALID_OPTION_ATTRIBUTE_P' hook.
33948  -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE)
33949      This target hook returns `false' if the CALLER function cannot
33950      inline CALLEE, based on target specific information.  By default,
33951      inlining is not allowed if the callee function has function
33952      specific target options and the caller does not use the same
33953      options.
33955 \x1f
33956 File: gccint.info,  Node: Emulated TLS,  Next: MIPS Coprocessors,  Prev: Target Attributes,  Up: Target Macros
33958 17.26 Emulating TLS
33959 ===================
33961 For targets whose psABI does not provide Thread Local Storage via
33962 specific relocations and instruction sequences, an emulation layer is
33963 used.  A set of target hooks allows this emulation layer to be
33964 configured for the requirements of a particular target.  For instance
33965 the psABI may in fact specify TLS support in terms of an emulation
33966 layer.
33968  The emulation layer works by creating a control object for every TLS
33969 object.  To access the TLS object, a lookup function is provided which,
33970 when given the address of the control object, will return the address
33971 of the current thread's instance of the TLS object.
33973  -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS
33974      Contains the name of the helper function that uses a TLS control
33975      object to locate a TLS instance.  The default causes libgcc's
33976      emulated TLS helper function to be used.
33978  -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON
33979      Contains the name of the helper function that should be used at
33980      program startup to register TLS objects that are implicitly
33981      initialized to zero.  If this is `NULL', all TLS objects will have
33982      explicit initializers.  The default causes libgcc's emulated TLS
33983      registration function to be used.
33985  -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION
33986      Contains the name of the section in which TLS control variables
33987      should be placed.  The default of `NULL' allows these to be placed
33988      in any section.
33990  -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION
33991      Contains the name of the section in which TLS initializers should
33992      be placed.  The default of `NULL' allows these to be placed in any
33993      section.
33995  -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX
33996      Contains the prefix to be prepended to TLS control variable names.
33997      The default of `NULL' uses a target-specific prefix.
33999  -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX
34000      Contains the prefix to be prepended to TLS initializer objects.
34001      The default of `NULL' uses a target-specific prefix.
34003  -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME)
34004      Specifies a function that generates the FIELD_DECLs for a TLS
34005      control object type.  TYPE is the RECORD_TYPE the fields are for
34006      and NAME should be filled with the structure tag, if the default of
34007      `__emutls_object' is unsuitable.  The default creates a type
34008      suitable for libgcc's emulated TLS function.
34010  -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree
34011           TMPL_ADDR)
34012      Specifies a function that generates the CONSTRUCTOR to initialize a
34013      TLS control object.  VAR is the TLS control object, DECL is the
34014      TLS object and TMPL_ADDR is the address of the initializer.  The
34015      default initializes libgcc's emulated TLS control object.
34017  -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED
34018      Specifies whether the alignment of TLS control variable objects is
34019      fixed and should not be increased as some backends may do to
34020      optimize single objects.  The default is false.
34022  -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
34023      Specifies whether a DWARF `DW_OP_form_tls_address' location
34024      descriptor may be used to describe emulated TLS control objects.
34026 \x1f
34027 File: gccint.info,  Node: MIPS Coprocessors,  Next: PCH Target,  Prev: Emulated TLS,  Up: Target Macros
34029 17.27 Defining coprocessor specifics for MIPS targets.
34030 ======================================================
34032 The MIPS specification allows MIPS implementations to have as many as 4
34033 coprocessors, each with as many as 32 private registers.  GCC supports
34034 accessing these registers and transferring values between the registers
34035 and memory using asm-ized variables.  For example:
34037        register unsigned int cp0count asm ("c0r1");
34038        unsigned int d;
34040        d = cp0count + 3;
34042  ("c0r1" is the default name of register 1 in coprocessor 0; alternate
34043 names may be added as described below, or the default names may be
34044 overridden entirely in `SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)
34046  Coprocessor registers are assumed to be epilogue-used; sets to them
34047 will be preserved even if it does not appear that the register is used
34048 again later in the function.
34050  Another note: according to the MIPS spec, coprocessor 1 (if present) is
34051 the FPU.  One accesses COP1 registers through standard mips
34052 floating-point support; they are not included in this mechanism.
34054  There is one macro used in defining the MIPS coprocessor interface
34055 which you may want to override in subtargets; it is described below.
34057  -- Macro: ALL_COP_ADDITIONAL_REGISTER_NAMES
34058      A comma-separated list (with leading comma) of pairs describing the
34059      alternate names of coprocessor registers.  The format of each
34060      entry should be
34061           { ALTERNATENAME, REGISTER_NUMBER}
34062      Default: empty.
34064 \x1f
34065 File: gccint.info,  Node: PCH Target,  Next: C++ ABI,  Prev: MIPS Coprocessors,  Up: Target Macros
34067 17.28 Parameters for Precompiled Header Validity Checking
34068 =========================================================
34070  -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ)
34071      This hook returns a pointer to the data needed by
34072      `TARGET_PCH_VALID_P' and sets `*SZ' to the size of the data in
34073      bytes.
34075  -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA,
34076           size_t SZ)
34077      This hook checks whether the options used to create a PCH file are
34078      compatible with the current settings.  It returns `NULL' if so and
34079      a suitable error message if not.  Error messages will be presented
34080      to the user and must be localized using `_(MSG)'.
34082      DATA is the data that was returned by `TARGET_GET_PCH_VALIDITY'
34083      when the PCH file was created and SZ is the size of that data in
34084      bytes.  It's safe to assume that the data was created by the same
34085      version of the compiler, so no format checking is needed.
34087      The default definition of `default_pch_valid_p' should be suitable
34088      for most targets.
34090  -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int
34091           PCH_FLAGS)
34092      If this hook is nonnull, the default implementation of
34093      `TARGET_PCH_VALID_P' will use it to check for compatible values of
34094      `target_flags'.  PCH_FLAGS specifies the value that `target_flags'
34095      had when the PCH file was created.  The return value is the same
34096      as for `TARGET_PCH_VALID_P'.
34098 \x1f
34099 File: gccint.info,  Node: C++ ABI,  Next: Named Address Spaces,  Prev: PCH Target,  Up: Target Macros
34101 17.29 C++ ABI parameters
34102 ========================
34104  -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void)
34105      Define this hook to override the integer type used for guard
34106      variables.  These are used to implement one-time construction of
34107      static objects.  The default is long_long_integer_type_node.
34109  -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
34110      This hook determines how guard variables are used.  It should
34111      return `false' (the default) if the first byte should be used.  A
34112      return value of `true' indicates that only the least significant
34113      bit should be used.
34115  -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
34116      This hook returns the size of the cookie to use when allocating an
34117      array whose elements have the indicated TYPE.  Assumes that it is
34118      already known that a cookie is needed.  The default is `max(sizeof
34119      (size_t), alignof(type))', as defined in section 2.7 of the
34120      IA64/Generic C++ ABI.
34122  -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
34123      This hook should return `true' if the element size should be
34124      stored in array cookies.  The default is to return `false'.
34126  -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
34127           IMPORT_EXPORT)
34128      If defined by a backend this hook allows the decision made to
34129      export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
34130      contain 1 if the class is going to be exported, -1 if it is going
34131      to be imported and 0 otherwise.  This function should return the
34132      modified value and perform any other actions necessary to support
34133      the backend's targeted operating system.
34135  -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
34136      This hook should return `true' if constructors and destructors
34137      return the address of the object created/destroyed.  The default
34138      is to return `false'.
34140  -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
34141      This hook returns true if the key method for a class (i.e., the
34142      method which, if defined in the current translation unit, causes
34143      the virtual table to be emitted) may be an inline function.  Under
34144      the standard Itanium C++ ABI the key method may be an inline
34145      function so long as the function is not declared inline in the
34146      class definition.  Under some variants of the ABI, an inline
34147      function can never be the key method.  The default is to return
34148      `true'.
34150  -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
34151           DECL)
34152      DECL is a virtual table, virtual table table, typeinfo object, or
34153      other similar implicit class data object that will be emitted with
34154      external linkage in this translation unit.  No ELF visibility has
34155      been explicitly specified.  If the target needs to specify a
34156      visibility other than that of the containing class, use this hook
34157      to set `DECL_VISIBILITY' and `DECL_VISIBILITY_SPECIFIED'.
34159  -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
34160      This hook returns true (the default) if virtual tables and other
34161      similar implicit class data objects are always COMDAT if they have
34162      external linkage.  If this hook returns false, then class data for
34163      classes whose virtual table will be emitted in only one translation
34164      unit will not be COMDAT.
34166  -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)
34167      This hook returns true (the default) if the RTTI information for
34168      the basic types which is defined in the C++ runtime should always
34169      be COMDAT, false if it should not be COMDAT.
34171  -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
34172      This hook returns true if `__aeabi_atexit' (as defined by the ARM
34173      EABI) should be used to register static destructors when
34174      `-fuse-cxa-atexit' is in effect.  The default is to return false
34175      to use `__cxa_atexit'.
34177  -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
34178      This hook returns true if the target `atexit' function can be used
34179      in the same manner as `__cxa_atexit' to register C++ static
34180      destructors. This requires that `atexit'-registered functions in
34181      shared libraries are run in the correct order when the libraries
34182      are unloaded. The default is to return false.
34184  -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE)
34185      TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has
34186      just been defined.  Use this hook to make adjustments to the class
34187      (eg, tweak visibility or perform any other required target
34188      modifications).
34190 \x1f
34191 File: gccint.info,  Node: Named Address Spaces,  Next: Misc,  Prev: C++ ABI,  Up: Target Macros
34193 17.30 Adding support for named address spaces
34194 =============================================
34196 The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards
34197 committee, `Programming Languages - C - Extensions to support embedded
34198 processors', specifies a syntax for embedded processors to specify
34199 alternate address spaces.  You can configure a GCC port to support
34200 section 5.1 of the draft report to add support for address spaces other
34201 than the default address space.  These address spaces are new keywords
34202 that are similar to the `volatile' and `const' type attributes.
34204  Pointers to named address spaces can have a different size than
34205 pointers to the generic address space.
34207  For example, the SPU port uses the `__ea' address space to refer to
34208 memory in the host processor, rather than memory local to the SPU
34209 processor.  Access to memory in the `__ea' address space involves
34210 issuing DMA operations to move data between the host processor and the
34211 local processor memory address space.  Pointers in the `__ea' address
34212 space are either 32 bits or 64 bits based on the `-mea32' or `-mea64'
34213 switches (native SPU pointers are always 32 bits).
34215  Internally, address spaces are represented as a small integer in the
34216 range 0 to 15 with address space 0 being reserved for the generic
34217 address space.
34219  -- Macro: TARGET_ADDR_SPACE_KEYWORDS
34220      A list of `ADDR_SPACE_KEYWORD' macros to define each named address
34221      keyword.  The `ADDR_SPACE_KEYWORD' macro takes two arguments, the
34222      keyword string and the number of the named address space.  For
34223      example, the SPU port uses the following to declare `__ea' as the
34224      keyword for named address space #1:
34225           #define ADDR_SPACE_EA 1
34226           #define TARGET_ADDR_SPACE_KEYWORDS ADDR_SPACE_KEYWORD ("__ea", ADDR_SPACE_EA)
34228  -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_POINTER_MODE
34229           (addr_space_t ADDRESS_SPACE)
34230      Define this to return the machine mode to use for pointers to
34231      ADDRESS_SPACE if the target supports named address spaces.  The
34232      default version of this hook returns `ptr_mode' for the generic
34233      address space only.
34235  -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE
34236           (addr_space_t ADDRESS_SPACE)
34237      Define this to return the machine mode to use for addresses in
34238      ADDRESS_SPACE if the target supports named address spaces.  The
34239      default version of this hook returns `Pmode' for the generic
34240      address space only.
34242  -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum
34243           machine_mode MODE, addr_space_t AS)
34244      Define this to return nonzero if the port can handle pointers with
34245      machine mode MODE to address space AS.  This target hook is the
34246      same as the `TARGET_VALID_POINTER_MODE' target hook, except that
34247      it includes explicit named address space support.  The default
34248      version of this hook returns true for the modes returned by either
34249      the `TARGET_ADDR_SPACE_POINTER_MODE' or
34250      `TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given
34251      address space.
34253  -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (enum
34254           machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS)
34255      Define this to return true if EXP is a valid address for mode MODE
34256      in the named address space AS.  The STRICT parameter says whether
34257      strict addressing is in effect after reload has finished.  This
34258      target hook is the same as the `TARGET_LEGITIMATE_ADDRESS_P'
34259      target hook, except that it includes explicit named address space
34260      support.
34262  -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx
34263           OLDX, enum machine_mode MODE, addr_space_t AS)
34264      Define this to modify an invalid address X to be a valid address
34265      with mode MODE in the named address space AS.  This target hook is
34266      the same as the `TARGET_LEGITIMIZE_ADDRESS' target hook, except
34267      that it includes explicit named address space support.
34269  -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t
34270           SUPERSET, addr_space_t SUBSET)
34271      Define this to return whether the SUBSET named address space is
34272      contained within the SUPERSET named address space.  Pointers to a
34273      named address space that is a subset of another named address space
34274      will be converted automatically without a cast if used together in
34275      arithmetic operations.  Pointers to a superset address space can be
34276      converted to pointers to a subset address space via explicit casts.
34278  -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE,
34279           tree TO_TYPE)
34280      Define this to convert the pointer expression represented by the
34281      RTL OP with type FROM_TYPE that points to a named address space to
34282      a new pointer expression with type TO_TYPE that points to a
34283      different named address space.  When this hook it called, it is
34284      guaranteed that one of the two address spaces is a subset of the
34285      other, as determined by the `TARGET_ADDR_SPACE_SUBSET_P' target
34286      hook.
34288 \x1f
34289 File: gccint.info,  Node: Misc,  Prev: Named Address Spaces,  Up: Target Macros
34291 17.31 Miscellaneous Parameters
34292 ==============================
34294 Here are several miscellaneous parameters.
34296  -- Macro: HAS_LONG_COND_BRANCH
34297      Define this boolean macro to indicate whether or not your
34298      architecture has conditional branches that can span all of memory.
34299      It is used in conjunction with an optimization that partitions
34300      hot and cold basic blocks into separate sections of the
34301      executable.  If this macro is set to false, gcc will convert any
34302      conditional branches that attempt to cross between sections into
34303      unconditional branches or indirect jumps.
34305  -- Macro: HAS_LONG_UNCOND_BRANCH
34306      Define this boolean macro to indicate whether or not your
34307      architecture has unconditional branches that can span all of
34308      memory.  It is used in conjunction with an optimization that
34309      partitions hot and cold basic blocks into separate sections of the
34310      executable.  If this macro is set to false, gcc will convert any
34311      unconditional branches that attempt to cross between sections into
34312      indirect jumps.
34314  -- Macro: CASE_VECTOR_MODE
34315      An alias for a machine mode name.  This is the machine mode that
34316      elements of a jump-table should have.
34318  -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
34319      Optional: return the preferred mode for an `addr_diff_vec' when
34320      the minimum and maximum offset are known.  If you define this, it
34321      enables extra code in branch shortening to deal with
34322      `addr_diff_vec'.  To make this work, you also have to define
34323      `INSN_ALIGN' and make the alignment for `addr_diff_vec' explicit.
34324      The BODY argument is provided so that the offset_unsigned and scale
34325      flags can be updated.
34327  -- Macro: CASE_VECTOR_PC_RELATIVE
34328      Define this macro to be a C expression to indicate when jump-tables
34329      should contain relative addresses.  You need not define this macro
34330      if jump-tables never contain relative addresses, or jump-tables
34331      should contain relative addresses only when `-fPIC' or `-fPIC' is
34332      in effect.
34334  -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void)
34335      This function return the smallest number of different values for
34336      which it is best to use a jump-table instead of a tree of
34337      conditional branches.  The default is four for machines with a
34338      `casesi' instruction and five otherwise.  This is best for most
34339      machines.
34341  -- Macro: CASE_USE_BIT_TESTS
34342      Define this macro to be a C expression to indicate whether C switch
34343      statements may be implemented by a sequence of bit tests.  This is
34344      advantageous on processors that can efficiently implement left
34345      shift of 1 by the number of bits held in a register, but
34346      inappropriate on targets that would require a loop.  By default,
34347      this macro returns `true' if the target defines an `ashlsi3'
34348      pattern, and `false' otherwise.
34350  -- Macro: WORD_REGISTER_OPERATIONS
34351      Define this macro if operations between registers with integral
34352      mode smaller than a word are always performed on the entire
34353      register.  Most RISC machines have this property and most CISC
34354      machines do not.
34356  -- Macro: LOAD_EXTEND_OP (MEM_MODE)
34357      Define this macro to be a C expression indicating when insns that
34358      read memory in MEM_MODE, an integral mode narrower than a word,
34359      set the bits outside of MEM_MODE to be either the sign-extension
34360      or the zero-extension of the data read.  Return `SIGN_EXTEND' for
34361      values of MEM_MODE for which the insn sign-extends, `ZERO_EXTEND'
34362      for which it zero-extends, and `UNKNOWN' for other modes.
34364      This macro is not called with MEM_MODE non-integral or with a width
34365      greater than or equal to `BITS_PER_WORD', so you may return any
34366      value in this case.  Do not define this macro if it would always
34367      return `UNKNOWN'.  On machines where this macro is defined, you
34368      will normally define it as the constant `SIGN_EXTEND' or
34369      `ZERO_EXTEND'.
34371      You may return a non-`UNKNOWN' value even if for some hard
34372      registers the sign extension is not performed, if for the
34373      `REGNO_REG_CLASS' of these hard registers
34374      `CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is
34375      MEM_MODE and the TO mode is any integral mode larger than this but
34376      not larger than `word_mode'.
34378      You must return `UNKNOWN' if for some hard registers that allow
34379      this mode, `CANNOT_CHANGE_MODE_CLASS' says that they cannot change
34380      to `word_mode', but that they can change to another integral mode
34381      that is larger then MEM_MODE but still smaller than `word_mode'.
34383  -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
34384      Define this macro if loading short immediate values into registers
34385      sign extends.
34387  -- Macro: FIXUNS_TRUNC_LIKE_FIX_TRUNC
34388      Define this macro if the same instructions that convert a floating
34389      point number to a signed fixed point number also convert validly
34390      to an unsigned one.
34392  -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum
34393           machine_mode MODE)
34394      When `-ffast-math' is in effect, GCC tries to optimize divisions
34395      by the same divisor, by turning them into multiplications by the
34396      reciprocal.  This target hook specifies the minimum number of
34397      divisions that should be there for GCC to perform the optimization
34398      for a variable of mode MODE.  The default implementation returns 3
34399      if the machine has an instruction for the division, and 2 if it
34400      does not.
34402  -- Macro: MOVE_MAX
34403      The maximum number of bytes that a single instruction can move
34404      quickly between memory and registers or between two memory
34405      locations.
34407  -- Macro: MAX_MOVE_MAX
34408      The maximum number of bytes that a single instruction can move
34409      quickly between memory and registers or between two memory
34410      locations.  If this is undefined, the default is `MOVE_MAX'.
34411      Otherwise, it is the constant value that is the largest value that
34412      `MOVE_MAX' can have at run-time.
34414  -- Macro: SHIFT_COUNT_TRUNCATED
34415      A C expression that is nonzero if on this machine the number of
34416      bits actually used for the count of a shift operation is equal to
34417      the number of bits needed to represent the size of the object
34418      being shifted.  When this macro is nonzero, the compiler will
34419      assume that it is safe to omit a sign-extend, zero-extend, and
34420      certain bitwise `and' instructions that truncates the count of a
34421      shift operation.  On machines that have instructions that act on
34422      bit-fields at variable positions, which may include `bit test'
34423      instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables
34424      deletion of truncations of the values that serve as arguments to
34425      bit-field instructions.
34427      If both types of instructions truncate the count (for shifts) and
34428      position (for bit-field operations), or if no variable-position
34429      bit-field instructions exist, you should define this macro.
34431      However, on some machines, such as the 80386 and the 680x0,
34432      truncation only applies to shift operations and not the (real or
34433      pretended) bit-field operations.  Define `SHIFT_COUNT_TRUNCATED'
34434      to be zero on such machines.  Instead, add patterns to the `md'
34435      file that include the implied truncation of the shift instructions.
34437      You need not define this macro if it would always have the value
34438      of zero.
34440  -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK
34441           (enum machine_mode MODE)
34442      This function describes how the standard shift patterns for MODE
34443      deal with shifts by negative amounts or by more than the width of
34444      the mode.  *Note shift patterns::.
34446      On many machines, the shift patterns will apply a mask M to the
34447      shift count, meaning that a fixed-width shift of X by Y is
34448      equivalent to an arbitrary-width shift of X by Y & M.  If this is
34449      true for mode MODE, the function should return M, otherwise it
34450      should return 0.  A return value of 0 indicates that no particular
34451      behavior is guaranteed.
34453      Note that, unlike `SHIFT_COUNT_TRUNCATED', this function does
34454      _not_ apply to general shift rtxes; it applies only to instructions
34455      that are generated by the named shift patterns.
34457      The default implementation of this function returns
34458      `GET_MODE_BITSIZE (MODE) - 1' if `SHIFT_COUNT_TRUNCATED' and 0
34459      otherwise.  This definition is always safe, but if
34460      `SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
34461      nevertheless truncate the shift count, you may get better code by
34462      overriding it.
34464  -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)
34465      A C expression which is nonzero if on this machine it is safe to
34466      "convert" an integer of INPREC bits to one of OUTPREC bits (where
34467      OUTPREC is smaller than INPREC) by merely operating on it as if it
34468      had only OUTPREC bits.
34470      On many machines, this expression can be 1.
34472      When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
34473      modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result.
34474      If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in
34475      such cases may improve things.
34477  -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE,
34478           enum machine_mode REP_MODE)
34479      The representation of an integral mode can be such that the values
34480      are always extended to a wider integral mode.  Return
34481      `SIGN_EXTEND' if values of MODE are represented in sign-extended
34482      form to REP_MODE.  Return `UNKNOWN' otherwise.  (Currently, none
34483      of the targets use zero-extended representation this way so unlike
34484      `LOAD_EXTEND_OP', `TARGET_MODE_REP_EXTENDED' is expected to return
34485      either `SIGN_EXTEND' or `UNKNOWN'.  Also no target extends MODE to
34486      REP_MODE so that REP_MODE is not the next widest integral mode and
34487      currently we take advantage of this fact.)
34489      Similarly to `LOAD_EXTEND_OP' you may return a non-`UNKNOWN' value
34490      even if the extension is not performed on certain hard registers
34491      as long as for the `REGNO_REG_CLASS' of these hard registers
34492      `CANNOT_CHANGE_MODE_CLASS' returns nonzero.
34494      Note that `TARGET_MODE_REP_EXTENDED' and `LOAD_EXTEND_OP' describe
34495      two related properties.  If you define `TARGET_MODE_REP_EXTENDED
34496      (mode, word_mode)' you probably also want to define
34497      `LOAD_EXTEND_OP (mode)' to return the same type of extension.
34499      In order to enforce the representation of `mode',
34500      `TRULY_NOOP_TRUNCATION' should return false when truncating to
34501      `mode'.
34503  -- Macro: STORE_FLAG_VALUE
34504      A C expression describing the value returned by a comparison
34505      operator with an integral mode and stored by a store-flag
34506      instruction (`sCOND') when the condition is true.  This
34507      description must apply to _all_ the `sCOND' patterns and all the
34508      comparison operators whose results have a `MODE_INT' mode.
34510      A value of 1 or -1 means that the instruction implementing the
34511      comparison operator returns exactly 1 or -1 when the comparison is
34512      true and 0 when the comparison is false.  Otherwise, the value
34513      indicates which bits of the result are guaranteed to be 1 when the
34514      comparison is true.  This value is interpreted in the mode of the
34515      comparison operation, which is given by the mode of the first
34516      operand in the `sCOND' pattern.  Either the low bit or the sign
34517      bit of `STORE_FLAG_VALUE' be on.  Presently, only those bits are
34518      used by the compiler.
34520      If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
34521      generate code that depends only on the specified bits.  It can also
34522      replace comparison operators with equivalent operations if they
34523      cause the required bits to be set, even if the remaining bits are
34524      undefined.  For example, on a machine whose comparison operators
34525      return an `SImode' value and where `STORE_FLAG_VALUE' is defined as
34526      `0x80000000', saying that just the sign bit is relevant, the
34527      expression
34529           (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
34531      can be converted to
34533           (ashift:SI X (const_int N))
34535      where N is the appropriate shift count to move the bit being
34536      tested into the sign bit.
34538      There is no way to describe a machine that always sets the
34539      low-order bit for a true value, but does not guarantee the value
34540      of any other bits, but we do not know of any machine that has such
34541      an instruction.  If you are trying to port GCC to such a machine,
34542      include an instruction to perform a logical-and of the result with
34543      1 in the pattern for the comparison operators and let us know at
34544      <gcc@gcc.gnu.org>.
34546      Often, a machine will have multiple instructions that obtain a
34547      value from a comparison (or the condition codes).  Here are rules
34548      to guide the choice of value for `STORE_FLAG_VALUE', and hence the
34549      instructions to be used:
34551         * Use the shortest sequence that yields a valid definition for
34552           `STORE_FLAG_VALUE'.  It is more efficient for the compiler to
34553           "normalize" the value (convert it to, e.g., 1 or 0) than for
34554           the comparison operators to do so because there may be
34555           opportunities to combine the normalization with other
34556           operations.
34558         * For equal-length sequences, use a value of 1 or -1, with -1
34559           being slightly preferred on machines with expensive jumps and
34560           1 preferred on other machines.
34562         * As a second choice, choose a value of `0x80000001' if
34563           instructions exist that set both the sign and low-order bits
34564           but do not define the others.
34566         * Otherwise, use a value of `0x80000000'.
34568      Many machines can produce both the value chosen for
34569      `STORE_FLAG_VALUE' and its negation in the same number of
34570      instructions.  On those machines, you should also define a pattern
34571      for those cases, e.g., one matching
34573           (set A (neg:M (ne:M B C)))
34575      Some machines can also perform `and' or `plus' operations on
34576      condition code values with less instructions than the corresponding
34577      `sCOND' insn followed by `and' or `plus'.  On those machines,
34578      define the appropriate patterns.  Use the names `incscc' and
34579      `decscc', respectively, for the patterns which perform `plus' or
34580      `minus' operations on condition code values.  See `rs6000.md' for
34581      some examples.  The GNU Superoptizer can be used to find such
34582      instruction sequences on other machines.
34584      If this macro is not defined, the default value, 1, is used.  You
34585      need not define `STORE_FLAG_VALUE' if the machine has no store-flag
34586      instructions, or if the value generated by these instructions is 1.
34588  -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
34589      A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is
34590      returned when comparison operators with floating-point results are
34591      true.  Define this macro on machines that have comparison
34592      operations that return floating-point values.  If there are no
34593      such operations, do not define this macro.
34595  -- Macro: VECTOR_STORE_FLAG_VALUE (MODE)
34596      A C expression that gives a rtx representing the nonzero true
34597      element for vector comparisons.  The returned rtx should be valid
34598      for the inner mode of MODE which is guaranteed to be a vector
34599      mode.  Define this macro on machines that have vector comparison
34600      operations that return a vector result.  If there are no such
34601      operations, do not define this macro.  Typically, this macro is
34602      defined as `const1_rtx' or `constm1_rtx'.  This macro may return
34603      `NULL_RTX' to prevent the compiler optimizing such vector
34604      comparison operations for the given mode.
34606  -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
34607  -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
34608      A C expression that indicates whether the architecture defines a
34609      value for `clz' or `ctz' with a zero operand.  A result of `0'
34610      indicates the value is undefined.  If the value is defined for
34611      only the RTL expression, the macro should evaluate to `1'; if the
34612      value applies also to the corresponding optab entry (which is
34613      normally the case if it expands directly into the corresponding
34614      RTL), then the macro should evaluate to `2'.  In the cases where
34615      the value is defined, VALUE should be set to this value.
34617      If this macro is not defined, the value of `clz' or `ctz' at zero
34618      is assumed to be undefined.
34620      This macro must be defined if the target's expansion for `ffs'
34621      relies on a particular value to get correct results.  Otherwise it
34622      is not necessary, though it may be used to optimize some corner
34623      cases, and to provide a default expansion for the `ffs' optab.
34625      Note that regardless of this macro the "definedness" of `clz' and
34626      `ctz' at zero do _not_ extend to the builtin functions visible to
34627      the user.  Thus one may be free to adjust the value at will to
34628      match the target expansion of these operations without fear of
34629      breaking the API.
34631  -- Macro: Pmode
34632      An alias for the machine mode for pointers.  On most machines,
34633      define this to be the integer mode corresponding to the width of a
34634      hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit
34635      machines.  On some machines you must define this to be one of the
34636      partial integer modes, such as `PSImode'.
34638      The width of `Pmode' must be at least as large as the value of
34639      `POINTER_SIZE'.  If it is not equal, you must define the macro
34640      `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
34641      `Pmode'.
34643  -- Macro: FUNCTION_MODE
34644      An alias for the machine mode used for memory references to
34645      functions being called, in `call' RTL expressions.  On most CISC
34646      machines, where an instruction can begin at any byte address, this
34647      should be `QImode'.  On most RISC machines, where all instructions
34648      have fixed size and alignment, this should be a mode with the same
34649      size and alignment as the machine instruction words - typically
34650      `SImode' or `HImode'.
34652  -- Macro: STDC_0_IN_SYSTEM_HEADERS
34653      In normal operation, the preprocessor expands `__STDC__' to the
34654      constant 1, to signify that GCC conforms to ISO Standard C.  On
34655      some hosts, like Solaris, the system compiler uses a different
34656      convention, where `__STDC__' is normally 0, but is 1 if the user
34657      specifies strict conformance to the C Standard.
34659      Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
34660      convention when processing system header files, but when
34661      processing user files `__STDC__' will always expand to 1.
34663  -- Macro: NO_IMPLICIT_EXTERN_C
34664      Define this macro if the system header files support C++ as well
34665      as C.  This macro inhibits the usual method of using system header
34666      files in C++, which is to pretend that the file's contents are
34667      enclosed in `extern "C" {...}'.
34669  -- Macro: REGISTER_TARGET_PRAGMAS ()
34670      Define this macro if you want to implement any target-specific
34671      pragmas.  If defined, it is a C expression which makes a series of
34672      calls to `c_register_pragma' or `c_register_pragma_with_expansion'
34673      for each pragma.  The macro may also do any setup required for the
34674      pragmas.
34676      The primary reason to define this macro is to provide
34677      compatibility with other compilers for the same target.  In
34678      general, we discourage definition of target-specific pragmas for
34679      GCC.
34681      If the pragma can be implemented by attributes then you should
34682      consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as
34683      well.
34685      Preprocessor macros that appear on pragma lines are not expanded.
34686      All `#pragma' directives that do not match any registered pragma
34687      are silently ignored, unless the user specifies
34688      `-Wunknown-pragmas'.
34690  -- Function: void c_register_pragma (const char *SPACE, const char
34691           *NAME, void (*CALLBACK) (struct cpp_reader *))
34692  -- Function: void c_register_pragma_with_expansion (const char *SPACE,
34693           const char *NAME, void (*CALLBACK) (struct cpp_reader *))
34694      Each call to `c_register_pragma' or
34695      `c_register_pragma_with_expansion' establishes one pragma.  The
34696      CALLBACK routine will be called when the preprocessor encounters a
34697      pragma of the form
34699           #pragma [SPACE] NAME ...
34701      SPACE is the case-sensitive namespace of the pragma, or `NULL' to
34702      put the pragma in the global namespace.  The callback routine
34703      receives PFILE as its first argument, which can be passed on to
34704      cpplib's functions if necessary.  You can lex tokens after the
34705      NAME by calling `pragma_lex'.  Tokens that are not read by the
34706      callback will be silently ignored.  The end of the line is
34707      indicated by a token of type `CPP_EOF'.  Macro expansion occurs on
34708      the arguments of pragmas registered with
34709      `c_register_pragma_with_expansion' but not on the arguments of
34710      pragmas registered with `c_register_pragma'.
34712      Note that the use of `pragma_lex' is specific to the C and C++
34713      compilers.  It will not work in the Java or Fortran compilers, or
34714      any other language compilers for that matter.  Thus if
34715      `pragma_lex' is going to be called from target-specific code, it
34716      must only be done so when building the C and C++ compilers.  This
34717      can be done by defining the variables `c_target_objs' and
34718      `cxx_target_objs' in the target entry in the `config.gcc' file.
34719      These variables should name the target-specific, language-specific
34720      object file which contains the code that uses `pragma_lex'.  Note
34721      it will also be necessary to add a rule to the makefile fragment
34722      pointed to by `tmake_file' that shows how to build this object
34723      file.
34725  -- Macro: HANDLE_SYSV_PRAGMA
34726      Define this macro (to a value of 1) if you want the System V style
34727      pragmas `#pragma pack(<n>)' and `#pragma weak <name> [=<value>]'
34728      to be supported by gcc.
34730      The pack pragma specifies the maximum alignment (in bytes) of
34731      fields within a structure, in much the same way as the
34732      `__aligned__' and `__packed__' `__attribute__'s do.  A pack value
34733      of zero resets the behavior to the default.
34735      A subtlety for Microsoft Visual C/C++ style bit-field packing
34736      (e.g. -mms-bitfields) for targets that support it: When a
34737      bit-field is inserted into a packed record, the whole size of the
34738      underlying type is used by one or more same-size adjacent
34739      bit-fields (that is, if its long:3, 32 bits is used in the record,
34740      and any additional adjacent long bit-fields are packed into the
34741      same chunk of 32 bits.  However, if the size changes, a new field
34742      of that size is allocated).
34744      If both MS bit-fields and `__attribute__((packed))' are used, the
34745      latter will take precedence.  If `__attribute__((packed))' is used
34746      on a single field when MS bit-fields are in use, it will take
34747      precedence for that field, but the alignment of the rest of the
34748      structure may affect its placement.
34750      The weak pragma only works if `SUPPORTS_WEAK' and
34751      `ASM_WEAKEN_LABEL' are defined.  If enabled it allows the creation
34752      of specifically named weak labels, optionally with a value.
34754  -- Macro: HANDLE_PRAGMA_PACK_PUSH_POP
34755      Define this macro (to a value of 1) if you want to support the
34756      Win32 style pragmas `#pragma pack(push[,N])' and `#pragma
34757      pack(pop)'.  The `pack(push,[N])' pragma specifies the maximum
34758      alignment (in bytes) of fields within a structure, in much the
34759      same way as the `__aligned__' and `__packed__' `__attribute__'s
34760      do.  A pack value of zero resets the behavior to the default.
34761      Successive invocations of this pragma cause the previous values to
34762      be stacked, so that invocations of `#pragma pack(pop)' will return
34763      to the previous value.
34765  -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
34766      Define this macro, as well as `HANDLE_SYSV_PRAGMA', if macros
34767      should be expanded in the arguments of `#pragma pack'.
34769  -- Target Hook: bool TARGET_HANDLE_PRAGMA_EXTERN_PREFIX
34770      True if `#pragma extern_prefix' is to be supported.
34772  -- Macro: TARGET_DEFAULT_PACK_STRUCT
34773      If your target requires a structure packing default other than 0
34774      (meaning the machine default), define this macro to the necessary
34775      value (in bytes).  This must be a value that would also be valid
34776      to use with `#pragma pack()' (that is, a small power of two).
34778  -- Macro: DOLLARS_IN_IDENTIFIERS
34779      Define this macro to control use of the character `$' in
34780      identifier names for the C family of languages.  0 means `$' is
34781      not allowed by default; 1 means it is allowed.  1 is the default;
34782      there is no need to define this macro in that case.
34784  -- Macro: NO_DOLLAR_IN_LABEL
34785      Define this macro if the assembler does not accept the character
34786      `$' in label names.  By default constructors and destructors in
34787      G++ have `$' in the identifiers.  If this macro is defined, `.' is
34788      used instead.
34790  -- Macro: NO_DOT_IN_LABEL
34791      Define this macro if the assembler does not accept the character
34792      `.' in label names.  By default constructors and destructors in G++
34793      have names that use `.'.  If this macro is defined, these names
34794      are rewritten to avoid `.'.
34796  -- Macro: INSN_SETS_ARE_DELAYED (INSN)
34797      Define this macro as a C expression that is nonzero if it is safe
34798      for the delay slot scheduler to place instructions in the delay
34799      slot of INSN, even if they appear to use a resource set or
34800      clobbered in INSN.  INSN is always a `jump_insn' or an `insn'; GCC
34801      knows that every `call_insn' has this behavior.  On machines where
34802      some `insn' or `jump_insn' is really a function call and hence has
34803      this behavior, you should define this macro.
34805      You need not define this macro if it would always return zero.
34807  -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN)
34808      Define this macro as a C expression that is nonzero if it is safe
34809      for the delay slot scheduler to place instructions in the delay
34810      slot of INSN, even if they appear to set or clobber a resource
34811      referenced in INSN.  INSN is always a `jump_insn' or an `insn'.
34812      On machines where some `insn' or `jump_insn' is really a function
34813      call and its operands are registers whose use is actually in the
34814      subroutine it calls, you should define this macro.  Doing so
34815      allows the delay slot scheduler to move instructions which copy
34816      arguments into the argument registers into the delay slot of INSN.
34818      You need not define this macro if it would always return zero.
34820  -- Macro: MULTIPLE_SYMBOL_SPACES
34821      Define this macro as a C expression that is nonzero if, in some
34822      cases, global symbols from one translation unit may not be bound
34823      to undefined symbols in another translation unit without user
34824      intervention.  For instance, under Microsoft Windows symbols must
34825      be explicitly imported from shared libraries (DLLs).
34827      You need not define this macro if it would always evaluate to zero.
34829  -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree
34830           INPUTS, tree CLOBBERS)
34831      This target hook should add to CLOBBERS `STRING_CST' trees for any
34832      hard regs the port wishes to automatically clobber for an asm.  It
34833      should return the result of the last `tree_cons' used to add a
34834      clobber.  The OUTPUTS, INPUTS and CLOBBER lists are the
34835      corresponding parameters to the asm and may be inspected to avoid
34836      clobbering a register that is an input or output of the asm.  You
34837      can use `tree_overlaps_hard_reg_set', declared in `tree.h', to test
34838      for overlap with regards to asm-declared registers.
34840  -- Macro: MATH_LIBRARY
34841      Define this macro as a C string constant for the linker argument
34842      to link in the system math library, or `""' if the target does not
34843      have a separate math library.
34845      You need only define this macro if the default of `"-lm"' is wrong.
34847  -- Macro: LIBRARY_PATH_ENV
34848      Define this macro as a C string constant for the environment
34849      variable that specifies where the linker should look for libraries.
34851      You need only define this macro if the default of `"LIBRARY_PATH"'
34852      is wrong.
34854  -- Macro: TARGET_POSIX_IO
34855      Define this macro if the target supports the following POSIX file
34856      functions, access, mkdir and  file locking with fcntl / F_SETLKW.
34857      Defining `TARGET_POSIX_IO' will enable the test coverage code to
34858      use file locking when exiting a program, which avoids race
34859      conditions if the program has forked. It will also create
34860      directories at run-time for cross-profiling.
34862  -- Macro: MAX_CONDITIONAL_EXECUTE
34863      A C expression for the maximum number of instructions to execute
34864      via conditional execution instructions instead of a branch.  A
34865      value of `BRANCH_COST'+1 is the default if the machine does not
34866      use cc0, and 1 if it does use cc0.
34868  -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
34869      Used if the target needs to perform machine-dependent
34870      modifications on the conditionals used for turning basic blocks
34871      into conditionally executed code.  CE_INFO points to a data
34872      structure, `struct ce_if_block', which contains information about
34873      the currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the
34874      tests that are used for converting the then-block and the
34875      else-block, respectively.  Set either TRUE_EXPR or FALSE_EXPR to a
34876      null pointer if the tests cannot be converted.
34878  -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
34879           FALSE_EXPR)
34880      Like `IFCVT_MODIFY_TESTS', but used when converting more
34881      complicated if-statements into conditions combined by `and' and
34882      `or' operations.  BB contains the basic block that contains the
34883      test that is currently being processed and about to be turned into
34884      a condition.
34886  -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
34887      A C expression to modify the PATTERN of an INSN that is to be
34888      converted to conditional execution format.  CE_INFO points to a
34889      data structure, `struct ce_if_block', which contains information
34890      about the currently processed blocks.
34892  -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
34893      A C expression to perform any final machine dependent
34894      modifications in converting code to conditional execution.  The
34895      involved basic blocks can be found in the `struct ce_if_block'
34896      structure that is pointed to by CE_INFO.
34898  -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
34899      A C expression to cancel any machine dependent modifications in
34900      converting code to conditional execution.  The involved basic
34901      blocks can be found in the `struct ce_if_block' structure that is
34902      pointed to by CE_INFO.
34904  -- Macro: IFCVT_INIT_EXTRA_FIELDS (CE_INFO)
34905      A C expression to initialize any extra fields in a `struct
34906      ce_if_block' structure, which are defined by the
34907      `IFCVT_EXTRA_FIELDS' macro.
34909  -- Macro: IFCVT_EXTRA_FIELDS
34910      If defined, it should expand to a set of field declarations that
34911      will be added to the `struct ce_if_block' structure.  These should
34912      be initialized by the `IFCVT_INIT_EXTRA_FIELDS' macro.
34914  -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void)
34915      If non-null, this hook performs a target-specific pass over the
34916      instruction stream.  The compiler will run it at all optimization
34917      levels, just before the point at which it normally does
34918      delayed-branch scheduling.
34920      The exact purpose of the hook varies from target to target.  Some
34921      use it to do transformations that are necessary for correctness,
34922      such as laying out in-function constant pools or avoiding hardware
34923      hazards.  Others use it as an opportunity to do some
34924      machine-dependent optimizations.
34926      You need not implement the hook if it has nothing to do.  The
34927      default definition is null.
34929  -- Target Hook: void TARGET_INIT_BUILTINS (void)
34930      Define this hook if you have any machine-specific built-in
34931      functions that need to be defined.  It should be a function that
34932      performs the necessary setup.
34934      Machine specific built-in functions can be useful to expand
34935      special machine instructions that would otherwise not normally be
34936      generated because they have no equivalent in the source language
34937      (for example, SIMD vector instructions or prefetch instructions).
34939      To create a built-in function, call the function
34940      `lang_hooks.builtin_function' which is defined by the language
34941      front end.  You can use any type nodes set up by
34942      `build_common_tree_nodes' and `build_common_tree_nodes_2'; only
34943      language front ends that use those two functions will call
34944      `TARGET_INIT_BUILTINS'.
34946  -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool
34947           INITIALIZE_P)
34948      Define this hook if you have any machine-specific built-in
34949      functions that need to be defined.  It should be a function that
34950      returns the builtin function declaration for the builtin function
34951      code CODE.  If there is no such builtin and it cannot be
34952      initialized at this time if INITIALIZE_P is true the function
34953      should return `NULL_TREE'.  If CODE is out of range the function
34954      should return `error_mark_node'.
34956  -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
34957           SUBTARGET, enum machine_mode MODE, int IGNORE)
34958      Expand a call to a machine specific built-in function that was set
34959      up by `TARGET_INIT_BUILTINS'.  EXP is the expression for the
34960      function call; the result should go to TARGET if that is
34961      convenient, and have mode MODE if that is convenient.  SUBTARGET
34962      may be used as the target for computing one of EXP's operands.
34963      IGNORE is nonzero if the value is to be ignored.  This function
34964      should return the result of the call to the built-in function.
34966  -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int
34967           LOC, tree FNDECL, void *ARGLIST)
34968      Select a replacement for a machine specific built-in function that
34969      was set up by `TARGET_INIT_BUILTINS'.  This is done _before_
34970      regular type checking, and so allows the target to implement a
34971      crude form of function overloading.  FNDECL is the declaration of
34972      the built-in function.  ARGLIST is the list of arguments passed to
34973      the built-in function.  The result is a complete expression that
34974      implements the operation, usually another `CALL_EXPR'.  ARGLIST
34975      really has type `VEC(tree,gc)*'
34977  -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, tree ARGLIST,
34978           bool IGNORE)
34979      Fold a call to a machine specific built-in function that was set
34980      up by `TARGET_INIT_BUILTINS'.  FNDECL is the declaration of the
34981      built-in function.  ARGLIST is the list of arguments passed to the
34982      built-in function.  The result is another tree containing a
34983      simplified expression for the call's result.  If IGNORE is true
34984      the value will be ignored.
34986  -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const_rtx
34987           INSN)
34988      Take an instruction in INSN and return NULL if it is valid within a
34989      low-overhead loop, otherwise return a string explaining why doloop
34990      could not be applied.
34992      Many targets use special registers for low-overhead looping. For
34993      any instruction that clobbers these this function should return a
34994      string indicating the reason why the doloop could not be applied.
34995      By default, the RTL loop optimizer does not use a present doloop
34996      pattern for loops containing function calls or branch on table
34997      instructions.
34999  -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2)
35000      Take a branch insn in BRANCH1 and another in BRANCH2.  Return true
35001      if redirecting BRANCH1 to the destination of BRANCH2 is possible.
35003      On some targets, branches may have a limited range.  Optimizing the
35004      filling of delay slots can result in branches being redirected,
35005      and this may in turn cause a branch offset to overflow.
35007  -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
35008      This target hook returns `true' if X is considered to be
35009      commutative.  Usually, this is just COMMUTATIVE_P (X), but the HP
35010      PA doesn't consider PLUS to be commutative inside a MEM.
35011      OUTER_CODE is the rtx code of the enclosing rtl, if known,
35012      otherwise it is UNKNOWN.
35014  -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG)
35015      When the initial value of a hard register has been copied in a
35016      pseudo register, it is often not necessary to actually allocate
35017      another register to this pseudo register, because the original
35018      hard register or a stack slot it has been saved into can be used.
35019      `TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register
35020      allocation once for each hard register that had its initial value
35021      copied by using `get_func_hard_reg_initial_val' or
35022      `get_hard_reg_initial_val'.  Possible values are `NULL_RTX', if
35023      you don't want to do any special allocation, a `REG' rtx--that
35024      would typically be the hard register itself, if it is known not to
35025      be clobbered--or a `MEM'.  If you are returning a `MEM', this is
35026      only a hint for the allocator; it might decide to use another
35027      register anyways.  You may use `current_function_leaf_function' in
35028      the hook, functions that use `REG_N_SETS', to determine if the hard
35029      register in question will not be clobbered.  The default value of
35030      this hook is `NULL', which disables any special allocation.
35032  -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
35033           FLAGS)
35034      This target hook returns nonzero if X, an `unspec' or
35035      `unspec_volatile' operation, might cause a trap.  Targets can use
35036      this hook to enhance precision of analysis for `unspec' and
35037      `unspec_volatile' operations.  You may call `may_trap_p_1' to
35038      analyze inner elements of X in which case FLAGS should be passed
35039      along.
35041  -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
35042      The compiler invokes this hook whenever it changes its current
35043      function context (`cfun').  You can define this function if the
35044      back end needs to perform any initialization or reset actions on a
35045      per-function basis.  For example, it may be used to implement
35046      function attributes that affect register usage or code generation
35047      patterns.  The argument DECL is the declaration for the new
35048      function context, and may be null to indicate that the compiler
35049      has left a function context and is returning to processing at the
35050      top level.  The default hook function does nothing.
35052      GCC sets `cfun' to a dummy function context during initialization
35053      of some parts of the back end.  The hook function is not invoked
35054      in this situation; you need not worry about the hook being invoked
35055      recursively, or when the back end is in a partially-initialized
35056      state.  `cfun' might be `NULL' to indicate processing at top level,
35057      outside of any function scope.
35059  -- Macro: TARGET_OBJECT_SUFFIX
35060      Define this macro to be a C string representing the suffix for
35061      object files on your target machine.  If you do not define this
35062      macro, GCC will use `.o' as the suffix for object files.
35064  -- Macro: TARGET_EXECUTABLE_SUFFIX
35065      Define this macro to be a C string representing the suffix to be
35066      automatically added to executable files on your target machine.
35067      If you do not define this macro, GCC will use the null string as
35068      the suffix for executable files.
35070  -- Macro: COLLECT_EXPORT_LIST
35071      If defined, `collect2' will scan the individual object files
35072      specified on its command line and create an export list for the
35073      linker.  Define this macro for systems like AIX, where the linker
35074      discards object files that are not referenced from `main' and uses
35075      export lists.
35077  -- Macro: MODIFY_JNI_METHOD_CALL (MDECL)
35078      Define this macro to a C expression representing a variant of the
35079      method call MDECL, if Java Native Interface (JNI) methods must be
35080      invoked differently from other methods on your target.  For
35081      example, on 32-bit Microsoft Windows, JNI methods must be invoked
35082      using the `stdcall' calling convention and this macro is then
35083      defined as this expression:
35085           build_type_attribute_variant (MDECL,
35086                                         build_tree_list
35087                                         (get_identifier ("stdcall"),
35088                                          NULL))
35090  -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
35091      This target hook returns `true' past the point in which new jump
35092      instructions could be created.  On machines that require a
35093      register for every jump such as the SHmedia ISA of SH5, this point
35094      would typically be reload, so this target hook should be defined
35095      to a function such as:
35097           static bool
35098           cannot_modify_jumps_past_reload_p ()
35099           {
35100             return (reload_completed || reload_in_progress);
35101           }
35103  -- Target Hook: enum reg_class TARGET_BRANCH_TARGET_REGISTER_CLASS
35104           (void)
35105      This target hook returns a register class for which branch target
35106      register optimizations should be applied.  All registers in this
35107      class should be usable interchangeably.  After reload, registers
35108      in this class will be re-allocated and loads will be hoisted out
35109      of loops and be subjected to inter-block scheduling.
35111  -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool
35112           AFTER_PROLOGUE_EPILOGUE_GEN)
35113      Branch target register optimization will by default exclude
35114      callee-saved registers that are not already live during the
35115      current function; if this target hook returns true, they will be
35116      included.  The target code must than make sure that all target
35117      registers in the class returned by
35118      `TARGET_BRANCH_TARGET_REGISTER_CLASS' that might need saving are
35119      saved.  AFTER_PROLOGUE_EPILOGUE_GEN indicates if prologues and
35120      epilogues have already been generated.  Note, even if you only
35121      return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, you still
35122      are likely to have to make special provisions in
35123      `INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved
35124      target registers.
35126  -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void)
35127      This target hook returns true if the target supports conditional
35128      execution.  This target hook is required only when the target has
35129      several different modes and they have different conditional
35130      execution capability, such as ARM.
35132  -- Macro: POWI_MAX_MULTS
35133      If defined, this macro is interpreted as a signed integer C
35134      expression that specifies the maximum number of floating point
35135      multiplications that should be emitted when expanding
35136      exponentiation by an integer constant inline.  When this value is
35137      defined, exponentiation requiring more than this number of
35138      multiplications is implemented by calling the system library's
35139      `pow', `powf' or `powl' routines.  The default value places no
35140      upper bound on the multiplication count.
35142  -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
35143           *IPREFIX, int STDINC)
35144      This target hook should register any extra include files for the
35145      target.  The parameter STDINC indicates if normal include files
35146      are present.  The parameter SYSROOT is the system root directory.
35147      The parameter IPREFIX is the prefix for the gcc directory.
35149  -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const
35150           char *IPREFIX, int STDINC)
35151      This target hook should register any extra include files for the
35152      target before any standard headers.  The parameter STDINC
35153      indicates if normal include files are present.  The parameter
35154      SYSROOT is the system root directory.  The parameter IPREFIX is
35155      the prefix for the gcc directory.
35157  -- Macro: void TARGET_OPTF (char *PATH)
35158      This target hook should register special include paths for the
35159      target.  The parameter PATH is the include to register.  On Darwin
35160      systems, this is used for Framework includes, which have semantics
35161      that are different from `-I'.
35163  -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
35164      This target macro returns `true' if it is safe to use a local alias
35165      for a virtual function FNDECL when constructing thunks, `false'
35166      otherwise.  By default, the macro returns `true' for all
35167      functions, if a target supports aliases (i.e. defines
35168      `ASM_OUTPUT_DEF'), `false' otherwise,
35170  -- Macro: TARGET_FORMAT_TYPES
35171      If defined, this macro is the name of a global variable containing
35172      target-specific format checking information for the `-Wformat'
35173      option.  The default is to have no target-specific format checks.
35175  -- Macro: TARGET_N_FORMAT_TYPES
35176      If defined, this macro is the number of entries in
35177      `TARGET_FORMAT_TYPES'.
35179  -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES
35180      If defined, this macro is the name of a global variable containing
35181      target-specific format overrides for the `-Wformat' option. The
35182      default is to have no target-specific format overrides. If defined,
35183      `TARGET_FORMAT_TYPES' must be defined, too.
35185  -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
35186      If defined, this macro specifies the number of entries in
35187      `TARGET_OVERRIDES_FORMAT_ATTRIBUTES'.
35189  -- Macro: TARGET_OVERRIDES_FORMAT_INIT
35190      If defined, this macro specifies the optional initialization
35191      routine for target specific customizations of the system printf
35192      and scanf formatter settings.
35194  -- Target Hook: bool TARGET_RELAXED_ORDERING
35195      If set to `true', means that the target's memory model does not
35196      guarantee that loads which do not depend on one another will access
35197      main memory in the order of the instruction stream; if ordering is
35198      important, an explicit memory barrier must be used.  This is true
35199      of many recent processors which implement a policy of "relaxed,"
35200      "weak," or "release" memory consistency, such as Alpha, PowerPC,
35201      and ia64.  The default is `false'.
35203  -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN
35204           (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL)
35205      If defined, this macro returns the diagnostic message when it is
35206      illegal to pass argument VAL to function FUNCDECL with prototype
35207      TYPELIST.
35209  -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree
35210           FROMTYPE, const_tree TOTYPE)
35211      If defined, this macro returns the diagnostic message when it is
35212      invalid to convert from FROMTYPE to TOTYPE, or `NULL' if validity
35213      should be determined by the front end.
35215  -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP,
35216           const_tree TYPE)
35217      If defined, this macro returns the diagnostic message when it is
35218      invalid to apply operation OP (where unary plus is denoted by
35219      `CONVERT_EXPR') to an operand of type TYPE, or `NULL' if validity
35220      should be determined by the front end.
35222  -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP,
35223           const_tree TYPE1, const_tree TYPE2)
35224      If defined, this macro returns the diagnostic message when it is
35225      invalid to apply operation OP to operands of types TYPE1 and
35226      TYPE2, or `NULL' if validity should be determined by the front end.
35228  -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree
35229           TYPE)
35230      If defined, this macro returns the diagnostic message when it is
35231      invalid for functions to include parameters of type TYPE, or
35232      `NULL' if validity should be determined by the front end.  This is
35233      currently used only by the C and C++ front ends.
35235  -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree
35236           TYPE)
35237      If defined, this macro returns the diagnostic message when it is
35238      invalid for functions to have return type TYPE, or `NULL' if
35239      validity should be determined by the front end.  This is currently
35240      used only by the C and C++ front ends.
35242  -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE)
35243      If defined, this target hook returns the type to which values of
35244      TYPE should be promoted when they appear in expressions, analogous
35245      to the integer promotions, or `NULL_TREE' to use the front end's
35246      normal promotion rules.  This hook is useful when there are
35247      target-specific types with special promotion rules.  This is
35248      currently used only by the C and C++ front ends.
35250  -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR)
35251      If defined, this hook returns the result of converting EXPR to
35252      TYPE.  It should return the converted expression, or `NULL_TREE'
35253      to apply the front end's normal conversion rules.  This hook is
35254      useful when there are target-specific types with special
35255      conversion rules.  This is currently used only by the C and C++
35256      front ends.
35258  -- Macro: TARGET_USE_JCR_SECTION
35259      This macro determines whether to use the JCR section to register
35260      Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1
35261      if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true,
35262      else 0.
35264  -- Macro: OBJC_JBLEN
35265      This macro determines the size of the objective C jump buffer for
35266      the NeXT runtime. By default, OBJC_JBLEN is defined to an
35267      innocuous value.
35269  -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
35270      Define this macro if any target-specific attributes need to be
35271      attached to the functions in `libgcc' that provide low-level
35272      support for call stack unwinding.  It is used in declarations in
35273      `unwind-generic.h' and the associated definitions of those
35274      functions.
35276  -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void)
35277      Define this macro to update the current function stack boundary if
35278      necessary.
35280  -- Target Hook: rtx TARGET_GET_DRAP_RTX (void)
35281      This hook should return an rtx for Dynamic Realign Argument
35282      Pointer (DRAP) if a different argument pointer register is needed
35283      to access the function's argument list due to stack realignment.
35284      Return `NULL' if no DRAP is needed.
35286  -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void)
35287      When optimization is disabled, this hook indicates whether or not
35288      arguments should be allocated to stack slots.  Normally, GCC
35289      allocates stacks slots for arguments when not optimizing in order
35290      to make debugging easier.  However, when a function is declared
35291      with `__attribute__((naked))', there is no stack frame, and the
35292      compiler cannot safely move arguments from the registers in which
35293      they are passed to the stack.  Therefore, this hook should return
35294      true in general, but false for naked functions.  The default
35295      implementation always returns true.
35297  -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR
35298      On some architectures it can take multiple instructions to
35299      synthesize a constant.  If there is another constant already in a
35300      register that is close enough in value then it is preferable that
35301      the new constant is computed from this register using immediate
35302      addition or subtraction.  We accomplish this through CSE.  Besides
35303      the value of the constant we also add a lower and an upper
35304      constant anchor to the available expressions.  These are then
35305      queried when encountering new constants.  The anchors are computed
35306      by rounding the constant up and down to a multiple of the value of
35307      `TARGET_CONST_ANCHOR'.  `TARGET_CONST_ANCHOR' should be the
35308      maximum positive value accepted by immediate-add plus one.  We
35309      currently assume that the value of `TARGET_CONST_ANCHOR' is a
35310      power of 2.  For example, on MIPS, where add-immediate takes a
35311      16-bit signed value, `TARGET_CONST_ANCHOR' is set to `0x8000'.
35312      The default value is zero, which disables this optimization.
35314 \x1f
35315 File: gccint.info,  Node: Host Config,  Next: Fragments,  Prev: Target Macros,  Up: Top
35317 18 Host Configuration
35318 *********************
35320 Most details about the machine and system on which the compiler is
35321 actually running are detected by the `configure' script.  Some things
35322 are impossible for `configure' to detect; these are described in two
35323 ways, either by macros defined in a file named `xm-MACHINE.h' or by
35324 hook functions in the file specified by the OUT_HOST_HOOK_OBJ variable
35325 in `config.gcc'.  (The intention is that very few hosts will need a
35326 header file but nearly every fully supported host will need to override
35327 some hooks.)
35329  If you need to define only a few macros, and they have simple
35330 definitions, consider using the `xm_defines' variable in your
35331 `config.gcc' entry instead of creating a host configuration header.
35332 *Note System Config::.
35334 * Menu:
35336 * Host Common::         Things every host probably needs implemented.
35337 * Filesystem::          Your host can't have the letter `a' in filenames?
35338 * Host Misc::           Rare configuration options for hosts.
35340 \x1f
35341 File: gccint.info,  Node: Host Common,  Next: Filesystem,  Up: Host Config
35343 18.1 Host Common
35344 ================
35346 Some things are just not portable, even between similar operating
35347 systems, and are too difficult for autoconf to detect.  They get
35348 implemented using hook functions in the file specified by the
35349 HOST_HOOK_OBJ variable in `config.gcc'.
35351  -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
35352      This host hook is used to set up handling for extra signals.  The
35353      most common thing to do in this hook is to detect stack overflow.
35355  -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
35356           FD)
35357      This host hook returns the address of some space that is likely to
35358      be free in some subsequent invocation of the compiler.  We intend
35359      to load the PCH data at this address such that the data need not
35360      be relocated.  The area should be able to hold SIZE bytes.  If the
35361      host uses `mmap', FD is an open file descriptor that can be used
35362      for probing.
35364  -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS,
35365           size_t SIZE, int FD, size_t OFFSET)
35366      This host hook is called when a PCH file is about to be loaded.
35367      We want to load SIZE bytes from FD at OFFSET into memory at
35368      ADDRESS.  The given address will be the result of a previous
35369      invocation of `HOST_HOOKS_GT_PCH_GET_ADDRESS'.  Return -1 if we
35370      couldn't allocate SIZE bytes at ADDRESS.  Return 0 if the memory
35371      is allocated but the data is not loaded.  Return 1 if the hook has
35372      performed everything.
35374      If the implementation uses reserved address space, free any
35375      reserved space beyond SIZE, regardless of the return value.  If no
35376      PCH will be loaded, this hook may be called with SIZE zero, in
35377      which case all reserved address space should be freed.
35379      Do not try to handle values of ADDRESS that could not have been
35380      returned by this executable; just return -1.  Such values usually
35381      indicate an out-of-date PCH file (built by some other GCC
35382      executable), and such a PCH file won't work.
35384  -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);
35385      This host hook returns the alignment required for allocating
35386      virtual memory.  Usually this is the same as getpagesize, but on
35387      some hosts the alignment for reserving memory differs from the
35388      pagesize for committing memory.
35390 \x1f
35391 File: gccint.info,  Node: Filesystem,  Next: Host Misc,  Prev: Host Common,  Up: Host Config
35393 18.2 Host Filesystem
35394 ====================
35396 GCC needs to know a number of things about the semantics of the host
35397 machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
35398 automatically detected.  For other systems, you can define the
35399 following macros in `xm-MACHINE.h'.
35401 `HAVE_DOS_BASED_FILE_SYSTEM'
35402      This macro is automatically defined by `system.h' if the host file
35403      system obeys the semantics defined by MS-DOS instead of Unix.  DOS
35404      file systems are case insensitive, file specifications may begin
35405      with a drive letter, and both forward slash and backslash (`/' and
35406      `\') are directory separators.
35408 `DIR_SEPARATOR'
35409 `DIR_SEPARATOR_2'
35410      If defined, these macros expand to character constants specifying
35411      separators for directory names within a file specification.
35412      `system.h' will automatically give them appropriate values on Unix
35413      and MS-DOS file systems.  If your file system is neither of these,
35414      define one or both appropriately in `xm-MACHINE.h'.
35416      However, operating systems like VMS, where constructing a pathname
35417      is more complicated than just stringing together directory names
35418      separated by a special character, should not define either of these
35419      macros.
35421 `PATH_SEPARATOR'
35422      If defined, this macro should expand to a character constant
35423      specifying the separator for elements of search paths.  The default
35424      value is a colon (`:').  DOS-based systems usually, but not
35425      always, use semicolon (`;').
35427 `VMS'
35428      Define this macro if the host system is VMS.
35430 `HOST_OBJECT_SUFFIX'
35431      Define this macro to be a C string representing the suffix for
35432      object files on your host machine.  If you do not define this
35433      macro, GCC will use `.o' as the suffix for object files.
35435 `HOST_EXECUTABLE_SUFFIX'
35436      Define this macro to be a C string representing the suffix for
35437      executable files on your host machine.  If you do not define this
35438      macro, GCC will use the null string as the suffix for executable
35439      files.
35441 `HOST_BIT_BUCKET'
35442      A pathname defined by the host operating system, which can be
35443      opened as a file and written to, but all the information written
35444      is discarded.  This is commonly known as a "bit bucket" or "null
35445      device".  If you do not define this macro, GCC will use
35446      `/dev/null' as the bit bucket.  If the host does not support a bit
35447      bucket, define this macro to an invalid filename.
35449 `UPDATE_PATH_HOST_CANONICALIZE (PATH)'
35450      If defined, a C statement (sans semicolon) that performs
35451      host-dependent canonicalization when a path used in a compilation
35452      driver or preprocessor is canonicalized.  PATH is a malloc-ed path
35453      to be canonicalized.  If the C statement does canonicalize PATH
35454      into a different buffer, the old path should be freed and the new
35455      buffer should have been allocated with malloc.
35457 `DUMPFILE_FORMAT'
35458      Define this macro to be a C string representing the format to use
35459      for constructing the index part of debugging dump file names.  The
35460      resultant string must fit in fifteen bytes.  The full filename
35461      will be the concatenation of: the prefix of the assembler file
35462      name, the string resulting from applying this format to an index
35463      number, and a string unique to each dump file kind, e.g. `rtl'.
35465      If you do not define this macro, GCC will use `.%02d.'.  You should
35466      define this macro if using the default will create an invalid file
35467      name.
35469 `DELETE_IF_ORDINARY'
35470      Define this macro to be a C statement (sans semicolon) that
35471      performs host-dependent removal of ordinary temp files in the
35472      compilation driver.
35474      If you do not define this macro, GCC will use the default version.
35475      You should define this macro if the default version does not
35476      reliably remove the temp file as, for example, on VMS which allows
35477      multiple versions of a file.
35479 `HOST_LACKS_INODE_NUMBERS'
35480      Define this macro if the host filesystem does not report
35481      meaningful inode numbers in struct stat.
35483 \x1f
35484 File: gccint.info,  Node: Host Misc,  Prev: Filesystem,  Up: Host Config
35486 18.3 Host Misc
35487 ==============
35489 `FATAL_EXIT_CODE'
35490      A C expression for the status code to be returned when the compiler
35491      exits after serious errors.  The default is the system-provided
35492      macro `EXIT_FAILURE', or `1' if the system doesn't define that
35493      macro.  Define this macro only if these defaults are incorrect.
35495 `SUCCESS_EXIT_CODE'
35496      A C expression for the status code to be returned when the compiler
35497      exits without serious errors.  (Warnings are not serious errors.)
35498      The default is the system-provided macro `EXIT_SUCCESS', or `0' if
35499      the system doesn't define that macro.  Define this macro only if
35500      these defaults are incorrect.
35502 `USE_C_ALLOCA'
35503      Define this macro if GCC should use the C implementation of
35504      `alloca' provided by `libiberty.a'.  This only affects how some
35505      parts of the compiler itself allocate memory.  It does not change
35506      code generation.
35508      When GCC is built with a compiler other than itself, the C `alloca'
35509      is always used.  This is because most other implementations have
35510      serious bugs.  You should define this macro only on a system where
35511      no stack-based `alloca' can possibly work.  For instance, if a
35512      system has a small limit on the size of the stack, GCC's builtin
35513      `alloca' will not work reliably.
35515 `COLLECT2_HOST_INITIALIZATION'
35516      If defined, a C statement (sans semicolon) that performs
35517      host-dependent initialization when `collect2' is being initialized.
35519 `GCC_DRIVER_HOST_INITIALIZATION'
35520      If defined, a C statement (sans semicolon) that performs
35521      host-dependent initialization when a compilation driver is being
35522      initialized.
35524 `HOST_LONG_LONG_FORMAT'
35525      If defined, the string used to indicate an argument of type `long
35526      long' to functions like `printf'.  The default value is `"ll"'.
35528 `HOST_LONG_FORMAT'
35529      If defined, the string used to indicate an argument of type `long'
35530      to functions like `printf'.  The default value is `"l"'.
35532 `HOST_PTR_PRINTF'
35533      If defined, the string used to indicate an argument of type `void
35534      *' to functions like `printf'.  The default value is `"%p"'.
35536  In addition, if `configure' generates an incorrect definition of any
35537 of the macros in `auto-host.h', you can override that definition in a
35538 host configuration header.  If you need to do this, first see if it is
35539 possible to fix `configure'.
35541 \x1f
35542 File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
35544 19 Makefile Fragments
35545 *********************
35547 When you configure GCC using the `configure' script, it will construct
35548 the file `Makefile' from the template file `Makefile.in'.  When it does
35549 this, it can incorporate makefile fragments from the `config'
35550 directory.  These are used to set Makefile parameters that are not
35551 amenable to being calculated by autoconf.  The list of fragments to
35552 incorporate is set by `config.gcc' (and occasionally `config.build' and
35553 `config.host'); *Note System Config::.
35555  Fragments are named either `t-TARGET' or `x-HOST', depending on
35556 whether they are relevant to configuring GCC to produce code for a
35557 particular target, or to configuring GCC to run on a particular host.
35558 Here TARGET and HOST are mnemonics which usually have some relationship
35559 to the canonical system name, but no formal connection.
35561  If these files do not exist, it means nothing needs to be added for a
35562 given target or host.  Most targets need a few `t-TARGET' fragments,
35563 but needing `x-HOST' fragments is rare.
35565 * Menu:
35567 * Target Fragment:: Writing `t-TARGET' files.
35568 * Host Fragment::   Writing `x-HOST' files.
35570 \x1f
35571 File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
35573 19.1 Target Makefile Fragments
35574 ==============================
35576 Target makefile fragments can set these Makefile variables.
35578 `LIBGCC2_CFLAGS'
35579      Compiler flags to use when compiling `libgcc2.c'.
35581 `LIB2FUNCS_EXTRA'
35582      A list of source file names to be compiled or assembled and
35583      inserted into `libgcc.a'.
35585 `Floating Point Emulation'
35586      To have GCC include software floating point libraries in `libgcc.a'
35587      define `FPBIT' and `DPBIT' along with a few rules as follows:
35588           # We want fine grained libraries, so use the new code
35589           # to build the floating point emulation libraries.
35590           FPBIT = fp-bit.c
35591           DPBIT = dp-bit.c
35594           fp-bit.c: $(srcdir)/config/fp-bit.c
35595                   echo '#define FLOAT' > fp-bit.c
35596                   cat $(srcdir)/config/fp-bit.c >> fp-bit.c
35598           dp-bit.c: $(srcdir)/config/fp-bit.c
35599                   cat $(srcdir)/config/fp-bit.c > dp-bit.c
35601      You may need to provide additional #defines at the beginning of
35602      `fp-bit.c' and `dp-bit.c' to control target endianness and other
35603      options.
35605 `CRTSTUFF_T_CFLAGS'
35606      Special flags used when compiling `crtstuff.c'.  *Note
35607      Initialization::.
35609 `CRTSTUFF_T_CFLAGS_S'
35610      Special flags used when compiling `crtstuff.c' for shared linking.
35611      Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'.
35612      *Note Initialization::.
35614 `MULTILIB_OPTIONS'
35615      For some targets, invoking GCC in different ways produces objects
35616      that can not be linked together.  For example, for some targets GCC
35617      produces both big and little endian code.  For these targets, you
35618      must arrange for multiple versions of `libgcc.a' to be compiled,
35619      one for each set of incompatible options.  When GCC invokes the
35620      linker, it arranges to link in the right version of `libgcc.a',
35621      based on the command line options used.
35623      The `MULTILIB_OPTIONS' macro lists the set of options for which
35624      special versions of `libgcc.a' must be built.  Write options that
35625      are mutually incompatible side by side, separated by a slash.
35626      Write options that may be used together separated by a space.  The
35627      build procedure will build all combinations of compatible options.
35629      For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020
35630      msoft-float', `Makefile' will build special versions of `libgcc.a'
35631      using the following sets of options:  `-m68000', `-m68020',
35632      `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'.
35634 `MULTILIB_DIRNAMES'
35635      If `MULTILIB_OPTIONS' is used, this variable specifies the
35636      directory names that should be used to hold the various libraries.
35637      Write one element in `MULTILIB_DIRNAMES' for each element in
35638      `MULTILIB_OPTIONS'.  If `MULTILIB_DIRNAMES' is not used, the
35639      default value will be `MULTILIB_OPTIONS', with all slashes treated
35640      as spaces.
35642      For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020
35643      msoft-float', then the default value of `MULTILIB_DIRNAMES' is
35644      `m68000 m68020 msoft-float'.  You may specify a different value if
35645      you desire a different set of directory names.
35647 `MULTILIB_MATCHES'
35648      Sometimes the same option may be written in two different ways.
35649      If an option is listed in `MULTILIB_OPTIONS', GCC needs to know
35650      about any synonyms.  In that case, set `MULTILIB_MATCHES' to a
35651      list of items of the form `option=option' to describe all relevant
35652      synonyms.  For example, `m68000=mc68000 m68020=mc68020'.
35654 `MULTILIB_EXCEPTIONS'
35655      Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being
35656      specified, there are combinations that should not be built.  In
35657      that case, set `MULTILIB_EXCEPTIONS' to be all of the switch
35658      exceptions in shell case syntax that should not be built.
35660      For example the ARM processor cannot execute both hardware floating
35661      point instructions and the reduced size THUMB instructions at the
35662      same time, so there is no need to build libraries with both of
35663      these options enabled.  Therefore `MULTILIB_EXCEPTIONS' is set to:
35664           *mthumb/*mhard-float*
35666 `MULTILIB_EXTRA_OPTS'
35667      Sometimes it is desirable that when building multiple versions of
35668      `libgcc.a' certain options should always be passed on to the
35669      compiler.  In that case, set `MULTILIB_EXTRA_OPTS' to be the list
35670      of options to be used for all builds.  If you set this, you should
35671      probably set `CRTSTUFF_T_CFLAGS' to a dash followed by it.
35673 `NATIVE_SYSTEM_HEADER_DIR'
35674      If the default location for system headers is not `/usr/include',
35675      you must set this to the directory containing the headers.  This
35676      value should match the value of the `SYSTEM_INCLUDE_DIR' macro.
35678 `SPECS'
35679      Unfortunately, setting `MULTILIB_EXTRA_OPTS' is not enough, since
35680      it does not affect the build of target libraries, at least not the
35681      build of the default multilib.  One possible work-around is to use
35682      `DRIVER_SELF_SPECS' to bring options from the `specs' file as if
35683      they had been passed in the compiler driver command line.
35684      However, you don't want to be adding these options after the
35685      toolchain is installed, so you can instead tweak the `specs' file
35686      that will be used during the toolchain build, while you still
35687      install the original, built-in `specs'.  The trick is to set
35688      `SPECS' to some other filename (say `specs.install'), that will
35689      then be created out of the built-in specs, and introduce a
35690      `Makefile' rule to generate the `specs' file that's going to be
35691      used at build time out of your `specs.install'.
35693 `T_CFLAGS'
35694      These are extra flags to pass to the C compiler.  They are used
35695      both when building GCC, and when compiling things with the
35696      just-built GCC.  This variable is deprecated and should not be
35697      used.
35699 \x1f
35700 File: gccint.info,  Node: Host Fragment,  Prev: Target Fragment,  Up: Fragments
35702 19.2 Host Makefile Fragments
35703 ============================
35705 The use of `x-HOST' fragments is discouraged.  You should only use it
35706 for makefile dependencies.
35708 \x1f
35709 File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
35711 20 `collect2'
35712 *************
35714 GCC uses a utility called `collect2' on nearly all systems to arrange
35715 to call various initialization functions at start time.
35717  The program `collect2' works by linking the program once and looking
35718 through the linker output file for symbols with particular names
35719 indicating they are constructor functions.  If it finds any, it creates
35720 a new temporary `.c' file containing a table of them, compiles it, and
35721 links the program a second time including that file.
35723  The actual calls to the constructors are carried out by a subroutine
35724 called `__main', which is called (automatically) at the beginning of
35725 the body of `main' (provided `main' was compiled with GNU CC).  Calling
35726 `__main' is necessary, even when compiling C code, to allow linking C
35727 and C++ object code together.  (If you use `-nostdlib', you get an
35728 unresolved reference to `__main', since it's defined in the standard
35729 GCC library.  Include `-lgcc' at the end of your compiler command line
35730 to resolve this reference.)
35732  The program `collect2' is installed as `ld' in the directory where the
35733 passes of the compiler are installed.  When `collect2' needs to find
35734 the _real_ `ld', it tries the following file names:
35736    * a hard coded linker file name, if GCC was configured with the
35737      `--with-ld' option.
35739    * `real-ld' in the directories listed in the compiler's search
35740      directories.
35742    * `real-ld' in the directories listed in the environment variable
35743      `PATH'.
35745    * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
35746      if specified.
35748    * `ld' in the compiler's search directories, except that `collect2'
35749      will not execute itself recursively.
35751    * `ld' in `PATH'.
35753  "The compiler's search directories" means all the directories where
35754 `gcc' searches for passes of the compiler.  This includes directories
35755 that you specify with `-B'.
35757  Cross-compilers search a little differently:
35759    * `real-ld' in the compiler's search directories.
35761    * `TARGET-real-ld' in `PATH'.
35763    * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
35764      if specified.
35766    * `ld' in the compiler's search directories.
35768    * `TARGET-ld' in `PATH'.
35770  `collect2' explicitly avoids running `ld' using the file name under
35771 which `collect2' itself was invoked.  In fact, it remembers up a list
35772 of such names--in case one copy of `collect2' finds another copy (or
35773 version) of `collect2' installed as `ld' in a second place in the
35774 search path.
35776  `collect2' searches for the utilities `nm' and `strip' using the same
35777 algorithm as above for `ld'.
35779 \x1f
35780 File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top
35782 21 Standard Header File Directories
35783 ***********************************
35785 `GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
35786 where GCC stores its private include files, and also where GCC stores
35787 the fixed include files.  A cross compiled GCC runs `fixincludes' on
35788 the header files in `$(tooldir)/include'.  (If the cross compilation
35789 header files need to be fixed, they must be installed before GCC is
35790 built.  If the cross compilation header files are already suitable for
35791 GCC, nothing special need be done).
35793  `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
35794 is where `g++' looks first for header files.  The C++ library installs
35795 only target independent header files in that directory.
35797  `LOCAL_INCLUDE_DIR' is used only by native compilers.  GCC doesn't
35798 install anything there.  It is normally `/usr/local/include'.  This is
35799 where local additions to a packaged system should place header files.
35801  `CROSS_INCLUDE_DIR' is used only by cross compilers.  GCC doesn't
35802 install anything there.
35804  `TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It is
35805 the place for other packages to install header files that GCC will use.
35806 For a cross-compiler, this is the equivalent of `/usr/include'.  When
35807 you build a cross-compiler, `fixincludes' processes any header files in
35808 this directory.
35810 \x1f
35811 File: gccint.info,  Node: Type Information,  Next: Plugins,  Prev: Header Dirs,  Up: Top
35813 22 Memory Management and Type Information
35814 *****************************************
35816 GCC uses some fairly sophisticated memory management techniques, which
35817 involve determining information about GCC's data structures from GCC's
35818 source code and using this information to perform garbage collection and
35819 implement precompiled headers.
35821  A full C parser would be too complicated for this task, so a limited
35822 subset of C is interpreted and special markers are used to determine
35823 what parts of the source to look at.  All `struct' and `union'
35824 declarations that define data structures that are allocated under
35825 control of the garbage collector must be marked.  All global variables
35826 that hold pointers to garbage-collected memory must also be marked.
35827 Finally, all global variables that need to be saved and restored by a
35828 precompiled header must be marked.  (The precompiled header mechanism
35829 can only save static variables if they're scalar.  Complex data
35830 structures must be allocated in garbage-collected memory to be saved in
35831 a precompiled header.)
35833  The full format of a marker is
35834      GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
35835  but in most cases no options are needed.  The outer double parentheses
35836 are still necessary, though: `GTY(())'.  Markers can appear:
35838    * In a structure definition, before the open brace;
35840    * In a global variable declaration, after the keyword `static' or
35841      `extern'; and
35843    * In a structure field definition, before the name of the field.
35845  Here are some examples of marking simple data structures and globals.
35847      struct GTY(()) TAG
35848      {
35849        FIELDS...
35850      };
35852      typedef struct GTY(()) TAG
35853      {
35854        FIELDS...
35855      } *TYPENAME;
35857      static GTY(()) struct TAG *LIST;   /* points to GC memory */
35858      static GTY(()) int COUNTER;        /* save counter in a PCH */
35860  The parser understands simple typedefs such as `typedef struct TAG
35861 *NAME;' and `typedef int NAME;'.  These don't need to be marked.
35863 * Menu:
35865 * GTY Options::         What goes inside a `GTY(())'.
35866 * GGC Roots::           Making global variables GGC roots.
35867 * Files::               How the generated files work.
35868 * Invoking the garbage collector::   How to invoke the garbage collector.
35870 \x1f
35871 File: gccint.info,  Node: GTY Options,  Next: GGC Roots,  Up: Type Information
35873 22.1 The Inside of a `GTY(())'
35874 ==============================
35876 Sometimes the C code is not enough to fully describe the type
35877 structure.  Extra information can be provided with `GTY' options and
35878 additional markers.  Some options take a parameter, which may be either
35879 a string or a type name, depending on the parameter.  If an option
35880 takes no parameter, it is acceptable either to omit the parameter
35881 entirely, or to provide an empty string as a parameter.  For example,
35882 `GTY ((skip))' and `GTY ((skip ("")))' are equivalent.
35884  When the parameter is a string, often it is a fragment of C code.  Four
35885 special escapes may be used in these strings, to refer to pieces of the
35886 data structure being marked:
35888 `%h'
35889      The current structure.
35891 `%1'
35892      The structure that immediately contains the current structure.
35894 `%0'
35895      The outermost structure that contains the current structure.
35897 `%a'
35898      A partial expression of the form `[i1][i2]...' that indexes the
35899      array item currently being marked.
35901  For instance, suppose that you have a structure of the form
35902      struct A {
35903        ...
35904      };
35905      struct B {
35906        struct A foo[12];
35907      };
35908  and `b' is a variable of type `struct B'.  When marking `b.foo[11]',
35909 `%h' would expand to `b.foo[11]', `%0' and `%1' would both expand to
35910 `b', and `%a' would expand to `[11]'.
35912  As in ordinary C, adjacent strings will be concatenated; this is
35913 helpful when you have a complicated expression.
35914      GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
35915                        " ? TYPE_NEXT_VARIANT (&%h.generic)"
35916                        " : TREE_CHAIN (&%h.generic)")))
35918  The available options are:
35920 `length ("EXPRESSION")'
35921      There are two places the type machinery will need to be explicitly
35922      told the length of an array.  The first case is when a structure
35923      ends in a variable-length array, like this:
35924           struct GTY(()) rtvec_def {
35925             int num_elem;         /* number of elements */
35926             rtx GTY ((length ("%h.num_elem"))) elem[1];
35927           };
35929      In this case, the `length' option is used to override the specified
35930      array length (which should usually be `1').  The parameter of the
35931      option is a fragment of C code that calculates the length.
35933      The second case is when a structure or a global variable contains a
35934      pointer to an array, like this:
35935           tree *
35936             GTY ((length ("%h.regno_pointer_align_length"))) regno_decl;
35937      In this case, `regno_decl' has been allocated by writing something
35938      like
35939             x->regno_decl =
35940               ggc_alloc (x->regno_pointer_align_length * sizeof (tree));
35941      and the `length' provides the length of the field.
35943      This second use of `length' also works on global variables, like:
35944        static GTY((length ("reg_base_value_size")))
35945          rtx *reg_base_value;
35947 `skip'
35948      If `skip' is applied to a field, the type machinery will ignore it.
35949      This is somewhat dangerous; the only safe use is in a union when
35950      one field really isn't ever used.
35952 `desc ("EXPRESSION")'
35953 `tag ("CONSTANT")'
35954 `default'
35955      The type machinery needs to be told which field of a `union' is
35956      currently active.  This is done by giving each field a constant
35957      `tag' value, and then specifying a discriminator using `desc'.
35958      The value of the expression given by `desc' is compared against
35959      each `tag' value, each of which should be different.  If no `tag'
35960      is matched, the field marked with `default' is used if there is
35961      one, otherwise no field in the union will be marked.
35963      In the `desc' option, the "current structure" is the union that it
35964      discriminates.  Use `%1' to mean the structure containing it.
35965      There are no escapes available to the `tag' option, since it is a
35966      constant.
35968      For example,
35969           struct GTY(()) tree_binding
35970           {
35971             struct tree_common common;
35972             union tree_binding_u {
35973               tree GTY ((tag ("0"))) scope;
35974               struct cp_binding_level * GTY ((tag ("1"))) level;
35975             } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
35976             tree value;
35977           };
35979      In this example, the value of BINDING_HAS_LEVEL_P when applied to a
35980      `struct tree_binding *' is presumed to be 0 or 1.  If 1, the type
35981      mechanism will treat the field `level' as being present and if 0,
35982      will treat the field `scope' as being present.
35984 `param_is (TYPE)'
35985 `use_param'
35986      Sometimes it's convenient to define some data structure to work on
35987      generic pointers (that is, `PTR') and then use it with a specific
35988      type.  `param_is' specifies the real type pointed to, and
35989      `use_param' says where in the generic data structure that type
35990      should be put.
35992      For instance, to have a `htab_t' that points to trees, one would
35993      write the definition of `htab_t' like this:
35994           typedef struct GTY(()) {
35995             ...
35996             void ** GTY ((use_param, ...)) entries;
35997             ...
35998           } htab_t;
35999      and then declare variables like this:
36000             static htab_t GTY ((param_is (union tree_node))) ict;
36002 `paramN_is (TYPE)'
36003 `use_paramN'
36004      In more complicated cases, the data structure might need to work on
36005      several different types, which might not necessarily all be
36006      pointers.  For this, `param1_is' through `param9_is' may be used to
36007      specify the real type of a field identified by `use_param1' through
36008      `use_param9'.
36010 `use_params'
36011      When a structure contains another structure that is parameterized,
36012      there's no need to do anything special, the inner structure
36013      inherits the parameters of the outer one.  When a structure
36014      contains a pointer to a parameterized structure, the type
36015      machinery won't automatically detect this (it could, it just
36016      doesn't yet), so it's necessary to tell it that the pointed-to
36017      structure should use the same parameters as the outer structure.
36018      This is done by marking the pointer with the `use_params' option.
36020 `deletable'
36021      `deletable', when applied to a global variable, indicates that when
36022      garbage collection runs, there's no need to mark anything pointed
36023      to by this variable, it can just be set to `NULL' instead.  This
36024      is used to keep a list of free structures around for re-use.
36026 `if_marked ("EXPRESSION")'
36027      Suppose you want some kinds of object to be unique, and so you put
36028      them in a hash table.  If garbage collection marks the hash table,
36029      these objects will never be freed, even if the last other
36030      reference to them goes away.  GGC has special handling to deal
36031      with this: if you use the `if_marked' option on a global hash
36032      table, GGC will call the routine whose name is the parameter to
36033      the option on each hash table entry.  If the routine returns
36034      nonzero, the hash table entry will be marked as usual.  If the
36035      routine returns zero, the hash table entry will be deleted.
36037      The routine `ggc_marked_p' can be used to determine if an element
36038      has been marked already; in fact, the usual case is to use
36039      `if_marked ("ggc_marked_p")'.
36041 `mark_hook ("HOOK-ROUTINE-NAME")'
36042      If provided for a structure or union type, the given
36043      HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine
36044      called when the garbage collector has just marked the data as
36045      reachable. This routine should not change the data, or call any ggc
36046      routine. Its only argument is a pointer to the just marked (const)
36047      structure or union.
36049 `maybe_undef'
36050      When applied to a field, `maybe_undef' indicates that it's OK if
36051      the structure that this fields points to is never defined, so long
36052      as this field is always `NULL'.  This is used to avoid requiring
36053      backends to define certain optional structures.  It doesn't work
36054      with language frontends.
36056 `nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'
36057      The type machinery expects all pointers to point to the start of an
36058      object.  Sometimes for abstraction purposes it's convenient to have
36059      a pointer which points inside an object.  So long as it's possible
36060      to convert the original object to and from the pointer, such
36061      pointers can still be used.  TYPE is the type of the original
36062      object, the TO EXPRESSION returns the pointer given the original
36063      object, and the FROM EXPRESSION returns the original object given
36064      the pointer.  The pointer will be available using the `%h' escape.
36066 `chain_next ("EXPRESSION")'
36067 `chain_prev ("EXPRESSION")'
36068 `chain_circular ("EXPRESSION")'
36069      It's helpful for the type machinery to know if objects are often
36070      chained together in long lists; this lets it generate code that
36071      uses less stack space by iterating along the list instead of
36072      recursing down it.  `chain_next' is an expression for the next
36073      item in the list, `chain_prev' is an expression for the previous
36074      item.  For singly linked lists, use only `chain_next'; for doubly
36075      linked lists, use both.  The machinery requires that taking the
36076      next item of the previous item gives the original item.
36077      `chain_circular' is similar to `chain_next', but can be used for
36078      circular single linked lists.
36080 `reorder ("FUNCTION NAME")'
36081      Some data structures depend on the relative ordering of pointers.
36082      If the precompiled header machinery needs to change that ordering,
36083      it will call the function referenced by the `reorder' option,
36084      before changing the pointers in the object that's pointed to by
36085      the field the option applies to.  The function must take four
36086      arguments, with the signature
36087      `void *, void *, gt_pointer_operator, void *'.  The first
36088      parameter is a pointer to the structure that contains the object
36089      being updated, or the object itself if there is no containing
36090      structure.  The second parameter is a cookie that should be
36091      ignored.  The third parameter is a routine that, given a pointer,
36092      will update it to its correct new value.  The fourth parameter is
36093      a cookie that must be passed to the second parameter.
36095      PCH cannot handle data structures that depend on the absolute
36096      values of pointers.  `reorder' functions can be expensive.  When
36097      possible, it is better to depend on properties of the data, like
36098      an ID number or the hash of a string instead.
36100 `special ("NAME")'
36101      The `special' option is used to mark types that have to be dealt
36102      with by special case machinery.  The parameter is the name of the
36103      special case.  See `gengtype.c' for further details.  Avoid adding
36104      new special cases unless there is no other alternative.
36106 \x1f
36107 File: gccint.info,  Node: GGC Roots,  Next: Files,  Prev: GTY Options,  Up: Type Information
36109 22.2 Marking Roots for the Garbage Collector
36110 ============================================
36112 In addition to keeping track of types, the type machinery also locates
36113 the global variables ("roots") that the garbage collector starts at.
36114 Roots must be declared using one of the following syntaxes:
36116    * `extern GTY(([OPTIONS])) TYPE NAME;'
36118    * `static GTY(([OPTIONS])) TYPE NAME;'
36119  The syntax
36120    * `GTY(([OPTIONS])) TYPE NAME;'
36121  is _not_ accepted.  There should be an `extern' declaration of such a
36122 variable in a header somewhere--mark that, not the definition.  Or, if
36123 the variable is only used in one file, make it `static'.
36125 \x1f
36126 File: gccint.info,  Node: Files,  Next: Invoking the garbage collector,  Prev: GGC Roots,  Up: Type Information
36128 22.3 Source Files Containing Type Information
36129 =============================================
36131 Whenever you add `GTY' markers to a source file that previously had
36132 none, or create a new source file containing `GTY' markers, there are
36133 three things you need to do:
36135   1. You need to add the file to the list of source files the type
36136      machinery scans.  There are four cases:
36138        a. For a back-end file, this is usually done automatically; if
36139           not, you should add it to `target_gtfiles' in the appropriate
36140           port's entries in `config.gcc'.
36142        b. For files shared by all front ends, add the filename to the
36143           `GTFILES' variable in `Makefile.in'.
36145        c. For files that are part of one front end, add the filename to
36146           the `gtfiles' variable defined in the appropriate
36147           `config-lang.in'.  For C, the file is `c-config-lang.in'.
36148           Headers should appear before non-headers in this list.
36150        d. For files that are part of some but not all front ends, add
36151           the filename to the `gtfiles' variable of _all_ the front ends
36152           that use it.
36154   2. If the file was a header file, you'll need to check that it's
36155      included in the right place to be visible to the generated files.
36156      For a back-end header file, this should be done automatically.
36157      For a front-end header file, it needs to be included by the same
36158      file that includes `gtype-LANG.h'.  For other header files, it
36159      needs to be included in `gtype-desc.c', which is a generated file,
36160      so add it to `ifiles' in `open_base_file' in `gengtype.c'.
36162      For source files that aren't header files, the machinery will
36163      generate a header file that should be included in the source file
36164      you just changed.  The file will be called `gt-PATH.h' where PATH
36165      is the pathname relative to the `gcc' directory with slashes
36166      replaced by -, so for example the header file to be included in
36167      `cp/parser.c' is called `gt-cp-parser.c'.  The generated header
36168      file should be included after everything else in the source file.
36169      Don't forget to mention this file as a dependency in the
36170      `Makefile'!
36173  For language frontends, there is another file that needs to be included
36174 somewhere.  It will be called `gtype-LANG.h', where LANG is the name of
36175 the subdirectory the language is contained in.
36177  Plugins can add additional root tables.  Run the `gengtype' utility in
36178 plugin mode as `gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C'
36179 with your plugin files PLUGIN*.C using `GTY' to generate the
36180 PLUGINOUT.H file.  The GCC build tree is needed to be present in that
36181 mode.
36183 \x1f
36184 File: gccint.info,  Node: Invoking the garbage collector,  Prev: Files,  Up: Type Information
36186 22.4 How to invoke the garbage collector
36187 ========================================
36189 The GCC garbage collector GGC is only invoked explicitly. In contrast
36190 with many other garbage collectors, it is not implicitly invoked by
36191 allocation routines when a lot of memory has been consumed. So the only
36192 way to have GGC reclaim storage it to call the `ggc_collect' function
36193 explicitly. This call is an expensive operation, as it may have to scan
36194 the entire heap. Beware that local variables (on the GCC call stack)
36195 are not followed by such an invocation (as many other garbage
36196 collectors do): you should reference all your data from static or
36197 external `GTY'-ed variables, and it is advised to call `ggc_collect'
36198 with a shallow call stack. The GGC is an exact mark and sweep garbage
36199 collector (so it does not scan the call stack for pointers). In
36200 practice GCC passes don't often call `ggc_collect' themselves, because
36201 it is called by the pass manager between passes.
36203 \x1f
36204 File: gccint.info,  Node: Plugins,  Next: Funding,  Prev: Type Information,  Up: Top
36206 23 Plugins
36207 **********
36209 23.1 Loading Plugins
36210 ====================
36212 Plugins are supported on platforms that support `-ldl -rdynamic'.  They
36213 are loaded by the compiler using `dlopen' and invoked at pre-determined
36214 locations in the compilation process.
36216  Plugins are loaded with
36218  `-fplugin=/path/to/NAME.so' `-fplugin-arg-NAME-<key1>[=<value1>]'
36220  The plugin arguments are parsed by GCC and passed to respective
36221 plugins as key-value pairs. Multiple plugins can be invoked by
36222 specifying multiple `-fplugin' arguments.
36224 23.2 Plugin API
36225 ===============
36227 Plugins are activated by the compiler at specific events as defined in
36228 `gcc-plugin.h'.  For each event of interest, the plugin should call
36229 `register_callback' specifying the name of the event and address of the
36230 callback function that will handle that event.
36232  The header `gcc-plugin.h' must be the first gcc header to be included.
36234 23.2.1 Plugin license check
36235 ---------------------------
36237 Every plugin should define the global symbol `plugin_is_GPL_compatible'
36238 to assert that it has been licensed under a GPL-compatible license.  If
36239 this symbol does not exist, the compiler will emit a fatal error and
36240 exit with the error message:
36242      fatal error: plugin <name> is not licensed under a GPL-compatible license
36243      <name>: undefined symbol: plugin_is_GPL_compatible
36244      compilation terminated
36246  The type of the symbol is irrelevant.  The compiler merely asserts that
36247 it exists in the global scope.  Something like this is enough:
36249      int plugin_is_GPL_compatible;
36251 23.2.2 Plugin initialization
36252 ----------------------------
36254 Every plugin should export a function called `plugin_init' that is
36255 called right after the plugin is loaded. This function is responsible
36256 for registering all the callbacks required by the plugin and do any
36257 other required initialization.
36259  This function is called from `compile_file' right before invoking the
36260 parser.  The arguments to `plugin_init' are:
36262    * `plugin_info': Plugin invocation information.
36264    * `version': GCC version.
36266  The `plugin_info' struct is defined as follows:
36268      struct plugin_name_args
36269      {
36270        char *base_name;              /* Short name of the plugin
36271                                         (filename without .so suffix). */
36272        const char *full_name;        /* Path to the plugin as specified with
36273                                         -fplugin=. */
36274        int argc;                     /* Number of arguments specified with
36275                                         -fplugin-arg-.... */
36276        struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
36277        const char *version;          /* Version string provided by plugin. */
36278        const char *help;             /* Help string provided by plugin. */
36279      }
36281  If initialization fails, `plugin_init' must return a non-zero value.
36282 Otherwise, it should return 0.
36284  The version of the GCC compiler loading the plugin is described by the
36285 following structure:
36287      struct plugin_gcc_version
36288      {
36289        const char *basever;
36290        const char *datestamp;
36291        const char *devphase;
36292        const char *revision;
36293        const char *configuration_arguments;
36294      };
36296  The function `plugin_default_version_check' takes two pointers to such
36297 structure and compare them field by field. It can be used by the
36298 plugin's `plugin_init' function.
36300  The version of GCC used to compile the plugin can be found in the
36301 symbol `gcc_version' defined in the header `plugin-version.h'. The
36302 recommended version check to perform looks like
36304      #include "plugin-version.h"
36305      ...
36307      int
36308      plugin_init (struct plugin_name_args *plugin_info,
36309                   struct plugin_gcc_version *version)
36310      {
36311        if (!plugin_default_version_check (version, &gcc_version))
36312          return 1;
36314      }
36316  but you can also check the individual fields if you want a less strict
36317 check.
36319 23.2.3 Plugin callbacks
36320 -----------------------
36322 Callback functions have the following prototype:
36324      /* The prototype for a plugin callback function.
36325           gcc_data  - event-specific data provided by GCC
36326           user_data - plugin-specific data provided by the plug-in.  */
36327      typedef void (*plugin_callback_func)(void *gcc_data, void *user_data);
36329  Callbacks can be invoked at the following pre-determined events:
36331      enum plugin_event
36332      {
36333        PLUGIN_PASS_MANAGER_SETUP,    /* To hook into pass manager.  */
36334        PLUGIN_FINISH_TYPE,           /* After finishing parsing a type.  */
36335        PLUGIN_FINISH_UNIT,           /* Useful for summary processing.  */
36336        PLUGIN_PRE_GENERICIZE,        /* Allows to see low level AST in C and C++ frontends.  */
36337        PLUGIN_FINISH,                /* Called before GCC exits.  */
36338        PLUGIN_INFO,                  /* Information about the plugin. */
36339        PLUGIN_GGC_START,             /* Called at start of GCC Garbage Collection. */
36340        PLUGIN_GGC_MARKING,           /* Extend the GGC marking. */
36341        PLUGIN_GGC_END,               /* Called at end of GGC. */
36342        PLUGIN_REGISTER_GGC_ROOTS,    /* Register an extra GGC root table. */
36343        PLUGIN_REGISTER_GGC_CACHES,   /* Register an extra GGC cache table. */
36344        PLUGIN_ATTRIBUTES,            /* Called during attribute registration */
36345        PLUGIN_START_UNIT,            /* Called before processing a translation unit.  */
36346        PLUGIN_PRAGMAS,               /* Called during pragma registration. */
36347        /* Called before first pass from all_passes.  */
36348        PLUGIN_ALL_PASSES_START,
36349        /* Called after last pass from all_passes.  */
36350        PLUGIN_ALL_PASSES_END,
36351        /* Called before first ipa pass.  */
36352        PLUGIN_ALL_IPA_PASSES_START,
36353        /* Called after last ipa pass.  */
36354        PLUGIN_ALL_IPA_PASSES_END,
36355        /* Allows to override pass gate decision for current_pass.  */
36356        PLUGIN_OVERRIDE_GATE,
36357        /* Called before executing a pass.  */
36358        PLUGIN_PASS_EXECUTION,
36359        /* Called before executing subpasses of a GIMPLE_PASS in
36360           execute_ipa_pass_list.  */
36361        PLUGIN_EARLY_GIMPLE_PASSES_START,
36362        /* Called after executing subpasses of a GIMPLE_PASS in
36363           execute_ipa_pass_list.  */
36364        PLUGIN_EARLY_GIMPLE_PASSES_END,
36365        /* Called when a pass is first instantiated.  */
36366        PLUGIN_NEW_PASS,
36368        PLUGIN_EVENT_FIRST_DYNAMIC    /* Dummy event used for indexing callback
36369                                         array.  */
36370      };
36372  In addition, plugins can also look up the enumerator of a named event,
36373 and / or generate new events dynamically, by calling the function
36374 `get_named_event_id'.
36376  To register a callback, the plugin calls `register_callback' with the
36377 arguments:
36379    * `char *name': Plugin name.
36381    * `int event': The event code.
36383    * `plugin_callback_func callback': The function that handles `event'.
36385    * `void *user_data': Pointer to plugin-specific data.
36387  For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO,
36388 PLUGIN_REGISTER_GGC_ROOTS and PLUGIN_REGISTER_GGC_CACHES pseudo-events
36389 the `callback' should be null, and the `user_data' is specific.
36391  When the PLUGIN_PRAGMAS event is triggered (with a null pointer as
36392 data from GCC), plugins may register their own pragmas using functions
36393 like `c_register_pragma' or `c_register_pragma_with_expansion'.
36395 23.3 Interacting with the pass manager
36396 ======================================
36398 There needs to be a way to add/reorder/remove passes dynamically. This
36399 is useful for both analysis plugins (plugging in after a certain pass
36400 such as CFG or an IPA pass) and optimization plugins.
36402  Basic support for inserting new passes or replacing existing passes is
36403 provided. A plugin registers a new pass with GCC by calling
36404 `register_callback' with the `PLUGIN_PASS_MANAGER_SETUP' event and a
36405 pointer to a `struct register_pass_info' object defined as follows
36407      enum pass_positioning_ops
36408      {
36409        PASS_POS_INSERT_AFTER,  // Insert after the reference pass.
36410        PASS_POS_INSERT_BEFORE, // Insert before the reference pass.
36411        PASS_POS_REPLACE        // Replace the reference pass.
36412      };
36414      struct register_pass_info
36415      {
36416        struct opt_pass *pass;            /* New pass provided by the plugin.  */
36417        const char *reference_pass_name;  /* Name of the reference pass for hooking
36418                                             up the new pass.  */
36419        int ref_pass_instance_number;     /* Insert the pass at the specified
36420                                             instance number of the reference pass.  */
36421                                          /* Do it for every instance if it is 0.  */
36422        enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
36423      };
36426      /* Sample plugin code that registers a new pass.  */
36427      int
36428      plugin_init (struct plugin_name_args *plugin_info,
36429                   struct plugin_gcc_version *version)
36430      {
36431        struct register_pass_info pass_info;
36433        ...
36435        /* Code to fill in the pass_info object with new pass information.  */
36437        ...
36439        /* Register the new pass.  */
36440        register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
36442        ...
36443      }
36445 23.4 Interacting with the GCC Garbage Collector
36446 ===============================================
36448 Some plugins may want to be informed when GGC (the GCC Garbage
36449 Collector) is running. They can register callbacks for the
36450 `PLUGIN_GGC_START' and `PLUGIN_GGC_END' events (for which the callback
36451 is called with a null `gcc_data') to be notified of the start or end of
36452 the GCC garbage collection.
36454  Some plugins may need to have GGC mark additional data. This can be
36455 done by registering a callback (called with a null `gcc_data') for the
36456 `PLUGIN_GGC_MARKING' event. Such callbacks can call the `ggc_set_mark'
36457 routine, preferably thru the `ggc_mark' macro (and conversely, these
36458 routines should usually not be used in plugins outside of the
36459 `PLUGIN_GGC_MARKING' event).
36461  Some plugins may need to add extra GGC root tables, e.g. to handle
36462 their own `GTY'-ed data. This can be done with the
36463 `PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the
36464 extra root table (of type `struct ggc_root_tab*') as `user_data'.
36465 Plugins that want to use the `if_marked' hash table option can add the
36466 extra GGC cache tables generated by `gengtype' using the
36467 `PLUGIN_REGISTER_GGC_CACHES' pseudo-event with a null callback and the
36468 extra cache table (of type `struct ggc_cache_tab*') as `user_data'.
36469 Running the `gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility
36470 generates these extra root tables.
36472  You should understand the details of memory management inside GCC
36473 before using `PLUGIN_GGC_MARKING', `PLUGIN_REGISTER_GGC_ROOTS' or
36474 `PLUGIN_REGISTER_GGC_CACHES'.
36476 23.5 Giving information about a plugin
36477 ======================================
36479 A plugin should give some information to the user about itself. This
36480 uses the following structure:
36482      struct plugin_info
36483      {
36484        const char *version;
36485        const char *help;
36486      };
36488  Such a structure is passed as the `user_data' by the plugin's init
36489 routine using `register_callback' with the `PLUGIN_INFO' pseudo-event
36490 and a null callback.
36492 23.6 Registering custom attributes or pragmas
36493 =============================================
36495 For analysis (or other) purposes it is useful to be able to add custom
36496 attributes or pragmas.
36498  The `PLUGIN_ATTRIBUTES' callback is called during attribute
36499 registration. Use the `register_attribute' function to register custom
36500 attributes.
36502      /* Attribute handler callback */
36503      static tree
36504      handle_user_attribute (tree *node, tree name, tree args,
36505                             int flags, bool *no_add_attrs)
36506      {
36507        return NULL_TREE;
36508      }
36510      /* Attribute definition */
36511      static struct attribute_spec user_attr =
36512        { "user", 1, 1, false,  false, false, handle_user_attribute };
36514      /* Plugin callback called during attribute registration.
36515      Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL)
36516      */
36517      static void
36518      register_attributes (void *event_data, void *data)
36519      {
36520        warning (0, G_("Callback to register attributes"));
36521        register_attribute (&user_attr);
36522      }
36524  The `PLUGIN_PRAGMAS' callback is called during pragmas registration.
36525 Use the `c_register_pragma' or `c_register_pragma_with_expansion'
36526 functions to register custom pragmas.
36528      /* Plugin callback called during pragmas registration. Registered with
36529           register_callback (plugin_name, PLUGIN_PRAGMAS,
36530                              register_my_pragma, NULL);
36531      */
36532      static void
36533      register_my_pragma (void *event_data, void *data)
36534      {
36535        warning (0, G_("Callback to register pragmas"));
36536        c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello);
36537      }
36539  It is suggested to pass `"GCCPLUGIN"' (or a short name identifying
36540 your plugin) as the "space" argument of your pragma.
36542 23.7 Recording information about pass execution
36543 ===============================================
36545 The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
36546 (the same as current_pass) as `gcc_data' to the callback.  You can also
36547 inspect cfun to find out about which function this pass is executed for.
36548 Note that this event will only be invoked if the gate check (if
36549 applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds.  You can use
36550 other hooks, like `PLUGIN_ALL_PASSES_START', `PLUGIN_ALL_PASSES_END',
36551 `PLUGIN_ALL_IPA_PASSES_START', `PLUGIN_ALL_IPA_PASSES_END',
36552 `PLUGIN_EARLY_GIMPLE_PASSES_START', and/or
36553 `PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your
36554 plugin(s) in order to get context for the pass execution.
36556 23.8 Controlling which passes are being run
36557 ===========================================
36559 After the original gate function for a pass is called, its result - the
36560 gate status - is stored as an integer.  Then the event
36561 `PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in
36562 the `gcc_data' parameter to the callback function.  A nonzero value of
36563 the gate status means that the pass is to be executed.  You can both
36564 read and write the gate status via the passed pointer.
36566 23.9 Keeping track of available passes
36567 ======================================
36569 When your plugin is loaded, you can inspect the various pass lists to
36570 determine what passes are available.  However, other plugins might add
36571 new passes.  Also, future changes to GCC might cause generic passes to
36572 be added after plugin loading.  When a pass is first added to one of
36573 the pass lists, the event `PLUGIN_NEW_PASS' is invoked, with the
36574 callback parameter `gcc_data' pointing to the new pass.
36576 23.10 Building GCC plugins
36577 ==========================
36579 If plugins are enabled, GCC installs the headers needed to build a
36580 plugin (somewhere in the installation tree, e.g. under `/usr/local').
36581 In particular a `plugin/include' directory is installed, containing all
36582 the header files needed to build plugins.
36584  On most systems, you can query this `plugin' directory by invoking
36585 `gcc -print-file-name=plugin' (replace if needed `gcc' with the
36586 appropriate program path).
36588  The following GNU Makefile excerpt shows how to build a simple plugin:
36590      GCC=gcc
36591      PLUGIN_SOURCE_FILES= plugin1.c plugin2.c
36592      PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES))
36593      GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin)
36594      CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2
36596      plugin.so: $(PLUGIN_OBJECT_FILES)
36597         $(GCC) -shared $^ -o $@
36599  A single source file plugin may be built with `gcc -I`gcc
36600 -print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o
36601 plugin.so', using backquote shell syntax to query the `plugin'
36602 directory.
36604  Plugins needing to use `gengtype' require a GCC build directory for
36605 the same version of GCC that they will be linked against.
36607 \x1f
36608 File: gccint.info,  Node: Funding,  Next: GNU Project,  Prev: Plugins,  Up: Top
36610 Funding Free Software
36611 *********************
36613 If you want to have more free software a few years from now, it makes
36614 sense for you to help encourage people to contribute funds for its
36615 development.  The most effective approach known is to encourage
36616 commercial redistributors to donate.
36618  Users of free software systems can boost the pace of development by
36619 encouraging for-a-fee distributors to donate part of their selling price
36620 to free software developers--the Free Software Foundation, and others.
36622  The way to convince distributors to do this is to demand it and expect
36623 it from them.  So when you compare distributors, judge them partly by
36624 how much they give to free software development.  Show distributors
36625 they must compete to be the one who gives the most.
36627  To make this approach work, you must insist on numbers that you can
36628 compare, such as, "We will donate ten dollars to the Frobnitz project
36629 for each disk sold."  Don't be satisfied with a vague promise, such as
36630 "A portion of the profits are donated," since it doesn't give a basis
36631 for comparison.
36633  Even a precise fraction "of the profits from this disk" is not very
36634 meaningful, since creative accounting and unrelated business decisions
36635 can greatly alter what fraction of the sales price counts as profit.
36636 If the price you pay is $50, ten percent of the profit is probably less
36637 than a dollar; it might be a few cents, or nothing at all.
36639  Some redistributors do development work themselves.  This is useful
36640 too; but to keep everyone honest, you need to inquire how much they do,
36641 and what kind.  Some kinds of development make much more long-term
36642 difference than others.  For example, maintaining a separate version of
36643 a program contributes very little; maintaining the standard version of a
36644 program for the whole community contributes much.  Easy new ports
36645 contribute little, since someone else would surely do them; difficult
36646 ports such as adding a new CPU to the GNU Compiler Collection
36647 contribute more; major new features or packages contribute the most.
36649  By establishing the idea that supporting further development is "the
36650 proper thing to do" when distributing free software for a fee, we can
36651 assure a steady flow of resources into making more free software.
36653      Copyright (C) 1994 Free Software Foundation, Inc.
36654      Verbatim copying and redistribution of this section is permitted
36655      without royalty; alteration is not permitted.
36657 \x1f
36658 File: gccint.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
36660 The GNU Project and GNU/Linux
36661 *****************************
36663 The GNU Project was launched in 1984 to develop a complete Unix-like
36664 operating system which is free software: the GNU system.  (GNU is a
36665 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
36666 Variants of the GNU operating system, which use the kernel Linux, are
36667 now widely used; though these systems are often referred to as "Linux",
36668 they are more accurately called GNU/Linux systems.
36670  For more information, see:
36671      `http://www.gnu.org/'
36672      `http://www.gnu.org/gnu/linux-and-gnu.html'
36674 \x1f
36675 File: gccint.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
36677 GNU General Public License
36678 **************************
36680                         Version 3, 29 June 2007
36682      Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
36684      Everyone is permitted to copy and distribute verbatim copies of this
36685      license document, but changing it is not allowed.
36687 Preamble
36688 ========
36690 The GNU General Public License is a free, copyleft license for software
36691 and other kinds of works.
36693  The licenses for most software and other practical works are designed
36694 to take away your freedom to share and change the works.  By contrast,
36695 the GNU General Public License is intended to guarantee your freedom to
36696 share and change all versions of a program-to make sure it remains free
36697 software for all its users.  We, the Free Software Foundation, use the
36698 GNU General Public License for most of our software; it applies also to
36699 any other work released this way by its authors.  You can apply it to
36700 your programs, too.
36702  When we speak of free software, we are referring to freedom, not
36703 price.  Our General Public Licenses are designed to make sure that you
36704 have the freedom to distribute copies of free software (and charge for
36705 them if you wish), that you receive source code or can get it if you
36706 want it, that you can change the software or use pieces of it in new
36707 free programs, and that you know you can do these things.
36709  To protect your rights, we need to prevent others from denying you
36710 these rights or asking you to surrender the rights.  Therefore, you
36711 have certain responsibilities if you distribute copies of the software,
36712 or if you modify it: responsibilities to respect the freedom of others.
36714  For example, if you distribute copies of such a program, whether
36715 gratis or for a fee, you must pass on to the recipients the same
36716 freedoms that you received.  You must make sure that they, too, receive
36717 or can get the source code.  And you must show them these terms so they
36718 know their rights.
36720  Developers that use the GNU GPL protect your rights with two steps:
36721 (1) assert copyright on the software, and (2) offer you this License
36722 giving you legal permission to copy, distribute and/or modify it.
36724  For the developers' and authors' protection, the GPL clearly explains
36725 that there is no warranty for this free software.  For both users' and
36726 authors' sake, the GPL requires that modified versions be marked as
36727 changed, so that their problems will not be attributed erroneously to
36728 authors of previous versions.
36730  Some devices are designed to deny users access to install or run
36731 modified versions of the software inside them, although the
36732 manufacturer can do so.  This is fundamentally incompatible with the
36733 aim of protecting users' freedom to change the software.  The
36734 systematic pattern of such abuse occurs in the area of products for
36735 individuals to use, which is precisely where it is most unacceptable.
36736 Therefore, we have designed this version of the GPL to prohibit the
36737 practice for those products.  If such problems arise substantially in
36738 other domains, we stand ready to extend this provision to those domains
36739 in future versions of the GPL, as needed to protect the freedom of
36740 users.
36742  Finally, every program is threatened constantly by software patents.
36743 States should not allow patents to restrict development and use of
36744 software on general-purpose computers, but in those that do, we wish to
36745 avoid the special danger that patents applied to a free program could
36746 make it effectively proprietary.  To prevent this, the GPL assures that
36747 patents cannot be used to render the program non-free.
36749  The precise terms and conditions for copying, distribution and
36750 modification follow.
36752 TERMS AND CONDITIONS
36753 ====================
36755   0. Definitions.
36757      "This License" refers to version 3 of the GNU General Public
36758      License.
36760      "Copyright" also means copyright-like laws that apply to other
36761      kinds of works, such as semiconductor masks.
36763      "The Program" refers to any copyrightable work licensed under this
36764      License.  Each licensee is addressed as "you".  "Licensees" and
36765      "recipients" may be individuals or organizations.
36767      To "modify" a work means to copy from or adapt all or part of the
36768      work in a fashion requiring copyright permission, other than the
36769      making of an exact copy.  The resulting work is called a "modified
36770      version" of the earlier work or a work "based on" the earlier work.
36772      A "covered work" means either the unmodified Program or a work
36773      based on the Program.
36775      To "propagate" a work means to do anything with it that, without
36776      permission, would make you directly or secondarily liable for
36777      infringement under applicable copyright law, except executing it
36778      on a computer or modifying a private copy.  Propagation includes
36779      copying, distribution (with or without modification), making
36780      available to the public, and in some countries other activities as
36781      well.
36783      To "convey" a work means any kind of propagation that enables other
36784      parties to make or receive copies.  Mere interaction with a user
36785      through a computer network, with no transfer of a copy, is not
36786      conveying.
36788      An interactive user interface displays "Appropriate Legal Notices"
36789      to the extent that it includes a convenient and prominently visible
36790      feature that (1) displays an appropriate copyright notice, and (2)
36791      tells the user that there is no warranty for the work (except to
36792      the extent that warranties are provided), that licensees may
36793      convey the work under this License, and how to view a copy of this
36794      License.  If the interface presents a list of user commands or
36795      options, such as a menu, a prominent item in the list meets this
36796      criterion.
36798   1. Source Code.
36800      The "source code" for a work means the preferred form of the work
36801      for making modifications to it.  "Object code" means any
36802      non-source form of a work.
36804      A "Standard Interface" means an interface that either is an
36805      official standard defined by a recognized standards body, or, in
36806      the case of interfaces specified for a particular programming
36807      language, one that is widely used among developers working in that
36808      language.
36810      The "System Libraries" of an executable work include anything,
36811      other than the work as a whole, that (a) is included in the normal
36812      form of packaging a Major Component, but which is not part of that
36813      Major Component, and (b) serves only to enable use of the work
36814      with that Major Component, or to implement a Standard Interface
36815      for which an implementation is available to the public in source
36816      code form.  A "Major Component", in this context, means a major
36817      essential component (kernel, window system, and so on) of the
36818      specific operating system (if any) on which the executable work
36819      runs, or a compiler used to produce the work, or an object code
36820      interpreter used to run it.
36822      The "Corresponding Source" for a work in object code form means all
36823      the source code needed to generate, install, and (for an executable
36824      work) run the object code and to modify the work, including
36825      scripts to control those activities.  However, it does not include
36826      the work's System Libraries, or general-purpose tools or generally
36827      available free programs which are used unmodified in performing
36828      those activities but which are not part of the work.  For example,
36829      Corresponding Source includes interface definition files
36830      associated with source files for the work, and the source code for
36831      shared libraries and dynamically linked subprograms that the work
36832      is specifically designed to require, such as by intimate data
36833      communication or control flow between those subprograms and other
36834      parts of the work.
36836      The Corresponding Source need not include anything that users can
36837      regenerate automatically from other parts of the Corresponding
36838      Source.
36840      The Corresponding Source for a work in source code form is that
36841      same work.
36843   2. Basic Permissions.
36845      All rights granted under this License are granted for the term of
36846      copyright on the Program, and are irrevocable provided the stated
36847      conditions are met.  This License explicitly affirms your unlimited
36848      permission to run the unmodified Program.  The output from running
36849      a covered work is covered by this License only if the output,
36850      given its content, constitutes a covered work.  This License
36851      acknowledges your rights of fair use or other equivalent, as
36852      provided by copyright law.
36854      You may make, run and propagate covered works that you do not
36855      convey, without conditions so long as your license otherwise
36856      remains in force.  You may convey covered works to others for the
36857      sole purpose of having them make modifications exclusively for
36858      you, or provide you with facilities for running those works,
36859      provided that you comply with the terms of this License in
36860      conveying all material for which you do not control copyright.
36861      Those thus making or running the covered works for you must do so
36862      exclusively on your behalf, under your direction and control, on
36863      terms that prohibit them from making any copies of your
36864      copyrighted material outside their relationship with you.
36866      Conveying under any other circumstances is permitted solely under
36867      the conditions stated below.  Sublicensing is not allowed; section
36868      10 makes it unnecessary.
36870   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
36872      No covered work shall be deemed part of an effective technological
36873      measure under any applicable law fulfilling obligations under
36874      article 11 of the WIPO copyright treaty adopted on 20 December
36875      1996, or similar laws prohibiting or restricting circumvention of
36876      such measures.
36878      When you convey a covered work, you waive any legal power to forbid
36879      circumvention of technological measures to the extent such
36880      circumvention is effected by exercising rights under this License
36881      with respect to the covered work, and you disclaim any intention
36882      to limit operation or modification of the work as a means of
36883      enforcing, against the work's users, your or third parties' legal
36884      rights to forbid circumvention of technological measures.
36886   4. Conveying Verbatim Copies.
36888      You may convey verbatim copies of the Program's source code as you
36889      receive it, in any medium, provided that you conspicuously and
36890      appropriately publish on each copy an appropriate copyright notice;
36891      keep intact all notices stating that this License and any
36892      non-permissive terms added in accord with section 7 apply to the
36893      code; keep intact all notices of the absence of any warranty; and
36894      give all recipients a copy of this License along with the Program.
36896      You may charge any price or no price for each copy that you convey,
36897      and you may offer support or warranty protection for a fee.
36899   5. Conveying Modified Source Versions.
36901      You may convey a work based on the Program, or the modifications to
36902      produce it from the Program, in the form of source code under the
36903      terms of section 4, provided that you also meet all of these
36904      conditions:
36906        a. The work must carry prominent notices stating that you
36907           modified it, and giving a relevant date.
36909        b. The work must carry prominent notices stating that it is
36910           released under this License and any conditions added under
36911           section 7.  This requirement modifies the requirement in
36912           section 4 to "keep intact all notices".
36914        c. You must license the entire work, as a whole, under this
36915           License to anyone who comes into possession of a copy.  This
36916           License will therefore apply, along with any applicable
36917           section 7 additional terms, to the whole of the work, and all
36918           its parts, regardless of how they are packaged.  This License
36919           gives no permission to license the work in any other way, but
36920           it does not invalidate such permission if you have separately
36921           received it.
36923        d. If the work has interactive user interfaces, each must display
36924           Appropriate Legal Notices; however, if the Program has
36925           interactive interfaces that do not display Appropriate Legal
36926           Notices, your work need not make them do so.
36928      A compilation of a covered work with other separate and independent
36929      works, which are not by their nature extensions of the covered
36930      work, and which are not combined with it such as to form a larger
36931      program, in or on a volume of a storage or distribution medium, is
36932      called an "aggregate" if the compilation and its resulting
36933      copyright are not used to limit the access or legal rights of the
36934      compilation's users beyond what the individual works permit.
36935      Inclusion of a covered work in an aggregate does not cause this
36936      License to apply to the other parts of the aggregate.
36938   6. Conveying Non-Source Forms.
36940      You may convey a covered work in object code form under the terms
36941      of sections 4 and 5, provided that you also convey the
36942      machine-readable Corresponding Source under the terms of this
36943      License, in one of these ways:
36945        a. Convey the object code in, or embodied in, a physical product
36946           (including a physical distribution medium), accompanied by the
36947           Corresponding Source fixed on a durable physical medium
36948           customarily used for software interchange.
36950        b. Convey the object code in, or embodied in, a physical product
36951           (including a physical distribution medium), accompanied by a
36952           written offer, valid for at least three years and valid for
36953           as long as you offer spare parts or customer support for that
36954           product model, to give anyone who possesses the object code
36955           either (1) a copy of the Corresponding Source for all the
36956           software in the product that is covered by this License, on a
36957           durable physical medium customarily used for software
36958           interchange, for a price no more than your reasonable cost of
36959           physically performing this conveying of source, or (2) access
36960           to copy the Corresponding Source from a network server at no
36961           charge.
36963        c. Convey individual copies of the object code with a copy of
36964           the written offer to provide the Corresponding Source.  This
36965           alternative is allowed only occasionally and noncommercially,
36966           and only if you received the object code with such an offer,
36967           in accord with subsection 6b.
36969        d. Convey the object code by offering access from a designated
36970           place (gratis or for a charge), and offer equivalent access
36971           to the Corresponding Source in the same way through the same
36972           place at no further charge.  You need not require recipients
36973           to copy the Corresponding Source along with the object code.
36974           If the place to copy the object code is a network server, the
36975           Corresponding Source may be on a different server (operated
36976           by you or a third party) that supports equivalent copying
36977           facilities, provided you maintain clear directions next to
36978           the object code saying where to find the Corresponding Source.
36979           Regardless of what server hosts the Corresponding Source, you
36980           remain obligated to ensure that it is available for as long
36981           as needed to satisfy these requirements.
36983        e. Convey the object code using peer-to-peer transmission,
36984           provided you inform other peers where the object code and
36985           Corresponding Source of the work are being offered to the
36986           general public at no charge under subsection 6d.
36989      A separable portion of the object code, whose source code is
36990      excluded from the Corresponding Source as a System Library, need
36991      not be included in conveying the object code work.
36993      A "User Product" is either (1) a "consumer product", which means
36994      any tangible personal property which is normally used for personal,
36995      family, or household purposes, or (2) anything designed or sold for
36996      incorporation into a dwelling.  In determining whether a product
36997      is a consumer product, doubtful cases shall be resolved in favor of
36998      coverage.  For a particular product received by a particular user,
36999      "normally used" refers to a typical or common use of that class of
37000      product, regardless of the status of the particular user or of the
37001      way in which the particular user actually uses, or expects or is
37002      expected to use, the product.  A product is a consumer product
37003      regardless of whether the product has substantial commercial,
37004      industrial or non-consumer uses, unless such uses represent the
37005      only significant mode of use of the product.
37007      "Installation Information" for a User Product means any methods,
37008      procedures, authorization keys, or other information required to
37009      install and execute modified versions of a covered work in that
37010      User Product from a modified version of its Corresponding Source.
37011      The information must suffice to ensure that the continued
37012      functioning of the modified object code is in no case prevented or
37013      interfered with solely because modification has been made.
37015      If you convey an object code work under this section in, or with,
37016      or specifically for use in, a User Product, and the conveying
37017      occurs as part of a transaction in which the right of possession
37018      and use of the User Product is transferred to the recipient in
37019      perpetuity or for a fixed term (regardless of how the transaction
37020      is characterized), the Corresponding Source conveyed under this
37021      section must be accompanied by the Installation Information.  But
37022      this requirement does not apply if neither you nor any third party
37023      retains the ability to install modified object code on the User
37024      Product (for example, the work has been installed in ROM).
37026      The requirement to provide Installation Information does not
37027      include a requirement to continue to provide support service,
37028      warranty, or updates for a work that has been modified or
37029      installed by the recipient, or for the User Product in which it
37030      has been modified or installed.  Access to a network may be denied
37031      when the modification itself materially and adversely affects the
37032      operation of the network or violates the rules and protocols for
37033      communication across the network.
37035      Corresponding Source conveyed, and Installation Information
37036      provided, in accord with this section must be in a format that is
37037      publicly documented (and with an implementation available to the
37038      public in source code form), and must require no special password
37039      or key for unpacking, reading or copying.
37041   7. Additional Terms.
37043      "Additional permissions" are terms that supplement the terms of
37044      this License by making exceptions from one or more of its
37045      conditions.  Additional permissions that are applicable to the
37046      entire Program shall be treated as though they were included in
37047      this License, to the extent that they are valid under applicable
37048      law.  If additional permissions apply only to part of the Program,
37049      that part may be used separately under those permissions, but the
37050      entire Program remains governed by this License without regard to
37051      the additional permissions.
37053      When you convey a copy of a covered work, you may at your option
37054      remove any additional permissions from that copy, or from any part
37055      of it.  (Additional permissions may be written to require their own
37056      removal in certain cases when you modify the work.)  You may place
37057      additional permissions on material, added by you to a covered work,
37058      for which you have or can give appropriate copyright permission.
37060      Notwithstanding any other provision of this License, for material
37061      you add to a covered work, you may (if authorized by the copyright
37062      holders of that material) supplement the terms of this License
37063      with terms:
37065        a. Disclaiming warranty or limiting liability differently from
37066           the terms of sections 15 and 16 of this License; or
37068        b. Requiring preservation of specified reasonable legal notices
37069           or author attributions in that material or in the Appropriate
37070           Legal Notices displayed by works containing it; or
37072        c. Prohibiting misrepresentation of the origin of that material,
37073           or requiring that modified versions of such material be
37074           marked in reasonable ways as different from the original
37075           version; or
37077        d. Limiting the use for publicity purposes of names of licensors
37078           or authors of the material; or
37080        e. Declining to grant rights under trademark law for use of some
37081           trade names, trademarks, or service marks; or
37083        f. Requiring indemnification of licensors and authors of that
37084           material by anyone who conveys the material (or modified
37085           versions of it) with contractual assumptions of liability to
37086           the recipient, for any liability that these contractual
37087           assumptions directly impose on those licensors and authors.
37089      All other non-permissive additional terms are considered "further
37090      restrictions" within the meaning of section 10.  If the Program as
37091      you received it, or any part of it, contains a notice stating that
37092      it is governed by this License along with a term that is a further
37093      restriction, you may remove that term.  If a license document
37094      contains a further restriction but permits relicensing or
37095      conveying under this License, you may add to a covered work
37096      material governed by the terms of that license document, provided
37097      that the further restriction does not survive such relicensing or
37098      conveying.
37100      If you add terms to a covered work in accord with this section, you
37101      must place, in the relevant source files, a statement of the
37102      additional terms that apply to those files, or a notice indicating
37103      where to find the applicable terms.
37105      Additional terms, permissive or non-permissive, may be stated in
37106      the form of a separately written license, or stated as exceptions;
37107      the above requirements apply either way.
37109   8. Termination.
37111      You may not propagate or modify a covered work except as expressly
37112      provided under this License.  Any attempt otherwise to propagate or
37113      modify it is void, and will automatically terminate your rights
37114      under this License (including any patent licenses granted under
37115      the third paragraph of section 11).
37117      However, if you cease all violation of this License, then your
37118      license from a particular copyright holder is reinstated (a)
37119      provisionally, unless and until the copyright holder explicitly
37120      and finally terminates your license, and (b) permanently, if the
37121      copyright holder fails to notify you of the violation by some
37122      reasonable means prior to 60 days after the cessation.
37124      Moreover, your license from a particular copyright holder is
37125      reinstated permanently if the copyright holder notifies you of the
37126      violation by some reasonable means, this is the first time you have
37127      received notice of violation of this License (for any work) from
37128      that copyright holder, and you cure the violation prior to 30 days
37129      after your receipt of the notice.
37131      Termination of your rights under this section does not terminate
37132      the licenses of parties who have received copies or rights from
37133      you under this License.  If your rights have been terminated and
37134      not permanently reinstated, you do not qualify to receive new
37135      licenses for the same material under section 10.
37137   9. Acceptance Not Required for Having Copies.
37139      You are not required to accept this License in order to receive or
37140      run a copy of the Program.  Ancillary propagation of a covered work
37141      occurring solely as a consequence of using peer-to-peer
37142      transmission to receive a copy likewise does not require
37143      acceptance.  However, nothing other than this License grants you
37144      permission to propagate or modify any covered work.  These actions
37145      infringe copyright if you do not accept this License.  Therefore,
37146      by modifying or propagating a covered work, you indicate your
37147      acceptance of this License to do so.
37149  10. Automatic Licensing of Downstream Recipients.
37151      Each time you convey a covered work, the recipient automatically
37152      receives a license from the original licensors, to run, modify and
37153      propagate that work, subject to this License.  You are not
37154      responsible for enforcing compliance by third parties with this
37155      License.
37157      An "entity transaction" is a transaction transferring control of an
37158      organization, or substantially all assets of one, or subdividing an
37159      organization, or merging organizations.  If propagation of a
37160      covered work results from an entity transaction, each party to that
37161      transaction who receives a copy of the work also receives whatever
37162      licenses to the work the party's predecessor in interest had or
37163      could give under the previous paragraph, plus a right to
37164      possession of the Corresponding Source of the work from the
37165      predecessor in interest, if the predecessor has it or can get it
37166      with reasonable efforts.
37168      You may not impose any further restrictions on the exercise of the
37169      rights granted or affirmed under this License.  For example, you
37170      may not impose a license fee, royalty, or other charge for
37171      exercise of rights granted under this License, and you may not
37172      initiate litigation (including a cross-claim or counterclaim in a
37173      lawsuit) alleging that any patent claim is infringed by making,
37174      using, selling, offering for sale, or importing the Program or any
37175      portion of it.
37177  11. Patents.
37179      A "contributor" is a copyright holder who authorizes use under this
37180      License of the Program or a work on which the Program is based.
37181      The work thus licensed is called the contributor's "contributor
37182      version".
37184      A contributor's "essential patent claims" are all patent claims
37185      owned or controlled by the contributor, whether already acquired or
37186      hereafter acquired, that would be infringed by some manner,
37187      permitted by this License, of making, using, or selling its
37188      contributor version, but do not include claims that would be
37189      infringed only as a consequence of further modification of the
37190      contributor version.  For purposes of this definition, "control"
37191      includes the right to grant patent sublicenses in a manner
37192      consistent with the requirements of this License.
37194      Each contributor grants you a non-exclusive, worldwide,
37195      royalty-free patent license under the contributor's essential
37196      patent claims, to make, use, sell, offer for sale, import and
37197      otherwise run, modify and propagate the contents of its
37198      contributor version.
37200      In the following three paragraphs, a "patent license" is any
37201      express agreement or commitment, however denominated, not to
37202      enforce a patent (such as an express permission to practice a
37203      patent or covenant not to sue for patent infringement).  To
37204      "grant" such a patent license to a party means to make such an
37205      agreement or commitment not to enforce a patent against the party.
37207      If you convey a covered work, knowingly relying on a patent
37208      license, and the Corresponding Source of the work is not available
37209      for anyone to copy, free of charge and under the terms of this
37210      License, through a publicly available network server or other
37211      readily accessible means, then you must either (1) cause the
37212      Corresponding Source to be so available, or (2) arrange to deprive
37213      yourself of the benefit of the patent license for this particular
37214      work, or (3) arrange, in a manner consistent with the requirements
37215      of this License, to extend the patent license to downstream
37216      recipients.  "Knowingly relying" means you have actual knowledge
37217      that, but for the patent license, your conveying the covered work
37218      in a country, or your recipient's use of the covered work in a
37219      country, would infringe one or more identifiable patents in that
37220      country that you have reason to believe are valid.
37222      If, pursuant to or in connection with a single transaction or
37223      arrangement, you convey, or propagate by procuring conveyance of, a
37224      covered work, and grant a patent license to some of the parties
37225      receiving the covered work authorizing them to use, propagate,
37226      modify or convey a specific copy of the covered work, then the
37227      patent license you grant is automatically extended to all
37228      recipients of the covered work and works based on it.
37230      A patent license is "discriminatory" if it does not include within
37231      the scope of its coverage, prohibits the exercise of, or is
37232      conditioned on the non-exercise of one or more of the rights that
37233      are specifically granted under this License.  You may not convey a
37234      covered work if you are a party to an arrangement with a third
37235      party that is in the business of distributing software, under
37236      which you make payment to the third party based on the extent of
37237      your activity of conveying the work, and under which the third
37238      party grants, to any of the parties who would receive the covered
37239      work from you, a discriminatory patent license (a) in connection
37240      with copies of the covered work conveyed by you (or copies made
37241      from those copies), or (b) primarily for and in connection with
37242      specific products or compilations that contain the covered work,
37243      unless you entered into that arrangement, or that patent license
37244      was granted, prior to 28 March 2007.
37246      Nothing in this License shall be construed as excluding or limiting
37247      any implied license or other defenses to infringement that may
37248      otherwise be available to you under applicable patent law.
37250  12. No Surrender of Others' Freedom.
37252      If conditions are imposed on you (whether by court order,
37253      agreement or otherwise) that contradict the conditions of this
37254      License, they do not excuse you from the conditions of this
37255      License.  If you cannot convey a covered work so as to satisfy
37256      simultaneously your obligations under this License and any other
37257      pertinent obligations, then as a consequence you may not convey it
37258      at all.  For example, if you agree to terms that obligate you to
37259      collect a royalty for further conveying from those to whom you
37260      convey the Program, the only way you could satisfy both those
37261      terms and this License would be to refrain entirely from conveying
37262      the Program.
37264  13. Use with the GNU Affero General Public License.
37266      Notwithstanding any other provision of this License, you have
37267      permission to link or combine any covered work with a work licensed
37268      under version 3 of the GNU Affero General Public License into a
37269      single combined work, and to convey the resulting work.  The terms
37270      of this License will continue to apply to the part which is the
37271      covered work, but the special requirements of the GNU Affero
37272      General Public License, section 13, concerning interaction through
37273      a network will apply to the combination as such.
37275  14. Revised Versions of this License.
37277      The Free Software Foundation may publish revised and/or new
37278      versions of the GNU General Public License from time to time.
37279      Such new versions will be similar in spirit to the present
37280      version, but may differ in detail to address new problems or
37281      concerns.
37283      Each version is given a distinguishing version number.  If the
37284      Program specifies that a certain numbered version of the GNU
37285      General Public License "or any later version" applies to it, you
37286      have the option of following the terms and conditions either of
37287      that numbered version or of any later version published by the
37288      Free Software Foundation.  If the Program does not specify a
37289      version number of the GNU General Public License, you may choose
37290      any version ever published by the Free Software Foundation.
37292      If the Program specifies that a proxy can decide which future
37293      versions of the GNU General Public License can be used, that
37294      proxy's public statement of acceptance of a version permanently
37295      authorizes you to choose that version for the Program.
37297      Later license versions may give you additional or different
37298      permissions.  However, no additional obligations are imposed on any
37299      author or copyright holder as a result of your choosing to follow a
37300      later version.
37302  15. Disclaimer of Warranty.
37304      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
37305      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
37306      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
37307      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
37308      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
37309      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
37310      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
37311      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
37312      NECESSARY SERVICING, REPAIR OR CORRECTION.
37314  16. Limitation of Liability.
37316      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
37317      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
37318      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
37319      FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
37320      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
37321      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
37322      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
37323      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
37324      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
37325      THE POSSIBILITY OF SUCH DAMAGES.
37327  17. Interpretation of Sections 15 and 16.
37329      If the disclaimer of warranty and limitation of liability provided
37330      above cannot be given local legal effect according to their terms,
37331      reviewing courts shall apply local law that most closely
37332      approximates an absolute waiver of all civil liability in
37333      connection with the Program, unless a warranty or assumption of
37334      liability accompanies a copy of the Program in return for a fee.
37337 END OF TERMS AND CONDITIONS
37338 ===========================
37340 How to Apply These Terms to Your New Programs
37341 =============================================
37343 If you develop a new program, and you want it to be of the greatest
37344 possible use to the public, the best way to achieve this is to make it
37345 free software which everyone can redistribute and change under these
37346 terms.
37348  To do so, attach the following notices to the program.  It is safest
37349 to attach them to the start of each source file to most effectively
37350 state the exclusion of warranty; and each file should have at least the
37351 "copyright" line and a pointer to where the full notice is found.
37353      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
37354      Copyright (C) YEAR NAME OF AUTHOR
37356      This program is free software: you can redistribute it and/or modify
37357      it under the terms of the GNU General Public License as published by
37358      the Free Software Foundation, either version 3 of the License, or (at
37359      your option) any later version.
37361      This program is distributed in the hope that it will be useful, but
37362      WITHOUT ANY WARRANTY; without even the implied warranty of
37363      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
37364      General Public License for more details.
37366      You should have received a copy of the GNU General Public License
37367      along with this program.  If not, see `http://www.gnu.org/licenses/'.
37369  Also add information on how to contact you by electronic and paper
37370 mail.
37372  If the program does terminal interaction, make it output a short
37373 notice like this when it starts in an interactive mode:
37375      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
37376      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
37377      This is free software, and you are welcome to redistribute it
37378      under certain conditions; type `show c' for details.
37380  The hypothetical commands `show w' and `show c' should show the
37381 appropriate parts of the General Public License.  Of course, your
37382 program's commands might be different; for a GUI interface, you would
37383 use an "about box".
37385  You should also get your employer (if you work as a programmer) or
37386 school, if any, to sign a "copyright disclaimer" for the program, if
37387 necessary.  For more information on this, and how to apply and follow
37388 the GNU GPL, see `http://www.gnu.org/licenses/'.
37390  The GNU General Public License does not permit incorporating your
37391 program into proprietary programs.  If your program is a subroutine
37392 library, you may consider it more useful to permit linking proprietary
37393 applications with the library.  If this is what you want to do, use the
37394 GNU Lesser General Public License instead of this License.  But first,
37395 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
37397 \x1f
37398 File: gccint.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
37400 GNU Free Documentation License
37401 ******************************
37403                       Version 1.2, November 2002
37405      Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
37406      51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
37408      Everyone is permitted to copy and distribute verbatim copies
37409      of this license document, but changing it is not allowed.
37411   0. PREAMBLE
37413      The purpose of this License is to make a manual, textbook, or other
37414      functional and useful document "free" in the sense of freedom: to
37415      assure everyone the effective freedom to copy and redistribute it,
37416      with or without modifying it, either commercially or
37417      noncommercially.  Secondarily, this License preserves for the
37418      author and publisher a way to get credit for their work, while not
37419      being considered responsible for modifications made by others.
37421      This License is a kind of "copyleft", which means that derivative
37422      works of the document must themselves be free in the same sense.
37423      It complements the GNU General Public License, which is a copyleft
37424      license designed for free software.
37426      We have designed this License in order to use it for manuals for
37427      free software, because free software needs free documentation: a
37428      free program should come with manuals providing the same freedoms
37429      that the software does.  But this License is not limited to
37430      software manuals; it can be used for any textual work, regardless
37431      of subject matter or whether it is published as a printed book.
37432      We recommend this License principally for works whose purpose is
37433      instruction or reference.
37435   1. APPLICABILITY AND DEFINITIONS
37437      This License applies to any manual or other work, in any medium,
37438      that contains a notice placed by the copyright holder saying it
37439      can be distributed under the terms of this License.  Such a notice
37440      grants a world-wide, royalty-free license, unlimited in duration,
37441      to use that work under the conditions stated herein.  The
37442      "Document", below, refers to any such manual or work.  Any member
37443      of the public is a licensee, and is addressed as "you".  You
37444      accept the license if you copy, modify or distribute the work in a
37445      way requiring permission under copyright law.
37447      A "Modified Version" of the Document means any work containing the
37448      Document or a portion of it, either copied verbatim, or with
37449      modifications and/or translated into another language.
37451      A "Secondary Section" is a named appendix or a front-matter section
37452      of the Document that deals exclusively with the relationship of the
37453      publishers or authors of the Document to the Document's overall
37454      subject (or to related matters) and contains nothing that could
37455      fall directly within that overall subject.  (Thus, if the Document
37456      is in part a textbook of mathematics, a Secondary Section may not
37457      explain any mathematics.)  The relationship could be a matter of
37458      historical connection with the subject or with related matters, or
37459      of legal, commercial, philosophical, ethical or political position
37460      regarding them.
37462      The "Invariant Sections" are certain Secondary Sections whose
37463      titles are designated, as being those of Invariant Sections, in
37464      the notice that says that the Document is released under this
37465      License.  If a section does not fit the above definition of
37466      Secondary then it is not allowed to be designated as Invariant.
37467      The Document may contain zero Invariant Sections.  If the Document
37468      does not identify any Invariant Sections then there are none.
37470      The "Cover Texts" are certain short passages of text that are
37471      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
37472      that says that the Document is released under this License.  A
37473      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
37474      be at most 25 words.
37476      A "Transparent" copy of the Document means a machine-readable copy,
37477      represented in a format whose specification is available to the
37478      general public, that is suitable for revising the document
37479      straightforwardly with generic text editors or (for images
37480      composed of pixels) generic paint programs or (for drawings) some
37481      widely available drawing editor, and that is suitable for input to
37482      text formatters or for automatic translation to a variety of
37483      formats suitable for input to text formatters.  A copy made in an
37484      otherwise Transparent file format whose markup, or absence of
37485      markup, has been arranged to thwart or discourage subsequent
37486      modification by readers is not Transparent.  An image format is
37487      not Transparent if used for any substantial amount of text.  A
37488      copy that is not "Transparent" is called "Opaque".
37490      Examples of suitable formats for Transparent copies include plain
37491      ASCII without markup, Texinfo input format, LaTeX input format,
37492      SGML or XML using a publicly available DTD, and
37493      standard-conforming simple HTML, PostScript or PDF designed for
37494      human modification.  Examples of transparent image formats include
37495      PNG, XCF and JPG.  Opaque formats include proprietary formats that
37496      can be read and edited only by proprietary word processors, SGML or
37497      XML for which the DTD and/or processing tools are not generally
37498      available, and the machine-generated HTML, PostScript or PDF
37499      produced by some word processors for output purposes only.
37501      The "Title Page" means, for a printed book, the title page itself,
37502      plus such following pages as are needed to hold, legibly, the
37503      material this License requires to appear in the title page.  For
37504      works in formats which do not have any title page as such, "Title
37505      Page" means the text near the most prominent appearance of the
37506      work's title, preceding the beginning of the body of the text.
37508      A section "Entitled XYZ" means a named subunit of the Document
37509      whose title either is precisely XYZ or contains XYZ in parentheses
37510      following text that translates XYZ in another language.  (Here XYZ
37511      stands for a specific section name mentioned below, such as
37512      "Acknowledgements", "Dedications", "Endorsements", or "History".)
37513      To "Preserve the Title" of such a section when you modify the
37514      Document means that it remains a section "Entitled XYZ" according
37515      to this definition.
37517      The Document may include Warranty Disclaimers next to the notice
37518      which states that this License applies to the Document.  These
37519      Warranty Disclaimers are considered to be included by reference in
37520      this License, but only as regards disclaiming warranties: any other
37521      implication that these Warranty Disclaimers may have is void and
37522      has no effect on the meaning of this License.
37524   2. VERBATIM COPYING
37526      You may copy and distribute the Document in any medium, either
37527      commercially or noncommercially, provided that this License, the
37528      copyright notices, and the license notice saying this License
37529      applies to the Document are reproduced in all copies, and that you
37530      add no other conditions whatsoever to those of this License.  You
37531      may not use technical measures to obstruct or control the reading
37532      or further copying of the copies you make or distribute.  However,
37533      you may accept compensation in exchange for copies.  If you
37534      distribute a large enough number of copies you must also follow
37535      the conditions in section 3.
37537      You may also lend copies, under the same conditions stated above,
37538      and you may publicly display copies.
37540   3. COPYING IN QUANTITY
37542      If you publish printed copies (or copies in media that commonly
37543      have printed covers) of the Document, numbering more than 100, and
37544      the Document's license notice requires Cover Texts, you must
37545      enclose the copies in covers that carry, clearly and legibly, all
37546      these Cover Texts: Front-Cover Texts on the front cover, and
37547      Back-Cover Texts on the back cover.  Both covers must also clearly
37548      and legibly identify you as the publisher of these copies.  The
37549      front cover must present the full title with all words of the
37550      title equally prominent and visible.  You may add other material
37551      on the covers in addition.  Copying with changes limited to the
37552      covers, as long as they preserve the title of the Document and
37553      satisfy these conditions, can be treated as verbatim copying in
37554      other respects.
37556      If the required texts for either cover are too voluminous to fit
37557      legibly, you should put the first ones listed (as many as fit
37558      reasonably) on the actual cover, and continue the rest onto
37559      adjacent pages.
37561      If you publish or distribute Opaque copies of the Document
37562      numbering more than 100, you must either include a
37563      machine-readable Transparent copy along with each Opaque copy, or
37564      state in or with each Opaque copy a computer-network location from
37565      which the general network-using public has access to download
37566      using public-standard network protocols a complete Transparent
37567      copy of the Document, free of added material.  If you use the
37568      latter option, you must take reasonably prudent steps, when you
37569      begin distribution of Opaque copies in quantity, to ensure that
37570      this Transparent copy will remain thus accessible at the stated
37571      location until at least one year after the last time you
37572      distribute an Opaque copy (directly or through your agents or
37573      retailers) of that edition to the public.
37575      It is requested, but not required, that you contact the authors of
37576      the Document well before redistributing any large number of
37577      copies, to give them a chance to provide you with an updated
37578      version of the Document.
37580   4. MODIFICATIONS
37582      You may copy and distribute a Modified Version of the Document
37583      under the conditions of sections 2 and 3 above, provided that you
37584      release the Modified Version under precisely this License, with
37585      the Modified Version filling the role of the Document, thus
37586      licensing distribution and modification of the Modified Version to
37587      whoever possesses a copy of it.  In addition, you must do these
37588      things in the Modified Version:
37590        A. Use in the Title Page (and on the covers, if any) a title
37591           distinct from that of the Document, and from those of
37592           previous versions (which should, if there were any, be listed
37593           in the History section of the Document).  You may use the
37594           same title as a previous version if the original publisher of
37595           that version gives permission.
37597        B. List on the Title Page, as authors, one or more persons or
37598           entities responsible for authorship of the modifications in
37599           the Modified Version, together with at least five of the
37600           principal authors of the Document (all of its principal
37601           authors, if it has fewer than five), unless they release you
37602           from this requirement.
37604        C. State on the Title page the name of the publisher of the
37605           Modified Version, as the publisher.
37607        D. Preserve all the copyright notices of the Document.
37609        E. Add an appropriate copyright notice for your modifications
37610           adjacent to the other copyright notices.
37612        F. Include, immediately after the copyright notices, a license
37613           notice giving the public permission to use the Modified
37614           Version under the terms of this License, in the form shown in
37615           the Addendum below.
37617        G. Preserve in that license notice the full lists of Invariant
37618           Sections and required Cover Texts given in the Document's
37619           license notice.
37621        H. Include an unaltered copy of this License.
37623        I. Preserve the section Entitled "History", Preserve its Title,
37624           and add to it an item stating at least the title, year, new
37625           authors, and publisher of the Modified Version as given on
37626           the Title Page.  If there is no section Entitled "History" in
37627           the Document, create one stating the title, year, authors,
37628           and publisher of the Document as given on its Title Page,
37629           then add an item describing the Modified Version as stated in
37630           the previous sentence.
37632        J. Preserve the network location, if any, given in the Document
37633           for public access to a Transparent copy of the Document, and
37634           likewise the network locations given in the Document for
37635           previous versions it was based on.  These may be placed in
37636           the "History" section.  You may omit a network location for a
37637           work that was published at least four years before the
37638           Document itself, or if the original publisher of the version
37639           it refers to gives permission.
37641        K. For any section Entitled "Acknowledgements" or "Dedications",
37642           Preserve the Title of the section, and preserve in the
37643           section all the substance and tone of each of the contributor
37644           acknowledgements and/or dedications given therein.
37646        L. Preserve all the Invariant Sections of the Document,
37647           unaltered in their text and in their titles.  Section numbers
37648           or the equivalent are not considered part of the section
37649           titles.
37651        M. Delete any section Entitled "Endorsements".  Such a section
37652           may not be included in the Modified Version.
37654        N. Do not retitle any existing section to be Entitled
37655           "Endorsements" or to conflict in title with any Invariant
37656           Section.
37658        O. Preserve any Warranty Disclaimers.
37660      If the Modified Version includes new front-matter sections or
37661      appendices that qualify as Secondary Sections and contain no
37662      material copied from the Document, you may at your option
37663      designate some or all of these sections as invariant.  To do this,
37664      add their titles to the list of Invariant Sections in the Modified
37665      Version's license notice.  These titles must be distinct from any
37666      other section titles.
37668      You may add a section Entitled "Endorsements", provided it contains
37669      nothing but endorsements of your Modified Version by various
37670      parties--for example, statements of peer review or that the text
37671      has been approved by an organization as the authoritative
37672      definition of a standard.
37674      You may add a passage of up to five words as a Front-Cover Text,
37675      and a passage of up to 25 words as a Back-Cover Text, to the end
37676      of the list of Cover Texts in the Modified Version.  Only one
37677      passage of Front-Cover Text and one of Back-Cover Text may be
37678      added by (or through arrangements made by) any one entity.  If the
37679      Document already includes a cover text for the same cover,
37680      previously added by you or by arrangement made by the same entity
37681      you are acting on behalf of, you may not add another; but you may
37682      replace the old one, on explicit permission from the previous
37683      publisher that added the old one.
37685      The author(s) and publisher(s) of the Document do not by this
37686      License give permission to use their names for publicity for or to
37687      assert or imply endorsement of any Modified Version.
37689   5. COMBINING DOCUMENTS
37691      You may combine the Document with other documents released under
37692      this License, under the terms defined in section 4 above for
37693      modified versions, provided that you include in the combination
37694      all of the Invariant Sections of all of the original documents,
37695      unmodified, and list them all as Invariant Sections of your
37696      combined work in its license notice, and that you preserve all
37697      their Warranty Disclaimers.
37699      The combined work need only contain one copy of this License, and
37700      multiple identical Invariant Sections may be replaced with a single
37701      copy.  If there are multiple Invariant Sections with the same name
37702      but different contents, make the title of each such section unique
37703      by adding at the end of it, in parentheses, the name of the
37704      original author or publisher of that section if known, or else a
37705      unique number.  Make the same adjustment to the section titles in
37706      the list of Invariant Sections in the license notice of the
37707      combined work.
37709      In the combination, you must combine any sections Entitled
37710      "History" in the various original documents, forming one section
37711      Entitled "History"; likewise combine any sections Entitled
37712      "Acknowledgements", and any sections Entitled "Dedications".  You
37713      must delete all sections Entitled "Endorsements."
37715   6. COLLECTIONS OF DOCUMENTS
37717      You may make a collection consisting of the Document and other
37718      documents released under this License, and replace the individual
37719      copies of this License in the various documents with a single copy
37720      that is included in the collection, provided that you follow the
37721      rules of this License for verbatim copying of each of the
37722      documents in all other respects.
37724      You may extract a single document from such a collection, and
37725      distribute it individually under this License, provided you insert
37726      a copy of this License into the extracted document, and follow
37727      this License in all other respects regarding verbatim copying of
37728      that document.
37730   7. AGGREGATION WITH INDEPENDENT WORKS
37732      A compilation of the Document or its derivatives with other
37733      separate and independent documents or works, in or on a volume of
37734      a storage or distribution medium, is called an "aggregate" if the
37735      copyright resulting from the compilation is not used to limit the
37736      legal rights of the compilation's users beyond what the individual
37737      works permit.  When the Document is included in an aggregate, this
37738      License does not apply to the other works in the aggregate which
37739      are not themselves derivative works of the Document.
37741      If the Cover Text requirement of section 3 is applicable to these
37742      copies of the Document, then if the Document is less than one half
37743      of the entire aggregate, the Document's Cover Texts may be placed
37744      on covers that bracket the Document within the aggregate, or the
37745      electronic equivalent of covers if the Document is in electronic
37746      form.  Otherwise they must appear on printed covers that bracket
37747      the whole aggregate.
37749   8. TRANSLATION
37751      Translation is considered a kind of modification, so you may
37752      distribute translations of the Document under the terms of section
37753      4.  Replacing Invariant Sections with translations requires special
37754      permission from their copyright holders, but you may include
37755      translations of some or all Invariant Sections in addition to the
37756      original versions of these Invariant Sections.  You may include a
37757      translation of this License, and all the license notices in the
37758      Document, and any Warranty Disclaimers, provided that you also
37759      include the original English version of this License and the
37760      original versions of those notices and disclaimers.  In case of a
37761      disagreement between the translation and the original version of
37762      this License or a notice or disclaimer, the original version will
37763      prevail.
37765      If a section in the Document is Entitled "Acknowledgements",
37766      "Dedications", or "History", the requirement (section 4) to
37767      Preserve its Title (section 1) will typically require changing the
37768      actual title.
37770   9. TERMINATION
37772      You may not copy, modify, sublicense, or distribute the Document
37773      except as expressly provided for under this License.  Any other
37774      attempt to copy, modify, sublicense or distribute the Document is
37775      void, and will automatically terminate your rights under this
37776      License.  However, parties who have received copies, or rights,
37777      from you under this License will not have their licenses
37778      terminated so long as such parties remain in full compliance.
37780  10. FUTURE REVISIONS OF THIS LICENSE
37782      The Free Software Foundation may publish new, revised versions of
37783      the GNU Free Documentation License from time to time.  Such new
37784      versions will be similar in spirit to the present version, but may
37785      differ in detail to address new problems or concerns.  See
37786      `http://www.gnu.org/copyleft/'.
37788      Each version of the License is given a distinguishing version
37789      number.  If the Document specifies that a particular numbered
37790      version of this License "or any later version" applies to it, you
37791      have the option of following the terms and conditions either of
37792      that specified version or of any later version that has been
37793      published (not as a draft) by the Free Software Foundation.  If
37794      the Document does not specify a version number of this License,
37795      you may choose any version ever published (not as a draft) by the
37796      Free Software Foundation.
37798 ADDENDUM: How to use this License for your documents
37799 ====================================================
37801 To use this License in a document you have written, include a copy of
37802 the License in the document and put the following copyright and license
37803 notices just after the title page:
37805        Copyright (C)  YEAR  YOUR NAME.
37806        Permission is granted to copy, distribute and/or modify this document
37807        under the terms of the GNU Free Documentation License, Version 1.2
37808        or any later version published by the Free Software Foundation;
37809        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
37810        Texts.  A copy of the license is included in the section entitled ``GNU
37811        Free Documentation License''.
37813  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
37814 replace the "with...Texts." line with this:
37816          with the Invariant Sections being LIST THEIR TITLES, with
37817          the Front-Cover Texts being LIST, and with the Back-Cover Texts
37818          being LIST.
37820  If you have Invariant Sections without Cover Texts, or some other
37821 combination of the three, merge those two alternatives to suit the
37822 situation.
37824  If your document contains nontrivial examples of program code, we
37825 recommend releasing these examples in parallel under your choice of
37826 free software license, such as the GNU General Public License, to
37827 permit their use in free software.
37829 \x1f
37830 File: gccint.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
37832 Contributors to GCC
37833 *******************
37835 The GCC project would like to thank its many contributors.  Without
37836 them the project would not have been nearly as successful as it has
37837 been.  Any omissions in this list are accidental.  Feel free to contact
37838 <law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
37839 some of your contributions are not listed.  Please keep this list in
37840 alphabetical order.
37842    * Analog Devices helped implement the support for complex data types
37843      and iterators.
37845    * John David Anglin for threading-related fixes and improvements to
37846      libstdc++-v3, and the HP-UX port.
37848    * James van Artsdalen wrote the code that makes efficient use of the
37849      Intel 80387 register stack.
37851    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
37852      Series port.
37854    * Alasdair Baird for various bug fixes.
37856    * Giovanni Bajo for analyzing lots of complicated C++ problem
37857      reports.
37859    * Peter Barada for his work to improve code generation for new
37860      ColdFire cores.
37862    * Gerald Baumgartner added the signature extension to the C++ front
37863      end.
37865    * Godmar Back for his Java improvements and encouragement.
37867    * Scott Bambrough for help porting the Java compiler.
37869    * Wolfgang Bangerth for processing tons of bug reports.
37871    * Jon Beniston for his Microsoft Windows port of Java and port to
37872      Lattice Mico32.
37874    * Daniel Berlin for better DWARF2 support, faster/better
37875      optimizations, improved alias analysis, plus migrating GCC to
37876      Bugzilla.
37878    * Geoff Berry for his Java object serialization work and various
37879      patches.
37881    * Uros Bizjak for the implementation of x87 math built-in functions
37882      and for various middle end and i386 back end improvements and bug
37883      fixes.
37885    * Eric Blake for helping to make GCJ and libgcj conform to the
37886      specifications.
37888    * Janne Blomqvist for contributions to GNU Fortran.
37890    * Segher Boessenkool for various fixes.
37892    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
37893      other Java work.
37895    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
37896      miscellaneous clean-ups.
37898    * Steven Bosscher for integrating the GNU Fortran front end into GCC
37899      and for contributing to the tree-ssa branch.
37901    * Eric Botcazou for fixing middle- and backend bugs left and right.
37903    * Per Bothner for his direction via the steering committee and
37904      various improvements to the infrastructure for supporting new
37905      languages.  Chill front end implementation.  Initial
37906      implementations of cpplib, fix-header, config.guess, libio, and
37907      past C++ library (libg++) maintainer.  Dreaming up, designing and
37908      implementing much of GCJ.
37910    * Devon Bowen helped port GCC to the Tahoe.
37912    * Don Bowman for mips-vxworks contributions.
37914    * Dave Brolley for work on cpplib and Chill.
37916    * Paul Brook for work on the ARM architecture and maintaining GNU
37917      Fortran.
37919    * Robert Brown implemented the support for Encore 32000 systems.
37921    * Christian Bruel for improvements to local store elimination.
37923    * Herman A.J. ten Brugge for various fixes.
37925    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
37926      FAQ.
37928    * Joe Buck for his direction via the steering committee.
37930    * Craig Burley for leadership of the G77 Fortran effort.
37932    * Stephan Buys for contributing Doxygen notes for libstdc++.
37934    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
37935      to the C++ strings, streambufs and formatted I/O, hard detective
37936      work on the frustrating localization issues, and keeping up with
37937      the problem reports.
37939    * John Carr for his alias work, SPARC hacking, infrastructure
37940      improvements, previous contributions to the steering committee,
37941      loop optimizations, etc.
37943    * Stephane Carrez for 68HC11 and 68HC12 ports.
37945    * Steve Chamberlain for support for the Renesas SH and H8 processors
37946      and the PicoJava processor, and for GCJ config fixes.
37948    * Glenn Chambers for help with the GCJ FAQ.
37950    * John-Marc Chandonia for various libgcj patches.
37952    * Denis Chertykov for contributing and maintaining the AVR port, the
37953      first GCC port for an 8-bit architecture.
37955    * Scott Christley for his Objective-C contributions.
37957    * Eric Christopher for his Java porting help and clean-ups.
37959    * Branko Cibej for more warning contributions.
37961    * The GNU Classpath project for all of their merged runtime code.
37963    * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
37964      and other random hacking.
37966    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
37968    * R. Kelley Cook for making GCC buildable from a read-only directory
37969      as well as other miscellaneous build process and documentation
37970      clean-ups.
37972    * Ralf Corsepius for SH testing and minor bug fixing.
37974    * Stan Cox for care and feeding of the x86 port and lots of behind
37975      the scenes hacking.
37977    * Alex Crain provided changes for the 3b1.
37979    * Ian Dall for major improvements to the NS32k port.
37981    * Paul Dale for his work to add uClinux platform support to the m68k
37982      backend.
37984    * Dario Dariol contributed the four varieties of sample programs
37985      that print a copy of their source.
37987    * Russell Davidson for fstream and stringstream fixes in libstdc++.
37989    * Bud Davis for work on the G77 and GNU Fortran compilers.
37991    * Mo DeJong for GCJ and libgcj bug fixes.
37993    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
37994      various bug fixes, and the M32C and MeP ports.
37996    * Arnaud Desitter for helping to debug GNU Fortran.
37998    * Gabriel Dos Reis for contributions to G++, contributions and
37999      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
38000      including `valarray<>', `complex<>', maintaining the numerics
38001      library (including that pesky `<limits>' :-) and keeping
38002      up-to-date anything to do with numbers.
38004    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
38005      ISO C99 support, CFG dumping support, etc., plus support of the
38006      C++ runtime libraries including for all kinds of C interface
38007      issues, contributing and maintaining `complex<>', sanity checking
38008      and disbursement, configuration architecture, libio maintenance,
38009      and early math work.
38011    * Zdenek Dvorak for a new loop unroller and various fixes.
38013    * Richard Earnshaw for his ongoing work with the ARM.
38015    * David Edelsohn for his direction via the steering committee,
38016      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
38017      loop changes, doing the entire AIX port of libstdc++ with his bare
38018      hands, and for ensuring GCC properly keeps working on AIX.
38020    * Kevin Ediger for the floating point formatting of num_put::do_put
38021      in libstdc++.
38023    * Phil Edwards for libstdc++ work including configuration hackery,
38024      documentation maintainer, chief breaker of the web pages, the
38025      occasional iostream bug fix, and work on shared library symbol
38026      versioning.
38028    * Paul Eggert for random hacking all over GCC.
38030    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
38031      configuration support for locales and fstream-related fixes.
38033    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
38034      iostreams.
38036    * Christian Ehrhardt for dealing with bug reports.
38038    * Ben Elliston for his work to move the Objective-C runtime into its
38039      own subdirectory and for his work on autoconf.
38041    * Revital Eres for work on the PowerPC 750CL port.
38043    * Marc Espie for OpenBSD support.
38045    * Doug Evans for much of the global optimization framework, arc,
38046      m32r, and SPARC work.
38048    * Christopher Faylor for his work on the Cygwin port and for caring
38049      and feeding the gcc.gnu.org box and saving its users tons of spam.
38051    * Fred Fish for BeOS support and Ada fixes.
38053    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
38055    * Peter Gerwinski for various bug fixes and the Pascal front end.
38057    * Kaveh R. Ghazi for his direction via the steering committee,
38058      amazing work to make `-W -Wall -W* -Werror' useful, and
38059      continuously testing GCC on a plethora of platforms.  Kaveh
38060      extends his gratitude to the CAIP Center at Rutgers University for
38061      providing him with computing resources to work on Free Software
38062      since the late 1980s.
38064    * John Gilmore for a donation to the FSF earmarked improving GNU
38065      Java.
38067    * Judy Goldberg for c++ contributions.
38069    * Torbjorn Granlund for various fixes and the c-torture testsuite,
38070      multiply- and divide-by-constant optimization, improved long long
38071      support, improved leaf function register allocation, and his
38072      direction via the steering committee.
38074    * Anthony Green for his `-Os' contributions, the moxie port, and
38075      Java front end work.
38077    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
38078      Java code.
38080    * Michael K. Gschwind contributed the port to the PDP-11.
38082    * Richard Guenther for his ongoing middle-end contributions and bug
38083      fixes and for release management.
38085    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
38086      the support for Dwarf symbolic debugging information, and much of
38087      the support for System V Release 4.  He has also worked heavily on
38088      the Intel 386 and 860 support.
38090    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
38091      GCSE.
38093    * Bruno Haible for improvements in the runtime overhead for EH, new
38094      warnings and assorted bug fixes.
38096    * Andrew Haley for his amazing Java compiler and library efforts.
38098    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
38099      series 300.
38101    * Michael Hayes for various thankless work he's done trying to get
38102      the c30/c40 ports functional.  Lots of loop and unroll
38103      improvements and fixes.
38105    * Dara Hazeghi for wading through myriads of target-specific bug
38106      reports.
38108    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
38110    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
38111      work, loop opts, and generally fixing lots of old problems we've
38112      ignored for years, flow rewrite and lots of further stuff,
38113      including reviewing tons of patches.
38115    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
38116      various fixes.
38118    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
38119      contributed the support for the Sony NEWS machine.
38121    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
38122      various fixes.
38124    * Katherine Holcomb for work on GNU Fortran.
38126    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
38127      of testing and bug fixing, particularly of GCC configury code.
38129    * Steve Holmgren for MachTen patches.
38131    * Jan Hubicka for his x86 port improvements.
38133    * Falk Hueffner for working on C and optimization bug reports.
38135    * Bernardo Innocenti for his m68k work, including merging of
38136      ColdFire improvements and uClinux support.
38138    * Christian Iseli for various bug fixes.
38140    * Kamil Iskra for general m68k hacking.
38142    * Lee Iverson for random fixes and MIPS testing.
38144    * Andreas Jaeger for testing and benchmarking of GCC and various bug
38145      fixes.
38147    * Jakub Jelinek for his SPARC work and sibling call optimizations as
38148      well as lots of bug fixes and test cases, and for improving the
38149      Java build system.
38151    * Janis Johnson for ia64 testing and fixes, her quality improvement
38152      sidetracks, and web page maintenance.
38154    * Kean Johnston for SCO OpenServer support and various fixes.
38156    * Tim Josling for the sample language treelang based originally on
38157      Richard Kenner's "toy" language.
38159    * Nicolai Josuttis for additional libstdc++ documentation.
38161    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
38162      target.
38164    * Steven G. Kargl for work on GNU Fortran.
38166    * David Kashtan of SRI adapted GCC to VMS.
38168    * Ryszard Kabatek for many, many libstdc++ bug fixes and
38169      optimizations of strings, especially member functions, and for
38170      auto_ptr fixes.
38172    * Geoffrey Keating for his ongoing work to make the PPC work for
38173      GNU/Linux and his automatic regression tester.
38175    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
38176      work in just about every part of libstdc++.
38178    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
38179      MIL-STD-1750A.
38181    * Richard Kenner of the New York University Ultracomputer Research
38182      Laboratory wrote the machine descriptions for the AMD 29000, the
38183      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
38184      support for instruction attributes.  He also made changes to
38185      better support RISC processors including changes to common
38186      subexpression elimination, strength reduction, function calling
38187      sequence handling, and condition code support, in addition to
38188      generalizing the code for frame pointer elimination and delay slot
38189      scheduling.  Richard Kenner was also the head maintainer of GCC
38190      for several years.
38192    * Mumit Khan for various contributions to the Cygwin and Mingw32
38193      ports and maintaining binary releases for Microsoft Windows hosts,
38194      and for massive libstdc++ porting work to Cygwin/Mingw32.
38196    * Robin Kirkham for cpu32 support.
38198    * Mark Klein for PA improvements.
38200    * Thomas Koenig for various bug fixes.
38202    * Bruce Korb for the new and improved fixincludes code.
38204    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
38205      effort.
38207    * Charles LaBrec contributed the support for the Integrated Solutions
38208      68020 system.
38210    * Asher Langton and Mike Kumbera for contributing Cray pointer
38211      support to GNU Fortran, and for other GNU Fortran improvements.
38213    * Jeff Law for his direction via the steering committee,
38214      coordinating the entire egcs project and GCC 2.95, rolling out
38215      snapshots and releases, handling merges from GCC2, reviewing tons
38216      of patches that might have fallen through the cracks else, and
38217      random but extensive hacking.
38219    * Marc Lehmann for his direction via the steering committee and
38220      helping with analysis and improvements of x86 performance.
38222    * Victor Leikehman for work on GNU Fortran.
38224    * Ted Lemon wrote parts of the RTL reader and printer.
38226    * Kriang Lerdsuwanakij for C++ improvements including template as
38227      template parameter support, and many C++ fixes.
38229    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
38230      and random work on the Java front end.
38232    * Alain Lichnewsky ported GCC to the MIPS CPU.
38234    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
38235      and patches.
38237    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
38239    * Chen Liqin for various S+core related fixes/improvement, and for
38240      maintaining the S+core port.
38242    * Weiwen Liu for testing and various bug fixes.
38244    * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
38245      diagnostics fixes and improvements.
38247    * Dave Love for his ongoing work with the Fortran front end and
38248      runtime libraries.
38250    * Martin von Lo"wis for internal consistency checking infrastructure,
38251      various C++ improvements including namespace support, and tons of
38252      assistance with libstdc++/compiler merges.
38254    * H.J. Lu for his previous contributions to the steering committee,
38255      many x86 bug reports, prototype patches, and keeping the GNU/Linux
38256      ports working.
38258    * Greg McGary for random fixes and (someday) bounded pointers.
38260    * Andrew MacLeod for his ongoing work in building a real EH system,
38261      various code generation improvements, work on the global
38262      optimizer, etc.
38264    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
38265      hacking improvements to compile-time performance, overall
38266      knowledge and direction in the area of instruction scheduling, and
38267      design and implementation of the automaton based instruction
38268      scheduler.
38270    * Bob Manson for his behind the scenes work on dejagnu.
38272    * Philip Martin for lots of libstdc++ string and vector iterator
38273      fixes and improvements, and string clean up and testsuites.
38275    * All of the Mauve project contributors, for Java test code.
38277    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
38279    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
38281    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
38282      powerpc, haifa, ECOFF debug support, and other assorted hacking.
38284    * Jason Merrill for his direction via the steering committee and
38285      leading the G++ effort.
38287    * Martin Michlmayr for testing GCC on several architectures using the
38288      entire Debian archive.
38290    * David Miller for his direction via the steering committee, lots of
38291      SPARC work, improvements in jump.c and interfacing with the Linux
38292      kernel developers.
38294    * Gary Miller ported GCC to Charles River Data Systems machines.
38296    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
38297      the entire libstdc++ testsuite namespace-compatible.
38299    * Mark Mitchell for his direction via the steering committee,
38300      mountains of C++ work, load/store hoisting out of loops, alias
38301      analysis improvements, ISO C `restrict' support, and serving as
38302      release manager for GCC 3.x.
38304    * Alan Modra for various GNU/Linux bits and testing.
38306    * Toon Moene for his direction via the steering committee, Fortran
38307      maintenance, and his ongoing work to make us make Fortran run fast.
38309    * Jason Molenda for major help in the care and feeding of all the
38310      services on the gcc.gnu.org (formerly egcs.cygnus.com)
38311      machine--mail, web services, ftp services, etc etc.  Doing all
38312      this work on scrap paper and the backs of envelopes would have
38313      been... difficult.
38315    * Catherine Moore for fixing various ugly problems we have sent her
38316      way, including the haifa bug which was killing the Alpha & PowerPC
38317      Linux kernels.
38319    * Mike Moreton for his various Java patches.
38321    * David Mosberger-Tang for various Alpha improvements, and for the
38322      initial IA-64 port.
38324    * Stephen Moshier contributed the floating point emulator that
38325      assists in cross-compilation and permits support for floating
38326      point numbers wider than 64 bits and for ISO C99 support.
38328    * Bill Moyer for his behind the scenes work on various issues.
38330    * Philippe De Muyter for his work on the m68k port.
38332    * Joseph S. Myers for his work on the PDP-11 port, format checking
38333      and ISO C99 support, and continuous emphasis on (and contributions
38334      to) documentation.
38336    * Nathan Myers for his work on libstdc++-v3: architecture and
38337      authorship through the first three snapshots, including
38338      implementation of locale infrastructure, string, shadow C headers,
38339      and the initial project documentation (DESIGN, CHECKLIST, and so
38340      forth).  Later, more work on MT-safe string and shadow headers.
38342    * Felix Natter for documentation on porting libstdc++.
38344    * Nathanael Nerode for cleaning up the configuration/build process.
38346    * NeXT, Inc. donated the front end that supports the Objective-C
38347      language.
38349    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
38350      the search engine setup, various documentation fixes and other
38351      small fixes.
38353    * Geoff Noer for his work on getting cygwin native builds working.
38355    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
38356      tracking web pages, GIMPLE tuples, and assorted fixes.
38358    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
38359      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
38360      related infrastructure improvements.
38362    * Alexandre Oliva for various build infrastructure improvements,
38363      scripts and amazing testing work, including keeping libtool issues
38364      sane and happy.
38366    * Stefan Olsson for work on mt_alloc.
38368    * Melissa O'Neill for various NeXT fixes.
38370    * Rainer Orth for random MIPS work, including improvements to GCC's
38371      o32 ABI support, improvements to dejagnu's MIPS support, Java
38372      configuration clean-ups and porting work, and maintaining the
38373      IRIX, Solaris 2, and Tru64 UNIX ports.
38375    * Hartmut Penner for work on the s390 port.
38377    * Paul Petersen wrote the machine description for the Alliant FX/8.
38379    * Alexandre Petit-Bianco for implementing much of the Java compiler
38380      and continued Java maintainership.
38382    * Matthias Pfaller for major improvements to the NS32k port.
38384    * Gerald Pfeifer for his direction via the steering committee,
38385      pointing out lots of problems we need to solve, maintenance of the
38386      web pages, and taking care of documentation maintenance in general.
38388    * Andrew Pinski for processing bug reports by the dozen.
38390    * Ovidiu Predescu for his work on the Objective-C front end and
38391      runtime libraries.
38393    * Jerry Quinn for major performance improvements in C++ formatted
38394      I/O.
38396    * Ken Raeburn for various improvements to checker, MIPS ports and
38397      various cleanups in the compiler.
38399    * Rolf W. Rasmussen for hacking on AWT.
38401    * David Reese of Sun Microsystems contributed to the Solaris on
38402      PowerPC port.
38404    * Volker Reichelt for keeping up with the problem reports.
38406    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
38407      hacking.
38409    * Loren J. Rittle for improvements to libstdc++-v3 including the
38410      FreeBSD port, threading fixes, thread-related configury changes,
38411      critical threading documentation, and solutions to really tricky
38412      I/O problems, as well as keeping GCC properly working on FreeBSD
38413      and continuous testing.
38415    * Craig Rodrigues for processing tons of bug reports.
38417    * Ola Ro"nnerup for work on mt_alloc.
38419    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
38421    * David Ronis inspired and encouraged Craig to rewrite the G77
38422      documentation in texinfo format by contributing a first pass at a
38423      translation of the old `g77-0.5.16/f/DOC' file.
38425    * Ken Rose for fixes to GCC's delay slot filling code.
38427    * Paul Rubin wrote most of the preprocessor.
38429    * Pe'tur Runo'lfsson for major performance improvements in C++
38430      formatted I/O and large file support in C++ filebuf.
38432    * Chip Salzenberg for libstdc++ patches and improvements to locales,
38433      traits, Makefiles, libio, libtool hackery, and "long long" support.
38435    * Juha Sarlin for improvements to the H8 code generator.
38437    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
38438      300.
38440    * Roger Sayle for improvements to constant folding and GCC's RTL
38441      optimizers as well as for fixing numerous bugs.
38443    * Bradley Schatz for his work on the GCJ FAQ.
38445    * Peter Schauer wrote the code to allow debugging to work on the
38446      Alpha.
38448    * William Schelter did most of the work on the Intel 80386 support.
38450    * Tobias Schlu"ter for work on GNU Fortran.
38452    * Bernd Schmidt for various code generation improvements and major
38453      work in the reload pass as well a serving as release manager for
38454      GCC 2.95.3.
38456    * Peter Schmid for constant testing of libstdc++--especially
38457      application testing, going above and beyond what was requested for
38458      the release criteria--and libstdc++ header file tweaks.
38460    * Jason Schroeder for jcf-dump patches.
38462    * Andreas Schwab for his work on the m68k port.
38464    * Lars Segerlund for work on GNU Fortran.
38466    * Joel Sherrill for his direction via the steering committee, RTEMS
38467      contributions and RTEMS testing.
38469    * Nathan Sidwell for many C++ fixes/improvements.
38471    * Jeffrey Siegal for helping RMS with the original design of GCC,
38472      some code which handles the parse tree and RTL data structures,
38473      constant folding and help with the original VAX & m68k ports.
38475    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
38476      from the LWG (thereby keeping GCC in line with updates from the
38477      ISO).
38479    * Franz Sirl for his ongoing work with making the PPC port stable
38480      for GNU/Linux.
38482    * Andrey Slepuhin for assorted AIX hacking.
38484    * Trevor Smigiel for contributing the SPU port.
38486    * Christopher Smith did the port for Convex machines.
38488    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
38490    * Randy Smith finished the Sun FPA support.
38492    * Scott Snyder for queue, iterator, istream, and string fixes and
38493      libstdc++ testsuite entries.  Also for providing the patch to G77
38494      to add rudimentary support for `INTEGER*1', `INTEGER*2', and
38495      `LOGICAL*1'.
38497    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
38499    * Richard Stallman, for writing the original GCC and launching the
38500      GNU project.
38502    * Jan Stein of the Chalmers Computer Society provided support for
38503      Genix, as well as part of the 32000 machine description.
38505    * Nigel Stephens for various mips16 related fixes/improvements.
38507    * Jonathan Stone wrote the machine description for the Pyramid
38508      computer.
38510    * Graham Stott for various infrastructure improvements.
38512    * John Stracke for his Java HTTP protocol fixes.
38514    * Mike Stump for his Elxsi port, G++ contributions over the years
38515      and more recently his vxworks contributions
38517    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
38519    * Shigeya Suzuki for this fixes for the bsdi platforms.
38521    * Ian Lance Taylor for his mips16 work, general configury hacking,
38522      fixincludes, etc.
38524    * Holger Teutsch provided the support for the Clipper CPU.
38526    * Gary Thomas for his ongoing work to make the PPC work for
38527      GNU/Linux.
38529    * Philipp Thomas for random bug fixes throughout the compiler
38531    * Jason Thorpe for thread support in libstdc++ on NetBSD.
38533    * Kresten Krab Thorup wrote the run time support for the Objective-C
38534      language and the fantastic Java bytecode interpreter.
38536    * Michael Tiemann for random bug fixes, the first instruction
38537      scheduler, initial C++ support, function integration, NS32k, SPARC
38538      and M88k machine description work, delay slot scheduling.
38540    * Andreas Tobler for his work porting libgcj to Darwin.
38542    * Teemu Torma for thread safe exception handling support.
38544    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
38545      definitions, and of the VAX machine description.
38547    * Daniel Towner and Hariharan Sandanagobalane contributed and
38548      maintain the picoChip port.
38550    * Tom Tromey for internationalization support and for his many Java
38551      contributions and libgcj maintainership.
38553    * Lassi Tuura for improvements to config.guess to determine HP
38554      processor types.
38556    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
38558    * Andy Vaught for the design and initial implementation of the GNU
38559      Fortran front end.
38561    * Brent Verner for work with the libstdc++ cshadow files and their
38562      associated configure steps.
38564    * Todd Vierling for contributions for NetBSD ports.
38566    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
38567      guidance.
38569    * Dean Wakerley for converting the install documentation from HTML
38570      to texinfo in time for GCC 3.0.
38572    * Krister Walfridsson for random bug fixes.
38574    * Feng Wang for contributions to GNU Fortran.
38576    * Stephen M. Webb for time and effort on making libstdc++ shadow
38577      files work with the tricky Solaris 8+ headers, and for pushing the
38578      build-time header tree.
38580    * John Wehle for various improvements for the x86 code generator,
38581      related infrastructure improvements to help x86 code generation,
38582      value range propagation and other work, WE32k port.
38584    * Ulrich Weigand for work on the s390 port.
38586    * Zack Weinberg for major work on cpplib and various other bug fixes.
38588    * Matt Welsh for help with Linux Threads support in GCJ.
38590    * Urban Widmark for help fixing java.io.
38592    * Mark Wielaard for new Java library code and his work integrating
38593      with Classpath.
38595    * Dale Wiles helped port GCC to the Tahoe.
38597    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
38599    * Jim Wilson for his direction via the steering committee, tackling
38600      hard problems in various places that nobody else wanted to work
38601      on, strength reduction and other loop optimizations.
38603    * Paul Woegerer and Tal Agmon for the CRX port.
38605    * Carlo Wood for various fixes.
38607    * Tom Wood for work on the m88k port.
38609    * Canqun Yang for work on GNU Fortran.
38611    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
38612      description for the Tron architecture (specifically, the Gmicro).
38614    * Kevin Zachmann helped port GCC to the Tahoe.
38616    * Ayal Zaks for Swing Modulo Scheduling (SMS).
38618    * Xiaoqiang Zhang for work on GNU Fortran.
38620    * Gilles Zunino for help porting Java to Irix.
38623  The following people are recognized for their contributions to GNAT,
38624 the Ada front end of GCC:
38625    * Bernard Banner
38627    * Romain Berrendonner
38629    * Geert Bosch
38631    * Emmanuel Briot
38633    * Joel Brobecker
38635    * Ben Brosgol
38637    * Vincent Celier
38639    * Arnaud Charlet
38641    * Chien Chieng
38643    * Cyrille Comar
38645    * Cyrille Crozes
38647    * Robert Dewar
38649    * Gary Dismukes
38651    * Robert Duff
38653    * Ed Falis
38655    * Ramon Fernandez
38657    * Sam Figueroa
38659    * Vasiliy Fofanov
38661    * Michael Friess
38663    * Franco Gasperoni
38665    * Ted Giering
38667    * Matthew Gingell
38669    * Laurent Guerby
38671    * Jerome Guitton
38673    * Olivier Hainque
38675    * Jerome Hugues
38677    * Hristian Kirtchev
38679    * Jerome Lambourg
38681    * Bruno Leclerc
38683    * Albert Lee
38685    * Sean McNeil
38687    * Javier Miranda
38689    * Laurent Nana
38691    * Pascal Obry
38693    * Dong-Ik Oh
38695    * Laurent Pautet
38697    * Brett Porter
38699    * Thomas Quinot
38701    * Nicolas Roche
38703    * Pat Rogers
38705    * Jose Ruiz
38707    * Douglas Rupp
38709    * Sergey Rybin
38711    * Gail Schenker
38713    * Ed Schonberg
38715    * Nicolas Setton
38717    * Samuel Tardieu
38720  The following people are recognized for their contributions of new
38721 features, bug reports, testing and integration of classpath/libgcj for
38722 GCC version 4.1:
38723    * Lillian Angel for `JTree' implementation and lots Free Swing
38724      additions and bug fixes.
38726    * Wolfgang Baer for `GapContent' bug fixes.
38728    * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
38729      event fixes, lots of Free Swing work including `JTable' editing.
38731    * Stuart Ballard for RMI constant fixes.
38733    * Goffredo Baroncelli for `HTTPURLConnection' fixes.
38735    * Gary Benson for `MessageFormat' fixes.
38737    * Daniel Bonniot for `Serialization' fixes.
38739    * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
38740      and `DOM xml:id' support.
38742    * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
38744    * Archie Cobbs for build fixes, VM interface updates,
38745      `URLClassLoader' updates.
38747    * Kelley Cook for build fixes.
38749    * Martin Cordova for Suggestions for better `SocketTimeoutException'.
38751    * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
38752      and improvements.
38754    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
38755      2D support. Lots of imageio framework additions, lots of AWT and
38756      Free Swing bug fixes.
38758    * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
38759      fixes, better `Proxy' support, bug fixes and IKVM integration.
38761    * Santiago Gala for `AccessControlContext' fixes.
38763    * Nicolas Geoffray for `VMClassLoader' and `AccessController'
38764      improvements.
38766    * David Gilbert for `basic' and `metal' icon and plaf support and
38767      lots of documenting, Lots of Free Swing and metal theme additions.
38768      `MetalIconFactory' implementation.
38770    * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
38772    * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
38773      build speedups.
38775    * Kim Ho for `JFileChooser' implementation.
38777    * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
38778      updates, `Serialization' fixes, `Properties' XML support and
38779      generic branch work, VMIntegration guide update.
38781    * Bastiaan Huisman for `TimeZone' bug fixing.
38783    * Andreas Jaeger for mprec updates.
38785    * Paul Jenner for better `-Werror' support.
38787    * Ito Kazumitsu for `NetworkInterface' implementation and updates.
38789    * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
38790      bug fixes all over. Lots of Free Swing work including styled text.
38792    * Simon Kitching for `String' cleanups and optimization suggestions.
38794    * Michael Koch for configuration fixes, `Locale' updates, bug and
38795      build fixes.
38797    * Guilhem Lavaux for configuration, thread and channel fixes and
38798      Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
38800    * David Lichteblau for JCL support library global/local reference
38801      cleanups.
38803    * Aaron Luchko for JDWP updates and documentation fixes.
38805    * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
38806      features.
38808    * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
38809      fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
38810      and implementing the Qt4 peers.
38812    * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
38813      `SystemLogger' and `FileHandler' rotate implementations, NIO
38814      `FileChannel.map' support, security and policy updates.
38816    * Bryce McKinlay for RMI work.
38818    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
38819      testing and documenting.
38821    * Kalle Olavi Niemitalo for build fixes.
38823    * Rainer Orth for build fixes.
38825    * Andrew Overholt for `File' locking fixes.
38827    * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
38829    * Olga Rodimina for `MenuSelectionManager' implementation.
38831    * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
38833    * Julian Scheid for documentation updates and gjdoc support.
38835    * Christian Schlichtherle for zip fixes and cleanups.
38837    * Robert Schuster for documentation updates and beans fixes,
38838      `TreeNode' enumerations and `ActionCommand' and various fixes, XML
38839      and URL, AWT and Free Swing bug fixes.
38841    * Keith Seitz for lots of JDWP work.
38843    * Christian Thalinger for 64-bit cleanups, Configuration and VM
38844      interface fixes and `CACAO' integration, `fdlibm' updates.
38846    * Gael Thomas for `VMClassLoader' boot packages support suggestions.
38848    * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
38849      support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
38851    * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
38852      integration. `Qt4' build infrastructure, `SHA1PRNG' and
38853      `GdkPixbugDecoder' updates.
38855    * Tom Tromey for Eclipse integration, generics work, lots of bug
38856      fixes and gcj integration including coordinating The Big Merge.
38858    * Mark Wielaard for bug fixes, packaging and release management,
38859      `Clipboard' implementation, system call interrupts and network
38860      timeouts and `GdkPixpufDecoder' fixes.
38863  In addition to the above, all of which also contributed time and
38864 energy in testing GCC, we would like to thank the following for their
38865 contributions to testing:
38867    * Michael Abd-El-Malek
38869    * Thomas Arend
38871    * Bonzo Armstrong
38873    * Steven Ashe
38875    * Chris Baldwin
38877    * David Billinghurst
38879    * Jim Blandy
38881    * Stephane Bortzmeyer
38883    * Horst von Brand
38885    * Frank Braun
38887    * Rodney Brown
38889    * Sidney Cadot
38891    * Bradford Castalia
38893    * Robert Clark
38895    * Jonathan Corbet
38897    * Ralph Doncaster
38899    * Richard Emberson
38901    * Levente Farkas
38903    * Graham Fawcett
38905    * Mark Fernyhough
38907    * Robert A. French
38909    * Jo"rgen Freyh
38911    * Mark K. Gardner
38913    * Charles-Antoine Gauthier
38915    * Yung Shing Gene
38917    * David Gilbert
38919    * Simon Gornall
38921    * Fred Gray
38923    * John Griffin
38925    * Patrik Hagglund
38927    * Phil Hargett
38929    * Amancio Hasty
38931    * Takafumi Hayashi
38933    * Bryan W. Headley
38935    * Kevin B. Hendricks
38937    * Joep Jansen
38939    * Christian Joensson
38941    * Michel Kern
38943    * David Kidd
38945    * Tobias Kuipers
38947    * Anand Krishnaswamy
38949    * A. O. V. Le Blanc
38951    * llewelly
38953    * Damon Love
38955    * Brad Lucier
38957    * Matthias Klose
38959    * Martin Knoblauch
38961    * Rick Lutowski
38963    * Jesse Macnish
38965    * Stefan Morrell
38967    * Anon A. Mous
38969    * Matthias Mueller
38971    * Pekka Nikander
38973    * Rick Niles
38975    * Jon Olson
38977    * Magnus Persson
38979    * Chris Pollard
38981    * Richard Polton
38983    * Derk Reefman
38985    * David Rees
38987    * Paul Reilly
38989    * Tom Reilly
38991    * Torsten Rueger
38993    * Danny Sadinoff
38995    * Marc Schifer
38997    * Erik Schnetter
38999    * Wayne K. Schroll
39001    * David Schuler
39003    * Vin Shelton
39005    * Tim Souder
39007    * Adam Sulmicki
39009    * Bill Thorson
39011    * George Talbot
39013    * Pedro A. M. Vazquez
39015    * Gregory Warnes
39017    * Ian Watson
39019    * David E. Young
39021    * And many others
39023  And finally we'd like to thank everyone who uses the compiler, provides
39024 feedback and generally reminds us why we're doing this work in the first
39025 place.
39027 \x1f
39028 File: gccint.info,  Node: Option Index,  Next: Concept Index,  Prev: Contributors,  Up: Top
39030 Option Index
39031 ************
39033 GCC's command line options are indexed here without any initial `-' or
39034 `--'.  Where an option has both positive and negative forms (such as
39035 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
39036 indexed under the most appropriate form; it may sometimes be useful to
39037 look up both forms.
39039 \0\b[index\0\b]
39040 * Menu:
39042 * msoft-float:                           Soft float library routines.
39043                                                                 (line 6)
39045 \x1f
39046 File: gccint.info,  Node: Concept Index,  Prev: Option Index,  Up: Top
39048 Concept Index
39049 *************
39051 \0\b[index\0\b]
39052 * Menu:
39054 * ! in constraint:                       Multi-Alternative.  (line   47)
39055 * # in constraint:                       Modifiers.          (line   67)
39056 * # in template:                         Output Template.    (line   66)
39057 * #pragma:                               Misc.               (line  381)
39058 * % in constraint:                       Modifiers.          (line   45)
39059 * % in GTY option:                       GTY Options.        (line   18)
39060 * % in template:                         Output Template.    (line    6)
39061 * & in constraint:                       Modifiers.          (line   25)
39062 * ( <1>:                                 GIMPLE_CALL.        (line   63)
39063 * ( <2>:                                 GIMPLE_ASM.         (line   21)
39064 * (:                                     Logical Operators.  (line  107)
39065 * (nil):                                 RTL Objects.        (line   73)
39066 * *:                                     Host Common.        (line   17)
39067 * * in constraint:                       Modifiers.          (line   72)
39068 * * in template:                         Output Statement.   (line   29)
39069 * *gimple_assign_lhs_ptr:                GIMPLE_ASSIGN.      (line   54)
39070 * *gimple_assign_rhs1_ptr:               GIMPLE_ASSIGN.      (line   60)
39071 * *gimple_assign_rhs2_ptr:               GIMPLE_ASSIGN.      (line   67)
39072 * *gimple_call_arg_ptr:                  GIMPLE_CALL.        (line   71)
39073 * *gimple_call_lhs_ptr:                  GIMPLE_CALL.        (line   32)
39074 * *gimple_catch_types_ptr:               GIMPLE_CATCH.       (line   16)
39075 * *gimple_debug_bind_get_value_ptr:      GIMPLE_DEBUG.       (line   52)
39076 * *gimple_eh_filter_types_ptr:           GIMPLE_EH_FILTER.   (line   15)
39077 * *gimple_omp_critical_name_ptr:         GIMPLE_OMP_CRITICAL.
39078                                                              (line   16)
39079 * *gimple_omp_for_clauses_ptr:           GIMPLE_OMP_FOR.     (line   23)
39080 * *gimple_omp_for_final_ptr:             GIMPLE_OMP_FOR.     (line   54)
39081 * *gimple_omp_for_incr_ptr:              GIMPLE_OMP_FOR.     (line   64)
39082 * *gimple_omp_for_index_ptr:             GIMPLE_OMP_FOR.     (line   34)
39083 * *gimple_omp_for_initial_ptr:           GIMPLE_OMP_FOR.     (line   44)
39084 * *gimple_omp_parallel_child_fn_ptr:     GIMPLE_OMP_PARALLEL.
39085                                                              (line   46)
39086 * *gimple_omp_parallel_clauses_ptr:      GIMPLE_OMP_PARALLEL.
39087                                                              (line   34)
39088 * *gimple_omp_parallel_data_arg_ptr:     GIMPLE_OMP_PARALLEL.
39089                                                              (line   58)
39090 * *gimple_omp_sections_clauses_ptr:      GIMPLE_OMP_SECTIONS.
39091                                                              (line   33)
39092 * *gimple_omp_sections_control_ptr:      GIMPLE_OMP_SECTIONS.
39093                                                              (line   21)
39094 * *gimple_omp_single_clauses_ptr:        GIMPLE_OMP_SINGLE.  (line   17)
39095 * *gimple_op_ptr:                        Manipulating GIMPLE statements.
39096                                                              (line   84)
39097 * *gimple_ops <1>:                       Manipulating GIMPLE statements.
39098                                                              (line   78)
39099 * *gimple_ops:                           Logical Operators.  (line   82)
39100 * *gimple_phi_result_ptr:                GIMPLE_PHI.         (line   22)
39101 * *gsi_stmt_ptr:                         Sequence iterators. (line   80)
39102 * + in constraint:                       Modifiers.          (line   12)
39103 * -fsection-anchors <1>:                 Anchored Addresses. (line    6)
39104 * -fsection-anchors:                     Special Accessors.  (line  110)
39105 * /c in RTL dump:                        Flags.              (line  239)
39106 * /f in RTL dump:                        Flags.              (line  247)
39107 * /i in RTL dump:                        Flags.              (line  299)
39108 * /j in RTL dump:                        Flags.              (line  314)
39109 * /s in RTL dump:                        Flags.              (line  263)
39110 * /u in RTL dump:                        Flags.              (line  324)
39111 * /v in RTL dump:                        Flags.              (line  356)
39112 * 0 in constraint:                       Simple Constraints. (line  120)
39113 * < in constraint:                       Simple Constraints. (line   48)
39114 * = in constraint:                       Modifiers.          (line    8)
39115 * > in constraint:                       Simple Constraints. (line   52)
39116 * ? in constraint:                       Multi-Alternative.  (line   41)
39117 * \:                                     Output Template.    (line   46)
39118 * __absvdi2:                             Integer library routines.
39119                                                              (line  107)
39120 * __absvsi2:                             Integer library routines.
39121                                                              (line  106)
39122 * __addda3:                              Fixed-point fractional library routines.
39123                                                              (line   45)
39124 * __adddf3:                              Soft float library routines.
39125                                                              (line   23)
39126 * __adddq3:                              Fixed-point fractional library routines.
39127                                                              (line   33)
39128 * __addha3:                              Fixed-point fractional library routines.
39129                                                              (line   43)
39130 * __addhq3:                              Fixed-point fractional library routines.
39131                                                              (line   30)
39132 * __addqq3:                              Fixed-point fractional library routines.
39133                                                              (line   29)
39134 * __addsa3:                              Fixed-point fractional library routines.
39135                                                              (line   44)
39136 * __addsf3:                              Soft float library routines.
39137                                                              (line   22)
39138 * __addsq3:                              Fixed-point fractional library routines.
39139                                                              (line   31)
39140 * __addta3:                              Fixed-point fractional library routines.
39141                                                              (line   47)
39142 * __addtf3:                              Soft float library routines.
39143                                                              (line   25)
39144 * __adduda3:                             Fixed-point fractional library routines.
39145                                                              (line   53)
39146 * __addudq3:                             Fixed-point fractional library routines.
39147                                                              (line   41)
39148 * __adduha3:                             Fixed-point fractional library routines.
39149                                                              (line   49)
39150 * __adduhq3:                             Fixed-point fractional library routines.
39151                                                              (line   37)
39152 * __adduqq3:                             Fixed-point fractional library routines.
39153                                                              (line   35)
39154 * __addusa3:                             Fixed-point fractional library routines.
39155                                                              (line   51)
39156 * __addusq3:                             Fixed-point fractional library routines.
39157                                                              (line   39)
39158 * __adduta3:                             Fixed-point fractional library routines.
39159                                                              (line   55)
39160 * __addvdi3:                             Integer library routines.
39161                                                              (line  111)
39162 * __addvsi3:                             Integer library routines.
39163                                                              (line  110)
39164 * __addxf3:                              Soft float library routines.
39165                                                              (line   27)
39166 * __ashlda3:                             Fixed-point fractional library routines.
39167                                                              (line  351)
39168 * __ashldi3:                             Integer library routines.
39169                                                              (line   14)
39170 * __ashldq3:                             Fixed-point fractional library routines.
39171                                                              (line  340)
39172 * __ashlha3:                             Fixed-point fractional library routines.
39173                                                              (line  349)
39174 * __ashlhq3:                             Fixed-point fractional library routines.
39175                                                              (line  337)
39176 * __ashlqq3:                             Fixed-point fractional library routines.
39177                                                              (line  336)
39178 * __ashlsa3:                             Fixed-point fractional library routines.
39179                                                              (line  350)
39180 * __ashlsi3:                             Integer library routines.
39181                                                              (line   13)
39182 * __ashlsq3:                             Fixed-point fractional library routines.
39183                                                              (line  338)
39184 * __ashlta3:                             Fixed-point fractional library routines.
39185                                                              (line  353)
39186 * __ashlti3:                             Integer library routines.
39187                                                              (line   15)
39188 * __ashluda3:                            Fixed-point fractional library routines.
39189                                                              (line  359)
39190 * __ashludq3:                            Fixed-point fractional library routines.
39191                                                              (line  348)
39192 * __ashluha3:                            Fixed-point fractional library routines.
39193                                                              (line  355)
39194 * __ashluhq3:                            Fixed-point fractional library routines.
39195                                                              (line  344)
39196 * __ashluqq3:                            Fixed-point fractional library routines.
39197                                                              (line  342)
39198 * __ashlusa3:                            Fixed-point fractional library routines.
39199                                                              (line  357)
39200 * __ashlusq3:                            Fixed-point fractional library routines.
39201                                                              (line  346)
39202 * __ashluta3:                            Fixed-point fractional library routines.
39203                                                              (line  361)
39204 * __ashrda3:                             Fixed-point fractional library routines.
39205                                                              (line  371)
39206 * __ashrdi3:                             Integer library routines.
39207                                                              (line   19)
39208 * __ashrdq3:                             Fixed-point fractional library routines.
39209                                                              (line  368)
39210 * __ashrha3:                             Fixed-point fractional library routines.
39211                                                              (line  369)
39212 * __ashrhq3:                             Fixed-point fractional library routines.
39213                                                              (line  365)
39214 * __ashrqq3:                             Fixed-point fractional library routines.
39215                                                              (line  364)
39216 * __ashrsa3:                             Fixed-point fractional library routines.
39217                                                              (line  370)
39218 * __ashrsi3:                             Integer library routines.
39219                                                              (line   18)
39220 * __ashrsq3:                             Fixed-point fractional library routines.
39221                                                              (line  366)
39222 * __ashrta3:                             Fixed-point fractional library routines.
39223                                                              (line  373)
39224 * __ashrti3:                             Integer library routines.
39225                                                              (line   20)
39226 * __bid_adddd3:                          Decimal float library routines.
39227                                                              (line   25)
39228 * __bid_addsd3:                          Decimal float library routines.
39229                                                              (line   21)
39230 * __bid_addtd3:                          Decimal float library routines.
39231                                                              (line   29)
39232 * __bid_divdd3:                          Decimal float library routines.
39233                                                              (line   68)
39234 * __bid_divsd3:                          Decimal float library routines.
39235                                                              (line   64)
39236 * __bid_divtd3:                          Decimal float library routines.
39237                                                              (line   72)
39238 * __bid_eqdd2:                           Decimal float library routines.
39239                                                              (line  259)
39240 * __bid_eqsd2:                           Decimal float library routines.
39241                                                              (line  257)
39242 * __bid_eqtd2:                           Decimal float library routines.
39243                                                              (line  261)
39244 * __bid_extendddtd2:                     Decimal float library routines.
39245                                                              (line   92)
39246 * __bid_extendddtf:                      Decimal float library routines.
39247                                                              (line  140)
39248 * __bid_extendddxf:                      Decimal float library routines.
39249                                                              (line  134)
39250 * __bid_extenddfdd:                      Decimal float library routines.
39251                                                              (line  147)
39252 * __bid_extenddftd:                      Decimal float library routines.
39253                                                              (line  107)
39254 * __bid_extendsddd2:                     Decimal float library routines.
39255                                                              (line   88)
39256 * __bid_extendsddf:                      Decimal float library routines.
39257                                                              (line  128)
39258 * __bid_extendsdtd2:                     Decimal float library routines.
39259                                                              (line   90)
39260 * __bid_extendsdtf:                      Decimal float library routines.
39261                                                              (line  138)
39262 * __bid_extendsdxf:                      Decimal float library routines.
39263                                                              (line  132)
39264 * __bid_extendsfdd:                      Decimal float library routines.
39265                                                              (line  103)
39266 * __bid_extendsfsd:                      Decimal float library routines.
39267                                                              (line  145)
39268 * __bid_extendsftd:                      Decimal float library routines.
39269                                                              (line  105)
39270 * __bid_extendtftd:                      Decimal float library routines.
39271                                                              (line  149)
39272 * __bid_extendxftd:                      Decimal float library routines.
39273                                                              (line  109)
39274 * __bid_fixdddi:                         Decimal float library routines.
39275                                                              (line  170)
39276 * __bid_fixddsi:                         Decimal float library routines.
39277                                                              (line  162)
39278 * __bid_fixsddi:                         Decimal float library routines.
39279                                                              (line  168)
39280 * __bid_fixsdsi:                         Decimal float library routines.
39281                                                              (line  160)
39282 * __bid_fixtddi:                         Decimal float library routines.
39283                                                              (line  172)
39284 * __bid_fixtdsi:                         Decimal float library routines.
39285                                                              (line  164)
39286 * __bid_fixunsdddi:                      Decimal float library routines.
39287                                                              (line  187)
39288 * __bid_fixunsddsi:                      Decimal float library routines.
39289                                                              (line  178)
39290 * __bid_fixunssddi:                      Decimal float library routines.
39291                                                              (line  185)
39292 * __bid_fixunssdsi:                      Decimal float library routines.
39293                                                              (line  176)
39294 * __bid_fixunstddi:                      Decimal float library routines.
39295                                                              (line  189)
39296 * __bid_fixunstdsi:                      Decimal float library routines.
39297                                                              (line  180)
39298 * __bid_floatdidd:                       Decimal float library routines.
39299                                                              (line  205)
39300 * __bid_floatdisd:                       Decimal float library routines.
39301                                                              (line  203)
39302 * __bid_floatditd:                       Decimal float library routines.
39303                                                              (line  207)
39304 * __bid_floatsidd:                       Decimal float library routines.
39305                                                              (line  196)
39306 * __bid_floatsisd:                       Decimal float library routines.
39307                                                              (line  194)
39308 * __bid_floatsitd:                       Decimal float library routines.
39309                                                              (line  198)
39310 * __bid_floatunsdidd:                    Decimal float library routines.
39311                                                              (line  223)
39312 * __bid_floatunsdisd:                    Decimal float library routines.
39313                                                              (line  221)
39314 * __bid_floatunsditd:                    Decimal float library routines.
39315                                                              (line  225)
39316 * __bid_floatunssidd:                    Decimal float library routines.
39317                                                              (line  214)
39318 * __bid_floatunssisd:                    Decimal float library routines.
39319                                                              (line  212)
39320 * __bid_floatunssitd:                    Decimal float library routines.
39321                                                              (line  216)
39322 * __bid_gedd2:                           Decimal float library routines.
39323                                                              (line  277)
39324 * __bid_gesd2:                           Decimal float library routines.
39325                                                              (line  275)
39326 * __bid_getd2:                           Decimal float library routines.
39327                                                              (line  279)
39328 * __bid_gtdd2:                           Decimal float library routines.
39329                                                              (line  304)
39330 * __bid_gtsd2:                           Decimal float library routines.
39331                                                              (line  302)
39332 * __bid_gttd2:                           Decimal float library routines.
39333                                                              (line  306)
39334 * __bid_ledd2:                           Decimal float library routines.
39335                                                              (line  295)
39336 * __bid_lesd2:                           Decimal float library routines.
39337                                                              (line  293)
39338 * __bid_letd2:                           Decimal float library routines.
39339                                                              (line  297)
39340 * __bid_ltdd2:                           Decimal float library routines.
39341                                                              (line  286)
39342 * __bid_ltsd2:                           Decimal float library routines.
39343                                                              (line  284)
39344 * __bid_lttd2:                           Decimal float library routines.
39345                                                              (line  288)
39346 * __bid_muldd3:                          Decimal float library routines.
39347                                                              (line   54)
39348 * __bid_mulsd3:                          Decimal float library routines.
39349                                                              (line   50)
39350 * __bid_multd3:                          Decimal float library routines.
39351                                                              (line   58)
39352 * __bid_nedd2:                           Decimal float library routines.
39353                                                              (line  268)
39354 * __bid_negdd2:                          Decimal float library routines.
39355                                                              (line   78)
39356 * __bid_negsd2:                          Decimal float library routines.
39357                                                              (line   76)
39358 * __bid_negtd2:                          Decimal float library routines.
39359                                                              (line   80)
39360 * __bid_nesd2:                           Decimal float library routines.
39361                                                              (line  266)
39362 * __bid_netd2:                           Decimal float library routines.
39363                                                              (line  270)
39364 * __bid_subdd3:                          Decimal float library routines.
39365                                                              (line   39)
39366 * __bid_subsd3:                          Decimal float library routines.
39367                                                              (line   35)
39368 * __bid_subtd3:                          Decimal float library routines.
39369                                                              (line   43)
39370 * __bid_truncdddf:                       Decimal float library routines.
39371                                                              (line  153)
39372 * __bid_truncddsd2:                      Decimal float library routines.
39373                                                              (line   94)
39374 * __bid_truncddsf:                       Decimal float library routines.
39375                                                              (line  124)
39376 * __bid_truncdfsd:                       Decimal float library routines.
39377                                                              (line  111)
39378 * __bid_truncsdsf:                       Decimal float library routines.
39379                                                              (line  151)
39380 * __bid_trunctddd2:                      Decimal float library routines.
39381                                                              (line   98)
39382 * __bid_trunctddf:                       Decimal float library routines.
39383                                                              (line  130)
39384 * __bid_trunctdsd2:                      Decimal float library routines.
39385                                                              (line   96)
39386 * __bid_trunctdsf:                       Decimal float library routines.
39387                                                              (line  126)
39388 * __bid_trunctdtf:                       Decimal float library routines.
39389                                                              (line  155)
39390 * __bid_trunctdxf:                       Decimal float library routines.
39391                                                              (line  136)
39392 * __bid_trunctfdd:                       Decimal float library routines.
39393                                                              (line  119)
39394 * __bid_trunctfsd:                       Decimal float library routines.
39395                                                              (line  115)
39396 * __bid_truncxfdd:                       Decimal float library routines.
39397                                                              (line  117)
39398 * __bid_truncxfsd:                       Decimal float library routines.
39399                                                              (line  113)
39400 * __bid_unorddd2:                        Decimal float library routines.
39401                                                              (line  235)
39402 * __bid_unordsd2:                        Decimal float library routines.
39403                                                              (line  233)
39404 * __bid_unordtd2:                        Decimal float library routines.
39405                                                              (line  237)
39406 * __bswapdi2:                            Integer library routines.
39407                                                              (line  162)
39408 * __bswapsi2:                            Integer library routines.
39409                                                              (line  161)
39410 * __builtin_args_info:                   Varargs.            (line   42)
39411 * __builtin_classify_type:               Varargs.            (line   76)
39412 * __builtin_next_arg:                    Varargs.            (line   66)
39413 * __builtin_saveregs:                    Varargs.            (line   24)
39414 * __clear_cache:                         Miscellaneous routines.
39415                                                              (line   10)
39416 * __clzdi2:                              Integer library routines.
39417                                                              (line  131)
39418 * __clzsi2:                              Integer library routines.
39419                                                              (line  130)
39420 * __clzti2:                              Integer library routines.
39421                                                              (line  132)
39422 * __cmpda2:                              Fixed-point fractional library routines.
39423                                                              (line  451)
39424 * __cmpdf2:                              Soft float library routines.
39425                                                              (line  164)
39426 * __cmpdi2:                              Integer library routines.
39427                                                              (line   87)
39428 * __cmpdq2:                              Fixed-point fractional library routines.
39429                                                              (line  441)
39430 * __cmpha2:                              Fixed-point fractional library routines.
39431                                                              (line  449)
39432 * __cmphq2:                              Fixed-point fractional library routines.
39433                                                              (line  438)
39434 * __cmpqq2:                              Fixed-point fractional library routines.
39435                                                              (line  437)
39436 * __cmpsa2:                              Fixed-point fractional library routines.
39437                                                              (line  450)
39438 * __cmpsf2:                              Soft float library routines.
39439                                                              (line  163)
39440 * __cmpsq2:                              Fixed-point fractional library routines.
39441                                                              (line  439)
39442 * __cmpta2:                              Fixed-point fractional library routines.
39443                                                              (line  453)
39444 * __cmptf2:                              Soft float library routines.
39445                                                              (line  165)
39446 * __cmpti2:                              Integer library routines.
39447                                                              (line   88)
39448 * __cmpuda2:                             Fixed-point fractional library routines.
39449                                                              (line  458)
39450 * __cmpudq2:                             Fixed-point fractional library routines.
39451                                                              (line  448)
39452 * __cmpuha2:                             Fixed-point fractional library routines.
39453                                                              (line  455)
39454 * __cmpuhq2:                             Fixed-point fractional library routines.
39455                                                              (line  444)
39456 * __cmpuqq2:                             Fixed-point fractional library routines.
39457                                                              (line  443)
39458 * __cmpusa2:                             Fixed-point fractional library routines.
39459                                                              (line  456)
39460 * __cmpusq2:                             Fixed-point fractional library routines.
39461                                                              (line  446)
39462 * __cmputa2:                             Fixed-point fractional library routines.
39463                                                              (line  460)
39464 * __CTOR_LIST__:                         Initialization.     (line   25)
39465 * __ctzdi2:                              Integer library routines.
39466                                                              (line  138)
39467 * __ctzsi2:                              Integer library routines.
39468                                                              (line  137)
39469 * __ctzti2:                              Integer library routines.
39470                                                              (line  139)
39471 * __divda3:                              Fixed-point fractional library routines.
39472                                                              (line  227)
39473 * __divdc3:                              Soft float library routines.
39474                                                              (line  252)
39475 * __divdf3:                              Soft float library routines.
39476                                                              (line   48)
39477 * __divdi3:                              Integer library routines.
39478                                                              (line   25)
39479 * __divdq3:                              Fixed-point fractional library routines.
39480                                                              (line  223)
39481 * __divha3:                              Fixed-point fractional library routines.
39482                                                              (line  225)
39483 * __divhq3:                              Fixed-point fractional library routines.
39484                                                              (line  220)
39485 * __divqq3:                              Fixed-point fractional library routines.
39486                                                              (line  219)
39487 * __divsa3:                              Fixed-point fractional library routines.
39488                                                              (line  226)
39489 * __divsc3:                              Soft float library routines.
39490                                                              (line  250)
39491 * __divsf3:                              Soft float library routines.
39492                                                              (line   47)
39493 * __divsi3:                              Integer library routines.
39494                                                              (line   24)
39495 * __divsq3:                              Fixed-point fractional library routines.
39496                                                              (line  221)
39497 * __divta3:                              Fixed-point fractional library routines.
39498                                                              (line  229)
39499 * __divtc3:                              Soft float library routines.
39500                                                              (line  254)
39501 * __divtf3:                              Soft float library routines.
39502                                                              (line   50)
39503 * __divti3:                              Integer library routines.
39504                                                              (line   26)
39505 * __divxc3:                              Soft float library routines.
39506                                                              (line  256)
39507 * __divxf3:                              Soft float library routines.
39508                                                              (line   52)
39509 * __dpd_adddd3:                          Decimal float library routines.
39510                                                              (line   23)
39511 * __dpd_addsd3:                          Decimal float library routines.
39512                                                              (line   19)
39513 * __dpd_addtd3:                          Decimal float library routines.
39514                                                              (line   27)
39515 * __dpd_divdd3:                          Decimal float library routines.
39516                                                              (line   66)
39517 * __dpd_divsd3:                          Decimal float library routines.
39518                                                              (line   62)
39519 * __dpd_divtd3:                          Decimal float library routines.
39520                                                              (line   70)
39521 * __dpd_eqdd2:                           Decimal float library routines.
39522                                                              (line  258)
39523 * __dpd_eqsd2:                           Decimal float library routines.
39524                                                              (line  256)
39525 * __dpd_eqtd2:                           Decimal float library routines.
39526                                                              (line  260)
39527 * __dpd_extendddtd2:                     Decimal float library routines.
39528                                                              (line   91)
39529 * __dpd_extendddtf:                      Decimal float library routines.
39530                                                              (line  139)
39531 * __dpd_extendddxf:                      Decimal float library routines.
39532                                                              (line  133)
39533 * __dpd_extenddfdd:                      Decimal float library routines.
39534                                                              (line  146)
39535 * __dpd_extenddftd:                      Decimal float library routines.
39536                                                              (line  106)
39537 * __dpd_extendsddd2:                     Decimal float library routines.
39538                                                              (line   87)
39539 * __dpd_extendsddf:                      Decimal float library routines.
39540                                                              (line  127)
39541 * __dpd_extendsdtd2:                     Decimal float library routines.
39542                                                              (line   89)
39543 * __dpd_extendsdtf:                      Decimal float library routines.
39544                                                              (line  137)
39545 * __dpd_extendsdxf:                      Decimal float library routines.
39546                                                              (line  131)
39547 * __dpd_extendsfdd:                      Decimal float library routines.
39548                                                              (line  102)
39549 * __dpd_extendsfsd:                      Decimal float library routines.
39550                                                              (line  144)
39551 * __dpd_extendsftd:                      Decimal float library routines.
39552                                                              (line  104)
39553 * __dpd_extendtftd:                      Decimal float library routines.
39554                                                              (line  148)
39555 * __dpd_extendxftd:                      Decimal float library routines.
39556                                                              (line  108)
39557 * __dpd_fixdddi:                         Decimal float library routines.
39558                                                              (line  169)
39559 * __dpd_fixddsi:                         Decimal float library routines.
39560                                                              (line  161)
39561 * __dpd_fixsddi:                         Decimal float library routines.
39562                                                              (line  167)
39563 * __dpd_fixsdsi:                         Decimal float library routines.
39564                                                              (line  159)
39565 * __dpd_fixtddi:                         Decimal float library routines.
39566                                                              (line  171)
39567 * __dpd_fixtdsi:                         Decimal float library routines.
39568                                                              (line  163)
39569 * __dpd_fixunsdddi:                      Decimal float library routines.
39570                                                              (line  186)
39571 * __dpd_fixunsddsi:                      Decimal float library routines.
39572                                                              (line  177)
39573 * __dpd_fixunssddi:                      Decimal float library routines.
39574                                                              (line  184)
39575 * __dpd_fixunssdsi:                      Decimal float library routines.
39576                                                              (line  175)
39577 * __dpd_fixunstddi:                      Decimal float library routines.
39578                                                              (line  188)
39579 * __dpd_fixunstdsi:                      Decimal float library routines.
39580                                                              (line  179)
39581 * __dpd_floatdidd:                       Decimal float library routines.
39582                                                              (line  204)
39583 * __dpd_floatdisd:                       Decimal float library routines.
39584                                                              (line  202)
39585 * __dpd_floatditd:                       Decimal float library routines.
39586                                                              (line  206)
39587 * __dpd_floatsidd:                       Decimal float library routines.
39588                                                              (line  195)
39589 * __dpd_floatsisd:                       Decimal float library routines.
39590                                                              (line  193)
39591 * __dpd_floatsitd:                       Decimal float library routines.
39592                                                              (line  197)
39593 * __dpd_floatunsdidd:                    Decimal float library routines.
39594                                                              (line  222)
39595 * __dpd_floatunsdisd:                    Decimal float library routines.
39596                                                              (line  220)
39597 * __dpd_floatunsditd:                    Decimal float library routines.
39598                                                              (line  224)
39599 * __dpd_floatunssidd:                    Decimal float library routines.
39600                                                              (line  213)
39601 * __dpd_floatunssisd:                    Decimal float library routines.
39602                                                              (line  211)
39603 * __dpd_floatunssitd:                    Decimal float library routines.
39604                                                              (line  215)
39605 * __dpd_gedd2:                           Decimal float library routines.
39606                                                              (line  276)
39607 * __dpd_gesd2:                           Decimal float library routines.
39608                                                              (line  274)
39609 * __dpd_getd2:                           Decimal float library routines.
39610                                                              (line  278)
39611 * __dpd_gtdd2:                           Decimal float library routines.
39612                                                              (line  303)
39613 * __dpd_gtsd2:                           Decimal float library routines.
39614                                                              (line  301)
39615 * __dpd_gttd2:                           Decimal float library routines.
39616                                                              (line  305)
39617 * __dpd_ledd2:                           Decimal float library routines.
39618                                                              (line  294)
39619 * __dpd_lesd2:                           Decimal float library routines.
39620                                                              (line  292)
39621 * __dpd_letd2:                           Decimal float library routines.
39622                                                              (line  296)
39623 * __dpd_ltdd2:                           Decimal float library routines.
39624                                                              (line  285)
39625 * __dpd_ltsd2:                           Decimal float library routines.
39626                                                              (line  283)
39627 * __dpd_lttd2:                           Decimal float library routines.
39628                                                              (line  287)
39629 * __dpd_muldd3:                          Decimal float library routines.
39630                                                              (line   52)
39631 * __dpd_mulsd3:                          Decimal float library routines.
39632                                                              (line   48)
39633 * __dpd_multd3:                          Decimal float library routines.
39634                                                              (line   56)
39635 * __dpd_nedd2:                           Decimal float library routines.
39636                                                              (line  267)
39637 * __dpd_negdd2:                          Decimal float library routines.
39638                                                              (line   77)
39639 * __dpd_negsd2:                          Decimal float library routines.
39640                                                              (line   75)
39641 * __dpd_negtd2:                          Decimal float library routines.
39642                                                              (line   79)
39643 * __dpd_nesd2:                           Decimal float library routines.
39644                                                              (line  265)
39645 * __dpd_netd2:                           Decimal float library routines.
39646                                                              (line  269)
39647 * __dpd_subdd3:                          Decimal float library routines.
39648                                                              (line   37)
39649 * __dpd_subsd3:                          Decimal float library routines.
39650                                                              (line   33)
39651 * __dpd_subtd3:                          Decimal float library routines.
39652                                                              (line   41)
39653 * __dpd_truncdddf:                       Decimal float library routines.
39654                                                              (line  152)
39655 * __dpd_truncddsd2:                      Decimal float library routines.
39656                                                              (line   93)
39657 * __dpd_truncddsf:                       Decimal float library routines.
39658                                                              (line  123)
39659 * __dpd_truncdfsd:                       Decimal float library routines.
39660                                                              (line  110)
39661 * __dpd_truncsdsf:                       Decimal float library routines.
39662                                                              (line  150)
39663 * __dpd_trunctddd2:                      Decimal float library routines.
39664                                                              (line   97)
39665 * __dpd_trunctddf:                       Decimal float library routines.
39666                                                              (line  129)
39667 * __dpd_trunctdsd2:                      Decimal float library routines.
39668                                                              (line   95)
39669 * __dpd_trunctdsf:                       Decimal float library routines.
39670                                                              (line  125)
39671 * __dpd_trunctdtf:                       Decimal float library routines.
39672                                                              (line  154)
39673 * __dpd_trunctdxf:                       Decimal float library routines.
39674                                                              (line  135)
39675 * __dpd_trunctfdd:                       Decimal float library routines.
39676                                                              (line  118)
39677 * __dpd_trunctfsd:                       Decimal float library routines.
39678                                                              (line  114)
39679 * __dpd_truncxfdd:                       Decimal float library routines.
39680                                                              (line  116)
39681 * __dpd_truncxfsd:                       Decimal float library routines.
39682                                                              (line  112)
39683 * __dpd_unorddd2:                        Decimal float library routines.
39684                                                              (line  234)
39685 * __dpd_unordsd2:                        Decimal float library routines.
39686                                                              (line  232)
39687 * __dpd_unordtd2:                        Decimal float library routines.
39688                                                              (line  236)
39689 * __DTOR_LIST__:                         Initialization.     (line   25)
39690 * __eqdf2:                               Soft float library routines.
39691                                                              (line  194)
39692 * __eqsf2:                               Soft float library routines.
39693                                                              (line  193)
39694 * __eqtf2:                               Soft float library routines.
39695                                                              (line  195)
39696 * __extenddftf2:                         Soft float library routines.
39697                                                              (line   68)
39698 * __extenddfxf2:                         Soft float library routines.
39699                                                              (line   69)
39700 * __extendsfdf2:                         Soft float library routines.
39701                                                              (line   65)
39702 * __extendsftf2:                         Soft float library routines.
39703                                                              (line   66)
39704 * __extendsfxf2:                         Soft float library routines.
39705                                                              (line   67)
39706 * __ffsdi2:                              Integer library routines.
39707                                                              (line  144)
39708 * __ffsti2:                              Integer library routines.
39709                                                              (line  145)
39710 * __fixdfdi:                             Soft float library routines.
39711                                                              (line   88)
39712 * __fixdfsi:                             Soft float library routines.
39713                                                              (line   81)
39714 * __fixdfti:                             Soft float library routines.
39715                                                              (line   94)
39716 * __fixsfdi:                             Soft float library routines.
39717                                                              (line   87)
39718 * __fixsfsi:                             Soft float library routines.
39719                                                              (line   80)
39720 * __fixsfti:                             Soft float library routines.
39721                                                              (line   93)
39722 * __fixtfdi:                             Soft float library routines.
39723                                                              (line   89)
39724 * __fixtfsi:                             Soft float library routines.
39725                                                              (line   82)
39726 * __fixtfti:                             Soft float library routines.
39727                                                              (line   95)
39728 * __fixunsdfdi:                          Soft float library routines.
39729                                                              (line  108)
39730 * __fixunsdfsi:                          Soft float library routines.
39731                                                              (line  101)
39732 * __fixunsdfti:                          Soft float library routines.
39733                                                              (line  115)
39734 * __fixunssfdi:                          Soft float library routines.
39735                                                              (line  107)
39736 * __fixunssfsi:                          Soft float library routines.
39737                                                              (line  100)
39738 * __fixunssfti:                          Soft float library routines.
39739                                                              (line  114)
39740 * __fixunstfdi:                          Soft float library routines.
39741                                                              (line  109)
39742 * __fixunstfsi:                          Soft float library routines.
39743                                                              (line  102)
39744 * __fixunstfti:                          Soft float library routines.
39745                                                              (line  116)
39746 * __fixunsxfdi:                          Soft float library routines.
39747                                                              (line  110)
39748 * __fixunsxfsi:                          Soft float library routines.
39749                                                              (line  103)
39750 * __fixunsxfti:                          Soft float library routines.
39751                                                              (line  117)
39752 * __fixxfdi:                             Soft float library routines.
39753                                                              (line   90)
39754 * __fixxfsi:                             Soft float library routines.
39755                                                              (line   83)
39756 * __fixxfti:                             Soft float library routines.
39757                                                              (line   96)
39758 * __floatdidf:                           Soft float library routines.
39759                                                              (line  128)
39760 * __floatdisf:                           Soft float library routines.
39761                                                              (line  127)
39762 * __floatditf:                           Soft float library routines.
39763                                                              (line  129)
39764 * __floatdixf:                           Soft float library routines.
39765                                                              (line  130)
39766 * __floatsidf:                           Soft float library routines.
39767                                                              (line  122)
39768 * __floatsisf:                           Soft float library routines.
39769                                                              (line  121)
39770 * __floatsitf:                           Soft float library routines.
39771                                                              (line  123)
39772 * __floatsixf:                           Soft float library routines.
39773                                                              (line  124)
39774 * __floattidf:                           Soft float library routines.
39775                                                              (line  134)
39776 * __floattisf:                           Soft float library routines.
39777                                                              (line  133)
39778 * __floattitf:                           Soft float library routines.
39779                                                              (line  135)
39780 * __floattixf:                           Soft float library routines.
39781                                                              (line  136)
39782 * __floatundidf:                         Soft float library routines.
39783                                                              (line  146)
39784 * __floatundisf:                         Soft float library routines.
39785                                                              (line  145)
39786 * __floatunditf:                         Soft float library routines.
39787                                                              (line  147)
39788 * __floatundixf:                         Soft float library routines.
39789                                                              (line  148)
39790 * __floatunsidf:                         Soft float library routines.
39791                                                              (line  140)
39792 * __floatunsisf:                         Soft float library routines.
39793                                                              (line  139)
39794 * __floatunsitf:                         Soft float library routines.
39795                                                              (line  141)
39796 * __floatunsixf:                         Soft float library routines.
39797                                                              (line  142)
39798 * __floatuntidf:                         Soft float library routines.
39799                                                              (line  152)
39800 * __floatuntisf:                         Soft float library routines.
39801                                                              (line  151)
39802 * __floatuntitf:                         Soft float library routines.
39803                                                              (line  153)
39804 * __floatuntixf:                         Soft float library routines.
39805                                                              (line  154)
39806 * __fractdadf:                           Fixed-point fractional library routines.
39807                                                              (line  636)
39808 * __fractdadi:                           Fixed-point fractional library routines.
39809                                                              (line  633)
39810 * __fractdadq:                           Fixed-point fractional library routines.
39811                                                              (line  616)
39812 * __fractdaha2:                          Fixed-point fractional library routines.
39813                                                              (line  617)
39814 * __fractdahi:                           Fixed-point fractional library routines.
39815                                                              (line  631)
39816 * __fractdahq:                           Fixed-point fractional library routines.
39817                                                              (line  614)
39818 * __fractdaqi:                           Fixed-point fractional library routines.
39819                                                              (line  630)
39820 * __fractdaqq:                           Fixed-point fractional library routines.
39821                                                              (line  613)
39822 * __fractdasa2:                          Fixed-point fractional library routines.
39823                                                              (line  618)
39824 * __fractdasf:                           Fixed-point fractional library routines.
39825                                                              (line  635)
39826 * __fractdasi:                           Fixed-point fractional library routines.
39827                                                              (line  632)
39828 * __fractdasq:                           Fixed-point fractional library routines.
39829                                                              (line  615)
39830 * __fractdata2:                          Fixed-point fractional library routines.
39831                                                              (line  619)
39832 * __fractdati:                           Fixed-point fractional library routines.
39833                                                              (line  634)
39834 * __fractdauda:                          Fixed-point fractional library routines.
39835                                                              (line  627)
39836 * __fractdaudq:                          Fixed-point fractional library routines.
39837                                                              (line  624)
39838 * __fractdauha:                          Fixed-point fractional library routines.
39839                                                              (line  625)
39840 * __fractdauhq:                          Fixed-point fractional library routines.
39841                                                              (line  621)
39842 * __fractdauqq:                          Fixed-point fractional library routines.
39843                                                              (line  620)
39844 * __fractdausa:                          Fixed-point fractional library routines.
39845                                                              (line  626)
39846 * __fractdausq:                          Fixed-point fractional library routines.
39847                                                              (line  622)
39848 * __fractdauta:                          Fixed-point fractional library routines.
39849                                                              (line  629)
39850 * __fractdfda:                           Fixed-point fractional library routines.
39851                                                              (line 1025)
39852 * __fractdfdq:                           Fixed-point fractional library routines.
39853                                                              (line 1022)
39854 * __fractdfha:                           Fixed-point fractional library routines.
39855                                                              (line 1023)
39856 * __fractdfhq:                           Fixed-point fractional library routines.
39857                                                              (line 1020)
39858 * __fractdfqq:                           Fixed-point fractional library routines.
39859                                                              (line 1019)
39860 * __fractdfsa:                           Fixed-point fractional library routines.
39861                                                              (line 1024)
39862 * __fractdfsq:                           Fixed-point fractional library routines.
39863                                                              (line 1021)
39864 * __fractdfta:                           Fixed-point fractional library routines.
39865                                                              (line 1026)
39866 * __fractdfuda:                          Fixed-point fractional library routines.
39867                                                              (line 1033)
39868 * __fractdfudq:                          Fixed-point fractional library routines.
39869                                                              (line 1030)
39870 * __fractdfuha:                          Fixed-point fractional library routines.
39871                                                              (line 1031)
39872 * __fractdfuhq:                          Fixed-point fractional library routines.
39873                                                              (line 1028)
39874 * __fractdfuqq:                          Fixed-point fractional library routines.
39875                                                              (line 1027)
39876 * __fractdfusa:                          Fixed-point fractional library routines.
39877                                                              (line 1032)
39878 * __fractdfusq:                          Fixed-point fractional library routines.
39879                                                              (line 1029)
39880 * __fractdfuta:                          Fixed-point fractional library routines.
39881                                                              (line 1034)
39882 * __fractdida:                           Fixed-point fractional library routines.
39883                                                              (line  975)
39884 * __fractdidq:                           Fixed-point fractional library routines.
39885                                                              (line  972)
39886 * __fractdiha:                           Fixed-point fractional library routines.
39887                                                              (line  973)
39888 * __fractdihq:                           Fixed-point fractional library routines.
39889                                                              (line  970)
39890 * __fractdiqq:                           Fixed-point fractional library routines.
39891                                                              (line  969)
39892 * __fractdisa:                           Fixed-point fractional library routines.
39893                                                              (line  974)
39894 * __fractdisq:                           Fixed-point fractional library routines.
39895                                                              (line  971)
39896 * __fractdita:                           Fixed-point fractional library routines.
39897                                                              (line  976)
39898 * __fractdiuda:                          Fixed-point fractional library routines.
39899                                                              (line  983)
39900 * __fractdiudq:                          Fixed-point fractional library routines.
39901                                                              (line  980)
39902 * __fractdiuha:                          Fixed-point fractional library routines.
39903                                                              (line  981)
39904 * __fractdiuhq:                          Fixed-point fractional library routines.
39905                                                              (line  978)
39906 * __fractdiuqq:                          Fixed-point fractional library routines.
39907                                                              (line  977)
39908 * __fractdiusa:                          Fixed-point fractional library routines.
39909                                                              (line  982)
39910 * __fractdiusq:                          Fixed-point fractional library routines.
39911                                                              (line  979)
39912 * __fractdiuta:                          Fixed-point fractional library routines.
39913                                                              (line  984)
39914 * __fractdqda:                           Fixed-point fractional library routines.
39915                                                              (line  544)
39916 * __fractdqdf:                           Fixed-point fractional library routines.
39917                                                              (line  566)
39918 * __fractdqdi:                           Fixed-point fractional library routines.
39919                                                              (line  563)
39920 * __fractdqha:                           Fixed-point fractional library routines.
39921                                                              (line  542)
39922 * __fractdqhi:                           Fixed-point fractional library routines.
39923                                                              (line  561)
39924 * __fractdqhq2:                          Fixed-point fractional library routines.
39925                                                              (line  540)
39926 * __fractdqqi:                           Fixed-point fractional library routines.
39927                                                              (line  560)
39928 * __fractdqqq2:                          Fixed-point fractional library routines.
39929                                                              (line  539)
39930 * __fractdqsa:                           Fixed-point fractional library routines.
39931                                                              (line  543)
39932 * __fractdqsf:                           Fixed-point fractional library routines.
39933                                                              (line  565)
39934 * __fractdqsi:                           Fixed-point fractional library routines.
39935                                                              (line  562)
39936 * __fractdqsq2:                          Fixed-point fractional library routines.
39937                                                              (line  541)
39938 * __fractdqta:                           Fixed-point fractional library routines.
39939                                                              (line  545)
39940 * __fractdqti:                           Fixed-point fractional library routines.
39941                                                              (line  564)
39942 * __fractdquda:                          Fixed-point fractional library routines.
39943                                                              (line  557)
39944 * __fractdqudq:                          Fixed-point fractional library routines.
39945                                                              (line  552)
39946 * __fractdquha:                          Fixed-point fractional library routines.
39947                                                              (line  554)
39948 * __fractdquhq:                          Fixed-point fractional library routines.
39949                                                              (line  548)
39950 * __fractdquqq:                          Fixed-point fractional library routines.
39951                                                              (line  547)
39952 * __fractdqusa:                          Fixed-point fractional library routines.
39953                                                              (line  555)
39954 * __fractdqusq:                          Fixed-point fractional library routines.
39955                                                              (line  550)
39956 * __fractdquta:                          Fixed-point fractional library routines.
39957                                                              (line  559)
39958 * __fracthada2:                          Fixed-point fractional library routines.
39959                                                              (line  572)
39960 * __fracthadf:                           Fixed-point fractional library routines.
39961                                                              (line  590)
39962 * __fracthadi:                           Fixed-point fractional library routines.
39963                                                              (line  587)
39964 * __fracthadq:                           Fixed-point fractional library routines.
39965                                                              (line  570)
39966 * __fracthahi:                           Fixed-point fractional library routines.
39967                                                              (line  585)
39968 * __fracthahq:                           Fixed-point fractional library routines.
39969                                                              (line  568)
39970 * __fracthaqi:                           Fixed-point fractional library routines.
39971                                                              (line  584)
39972 * __fracthaqq:                           Fixed-point fractional library routines.
39973                                                              (line  567)
39974 * __fracthasa2:                          Fixed-point fractional library routines.
39975                                                              (line  571)
39976 * __fracthasf:                           Fixed-point fractional library routines.
39977                                                              (line  589)
39978 * __fracthasi:                           Fixed-point fractional library routines.
39979                                                              (line  586)
39980 * __fracthasq:                           Fixed-point fractional library routines.
39981                                                              (line  569)
39982 * __fracthata2:                          Fixed-point fractional library routines.
39983                                                              (line  573)
39984 * __fracthati:                           Fixed-point fractional library routines.
39985                                                              (line  588)
39986 * __fracthauda:                          Fixed-point fractional library routines.
39987                                                              (line  581)
39988 * __fracthaudq:                          Fixed-point fractional library routines.
39989                                                              (line  578)
39990 * __fracthauha:                          Fixed-point fractional library routines.
39991                                                              (line  579)
39992 * __fracthauhq:                          Fixed-point fractional library routines.
39993                                                              (line  575)
39994 * __fracthauqq:                          Fixed-point fractional library routines.
39995                                                              (line  574)
39996 * __fracthausa:                          Fixed-point fractional library routines.
39997                                                              (line  580)
39998 * __fracthausq:                          Fixed-point fractional library routines.
39999                                                              (line  576)
40000 * __fracthauta:                          Fixed-point fractional library routines.
40001                                                              (line  583)
40002 * __fracthida:                           Fixed-point fractional library routines.
40003                                                              (line  943)
40004 * __fracthidq:                           Fixed-point fractional library routines.
40005                                                              (line  940)
40006 * __fracthiha:                           Fixed-point fractional library routines.
40007                                                              (line  941)
40008 * __fracthihq:                           Fixed-point fractional library routines.
40009                                                              (line  938)
40010 * __fracthiqq:                           Fixed-point fractional library routines.
40011                                                              (line  937)
40012 * __fracthisa:                           Fixed-point fractional library routines.
40013                                                              (line  942)
40014 * __fracthisq:                           Fixed-point fractional library routines.
40015                                                              (line  939)
40016 * __fracthita:                           Fixed-point fractional library routines.
40017                                                              (line  944)
40018 * __fracthiuda:                          Fixed-point fractional library routines.
40019                                                              (line  951)
40020 * __fracthiudq:                          Fixed-point fractional library routines.
40021                                                              (line  948)
40022 * __fracthiuha:                          Fixed-point fractional library routines.
40023                                                              (line  949)
40024 * __fracthiuhq:                          Fixed-point fractional library routines.
40025                                                              (line  946)
40026 * __fracthiuqq:                          Fixed-point fractional library routines.
40027                                                              (line  945)
40028 * __fracthiusa:                          Fixed-point fractional library routines.
40029                                                              (line  950)
40030 * __fracthiusq:                          Fixed-point fractional library routines.
40031                                                              (line  947)
40032 * __fracthiuta:                          Fixed-point fractional library routines.
40033                                                              (line  952)
40034 * __fracthqda:                           Fixed-point fractional library routines.
40035                                                              (line  498)
40036 * __fracthqdf:                           Fixed-point fractional library routines.
40037                                                              (line  514)
40038 * __fracthqdi:                           Fixed-point fractional library routines.
40039                                                              (line  511)
40040 * __fracthqdq2:                          Fixed-point fractional library routines.
40041                                                              (line  495)
40042 * __fracthqha:                           Fixed-point fractional library routines.
40043                                                              (line  496)
40044 * __fracthqhi:                           Fixed-point fractional library routines.
40045                                                              (line  509)
40046 * __fracthqqi:                           Fixed-point fractional library routines.
40047                                                              (line  508)
40048 * __fracthqqq2:                          Fixed-point fractional library routines.
40049                                                              (line  493)
40050 * __fracthqsa:                           Fixed-point fractional library routines.
40051                                                              (line  497)
40052 * __fracthqsf:                           Fixed-point fractional library routines.
40053                                                              (line  513)
40054 * __fracthqsi:                           Fixed-point fractional library routines.
40055                                                              (line  510)
40056 * __fracthqsq2:                          Fixed-point fractional library routines.
40057                                                              (line  494)
40058 * __fracthqta:                           Fixed-point fractional library routines.
40059                                                              (line  499)
40060 * __fracthqti:                           Fixed-point fractional library routines.
40061                                                              (line  512)
40062 * __fracthquda:                          Fixed-point fractional library routines.
40063                                                              (line  506)
40064 * __fracthqudq:                          Fixed-point fractional library routines.
40065                                                              (line  503)
40066 * __fracthquha:                          Fixed-point fractional library routines.
40067                                                              (line  504)
40068 * __fracthquhq:                          Fixed-point fractional library routines.
40069                                                              (line  501)
40070 * __fracthquqq:                          Fixed-point fractional library routines.
40071                                                              (line  500)
40072 * __fracthqusa:                          Fixed-point fractional library routines.
40073                                                              (line  505)
40074 * __fracthqusq:                          Fixed-point fractional library routines.
40075                                                              (line  502)
40076 * __fracthquta:                          Fixed-point fractional library routines.
40077                                                              (line  507)
40078 * __fractqida:                           Fixed-point fractional library routines.
40079                                                              (line  925)
40080 * __fractqidq:                           Fixed-point fractional library routines.
40081                                                              (line  922)
40082 * __fractqiha:                           Fixed-point fractional library routines.
40083                                                              (line  923)
40084 * __fractqihq:                           Fixed-point fractional library routines.
40085                                                              (line  920)
40086 * __fractqiqq:                           Fixed-point fractional library routines.
40087                                                              (line  919)
40088 * __fractqisa:                           Fixed-point fractional library routines.
40089                                                              (line  924)
40090 * __fractqisq:                           Fixed-point fractional library routines.
40091                                                              (line  921)
40092 * __fractqita:                           Fixed-point fractional library routines.
40093                                                              (line  926)
40094 * __fractqiuda:                          Fixed-point fractional library routines.
40095                                                              (line  934)
40096 * __fractqiudq:                          Fixed-point fractional library routines.
40097                                                              (line  931)
40098 * __fractqiuha:                          Fixed-point fractional library routines.
40099                                                              (line  932)
40100 * __fractqiuhq:                          Fixed-point fractional library routines.
40101                                                              (line  928)
40102 * __fractqiuqq:                          Fixed-point fractional library routines.
40103                                                              (line  927)
40104 * __fractqiusa:                          Fixed-point fractional library routines.
40105                                                              (line  933)
40106 * __fractqiusq:                          Fixed-point fractional library routines.
40107                                                              (line  929)
40108 * __fractqiuta:                          Fixed-point fractional library routines.
40109                                                              (line  936)
40110 * __fractqqda:                           Fixed-point fractional library routines.
40111                                                              (line  474)
40112 * __fractqqdf:                           Fixed-point fractional library routines.
40113                                                              (line  492)
40114 * __fractqqdi:                           Fixed-point fractional library routines.
40115                                                              (line  489)
40116 * __fractqqdq2:                          Fixed-point fractional library routines.
40117                                                              (line  471)
40118 * __fractqqha:                           Fixed-point fractional library routines.
40119                                                              (line  472)
40120 * __fractqqhi:                           Fixed-point fractional library routines.
40121                                                              (line  487)
40122 * __fractqqhq2:                          Fixed-point fractional library routines.
40123                                                              (line  469)
40124 * __fractqqqi:                           Fixed-point fractional library routines.
40125                                                              (line  486)
40126 * __fractqqsa:                           Fixed-point fractional library routines.
40127                                                              (line  473)
40128 * __fractqqsf:                           Fixed-point fractional library routines.
40129                                                              (line  491)
40130 * __fractqqsi:                           Fixed-point fractional library routines.
40131                                                              (line  488)
40132 * __fractqqsq2:                          Fixed-point fractional library routines.
40133                                                              (line  470)
40134 * __fractqqta:                           Fixed-point fractional library routines.
40135                                                              (line  475)
40136 * __fractqqti:                           Fixed-point fractional library routines.
40137                                                              (line  490)
40138 * __fractqquda:                          Fixed-point fractional library routines.
40139                                                              (line  483)
40140 * __fractqqudq:                          Fixed-point fractional library routines.
40141                                                              (line  480)
40142 * __fractqquha:                          Fixed-point fractional library routines.
40143                                                              (line  481)
40144 * __fractqquhq:                          Fixed-point fractional library routines.
40145                                                              (line  477)
40146 * __fractqquqq:                          Fixed-point fractional library routines.
40147                                                              (line  476)
40148 * __fractqqusa:                          Fixed-point fractional library routines.
40149                                                              (line  482)
40150 * __fractqqusq:                          Fixed-point fractional library routines.
40151                                                              (line  478)
40152 * __fractqquta:                          Fixed-point fractional library routines.
40153                                                              (line  485)
40154 * __fractsada2:                          Fixed-point fractional library routines.
40155                                                              (line  596)
40156 * __fractsadf:                           Fixed-point fractional library routines.
40157                                                              (line  612)
40158 * __fractsadi:                           Fixed-point fractional library routines.
40159                                                              (line  609)
40160 * __fractsadq:                           Fixed-point fractional library routines.
40161                                                              (line  594)
40162 * __fractsaha2:                          Fixed-point fractional library routines.
40163                                                              (line  595)
40164 * __fractsahi:                           Fixed-point fractional library routines.
40165                                                              (line  607)
40166 * __fractsahq:                           Fixed-point fractional library routines.
40167                                                              (line  592)
40168 * __fractsaqi:                           Fixed-point fractional library routines.
40169                                                              (line  606)
40170 * __fractsaqq:                           Fixed-point fractional library routines.
40171                                                              (line  591)
40172 * __fractsasf:                           Fixed-point fractional library routines.
40173                                                              (line  611)
40174 * __fractsasi:                           Fixed-point fractional library routines.
40175                                                              (line  608)
40176 * __fractsasq:                           Fixed-point fractional library routines.
40177                                                              (line  593)
40178 * __fractsata2:                          Fixed-point fractional library routines.
40179                                                              (line  597)
40180 * __fractsati:                           Fixed-point fractional library routines.
40181                                                              (line  610)
40182 * __fractsauda:                          Fixed-point fractional library routines.
40183                                                              (line  604)
40184 * __fractsaudq:                          Fixed-point fractional library routines.
40185                                                              (line  601)
40186 * __fractsauha:                          Fixed-point fractional library routines.
40187                                                              (line  602)
40188 * __fractsauhq:                          Fixed-point fractional library routines.
40189                                                              (line  599)
40190 * __fractsauqq:                          Fixed-point fractional library routines.
40191                                                              (line  598)
40192 * __fractsausa:                          Fixed-point fractional library routines.
40193                                                              (line  603)
40194 * __fractsausq:                          Fixed-point fractional library routines.
40195                                                              (line  600)
40196 * __fractsauta:                          Fixed-point fractional library routines.
40197                                                              (line  605)
40198 * __fractsfda:                           Fixed-point fractional library routines.
40199                                                              (line 1009)
40200 * __fractsfdq:                           Fixed-point fractional library routines.
40201                                                              (line 1006)
40202 * __fractsfha:                           Fixed-point fractional library routines.
40203                                                              (line 1007)
40204 * __fractsfhq:                           Fixed-point fractional library routines.
40205                                                              (line 1004)
40206 * __fractsfqq:                           Fixed-point fractional library routines.
40207                                                              (line 1003)
40208 * __fractsfsa:                           Fixed-point fractional library routines.
40209                                                              (line 1008)
40210 * __fractsfsq:                           Fixed-point fractional library routines.
40211                                                              (line 1005)
40212 * __fractsfta:                           Fixed-point fractional library routines.
40213                                                              (line 1010)
40214 * __fractsfuda:                          Fixed-point fractional library routines.
40215                                                              (line 1017)
40216 * __fractsfudq:                          Fixed-point fractional library routines.
40217                                                              (line 1014)
40218 * __fractsfuha:                          Fixed-point fractional library routines.
40219                                                              (line 1015)
40220 * __fractsfuhq:                          Fixed-point fractional library routines.
40221                                                              (line 1012)
40222 * __fractsfuqq:                          Fixed-point fractional library routines.
40223                                                              (line 1011)
40224 * __fractsfusa:                          Fixed-point fractional library routines.
40225                                                              (line 1016)
40226 * __fractsfusq:                          Fixed-point fractional library routines.
40227                                                              (line 1013)
40228 * __fractsfuta:                          Fixed-point fractional library routines.
40229                                                              (line 1018)
40230 * __fractsida:                           Fixed-point fractional library routines.
40231                                                              (line  959)
40232 * __fractsidq:                           Fixed-point fractional library routines.
40233                                                              (line  956)
40234 * __fractsiha:                           Fixed-point fractional library routines.
40235                                                              (line  957)
40236 * __fractsihq:                           Fixed-point fractional library routines.
40237                                                              (line  954)
40238 * __fractsiqq:                           Fixed-point fractional library routines.
40239                                                              (line  953)
40240 * __fractsisa:                           Fixed-point fractional library routines.
40241                                                              (line  958)
40242 * __fractsisq:                           Fixed-point fractional library routines.
40243                                                              (line  955)
40244 * __fractsita:                           Fixed-point fractional library routines.
40245                                                              (line  960)
40246 * __fractsiuda:                          Fixed-point fractional library routines.
40247                                                              (line  967)
40248 * __fractsiudq:                          Fixed-point fractional library routines.
40249                                                              (line  964)
40250 * __fractsiuha:                          Fixed-point fractional library routines.
40251                                                              (line  965)
40252 * __fractsiuhq:                          Fixed-point fractional library routines.
40253                                                              (line  962)
40254 * __fractsiuqq:                          Fixed-point fractional library routines.
40255                                                              (line  961)
40256 * __fractsiusa:                          Fixed-point fractional library routines.
40257                                                              (line  966)
40258 * __fractsiusq:                          Fixed-point fractional library routines.
40259                                                              (line  963)
40260 * __fractsiuta:                          Fixed-point fractional library routines.
40261                                                              (line  968)
40262 * __fractsqda:                           Fixed-point fractional library routines.
40263                                                              (line  520)
40264 * __fractsqdf:                           Fixed-point fractional library routines.
40265                                                              (line  538)
40266 * __fractsqdi:                           Fixed-point fractional library routines.
40267                                                              (line  535)
40268 * __fractsqdq2:                          Fixed-point fractional library routines.
40269                                                              (line  517)
40270 * __fractsqha:                           Fixed-point fractional library routines.
40271                                                              (line  518)
40272 * __fractsqhi:                           Fixed-point fractional library routines.
40273                                                              (line  533)
40274 * __fractsqhq2:                          Fixed-point fractional library routines.
40275                                                              (line  516)
40276 * __fractsqqi:                           Fixed-point fractional library routines.
40277                                                              (line  532)
40278 * __fractsqqq2:                          Fixed-point fractional library routines.
40279                                                              (line  515)
40280 * __fractsqsa:                           Fixed-point fractional library routines.
40281                                                              (line  519)
40282 * __fractsqsf:                           Fixed-point fractional library routines.
40283                                                              (line  537)
40284 * __fractsqsi:                           Fixed-point fractional library routines.
40285                                                              (line  534)
40286 * __fractsqta:                           Fixed-point fractional library routines.
40287                                                              (line  521)
40288 * __fractsqti:                           Fixed-point fractional library routines.
40289                                                              (line  536)
40290 * __fractsquda:                          Fixed-point fractional library routines.
40291                                                              (line  529)
40292 * __fractsqudq:                          Fixed-point fractional library routines.
40293                                                              (line  526)
40294 * __fractsquha:                          Fixed-point fractional library routines.
40295                                                              (line  527)
40296 * __fractsquhq:                          Fixed-point fractional library routines.
40297                                                              (line  523)
40298 * __fractsquqq:                          Fixed-point fractional library routines.
40299                                                              (line  522)
40300 * __fractsqusa:                          Fixed-point fractional library routines.
40301                                                              (line  528)
40302 * __fractsqusq:                          Fixed-point fractional library routines.
40303                                                              (line  524)
40304 * __fractsquta:                          Fixed-point fractional library routines.
40305                                                              (line  531)
40306 * __fracttada2:                          Fixed-point fractional library routines.
40307                                                              (line  643)
40308 * __fracttadf:                           Fixed-point fractional library routines.
40309                                                              (line  664)
40310 * __fracttadi:                           Fixed-point fractional library routines.
40311                                                              (line  661)
40312 * __fracttadq:                           Fixed-point fractional library routines.
40313                                                              (line  640)
40314 * __fracttaha2:                          Fixed-point fractional library routines.
40315                                                              (line  641)
40316 * __fracttahi:                           Fixed-point fractional library routines.
40317                                                              (line  659)
40318 * __fracttahq:                           Fixed-point fractional library routines.
40319                                                              (line  638)
40320 * __fracttaqi:                           Fixed-point fractional library routines.
40321                                                              (line  658)
40322 * __fracttaqq:                           Fixed-point fractional library routines.
40323                                                              (line  637)
40324 * __fracttasa2:                          Fixed-point fractional library routines.
40325                                                              (line  642)
40326 * __fracttasf:                           Fixed-point fractional library routines.
40327                                                              (line  663)
40328 * __fracttasi:                           Fixed-point fractional library routines.
40329                                                              (line  660)
40330 * __fracttasq:                           Fixed-point fractional library routines.
40331                                                              (line  639)
40332 * __fracttati:                           Fixed-point fractional library routines.
40333                                                              (line  662)
40334 * __fracttauda:                          Fixed-point fractional library routines.
40335                                                              (line  655)
40336 * __fracttaudq:                          Fixed-point fractional library routines.
40337                                                              (line  650)
40338 * __fracttauha:                          Fixed-point fractional library routines.
40339                                                              (line  652)
40340 * __fracttauhq:                          Fixed-point fractional library routines.
40341                                                              (line  646)
40342 * __fracttauqq:                          Fixed-point fractional library routines.
40343                                                              (line  645)
40344 * __fracttausa:                          Fixed-point fractional library routines.
40345                                                              (line  653)
40346 * __fracttausq:                          Fixed-point fractional library routines.
40347                                                              (line  648)
40348 * __fracttauta:                          Fixed-point fractional library routines.
40349                                                              (line  657)
40350 * __fracttida:                           Fixed-point fractional library routines.
40351                                                              (line  991)
40352 * __fracttidq:                           Fixed-point fractional library routines.
40353                                                              (line  988)
40354 * __fracttiha:                           Fixed-point fractional library routines.
40355                                                              (line  989)
40356 * __fracttihq:                           Fixed-point fractional library routines.
40357                                                              (line  986)
40358 * __fracttiqq:                           Fixed-point fractional library routines.
40359                                                              (line  985)
40360 * __fracttisa:                           Fixed-point fractional library routines.
40361                                                              (line  990)
40362 * __fracttisq:                           Fixed-point fractional library routines.
40363                                                              (line  987)
40364 * __fracttita:                           Fixed-point fractional library routines.
40365                                                              (line  992)
40366 * __fracttiuda:                          Fixed-point fractional library routines.
40367                                                              (line 1000)
40368 * __fracttiudq:                          Fixed-point fractional library routines.
40369                                                              (line  997)
40370 * __fracttiuha:                          Fixed-point fractional library routines.
40371                                                              (line  998)
40372 * __fracttiuhq:                          Fixed-point fractional library routines.
40373                                                              (line  994)
40374 * __fracttiuqq:                          Fixed-point fractional library routines.
40375                                                              (line  993)
40376 * __fracttiusa:                          Fixed-point fractional library routines.
40377                                                              (line  999)
40378 * __fracttiusq:                          Fixed-point fractional library routines.
40379                                                              (line  995)
40380 * __fracttiuta:                          Fixed-point fractional library routines.
40381                                                              (line 1002)
40382 * __fractudada:                          Fixed-point fractional library routines.
40383                                                              (line  858)
40384 * __fractudadf:                          Fixed-point fractional library routines.
40385                                                              (line  881)
40386 * __fractudadi:                          Fixed-point fractional library routines.
40387                                                              (line  878)
40388 * __fractudadq:                          Fixed-point fractional library routines.
40389                                                              (line  855)
40390 * __fractudaha:                          Fixed-point fractional library routines.
40391                                                              (line  856)
40392 * __fractudahi:                          Fixed-point fractional library routines.
40393                                                              (line  876)
40394 * __fractudahq:                          Fixed-point fractional library routines.
40395                                                              (line  852)
40396 * __fractudaqi:                          Fixed-point fractional library routines.
40397                                                              (line  875)
40398 * __fractudaqq:                          Fixed-point fractional library routines.
40399                                                              (line  851)
40400 * __fractudasa:                          Fixed-point fractional library routines.
40401                                                              (line  857)
40402 * __fractudasf:                          Fixed-point fractional library routines.
40403                                                              (line  880)
40404 * __fractudasi:                          Fixed-point fractional library routines.
40405                                                              (line  877)
40406 * __fractudasq:                          Fixed-point fractional library routines.
40407                                                              (line  853)
40408 * __fractudata:                          Fixed-point fractional library routines.
40409                                                              (line  860)
40410 * __fractudati:                          Fixed-point fractional library routines.
40411                                                              (line  879)
40412 * __fractudaudq:                         Fixed-point fractional library routines.
40413                                                              (line  868)
40414 * __fractudauha2:                        Fixed-point fractional library routines.
40415                                                              (line  870)
40416 * __fractudauhq:                         Fixed-point fractional library routines.
40417                                                              (line  864)
40418 * __fractudauqq:                         Fixed-point fractional library routines.
40419                                                              (line  862)
40420 * __fractudausa2:                        Fixed-point fractional library routines.
40421                                                              (line  872)
40422 * __fractudausq:                         Fixed-point fractional library routines.
40423                                                              (line  866)
40424 * __fractudauta2:                        Fixed-point fractional library routines.
40425                                                              (line  874)
40426 * __fractudqda:                          Fixed-point fractional library routines.
40427                                                              (line  766)
40428 * __fractudqdf:                          Fixed-point fractional library routines.
40429                                                              (line  791)
40430 * __fractudqdi:                          Fixed-point fractional library routines.
40431                                                              (line  787)
40432 * __fractudqdq:                          Fixed-point fractional library routines.
40433                                                              (line  761)
40434 * __fractudqha:                          Fixed-point fractional library routines.
40435                                                              (line  763)
40436 * __fractudqhi:                          Fixed-point fractional library routines.
40437                                                              (line  785)
40438 * __fractudqhq:                          Fixed-point fractional library routines.
40439                                                              (line  757)
40440 * __fractudqqi:                          Fixed-point fractional library routines.
40441                                                              (line  784)
40442 * __fractudqqq:                          Fixed-point fractional library routines.
40443                                                              (line  756)
40444 * __fractudqsa:                          Fixed-point fractional library routines.
40445                                                              (line  764)
40446 * __fractudqsf:                          Fixed-point fractional library routines.
40447                                                              (line  790)
40448 * __fractudqsi:                          Fixed-point fractional library routines.
40449                                                              (line  786)
40450 * __fractudqsq:                          Fixed-point fractional library routines.
40451                                                              (line  759)
40452 * __fractudqta:                          Fixed-point fractional library routines.
40453                                                              (line  768)
40454 * __fractudqti:                          Fixed-point fractional library routines.
40455                                                              (line  789)
40456 * __fractudquda:                         Fixed-point fractional library routines.
40457                                                              (line  780)
40458 * __fractudquha:                         Fixed-point fractional library routines.
40459                                                              (line  776)
40460 * __fractudquhq2:                        Fixed-point fractional library routines.
40461                                                              (line  772)
40462 * __fractudquqq2:                        Fixed-point fractional library routines.
40463                                                              (line  770)
40464 * __fractudqusa:                         Fixed-point fractional library routines.
40465                                                              (line  778)
40466 * __fractudqusq2:                        Fixed-point fractional library routines.
40467                                                              (line  774)
40468 * __fractudquta:                         Fixed-point fractional library routines.
40469                                                              (line  782)
40470 * __fractuhada:                          Fixed-point fractional library routines.
40471                                                              (line  799)
40472 * __fractuhadf:                          Fixed-point fractional library routines.
40473                                                              (line  822)
40474 * __fractuhadi:                          Fixed-point fractional library routines.
40475                                                              (line  819)
40476 * __fractuhadq:                          Fixed-point fractional library routines.
40477                                                              (line  796)
40478 * __fractuhaha:                          Fixed-point fractional library routines.
40479                                                              (line  797)
40480 * __fractuhahi:                          Fixed-point fractional library routines.
40481                                                              (line  817)
40482 * __fractuhahq:                          Fixed-point fractional library routines.
40483                                                              (line  793)
40484 * __fractuhaqi:                          Fixed-point fractional library routines.
40485                                                              (line  816)
40486 * __fractuhaqq:                          Fixed-point fractional library routines.
40487                                                              (line  792)
40488 * __fractuhasa:                          Fixed-point fractional library routines.
40489                                                              (line  798)
40490 * __fractuhasf:                          Fixed-point fractional library routines.
40491                                                              (line  821)
40492 * __fractuhasi:                          Fixed-point fractional library routines.
40493                                                              (line  818)
40494 * __fractuhasq:                          Fixed-point fractional library routines.
40495                                                              (line  794)
40496 * __fractuhata:                          Fixed-point fractional library routines.
40497                                                              (line  801)
40498 * __fractuhati:                          Fixed-point fractional library routines.
40499                                                              (line  820)
40500 * __fractuhauda2:                        Fixed-point fractional library routines.
40501                                                              (line  813)
40502 * __fractuhaudq:                         Fixed-point fractional library routines.
40503                                                              (line  809)
40504 * __fractuhauhq:                         Fixed-point fractional library routines.
40505                                                              (line  805)
40506 * __fractuhauqq:                         Fixed-point fractional library routines.
40507                                                              (line  803)
40508 * __fractuhausa2:                        Fixed-point fractional library routines.
40509                                                              (line  811)
40510 * __fractuhausq:                         Fixed-point fractional library routines.
40511                                                              (line  807)
40512 * __fractuhauta2:                        Fixed-point fractional library routines.
40513                                                              (line  815)
40514 * __fractuhqda:                          Fixed-point fractional library routines.
40515                                                              (line  702)
40516 * __fractuhqdf:                          Fixed-point fractional library routines.
40517                                                              (line  723)
40518 * __fractuhqdi:                          Fixed-point fractional library routines.
40519                                                              (line  720)
40520 * __fractuhqdq:                          Fixed-point fractional library routines.
40521                                                              (line  699)
40522 * __fractuhqha:                          Fixed-point fractional library routines.
40523                                                              (line  700)
40524 * __fractuhqhi:                          Fixed-point fractional library routines.
40525                                                              (line  718)
40526 * __fractuhqhq:                          Fixed-point fractional library routines.
40527                                                              (line  697)
40528 * __fractuhqqi:                          Fixed-point fractional library routines.
40529                                                              (line  717)
40530 * __fractuhqqq:                          Fixed-point fractional library routines.
40531                                                              (line  696)
40532 * __fractuhqsa:                          Fixed-point fractional library routines.
40533                                                              (line  701)
40534 * __fractuhqsf:                          Fixed-point fractional library routines.
40535                                                              (line  722)
40536 * __fractuhqsi:                          Fixed-point fractional library routines.
40537                                                              (line  719)
40538 * __fractuhqsq:                          Fixed-point fractional library routines.
40539                                                              (line  698)
40540 * __fractuhqta:                          Fixed-point fractional library routines.
40541                                                              (line  703)
40542 * __fractuhqti:                          Fixed-point fractional library routines.
40543                                                              (line  721)
40544 * __fractuhquda:                         Fixed-point fractional library routines.
40545                                                              (line  714)
40546 * __fractuhqudq2:                        Fixed-point fractional library routines.
40547                                                              (line  709)
40548 * __fractuhquha:                         Fixed-point fractional library routines.
40549                                                              (line  711)
40550 * __fractuhquqq2:                        Fixed-point fractional library routines.
40551                                                              (line  705)
40552 * __fractuhqusa:                         Fixed-point fractional library routines.
40553                                                              (line  712)
40554 * __fractuhqusq2:                        Fixed-point fractional library routines.
40555                                                              (line  707)
40556 * __fractuhquta:                         Fixed-point fractional library routines.
40557                                                              (line  716)
40558 * __fractunsdadi:                        Fixed-point fractional library routines.
40559                                                              (line 1555)
40560 * __fractunsdahi:                        Fixed-point fractional library routines.
40561                                                              (line 1553)
40562 * __fractunsdaqi:                        Fixed-point fractional library routines.
40563                                                              (line 1552)
40564 * __fractunsdasi:                        Fixed-point fractional library routines.
40565                                                              (line 1554)
40566 * __fractunsdati:                        Fixed-point fractional library routines.
40567                                                              (line 1556)
40568 * __fractunsdida:                        Fixed-point fractional library routines.
40569                                                              (line 1707)
40570 * __fractunsdidq:                        Fixed-point fractional library routines.
40571                                                              (line 1704)
40572 * __fractunsdiha:                        Fixed-point fractional library routines.
40573                                                              (line 1705)
40574 * __fractunsdihq:                        Fixed-point fractional library routines.
40575                                                              (line 1702)
40576 * __fractunsdiqq:                        Fixed-point fractional library routines.
40577                                                              (line 1701)
40578 * __fractunsdisa:                        Fixed-point fractional library routines.
40579                                                              (line 1706)
40580 * __fractunsdisq:                        Fixed-point fractional library routines.
40581                                                              (line 1703)
40582 * __fractunsdita:                        Fixed-point fractional library routines.
40583                                                              (line 1708)
40584 * __fractunsdiuda:                       Fixed-point fractional library routines.
40585                                                              (line 1720)
40586 * __fractunsdiudq:                       Fixed-point fractional library routines.
40587                                                              (line 1715)
40588 * __fractunsdiuha:                       Fixed-point fractional library routines.
40589                                                              (line 1717)
40590 * __fractunsdiuhq:                       Fixed-point fractional library routines.
40591                                                              (line 1711)
40592 * __fractunsdiuqq:                       Fixed-point fractional library routines.
40593                                                              (line 1710)
40594 * __fractunsdiusa:                       Fixed-point fractional library routines.
40595                                                              (line 1718)
40596 * __fractunsdiusq:                       Fixed-point fractional library routines.
40597                                                              (line 1713)
40598 * __fractunsdiuta:                       Fixed-point fractional library routines.
40599                                                              (line 1722)
40600 * __fractunsdqdi:                        Fixed-point fractional library routines.
40601                                                              (line 1539)
40602 * __fractunsdqhi:                        Fixed-point fractional library routines.
40603                                                              (line 1537)
40604 * __fractunsdqqi:                        Fixed-point fractional library routines.
40605                                                              (line 1536)
40606 * __fractunsdqsi:                        Fixed-point fractional library routines.
40607                                                              (line 1538)
40608 * __fractunsdqti:                        Fixed-point fractional library routines.
40609                                                              (line 1541)
40610 * __fractunshadi:                        Fixed-point fractional library routines.
40611                                                              (line 1545)
40612 * __fractunshahi:                        Fixed-point fractional library routines.
40613                                                              (line 1543)
40614 * __fractunshaqi:                        Fixed-point fractional library routines.
40615                                                              (line 1542)
40616 * __fractunshasi:                        Fixed-point fractional library routines.
40617                                                              (line 1544)
40618 * __fractunshati:                        Fixed-point fractional library routines.
40619                                                              (line 1546)
40620 * __fractunshida:                        Fixed-point fractional library routines.
40621                                                              (line 1663)
40622 * __fractunshidq:                        Fixed-point fractional library routines.
40623                                                              (line 1660)
40624 * __fractunshiha:                        Fixed-point fractional library routines.
40625                                                              (line 1661)
40626 * __fractunshihq:                        Fixed-point fractional library routines.
40627                                                              (line 1658)
40628 * __fractunshiqq:                        Fixed-point fractional library routines.
40629                                                              (line 1657)
40630 * __fractunshisa:                        Fixed-point fractional library routines.
40631                                                              (line 1662)
40632 * __fractunshisq:                        Fixed-point fractional library routines.
40633                                                              (line 1659)
40634 * __fractunshita:                        Fixed-point fractional library routines.
40635                                                              (line 1664)
40636 * __fractunshiuda:                       Fixed-point fractional library routines.
40637                                                              (line 1676)
40638 * __fractunshiudq:                       Fixed-point fractional library routines.
40639                                                              (line 1671)
40640 * __fractunshiuha:                       Fixed-point fractional library routines.
40641                                                              (line 1673)
40642 * __fractunshiuhq:                       Fixed-point fractional library routines.
40643                                                              (line 1667)
40644 * __fractunshiuqq:                       Fixed-point fractional library routines.
40645                                                              (line 1666)
40646 * __fractunshiusa:                       Fixed-point fractional library routines.
40647                                                              (line 1674)
40648 * __fractunshiusq:                       Fixed-point fractional library routines.
40649                                                              (line 1669)
40650 * __fractunshiuta:                       Fixed-point fractional library routines.
40651                                                              (line 1678)
40652 * __fractunshqdi:                        Fixed-point fractional library routines.
40653                                                              (line 1529)
40654 * __fractunshqhi:                        Fixed-point fractional library routines.
40655                                                              (line 1527)
40656 * __fractunshqqi:                        Fixed-point fractional library routines.
40657                                                              (line 1526)
40658 * __fractunshqsi:                        Fixed-point fractional library routines.
40659                                                              (line 1528)
40660 * __fractunshqti:                        Fixed-point fractional library routines.
40661                                                              (line 1530)
40662 * __fractunsqida:                        Fixed-point fractional library routines.
40663                                                              (line 1641)
40664 * __fractunsqidq:                        Fixed-point fractional library routines.
40665                                                              (line 1638)
40666 * __fractunsqiha:                        Fixed-point fractional library routines.
40667                                                              (line 1639)
40668 * __fractunsqihq:                        Fixed-point fractional library routines.
40669                                                              (line 1636)
40670 * __fractunsqiqq:                        Fixed-point fractional library routines.
40671                                                              (line 1635)
40672 * __fractunsqisa:                        Fixed-point fractional library routines.
40673                                                              (line 1640)
40674 * __fractunsqisq:                        Fixed-point fractional library routines.
40675                                                              (line 1637)
40676 * __fractunsqita:                        Fixed-point fractional library routines.
40677                                                              (line 1642)
40678 * __fractunsqiuda:                       Fixed-point fractional library routines.
40679                                                              (line 1654)
40680 * __fractunsqiudq:                       Fixed-point fractional library routines.
40681                                                              (line 1649)
40682 * __fractunsqiuha:                       Fixed-point fractional library routines.
40683                                                              (line 1651)
40684 * __fractunsqiuhq:                       Fixed-point fractional library routines.
40685                                                              (line 1645)
40686 * __fractunsqiuqq:                       Fixed-point fractional library routines.
40687                                                              (line 1644)
40688 * __fractunsqiusa:                       Fixed-point fractional library routines.
40689                                                              (line 1652)
40690 * __fractunsqiusq:                       Fixed-point fractional library routines.
40691                                                              (line 1647)
40692 * __fractunsqiuta:                       Fixed-point fractional library routines.
40693                                                              (line 1656)
40694 * __fractunsqqdi:                        Fixed-point fractional library routines.
40695                                                              (line 1524)
40696 * __fractunsqqhi:                        Fixed-point fractional library routines.
40697                                                              (line 1522)
40698 * __fractunsqqqi:                        Fixed-point fractional library routines.
40699                                                              (line 1521)
40700 * __fractunsqqsi:                        Fixed-point fractional library routines.
40701                                                              (line 1523)
40702 * __fractunsqqti:                        Fixed-point fractional library routines.
40703                                                              (line 1525)
40704 * __fractunssadi:                        Fixed-point fractional library routines.
40705                                                              (line 1550)
40706 * __fractunssahi:                        Fixed-point fractional library routines.
40707                                                              (line 1548)
40708 * __fractunssaqi:                        Fixed-point fractional library routines.
40709                                                              (line 1547)
40710 * __fractunssasi:                        Fixed-point fractional library routines.
40711                                                              (line 1549)
40712 * __fractunssati:                        Fixed-point fractional library routines.
40713                                                              (line 1551)
40714 * __fractunssida:                        Fixed-point fractional library routines.
40715                                                              (line 1685)
40716 * __fractunssidq:                        Fixed-point fractional library routines.
40717                                                              (line 1682)
40718 * __fractunssiha:                        Fixed-point fractional library routines.
40719                                                              (line 1683)
40720 * __fractunssihq:                        Fixed-point fractional library routines.
40721                                                              (line 1680)
40722 * __fractunssiqq:                        Fixed-point fractional library routines.
40723                                                              (line 1679)
40724 * __fractunssisa:                        Fixed-point fractional library routines.
40725                                                              (line 1684)
40726 * __fractunssisq:                        Fixed-point fractional library routines.
40727                                                              (line 1681)
40728 * __fractunssita:                        Fixed-point fractional library routines.
40729                                                              (line 1686)
40730 * __fractunssiuda:                       Fixed-point fractional library routines.
40731                                                              (line 1698)
40732 * __fractunssiudq:                       Fixed-point fractional library routines.
40733                                                              (line 1693)
40734 * __fractunssiuha:                       Fixed-point fractional library routines.
40735                                                              (line 1695)
40736 * __fractunssiuhq:                       Fixed-point fractional library routines.
40737                                                              (line 1689)
40738 * __fractunssiuqq:                       Fixed-point fractional library routines.
40739                                                              (line 1688)
40740 * __fractunssiusa:                       Fixed-point fractional library routines.
40741                                                              (line 1696)
40742 * __fractunssiusq:                       Fixed-point fractional library routines.
40743                                                              (line 1691)
40744 * __fractunssiuta:                       Fixed-point fractional library routines.
40745                                                              (line 1700)
40746 * __fractunssqdi:                        Fixed-point fractional library routines.
40747                                                              (line 1534)
40748 * __fractunssqhi:                        Fixed-point fractional library routines.
40749                                                              (line 1532)
40750 * __fractunssqqi:                        Fixed-point fractional library routines.
40751                                                              (line 1531)
40752 * __fractunssqsi:                        Fixed-point fractional library routines.
40753                                                              (line 1533)
40754 * __fractunssqti:                        Fixed-point fractional library routines.
40755                                                              (line 1535)
40756 * __fractunstadi:                        Fixed-point fractional library routines.
40757                                                              (line 1560)
40758 * __fractunstahi:                        Fixed-point fractional library routines.
40759                                                              (line 1558)
40760 * __fractunstaqi:                        Fixed-point fractional library routines.
40761                                                              (line 1557)
40762 * __fractunstasi:                        Fixed-point fractional library routines.
40763                                                              (line 1559)
40764 * __fractunstati:                        Fixed-point fractional library routines.
40765                                                              (line 1562)
40766 * __fractunstida:                        Fixed-point fractional library routines.
40767                                                              (line 1730)
40768 * __fractunstidq:                        Fixed-point fractional library routines.
40769                                                              (line 1727)
40770 * __fractunstiha:                        Fixed-point fractional library routines.
40771                                                              (line 1728)
40772 * __fractunstihq:                        Fixed-point fractional library routines.
40773                                                              (line 1724)
40774 * __fractunstiqq:                        Fixed-point fractional library routines.
40775                                                              (line 1723)
40776 * __fractunstisa:                        Fixed-point fractional library routines.
40777                                                              (line 1729)
40778 * __fractunstisq:                        Fixed-point fractional library routines.
40779                                                              (line 1725)
40780 * __fractunstita:                        Fixed-point fractional library routines.
40781                                                              (line 1732)
40782 * __fractunstiuda:                       Fixed-point fractional library routines.
40783                                                              (line 1746)
40784 * __fractunstiudq:                       Fixed-point fractional library routines.
40785                                                              (line 1740)
40786 * __fractunstiuha:                       Fixed-point fractional library routines.
40787                                                              (line 1742)
40788 * __fractunstiuhq:                       Fixed-point fractional library routines.
40789                                                              (line 1736)
40790 * __fractunstiuqq:                       Fixed-point fractional library routines.
40791                                                              (line 1734)
40792 * __fractunstiusa:                       Fixed-point fractional library routines.
40793                                                              (line 1744)
40794 * __fractunstiusq:                       Fixed-point fractional library routines.
40795                                                              (line 1738)
40796 * __fractunstiuta:                       Fixed-point fractional library routines.
40797                                                              (line 1748)
40798 * __fractunsudadi:                       Fixed-point fractional library routines.
40799                                                              (line 1622)
40800 * __fractunsudahi:                       Fixed-point fractional library routines.
40801                                                              (line 1618)
40802 * __fractunsudaqi:                       Fixed-point fractional library routines.
40803                                                              (line 1616)
40804 * __fractunsudasi:                       Fixed-point fractional library routines.
40805                                                              (line 1620)
40806 * __fractunsudati:                       Fixed-point fractional library routines.
40807                                                              (line 1624)
40808 * __fractunsudqdi:                       Fixed-point fractional library routines.
40809                                                              (line 1596)
40810 * __fractunsudqhi:                       Fixed-point fractional library routines.
40811                                                              (line 1592)
40812 * __fractunsudqqi:                       Fixed-point fractional library routines.
40813                                                              (line 1590)
40814 * __fractunsudqsi:                       Fixed-point fractional library routines.
40815                                                              (line 1594)
40816 * __fractunsudqti:                       Fixed-point fractional library routines.
40817                                                              (line 1598)
40818 * __fractunsuhadi:                       Fixed-point fractional library routines.
40819                                                              (line 1606)
40820 * __fractunsuhahi:                       Fixed-point fractional library routines.
40821                                                              (line 1602)
40822 * __fractunsuhaqi:                       Fixed-point fractional library routines.
40823                                                              (line 1600)
40824 * __fractunsuhasi:                       Fixed-point fractional library routines.
40825                                                              (line 1604)
40826 * __fractunsuhati:                       Fixed-point fractional library routines.
40827                                                              (line 1608)
40828 * __fractunsuhqdi:                       Fixed-point fractional library routines.
40829                                                              (line 1576)
40830 * __fractunsuhqhi:                       Fixed-point fractional library routines.
40831                                                              (line 1574)
40832 * __fractunsuhqqi:                       Fixed-point fractional library routines.
40833                                                              (line 1573)
40834 * __fractunsuhqsi:                       Fixed-point fractional library routines.
40835                                                              (line 1575)
40836 * __fractunsuhqti:                       Fixed-point fractional library routines.
40837                                                              (line 1578)
40838 * __fractunsuqqdi:                       Fixed-point fractional library routines.
40839                                                              (line 1570)
40840 * __fractunsuqqhi:                       Fixed-point fractional library routines.
40841                                                              (line 1566)
40842 * __fractunsuqqqi:                       Fixed-point fractional library routines.
40843                                                              (line 1564)
40844 * __fractunsuqqsi:                       Fixed-point fractional library routines.
40845                                                              (line 1568)
40846 * __fractunsuqqti:                       Fixed-point fractional library routines.
40847                                                              (line 1572)
40848 * __fractunsusadi:                       Fixed-point fractional library routines.
40849                                                              (line 1612)
40850 * __fractunsusahi:                       Fixed-point fractional library routines.
40851                                                              (line 1610)
40852 * __fractunsusaqi:                       Fixed-point fractional library routines.
40853                                                              (line 1609)
40854 * __fractunsusasi:                       Fixed-point fractional library routines.
40855                                                              (line 1611)
40856 * __fractunsusati:                       Fixed-point fractional library routines.
40857                                                              (line 1614)
40858 * __fractunsusqdi:                       Fixed-point fractional library routines.
40859                                                              (line 1586)
40860 * __fractunsusqhi:                       Fixed-point fractional library routines.
40861                                                              (line 1582)
40862 * __fractunsusqqi:                       Fixed-point fractional library routines.
40863                                                              (line 1580)
40864 * __fractunsusqsi:                       Fixed-point fractional library routines.
40865                                                              (line 1584)
40866 * __fractunsusqti:                       Fixed-point fractional library routines.
40867                                                              (line 1588)
40868 * __fractunsutadi:                       Fixed-point fractional library routines.
40869                                                              (line 1632)
40870 * __fractunsutahi:                       Fixed-point fractional library routines.
40871                                                              (line 1628)
40872 * __fractunsutaqi:                       Fixed-point fractional library routines.
40873                                                              (line 1626)
40874 * __fractunsutasi:                       Fixed-point fractional library routines.
40875                                                              (line 1630)
40876 * __fractunsutati:                       Fixed-point fractional library routines.
40877                                                              (line 1634)
40878 * __fractuqqda:                          Fixed-point fractional library routines.
40879                                                              (line  672)
40880 * __fractuqqdf:                          Fixed-point fractional library routines.
40881                                                              (line  695)
40882 * __fractuqqdi:                          Fixed-point fractional library routines.
40883                                                              (line  692)
40884 * __fractuqqdq:                          Fixed-point fractional library routines.
40885                                                              (line  669)
40886 * __fractuqqha:                          Fixed-point fractional library routines.
40887                                                              (line  670)
40888 * __fractuqqhi:                          Fixed-point fractional library routines.
40889                                                              (line  690)
40890 * __fractuqqhq:                          Fixed-point fractional library routines.
40891                                                              (line  666)
40892 * __fractuqqqi:                          Fixed-point fractional library routines.
40893                                                              (line  689)
40894 * __fractuqqqq:                          Fixed-point fractional library routines.
40895                                                              (line  665)
40896 * __fractuqqsa:                          Fixed-point fractional library routines.
40897                                                              (line  671)
40898 * __fractuqqsf:                          Fixed-point fractional library routines.
40899                                                              (line  694)
40900 * __fractuqqsi:                          Fixed-point fractional library routines.
40901                                                              (line  691)
40902 * __fractuqqsq:                          Fixed-point fractional library routines.
40903                                                              (line  667)
40904 * __fractuqqta:                          Fixed-point fractional library routines.
40905                                                              (line  674)
40906 * __fractuqqti:                          Fixed-point fractional library routines.
40907                                                              (line  693)
40908 * __fractuqquda:                         Fixed-point fractional library routines.
40909                                                              (line  686)
40910 * __fractuqqudq2:                        Fixed-point fractional library routines.
40911                                                              (line  680)
40912 * __fractuqquha:                         Fixed-point fractional library routines.
40913                                                              (line  682)
40914 * __fractuqquhq2:                        Fixed-point fractional library routines.
40915                                                              (line  676)
40916 * __fractuqqusa:                         Fixed-point fractional library routines.
40917                                                              (line  684)
40918 * __fractuqqusq2:                        Fixed-point fractional library routines.
40919                                                              (line  678)
40920 * __fractuqquta:                         Fixed-point fractional library routines.
40921                                                              (line  688)
40922 * __fractusada:                          Fixed-point fractional library routines.
40923                                                              (line  829)
40924 * __fractusadf:                          Fixed-point fractional library routines.
40925                                                              (line  850)
40926 * __fractusadi:                          Fixed-point fractional library routines.
40927                                                              (line  847)
40928 * __fractusadq:                          Fixed-point fractional library routines.
40929                                                              (line  826)
40930 * __fractusaha:                          Fixed-point fractional library routines.
40931                                                              (line  827)
40932 * __fractusahi:                          Fixed-point fractional library routines.
40933                                                              (line  845)
40934 * __fractusahq:                          Fixed-point fractional library routines.
40935                                                              (line  824)
40936 * __fractusaqi:                          Fixed-point fractional library routines.
40937                                                              (line  844)
40938 * __fractusaqq:                          Fixed-point fractional library routines.
40939                                                              (line  823)
40940 * __fractusasa:                          Fixed-point fractional library routines.
40941                                                              (line  828)
40942 * __fractusasf:                          Fixed-point fractional library routines.
40943                                                              (line  849)
40944 * __fractusasi:                          Fixed-point fractional library routines.
40945                                                              (line  846)
40946 * __fractusasq:                          Fixed-point fractional library routines.
40947                                                              (line  825)
40948 * __fractusata:                          Fixed-point fractional library routines.
40949                                                              (line  830)
40950 * __fractusati:                          Fixed-point fractional library routines.
40951                                                              (line  848)
40952 * __fractusauda2:                        Fixed-point fractional library routines.
40953                                                              (line  841)
40954 * __fractusaudq:                         Fixed-point fractional library routines.
40955                                                              (line  837)
40956 * __fractusauha2:                        Fixed-point fractional library routines.
40957                                                              (line  839)
40958 * __fractusauhq:                         Fixed-point fractional library routines.
40959                                                              (line  833)
40960 * __fractusauqq:                         Fixed-point fractional library routines.
40961                                                              (line  832)
40962 * __fractusausq:                         Fixed-point fractional library routines.
40963                                                              (line  835)
40964 * __fractusauta2:                        Fixed-point fractional library routines.
40965                                                              (line  843)
40966 * __fractusqda:                          Fixed-point fractional library routines.
40967                                                              (line  731)
40968 * __fractusqdf:                          Fixed-point fractional library routines.
40969                                                              (line  754)
40970 * __fractusqdi:                          Fixed-point fractional library routines.
40971                                                              (line  751)
40972 * __fractusqdq:                          Fixed-point fractional library routines.
40973                                                              (line  728)
40974 * __fractusqha:                          Fixed-point fractional library routines.
40975                                                              (line  729)
40976 * __fractusqhi:                          Fixed-point fractional library routines.
40977                                                              (line  749)
40978 * __fractusqhq:                          Fixed-point fractional library routines.
40979                                                              (line  725)
40980 * __fractusqqi:                          Fixed-point fractional library routines.
40981                                                              (line  748)
40982 * __fractusqqq:                          Fixed-point fractional library routines.
40983                                                              (line  724)
40984 * __fractusqsa:                          Fixed-point fractional library routines.
40985                                                              (line  730)
40986 * __fractusqsf:                          Fixed-point fractional library routines.
40987                                                              (line  753)
40988 * __fractusqsi:                          Fixed-point fractional library routines.
40989                                                              (line  750)
40990 * __fractusqsq:                          Fixed-point fractional library routines.
40991                                                              (line  726)
40992 * __fractusqta:                          Fixed-point fractional library routines.
40993                                                              (line  733)
40994 * __fractusqti:                          Fixed-point fractional library routines.
40995                                                              (line  752)
40996 * __fractusquda:                         Fixed-point fractional library routines.
40997                                                              (line  745)
40998 * __fractusqudq2:                        Fixed-point fractional library routines.
40999                                                              (line  739)
41000 * __fractusquha:                         Fixed-point fractional library routines.
41001                                                              (line  741)
41002 * __fractusquhq2:                        Fixed-point fractional library routines.
41003                                                              (line  737)
41004 * __fractusquqq2:                        Fixed-point fractional library routines.
41005                                                              (line  735)
41006 * __fractusqusa:                         Fixed-point fractional library routines.
41007                                                              (line  743)
41008 * __fractusquta:                         Fixed-point fractional library routines.
41009                                                              (line  747)
41010 * __fractutada:                          Fixed-point fractional library routines.
41011                                                              (line  893)
41012 * __fractutadf:                          Fixed-point fractional library routines.
41013                                                              (line  918)
41014 * __fractutadi:                          Fixed-point fractional library routines.
41015                                                              (line  914)
41016 * __fractutadq:                          Fixed-point fractional library routines.
41017                                                              (line  888)
41018 * __fractutaha:                          Fixed-point fractional library routines.
41019                                                              (line  890)
41020 * __fractutahi:                          Fixed-point fractional library routines.
41021                                                              (line  912)
41022 * __fractutahq:                          Fixed-point fractional library routines.
41023                                                              (line  884)
41024 * __fractutaqi:                          Fixed-point fractional library routines.
41025                                                              (line  911)
41026 * __fractutaqq:                          Fixed-point fractional library routines.
41027                                                              (line  883)
41028 * __fractutasa:                          Fixed-point fractional library routines.
41029                                                              (line  891)
41030 * __fractutasf:                          Fixed-point fractional library routines.
41031                                                              (line  917)
41032 * __fractutasi:                          Fixed-point fractional library routines.
41033                                                              (line  913)
41034 * __fractutasq:                          Fixed-point fractional library routines.
41035                                                              (line  886)
41036 * __fractutata:                          Fixed-point fractional library routines.
41037                                                              (line  895)
41038 * __fractutati:                          Fixed-point fractional library routines.
41039                                                              (line  916)
41040 * __fractutauda2:                        Fixed-point fractional library routines.
41041                                                              (line  909)
41042 * __fractutaudq:                         Fixed-point fractional library routines.
41043                                                              (line  903)
41044 * __fractutauha2:                        Fixed-point fractional library routines.
41045                                                              (line  905)
41046 * __fractutauhq:                         Fixed-point fractional library routines.
41047                                                              (line  899)
41048 * __fractutauqq:                         Fixed-point fractional library routines.
41049                                                              (line  897)
41050 * __fractutausa2:                        Fixed-point fractional library routines.
41051                                                              (line  907)
41052 * __fractutausq:                         Fixed-point fractional library routines.
41053                                                              (line  901)
41054 * __gedf2:                               Soft float library routines.
41055                                                              (line  206)
41056 * __gesf2:                               Soft float library routines.
41057                                                              (line  205)
41058 * __getf2:                               Soft float library routines.
41059                                                              (line  207)
41060 * __gtdf2:                               Soft float library routines.
41061                                                              (line  224)
41062 * __gtsf2:                               Soft float library routines.
41063                                                              (line  223)
41064 * __gttf2:                               Soft float library routines.
41065                                                              (line  225)
41066 * __ledf2:                               Soft float library routines.
41067                                                              (line  218)
41068 * __lesf2:                               Soft float library routines.
41069                                                              (line  217)
41070 * __letf2:                               Soft float library routines.
41071                                                              (line  219)
41072 * __lshrdi3:                             Integer library routines.
41073                                                              (line   31)
41074 * __lshrsi3:                             Integer library routines.
41075                                                              (line   30)
41076 * __lshrti3:                             Integer library routines.
41077                                                              (line   32)
41078 * __lshruda3:                            Fixed-point fractional library routines.
41079                                                              (line  390)
41080 * __lshrudq3:                            Fixed-point fractional library routines.
41081                                                              (line  384)
41082 * __lshruha3:                            Fixed-point fractional library routines.
41083                                                              (line  386)
41084 * __lshruhq3:                            Fixed-point fractional library routines.
41085                                                              (line  380)
41086 * __lshruqq3:                            Fixed-point fractional library routines.
41087                                                              (line  378)
41088 * __lshrusa3:                            Fixed-point fractional library routines.
41089                                                              (line  388)
41090 * __lshrusq3:                            Fixed-point fractional library routines.
41091                                                              (line  382)
41092 * __lshruta3:                            Fixed-point fractional library routines.
41093                                                              (line  392)
41094 * __ltdf2:                               Soft float library routines.
41095                                                              (line  212)
41096 * __ltsf2:                               Soft float library routines.
41097                                                              (line  211)
41098 * __lttf2:                               Soft float library routines.
41099                                                              (line  213)
41100 * __main:                                Collect2.           (line   15)
41101 * __moddi3:                              Integer library routines.
41102                                                              (line   37)
41103 * __modsi3:                              Integer library routines.
41104                                                              (line   36)
41105 * __modti3:                              Integer library routines.
41106                                                              (line   38)
41107 * __mulda3:                              Fixed-point fractional library routines.
41108                                                              (line  171)
41109 * __muldc3:                              Soft float library routines.
41110                                                              (line  241)
41111 * __muldf3:                              Soft float library routines.
41112                                                              (line   40)
41113 * __muldi3:                              Integer library routines.
41114                                                              (line   43)
41115 * __muldq3:                              Fixed-point fractional library routines.
41116                                                              (line  159)
41117 * __mulha3:                              Fixed-point fractional library routines.
41118                                                              (line  169)
41119 * __mulhq3:                              Fixed-point fractional library routines.
41120                                                              (line  156)
41121 * __mulqq3:                              Fixed-point fractional library routines.
41122                                                              (line  155)
41123 * __mulsa3:                              Fixed-point fractional library routines.
41124                                                              (line  170)
41125 * __mulsc3:                              Soft float library routines.
41126                                                              (line  239)
41127 * __mulsf3:                              Soft float library routines.
41128                                                              (line   39)
41129 * __mulsi3:                              Integer library routines.
41130                                                              (line   42)
41131 * __mulsq3:                              Fixed-point fractional library routines.
41132                                                              (line  157)
41133 * __multa3:                              Fixed-point fractional library routines.
41134                                                              (line  173)
41135 * __multc3:                              Soft float library routines.
41136                                                              (line  243)
41137 * __multf3:                              Soft float library routines.
41138                                                              (line   42)
41139 * __multi3:                              Integer library routines.
41140                                                              (line   44)
41141 * __muluda3:                             Fixed-point fractional library routines.
41142                                                              (line  179)
41143 * __muludq3:                             Fixed-point fractional library routines.
41144                                                              (line  167)
41145 * __muluha3:                             Fixed-point fractional library routines.
41146                                                              (line  175)
41147 * __muluhq3:                             Fixed-point fractional library routines.
41148                                                              (line  163)
41149 * __muluqq3:                             Fixed-point fractional library routines.
41150                                                              (line  161)
41151 * __mulusa3:                             Fixed-point fractional library routines.
41152                                                              (line  177)
41153 * __mulusq3:                             Fixed-point fractional library routines.
41154                                                              (line  165)
41155 * __muluta3:                             Fixed-point fractional library routines.
41156                                                              (line  181)
41157 * __mulvdi3:                             Integer library routines.
41158                                                              (line  115)
41159 * __mulvsi3:                             Integer library routines.
41160                                                              (line  114)
41161 * __mulxc3:                              Soft float library routines.
41162                                                              (line  245)
41163 * __mulxf3:                              Soft float library routines.
41164                                                              (line   44)
41165 * __nedf2:                               Soft float library routines.
41166                                                              (line  200)
41167 * __negda2:                              Fixed-point fractional library routines.
41168                                                              (line  299)
41169 * __negdf2:                              Soft float library routines.
41170                                                              (line   56)
41171 * __negdi2:                              Integer library routines.
41172                                                              (line   47)
41173 * __negdq2:                              Fixed-point fractional library routines.
41174                                                              (line  289)
41175 * __negha2:                              Fixed-point fractional library routines.
41176                                                              (line  297)
41177 * __neghq2:                              Fixed-point fractional library routines.
41178                                                              (line  287)
41179 * __negqq2:                              Fixed-point fractional library routines.
41180                                                              (line  286)
41181 * __negsa2:                              Fixed-point fractional library routines.
41182                                                              (line  298)
41183 * __negsf2:                              Soft float library routines.
41184                                                              (line   55)
41185 * __negsq2:                              Fixed-point fractional library routines.
41186                                                              (line  288)
41187 * __negta2:                              Fixed-point fractional library routines.
41188                                                              (line  300)
41189 * __negtf2:                              Soft float library routines.
41190                                                              (line   57)
41191 * __negti2:                              Integer library routines.
41192                                                              (line   48)
41193 * __neguda2:                             Fixed-point fractional library routines.
41194                                                              (line  305)
41195 * __negudq2:                             Fixed-point fractional library routines.
41196                                                              (line  296)
41197 * __neguha2:                             Fixed-point fractional library routines.
41198                                                              (line  302)
41199 * __neguhq2:                             Fixed-point fractional library routines.
41200                                                              (line  292)
41201 * __neguqq2:                             Fixed-point fractional library routines.
41202                                                              (line  291)
41203 * __negusa2:                             Fixed-point fractional library routines.
41204                                                              (line  303)
41205 * __negusq2:                             Fixed-point fractional library routines.
41206                                                              (line  294)
41207 * __neguta2:                             Fixed-point fractional library routines.
41208                                                              (line  307)
41209 * __negvdi2:                             Integer library routines.
41210                                                              (line  119)
41211 * __negvsi2:                             Integer library routines.
41212                                                              (line  118)
41213 * __negxf2:                              Soft float library routines.
41214                                                              (line   58)
41215 * __nesf2:                               Soft float library routines.
41216                                                              (line  199)
41217 * __netf2:                               Soft float library routines.
41218                                                              (line  201)
41219 * __paritydi2:                           Integer library routines.
41220                                                              (line  151)
41221 * __paritysi2:                           Integer library routines.
41222                                                              (line  150)
41223 * __parityti2:                           Integer library routines.
41224                                                              (line  152)
41225 * __popcountdi2:                         Integer library routines.
41226                                                              (line  157)
41227 * __popcountsi2:                         Integer library routines.
41228                                                              (line  156)
41229 * __popcountti2:                         Integer library routines.
41230                                                              (line  158)
41231 * __powidf2:                             Soft float library routines.
41232                                                              (line  233)
41233 * __powisf2:                             Soft float library routines.
41234                                                              (line  232)
41235 * __powitf2:                             Soft float library routines.
41236                                                              (line  234)
41237 * __powixf2:                             Soft float library routines.
41238                                                              (line  235)
41239 * __satfractdadq:                        Fixed-point fractional library routines.
41240                                                              (line 1153)
41241 * __satfractdaha2:                       Fixed-point fractional library routines.
41242                                                              (line 1154)
41243 * __satfractdahq:                        Fixed-point fractional library routines.
41244                                                              (line 1151)
41245 * __satfractdaqq:                        Fixed-point fractional library routines.
41246                                                              (line 1150)
41247 * __satfractdasa2:                       Fixed-point fractional library routines.
41248                                                              (line 1155)
41249 * __satfractdasq:                        Fixed-point fractional library routines.
41250                                                              (line 1152)
41251 * __satfractdata2:                       Fixed-point fractional library routines.
41252                                                              (line 1156)
41253 * __satfractdauda:                       Fixed-point fractional library routines.
41254                                                              (line 1166)
41255 * __satfractdaudq:                       Fixed-point fractional library routines.
41256                                                              (line 1162)
41257 * __satfractdauha:                       Fixed-point fractional library routines.
41258                                                              (line 1164)
41259 * __satfractdauhq:                       Fixed-point fractional library routines.
41260                                                              (line 1159)
41261 * __satfractdauqq:                       Fixed-point fractional library routines.
41262                                                              (line 1158)
41263 * __satfractdausa:                       Fixed-point fractional library routines.
41264                                                              (line 1165)
41265 * __satfractdausq:                       Fixed-point fractional library routines.
41266                                                              (line 1160)
41267 * __satfractdauta:                       Fixed-point fractional library routines.
41268                                                              (line 1168)
41269 * __satfractdfda:                        Fixed-point fractional library routines.
41270                                                              (line 1506)
41271 * __satfractdfdq:                        Fixed-point fractional library routines.
41272                                                              (line 1503)
41273 * __satfractdfha:                        Fixed-point fractional library routines.
41274                                                              (line 1504)
41275 * __satfractdfhq:                        Fixed-point fractional library routines.
41276                                                              (line 1501)
41277 * __satfractdfqq:                        Fixed-point fractional library routines.
41278                                                              (line 1500)
41279 * __satfractdfsa:                        Fixed-point fractional library routines.
41280                                                              (line 1505)
41281 * __satfractdfsq:                        Fixed-point fractional library routines.
41282                                                              (line 1502)
41283 * __satfractdfta:                        Fixed-point fractional library routines.
41284                                                              (line 1507)
41285 * __satfractdfuda:                       Fixed-point fractional library routines.
41286                                                              (line 1515)
41287 * __satfractdfudq:                       Fixed-point fractional library routines.
41288                                                              (line 1512)
41289 * __satfractdfuha:                       Fixed-point fractional library routines.
41290                                                              (line 1513)
41291 * __satfractdfuhq:                       Fixed-point fractional library routines.
41292                                                              (line 1509)
41293 * __satfractdfuqq:                       Fixed-point fractional library routines.
41294                                                              (line 1508)
41295 * __satfractdfusa:                       Fixed-point fractional library routines.
41296                                                              (line 1514)
41297 * __satfractdfusq:                       Fixed-point fractional library routines.
41298                                                              (line 1510)
41299 * __satfractdfuta:                       Fixed-point fractional library routines.
41300                                                              (line 1517)
41301 * __satfractdida:                        Fixed-point fractional library routines.
41302                                                              (line 1456)
41303 * __satfractdidq:                        Fixed-point fractional library routines.
41304                                                              (line 1453)
41305 * __satfractdiha:                        Fixed-point fractional library routines.
41306                                                              (line 1454)
41307 * __satfractdihq:                        Fixed-point fractional library routines.
41308                                                              (line 1451)
41309 * __satfractdiqq:                        Fixed-point fractional library routines.
41310                                                              (line 1450)
41311 * __satfractdisa:                        Fixed-point fractional library routines.
41312                                                              (line 1455)
41313 * __satfractdisq:                        Fixed-point fractional library routines.
41314                                                              (line 1452)
41315 * __satfractdita:                        Fixed-point fractional library routines.
41316                                                              (line 1457)
41317 * __satfractdiuda:                       Fixed-point fractional library routines.
41318                                                              (line 1464)
41319 * __satfractdiudq:                       Fixed-point fractional library routines.
41320                                                              (line 1461)
41321 * __satfractdiuha:                       Fixed-point fractional library routines.
41322                                                              (line 1462)
41323 * __satfractdiuhq:                       Fixed-point fractional library routines.
41324                                                              (line 1459)
41325 * __satfractdiuqq:                       Fixed-point fractional library routines.
41326                                                              (line 1458)
41327 * __satfractdiusa:                       Fixed-point fractional library routines.
41328                                                              (line 1463)
41329 * __satfractdiusq:                       Fixed-point fractional library routines.
41330                                                              (line 1460)
41331 * __satfractdiuta:                       Fixed-point fractional library routines.
41332                                                              (line 1465)
41333 * __satfractdqda:                        Fixed-point fractional library routines.
41334                                                              (line 1098)
41335 * __satfractdqha:                        Fixed-point fractional library routines.
41336                                                              (line 1096)
41337 * __satfractdqhq2:                       Fixed-point fractional library routines.
41338                                                              (line 1094)
41339 * __satfractdqqq2:                       Fixed-point fractional library routines.
41340                                                              (line 1093)
41341 * __satfractdqsa:                        Fixed-point fractional library routines.
41342                                                              (line 1097)
41343 * __satfractdqsq2:                       Fixed-point fractional library routines.
41344                                                              (line 1095)
41345 * __satfractdqta:                        Fixed-point fractional library routines.
41346                                                              (line 1099)
41347 * __satfractdquda:                       Fixed-point fractional library routines.
41348                                                              (line 1111)
41349 * __satfractdqudq:                       Fixed-point fractional library routines.
41350                                                              (line 1106)
41351 * __satfractdquha:                       Fixed-point fractional library routines.
41352                                                              (line 1108)
41353 * __satfractdquhq:                       Fixed-point fractional library routines.
41354                                                              (line 1102)
41355 * __satfractdquqq:                       Fixed-point fractional library routines.
41356                                                              (line 1101)
41357 * __satfractdqusa:                       Fixed-point fractional library routines.
41358                                                              (line 1109)
41359 * __satfractdqusq:                       Fixed-point fractional library routines.
41360                                                              (line 1104)
41361 * __satfractdquta:                       Fixed-point fractional library routines.
41362                                                              (line 1113)
41363 * __satfracthada2:                       Fixed-point fractional library routines.
41364                                                              (line 1119)
41365 * __satfracthadq:                        Fixed-point fractional library routines.
41366                                                              (line 1117)
41367 * __satfracthahq:                        Fixed-point fractional library routines.
41368                                                              (line 1115)
41369 * __satfracthaqq:                        Fixed-point fractional library routines.
41370                                                              (line 1114)
41371 * __satfracthasa2:                       Fixed-point fractional library routines.
41372                                                              (line 1118)
41373 * __satfracthasq:                        Fixed-point fractional library routines.
41374                                                              (line 1116)
41375 * __satfracthata2:                       Fixed-point fractional library routines.
41376                                                              (line 1120)
41377 * __satfracthauda:                       Fixed-point fractional library routines.
41378                                                              (line 1132)
41379 * __satfracthaudq:                       Fixed-point fractional library routines.
41380                                                              (line 1127)
41381 * __satfracthauha:                       Fixed-point fractional library routines.
41382                                                              (line 1129)
41383 * __satfracthauhq:                       Fixed-point fractional library routines.
41384                                                              (line 1123)
41385 * __satfracthauqq:                       Fixed-point fractional library routines.
41386                                                              (line 1122)
41387 * __satfracthausa:                       Fixed-point fractional library routines.
41388                                                              (line 1130)
41389 * __satfracthausq:                       Fixed-point fractional library routines.
41390                                                              (line 1125)
41391 * __satfracthauta:                       Fixed-point fractional library routines.
41392                                                              (line 1134)
41393 * __satfracthida:                        Fixed-point fractional library routines.
41394                                                              (line 1424)
41395 * __satfracthidq:                        Fixed-point fractional library routines.
41396                                                              (line 1421)
41397 * __satfracthiha:                        Fixed-point fractional library routines.
41398                                                              (line 1422)
41399 * __satfracthihq:                        Fixed-point fractional library routines.
41400                                                              (line 1419)
41401 * __satfracthiqq:                        Fixed-point fractional library routines.
41402                                                              (line 1418)
41403 * __satfracthisa:                        Fixed-point fractional library routines.
41404                                                              (line 1423)
41405 * __satfracthisq:                        Fixed-point fractional library routines.
41406                                                              (line 1420)
41407 * __satfracthita:                        Fixed-point fractional library routines.
41408                                                              (line 1425)
41409 * __satfracthiuda:                       Fixed-point fractional library routines.
41410                                                              (line 1432)
41411 * __satfracthiudq:                       Fixed-point fractional library routines.
41412                                                              (line 1429)
41413 * __satfracthiuha:                       Fixed-point fractional library routines.
41414                                                              (line 1430)
41415 * __satfracthiuhq:                       Fixed-point fractional library routines.
41416                                                              (line 1427)
41417 * __satfracthiuqq:                       Fixed-point fractional library routines.
41418                                                              (line 1426)
41419 * __satfracthiusa:                       Fixed-point fractional library routines.
41420                                                              (line 1431)
41421 * __satfracthiusq:                       Fixed-point fractional library routines.
41422                                                              (line 1428)
41423 * __satfracthiuta:                       Fixed-point fractional library routines.
41424                                                              (line 1433)
41425 * __satfracthqda:                        Fixed-point fractional library routines.
41426                                                              (line 1064)
41427 * __satfracthqdq2:                       Fixed-point fractional library routines.
41428                                                              (line 1061)
41429 * __satfracthqha:                        Fixed-point fractional library routines.
41430                                                              (line 1062)
41431 * __satfracthqqq2:                       Fixed-point fractional library routines.
41432                                                              (line 1059)
41433 * __satfracthqsa:                        Fixed-point fractional library routines.
41434                                                              (line 1063)
41435 * __satfracthqsq2:                       Fixed-point fractional library routines.
41436                                                              (line 1060)
41437 * __satfracthqta:                        Fixed-point fractional library routines.
41438                                                              (line 1065)
41439 * __satfracthquda:                       Fixed-point fractional library routines.
41440                                                              (line 1072)
41441 * __satfracthqudq:                       Fixed-point fractional library routines.
41442                                                              (line 1069)
41443 * __satfracthquha:                       Fixed-point fractional library routines.
41444                                                              (line 1070)
41445 * __satfracthquhq:                       Fixed-point fractional library routines.
41446                                                              (line 1067)
41447 * __satfracthquqq:                       Fixed-point fractional library routines.
41448                                                              (line 1066)
41449 * __satfracthqusa:                       Fixed-point fractional library routines.
41450                                                              (line 1071)
41451 * __satfracthqusq:                       Fixed-point fractional library routines.
41452                                                              (line 1068)
41453 * __satfracthquta:                       Fixed-point fractional library routines.
41454                                                              (line 1073)
41455 * __satfractqida:                        Fixed-point fractional library routines.
41456                                                              (line 1402)
41457 * __satfractqidq:                        Fixed-point fractional library routines.
41458                                                              (line 1399)
41459 * __satfractqiha:                        Fixed-point fractional library routines.
41460                                                              (line 1400)
41461 * __satfractqihq:                        Fixed-point fractional library routines.
41462                                                              (line 1397)
41463 * __satfractqiqq:                        Fixed-point fractional library routines.
41464                                                              (line 1396)
41465 * __satfractqisa:                        Fixed-point fractional library routines.
41466                                                              (line 1401)
41467 * __satfractqisq:                        Fixed-point fractional library routines.
41468                                                              (line 1398)
41469 * __satfractqita:                        Fixed-point fractional library routines.
41470                                                              (line 1403)
41471 * __satfractqiuda:                       Fixed-point fractional library routines.
41472                                                              (line 1415)
41473 * __satfractqiudq:                       Fixed-point fractional library routines.
41474                                                              (line 1410)
41475 * __satfractqiuha:                       Fixed-point fractional library routines.
41476                                                              (line 1412)
41477 * __satfractqiuhq:                       Fixed-point fractional library routines.
41478                                                              (line 1406)
41479 * __satfractqiuqq:                       Fixed-point fractional library routines.
41480                                                              (line 1405)
41481 * __satfractqiusa:                       Fixed-point fractional library routines.
41482                                                              (line 1413)
41483 * __satfractqiusq:                       Fixed-point fractional library routines.
41484                                                              (line 1408)
41485 * __satfractqiuta:                       Fixed-point fractional library routines.
41486                                                              (line 1417)
41487 * __satfractqqda:                        Fixed-point fractional library routines.
41488                                                              (line 1043)
41489 * __satfractqqdq2:                       Fixed-point fractional library routines.
41490                                                              (line 1040)
41491 * __satfractqqha:                        Fixed-point fractional library routines.
41492                                                              (line 1041)
41493 * __satfractqqhq2:                       Fixed-point fractional library routines.
41494                                                              (line 1038)
41495 * __satfractqqsa:                        Fixed-point fractional library routines.
41496                                                              (line 1042)
41497 * __satfractqqsq2:                       Fixed-point fractional library routines.
41498                                                              (line 1039)
41499 * __satfractqqta:                        Fixed-point fractional library routines.
41500                                                              (line 1044)
41501 * __satfractqquda:                       Fixed-point fractional library routines.
41502                                                              (line 1056)
41503 * __satfractqqudq:                       Fixed-point fractional library routines.
41504                                                              (line 1051)
41505 * __satfractqquha:                       Fixed-point fractional library routines.
41506                                                              (line 1053)
41507 * __satfractqquhq:                       Fixed-point fractional library routines.
41508                                                              (line 1047)
41509 * __satfractqquqq:                       Fixed-point fractional library routines.
41510                                                              (line 1046)
41511 * __satfractqqusa:                       Fixed-point fractional library routines.
41512                                                              (line 1054)
41513 * __satfractqqusq:                       Fixed-point fractional library routines.
41514                                                              (line 1049)
41515 * __satfractqquta:                       Fixed-point fractional library routines.
41516                                                              (line 1058)
41517 * __satfractsada2:                       Fixed-point fractional library routines.
41518                                                              (line 1140)
41519 * __satfractsadq:                        Fixed-point fractional library routines.
41520                                                              (line 1138)
41521 * __satfractsaha2:                       Fixed-point fractional library routines.
41522                                                              (line 1139)
41523 * __satfractsahq:                        Fixed-point fractional library routines.
41524                                                              (line 1136)
41525 * __satfractsaqq:                        Fixed-point fractional library routines.
41526                                                              (line 1135)
41527 * __satfractsasq:                        Fixed-point fractional library routines.
41528                                                              (line 1137)
41529 * __satfractsata2:                       Fixed-point fractional library routines.
41530                                                              (line 1141)
41531 * __satfractsauda:                       Fixed-point fractional library routines.
41532                                                              (line 1148)
41533 * __satfractsaudq:                       Fixed-point fractional library routines.
41534                                                              (line 1145)
41535 * __satfractsauha:                       Fixed-point fractional library routines.
41536                                                              (line 1146)
41537 * __satfractsauhq:                       Fixed-point fractional library routines.
41538                                                              (line 1143)
41539 * __satfractsauqq:                       Fixed-point fractional library routines.
41540                                                              (line 1142)
41541 * __satfractsausa:                       Fixed-point fractional library routines.
41542                                                              (line 1147)
41543 * __satfractsausq:                       Fixed-point fractional library routines.
41544                                                              (line 1144)
41545 * __satfractsauta:                       Fixed-point fractional library routines.
41546                                                              (line 1149)
41547 * __satfractsfda:                        Fixed-point fractional library routines.
41548                                                              (line 1490)
41549 * __satfractsfdq:                        Fixed-point fractional library routines.
41550                                                              (line 1487)
41551 * __satfractsfha:                        Fixed-point fractional library routines.
41552                                                              (line 1488)
41553 * __satfractsfhq:                        Fixed-point fractional library routines.
41554                                                              (line 1485)
41555 * __satfractsfqq:                        Fixed-point fractional library routines.
41556                                                              (line 1484)
41557 * __satfractsfsa:                        Fixed-point fractional library routines.
41558                                                              (line 1489)
41559 * __satfractsfsq:                        Fixed-point fractional library routines.
41560                                                              (line 1486)
41561 * __satfractsfta:                        Fixed-point fractional library routines.
41562                                                              (line 1491)
41563 * __satfractsfuda:                       Fixed-point fractional library routines.
41564                                                              (line 1498)
41565 * __satfractsfudq:                       Fixed-point fractional library routines.
41566                                                              (line 1495)
41567 * __satfractsfuha:                       Fixed-point fractional library routines.
41568                                                              (line 1496)
41569 * __satfractsfuhq:                       Fixed-point fractional library routines.
41570                                                              (line 1493)
41571 * __satfractsfuqq:                       Fixed-point fractional library routines.
41572                                                              (line 1492)
41573 * __satfractsfusa:                       Fixed-point fractional library routines.
41574                                                              (line 1497)
41575 * __satfractsfusq:                       Fixed-point fractional library routines.
41576                                                              (line 1494)
41577 * __satfractsfuta:                       Fixed-point fractional library routines.
41578                                                              (line 1499)
41579 * __satfractsida:                        Fixed-point fractional library routines.
41580                                                              (line 1440)
41581 * __satfractsidq:                        Fixed-point fractional library routines.
41582                                                              (line 1437)
41583 * __satfractsiha:                        Fixed-point fractional library routines.
41584                                                              (line 1438)
41585 * __satfractsihq:                        Fixed-point fractional library routines.
41586                                                              (line 1435)
41587 * __satfractsiqq:                        Fixed-point fractional library routines.
41588                                                              (line 1434)
41589 * __satfractsisa:                        Fixed-point fractional library routines.
41590                                                              (line 1439)
41591 * __satfractsisq:                        Fixed-point fractional library routines.
41592                                                              (line 1436)
41593 * __satfractsita:                        Fixed-point fractional library routines.
41594                                                              (line 1441)
41595 * __satfractsiuda:                       Fixed-point fractional library routines.
41596                                                              (line 1448)
41597 * __satfractsiudq:                       Fixed-point fractional library routines.
41598                                                              (line 1445)
41599 * __satfractsiuha:                       Fixed-point fractional library routines.
41600                                                              (line 1446)
41601 * __satfractsiuhq:                       Fixed-point fractional library routines.
41602                                                              (line 1443)
41603 * __satfractsiuqq:                       Fixed-point fractional library routines.
41604                                                              (line 1442)
41605 * __satfractsiusa:                       Fixed-point fractional library routines.
41606                                                              (line 1447)
41607 * __satfractsiusq:                       Fixed-point fractional library routines.
41608                                                              (line 1444)
41609 * __satfractsiuta:                       Fixed-point fractional library routines.
41610                                                              (line 1449)
41611 * __satfractsqda:                        Fixed-point fractional library routines.
41612                                                              (line 1079)
41613 * __satfractsqdq2:                       Fixed-point fractional library routines.
41614                                                              (line 1076)
41615 * __satfractsqha:                        Fixed-point fractional library routines.
41616                                                              (line 1077)
41617 * __satfractsqhq2:                       Fixed-point fractional library routines.
41618                                                              (line 1075)
41619 * __satfractsqqq2:                       Fixed-point fractional library routines.
41620                                                              (line 1074)
41621 * __satfractsqsa:                        Fixed-point fractional library routines.
41622                                                              (line 1078)
41623 * __satfractsqta:                        Fixed-point fractional library routines.
41624                                                              (line 1080)
41625 * __satfractsquda:                       Fixed-point fractional library routines.
41626                                                              (line 1090)
41627 * __satfractsqudq:                       Fixed-point fractional library routines.
41628                                                              (line 1086)
41629 * __satfractsquha:                       Fixed-point fractional library routines.
41630                                                              (line 1088)
41631 * __satfractsquhq:                       Fixed-point fractional library routines.
41632                                                              (line 1083)
41633 * __satfractsquqq:                       Fixed-point fractional library routines.
41634                                                              (line 1082)
41635 * __satfractsqusa:                       Fixed-point fractional library routines.
41636                                                              (line 1089)
41637 * __satfractsqusq:                       Fixed-point fractional library routines.
41638                                                              (line 1084)
41639 * __satfractsquta:                       Fixed-point fractional library routines.
41640                                                              (line 1092)
41641 * __satfracttada2:                       Fixed-point fractional library routines.
41642                                                              (line 1175)
41643 * __satfracttadq:                        Fixed-point fractional library routines.
41644                                                              (line 1172)
41645 * __satfracttaha2:                       Fixed-point fractional library routines.
41646                                                              (line 1173)
41647 * __satfracttahq:                        Fixed-point fractional library routines.
41648                                                              (line 1170)
41649 * __satfracttaqq:                        Fixed-point fractional library routines.
41650                                                              (line 1169)
41651 * __satfracttasa2:                       Fixed-point fractional library routines.
41652                                                              (line 1174)
41653 * __satfracttasq:                        Fixed-point fractional library routines.
41654                                                              (line 1171)
41655 * __satfracttauda:                       Fixed-point fractional library routines.
41656                                                              (line 1187)
41657 * __satfracttaudq:                       Fixed-point fractional library routines.
41658                                                              (line 1182)
41659 * __satfracttauha:                       Fixed-point fractional library routines.
41660                                                              (line 1184)
41661 * __satfracttauhq:                       Fixed-point fractional library routines.
41662                                                              (line 1178)
41663 * __satfracttauqq:                       Fixed-point fractional library routines.
41664                                                              (line 1177)
41665 * __satfracttausa:                       Fixed-point fractional library routines.
41666                                                              (line 1185)
41667 * __satfracttausq:                       Fixed-point fractional library routines.
41668                                                              (line 1180)
41669 * __satfracttauta:                       Fixed-point fractional library routines.
41670                                                              (line 1189)
41671 * __satfracttida:                        Fixed-point fractional library routines.
41672                                                              (line 1472)
41673 * __satfracttidq:                        Fixed-point fractional library routines.
41674                                                              (line 1469)
41675 * __satfracttiha:                        Fixed-point fractional library routines.
41676                                                              (line 1470)
41677 * __satfracttihq:                        Fixed-point fractional library routines.
41678                                                              (line 1467)
41679 * __satfracttiqq:                        Fixed-point fractional library routines.
41680                                                              (line 1466)
41681 * __satfracttisa:                        Fixed-point fractional library routines.
41682                                                              (line 1471)
41683 * __satfracttisq:                        Fixed-point fractional library routines.
41684                                                              (line 1468)
41685 * __satfracttita:                        Fixed-point fractional library routines.
41686                                                              (line 1473)
41687 * __satfracttiuda:                       Fixed-point fractional library routines.
41688                                                              (line 1481)
41689 * __satfracttiudq:                       Fixed-point fractional library routines.
41690                                                              (line 1478)
41691 * __satfracttiuha:                       Fixed-point fractional library routines.
41692                                                              (line 1479)
41693 * __satfracttiuhq:                       Fixed-point fractional library routines.
41694                                                              (line 1475)
41695 * __satfracttiuqq:                       Fixed-point fractional library routines.
41696                                                              (line 1474)
41697 * __satfracttiusa:                       Fixed-point fractional library routines.
41698                                                              (line 1480)
41699 * __satfracttiusq:                       Fixed-point fractional library routines.
41700                                                              (line 1476)
41701 * __satfracttiuta:                       Fixed-point fractional library routines.
41702                                                              (line 1483)
41703 * __satfractudada:                       Fixed-point fractional library routines.
41704                                                              (line 1351)
41705 * __satfractudadq:                       Fixed-point fractional library routines.
41706                                                              (line 1347)
41707 * __satfractudaha:                       Fixed-point fractional library routines.
41708                                                              (line 1349)
41709 * __satfractudahq:                       Fixed-point fractional library routines.
41710                                                              (line 1344)
41711 * __satfractudaqq:                       Fixed-point fractional library routines.
41712                                                              (line 1343)
41713 * __satfractudasa:                       Fixed-point fractional library routines.
41714                                                              (line 1350)
41715 * __satfractudasq:                       Fixed-point fractional library routines.
41716                                                              (line 1345)
41717 * __satfractudata:                       Fixed-point fractional library routines.
41718                                                              (line 1353)
41719 * __satfractudaudq:                      Fixed-point fractional library routines.
41720                                                              (line 1361)
41721 * __satfractudauha2:                     Fixed-point fractional library routines.
41722                                                              (line 1363)
41723 * __satfractudauhq:                      Fixed-point fractional library routines.
41724                                                              (line 1357)
41725 * __satfractudauqq:                      Fixed-point fractional library routines.
41726                                                              (line 1355)
41727 * __satfractudausa2:                     Fixed-point fractional library routines.
41728                                                              (line 1365)
41729 * __satfractudausq:                      Fixed-point fractional library routines.
41730                                                              (line 1359)
41731 * __satfractudauta2:                     Fixed-point fractional library routines.
41732                                                              (line 1367)
41733 * __satfractudqda:                       Fixed-point fractional library routines.
41734                                                              (line 1276)
41735 * __satfractudqdq:                       Fixed-point fractional library routines.
41736                                                              (line 1271)
41737 * __satfractudqha:                       Fixed-point fractional library routines.
41738                                                              (line 1273)
41739 * __satfractudqhq:                       Fixed-point fractional library routines.
41740                                                              (line 1267)
41741 * __satfractudqqq:                       Fixed-point fractional library routines.
41742                                                              (line 1266)
41743 * __satfractudqsa:                       Fixed-point fractional library routines.
41744                                                              (line 1274)
41745 * __satfractudqsq:                       Fixed-point fractional library routines.
41746                                                              (line 1269)
41747 * __satfractudqta:                       Fixed-point fractional library routines.
41748                                                              (line 1278)
41749 * __satfractudquda:                      Fixed-point fractional library routines.
41750                                                              (line 1290)
41751 * __satfractudquha:                      Fixed-point fractional library routines.
41752                                                              (line 1286)
41753 * __satfractudquhq2:                     Fixed-point fractional library routines.
41754                                                              (line 1282)
41755 * __satfractudquqq2:                     Fixed-point fractional library routines.
41756                                                              (line 1280)
41757 * __satfractudqusa:                      Fixed-point fractional library routines.
41758                                                              (line 1288)
41759 * __satfractudqusq2:                     Fixed-point fractional library routines.
41760                                                              (line 1284)
41761 * __satfractudquta:                      Fixed-point fractional library routines.
41762                                                              (line 1292)
41763 * __satfractuhada:                       Fixed-point fractional library routines.
41764                                                              (line 1304)
41765 * __satfractuhadq:                       Fixed-point fractional library routines.
41766                                                              (line 1299)
41767 * __satfractuhaha:                       Fixed-point fractional library routines.
41768                                                              (line 1301)
41769 * __satfractuhahq:                       Fixed-point fractional library routines.
41770                                                              (line 1295)
41771 * __satfractuhaqq:                       Fixed-point fractional library routines.
41772                                                              (line 1294)
41773 * __satfractuhasa:                       Fixed-point fractional library routines.
41774                                                              (line 1302)
41775 * __satfractuhasq:                       Fixed-point fractional library routines.
41776                                                              (line 1297)
41777 * __satfractuhata:                       Fixed-point fractional library routines.
41778                                                              (line 1306)
41779 * __satfractuhauda2:                     Fixed-point fractional library routines.
41780                                                              (line 1318)
41781 * __satfractuhaudq:                      Fixed-point fractional library routines.
41782                                                              (line 1314)
41783 * __satfractuhauhq:                      Fixed-point fractional library routines.
41784                                                              (line 1310)
41785 * __satfractuhauqq:                      Fixed-point fractional library routines.
41786                                                              (line 1308)
41787 * __satfractuhausa2:                     Fixed-point fractional library routines.
41788                                                              (line 1316)
41789 * __satfractuhausq:                      Fixed-point fractional library routines.
41790                                                              (line 1312)
41791 * __satfractuhauta2:                     Fixed-point fractional library routines.
41792                                                              (line 1320)
41793 * __satfractuhqda:                       Fixed-point fractional library routines.
41794                                                              (line 1224)
41795 * __satfractuhqdq:                       Fixed-point fractional library routines.
41796                                                              (line 1221)
41797 * __satfractuhqha:                       Fixed-point fractional library routines.
41798                                                              (line 1222)
41799 * __satfractuhqhq:                       Fixed-point fractional library routines.
41800                                                              (line 1219)
41801 * __satfractuhqqq:                       Fixed-point fractional library routines.
41802                                                              (line 1218)
41803 * __satfractuhqsa:                       Fixed-point fractional library routines.
41804                                                              (line 1223)
41805 * __satfractuhqsq:                       Fixed-point fractional library routines.
41806                                                              (line 1220)
41807 * __satfractuhqta:                       Fixed-point fractional library routines.
41808                                                              (line 1225)
41809 * __satfractuhquda:                      Fixed-point fractional library routines.
41810                                                              (line 1236)
41811 * __satfractuhqudq2:                     Fixed-point fractional library routines.
41812                                                              (line 1231)
41813 * __satfractuhquha:                      Fixed-point fractional library routines.
41814                                                              (line 1233)
41815 * __satfractuhquqq2:                     Fixed-point fractional library routines.
41816                                                              (line 1227)
41817 * __satfractuhqusa:                      Fixed-point fractional library routines.
41818                                                              (line 1234)
41819 * __satfractuhqusq2:                     Fixed-point fractional library routines.
41820                                                              (line 1229)
41821 * __satfractuhquta:                      Fixed-point fractional library routines.
41822                                                              (line 1238)
41823 * __satfractunsdida:                     Fixed-point fractional library routines.
41824                                                              (line 1834)
41825 * __satfractunsdidq:                     Fixed-point fractional library routines.
41826                                                              (line 1831)
41827 * __satfractunsdiha:                     Fixed-point fractional library routines.
41828                                                              (line 1832)
41829 * __satfractunsdihq:                     Fixed-point fractional library routines.
41830                                                              (line 1828)
41831 * __satfractunsdiqq:                     Fixed-point fractional library routines.
41832                                                              (line 1827)
41833 * __satfractunsdisa:                     Fixed-point fractional library routines.
41834                                                              (line 1833)
41835 * __satfractunsdisq:                     Fixed-point fractional library routines.
41836                                                              (line 1829)
41837 * __satfractunsdita:                     Fixed-point fractional library routines.
41838                                                              (line 1836)
41839 * __satfractunsdiuda:                    Fixed-point fractional library routines.
41840                                                              (line 1850)
41841 * __satfractunsdiudq:                    Fixed-point fractional library routines.
41842                                                              (line 1844)
41843 * __satfractunsdiuha:                    Fixed-point fractional library routines.
41844                                                              (line 1846)
41845 * __satfractunsdiuhq:                    Fixed-point fractional library routines.
41846                                                              (line 1840)
41847 * __satfractunsdiuqq:                    Fixed-point fractional library routines.
41848                                                              (line 1838)
41849 * __satfractunsdiusa:                    Fixed-point fractional library routines.
41850                                                              (line 1848)
41851 * __satfractunsdiusq:                    Fixed-point fractional library routines.
41852                                                              (line 1842)
41853 * __satfractunsdiuta:                    Fixed-point fractional library routines.
41854                                                              (line 1852)
41855 * __satfractunshida:                     Fixed-point fractional library routines.
41856                                                              (line 1786)
41857 * __satfractunshidq:                     Fixed-point fractional library routines.
41858                                                              (line 1783)
41859 * __satfractunshiha:                     Fixed-point fractional library routines.
41860                                                              (line 1784)
41861 * __satfractunshihq:                     Fixed-point fractional library routines.
41862                                                              (line 1780)
41863 * __satfractunshiqq:                     Fixed-point fractional library routines.
41864                                                              (line 1779)
41865 * __satfractunshisa:                     Fixed-point fractional library routines.
41866                                                              (line 1785)
41867 * __satfractunshisq:                     Fixed-point fractional library routines.
41868                                                              (line 1781)
41869 * __satfractunshita:                     Fixed-point fractional library routines.
41870                                                              (line 1788)
41871 * __satfractunshiuda:                    Fixed-point fractional library routines.
41872                                                              (line 1802)
41873 * __satfractunshiudq:                    Fixed-point fractional library routines.
41874                                                              (line 1796)
41875 * __satfractunshiuha:                    Fixed-point fractional library routines.
41876                                                              (line 1798)
41877 * __satfractunshiuhq:                    Fixed-point fractional library routines.
41878                                                              (line 1792)
41879 * __satfractunshiuqq:                    Fixed-point fractional library routines.
41880                                                              (line 1790)
41881 * __satfractunshiusa:                    Fixed-point fractional library routines.
41882                                                              (line 1800)
41883 * __satfractunshiusq:                    Fixed-point fractional library routines.
41884                                                              (line 1794)
41885 * __satfractunshiuta:                    Fixed-point fractional library routines.
41886                                                              (line 1804)
41887 * __satfractunsqida:                     Fixed-point fractional library routines.
41888                                                              (line 1760)
41889 * __satfractunsqidq:                     Fixed-point fractional library routines.
41890                                                              (line 1757)
41891 * __satfractunsqiha:                     Fixed-point fractional library routines.
41892                                                              (line 1758)
41893 * __satfractunsqihq:                     Fixed-point fractional library routines.
41894                                                              (line 1754)
41895 * __satfractunsqiqq:                     Fixed-point fractional library routines.
41896                                                              (line 1753)
41897 * __satfractunsqisa:                     Fixed-point fractional library routines.
41898                                                              (line 1759)
41899 * __satfractunsqisq:                     Fixed-point fractional library routines.
41900                                                              (line 1755)
41901 * __satfractunsqita:                     Fixed-point fractional library routines.
41902                                                              (line 1762)
41903 * __satfractunsqiuda:                    Fixed-point fractional library routines.
41904                                                              (line 1776)
41905 * __satfractunsqiudq:                    Fixed-point fractional library routines.
41906                                                              (line 1770)
41907 * __satfractunsqiuha:                    Fixed-point fractional library routines.
41908                                                              (line 1772)
41909 * __satfractunsqiuhq:                    Fixed-point fractional library routines.
41910                                                              (line 1766)
41911 * __satfractunsqiuqq:                    Fixed-point fractional library routines.
41912                                                              (line 1764)
41913 * __satfractunsqiusa:                    Fixed-point fractional library routines.
41914                                                              (line 1774)
41915 * __satfractunsqiusq:                    Fixed-point fractional library routines.
41916                                                              (line 1768)
41917 * __satfractunsqiuta:                    Fixed-point fractional library routines.
41918                                                              (line 1778)
41919 * __satfractunssida:                     Fixed-point fractional library routines.
41920                                                              (line 1811)
41921 * __satfractunssidq:                     Fixed-point fractional library routines.
41922                                                              (line 1808)
41923 * __satfractunssiha:                     Fixed-point fractional library routines.
41924                                                              (line 1809)
41925 * __satfractunssihq:                     Fixed-point fractional library routines.
41926                                                              (line 1806)
41927 * __satfractunssiqq:                     Fixed-point fractional library routines.
41928                                                              (line 1805)
41929 * __satfractunssisa:                     Fixed-point fractional library routines.
41930                                                              (line 1810)
41931 * __satfractunssisq:                     Fixed-point fractional library routines.
41932                                                              (line 1807)
41933 * __satfractunssita:                     Fixed-point fractional library routines.
41934                                                              (line 1812)
41935 * __satfractunssiuda:                    Fixed-point fractional library routines.
41936                                                              (line 1824)
41937 * __satfractunssiudq:                    Fixed-point fractional library routines.
41938                                                              (line 1819)
41939 * __satfractunssiuha:                    Fixed-point fractional library routines.
41940                                                              (line 1821)
41941 * __satfractunssiuhq:                    Fixed-point fractional library routines.
41942                                                              (line 1815)
41943 * __satfractunssiuqq:                    Fixed-point fractional library routines.
41944                                                              (line 1814)
41945 * __satfractunssiusa:                    Fixed-point fractional library routines.
41946                                                              (line 1822)
41947 * __satfractunssiusq:                    Fixed-point fractional library routines.
41948                                                              (line 1817)
41949 * __satfractunssiuta:                    Fixed-point fractional library routines.
41950                                                              (line 1826)
41951 * __satfractunstida:                     Fixed-point fractional library routines.
41952                                                              (line 1864)
41953 * __satfractunstidq:                     Fixed-point fractional library routines.
41954                                                              (line 1859)
41955 * __satfractunstiha:                     Fixed-point fractional library routines.
41956                                                              (line 1861)
41957 * __satfractunstihq:                     Fixed-point fractional library routines.
41958                                                              (line 1855)
41959 * __satfractunstiqq:                     Fixed-point fractional library routines.
41960                                                              (line 1854)
41961 * __satfractunstisa:                     Fixed-point fractional library routines.
41962                                                              (line 1862)
41963 * __satfractunstisq:                     Fixed-point fractional library routines.
41964                                                              (line 1857)
41965 * __satfractunstita:                     Fixed-point fractional library routines.
41966                                                              (line 1866)
41967 * __satfractunstiuda:                    Fixed-point fractional library routines.
41968                                                              (line 1880)
41969 * __satfractunstiudq:                    Fixed-point fractional library routines.
41970                                                              (line 1874)
41971 * __satfractunstiuha:                    Fixed-point fractional library routines.
41972                                                              (line 1876)
41973 * __satfractunstiuhq:                    Fixed-point fractional library routines.
41974                                                              (line 1870)
41975 * __satfractunstiuqq:                    Fixed-point fractional library routines.
41976                                                              (line 1868)
41977 * __satfractunstiusa:                    Fixed-point fractional library routines.
41978                                                              (line 1878)
41979 * __satfractunstiusq:                    Fixed-point fractional library routines.
41980                                                              (line 1872)
41981 * __satfractunstiuta:                    Fixed-point fractional library routines.
41982                                                              (line 1882)
41983 * __satfractuqqda:                       Fixed-point fractional library routines.
41984                                                              (line 1201)
41985 * __satfractuqqdq:                       Fixed-point fractional library routines.
41986                                                              (line 1196)
41987 * __satfractuqqha:                       Fixed-point fractional library routines.
41988                                                              (line 1198)
41989 * __satfractuqqhq:                       Fixed-point fractional library routines.
41990                                                              (line 1192)
41991 * __satfractuqqqq:                       Fixed-point fractional library routines.
41992                                                              (line 1191)
41993 * __satfractuqqsa:                       Fixed-point fractional library routines.
41994                                                              (line 1199)
41995 * __satfractuqqsq:                       Fixed-point fractional library routines.
41996                                                              (line 1194)
41997 * __satfractuqqta:                       Fixed-point fractional library routines.
41998                                                              (line 1203)
41999 * __satfractuqquda:                      Fixed-point fractional library routines.
42000                                                              (line 1215)
42001 * __satfractuqqudq2:                     Fixed-point fractional library routines.
42002                                                              (line 1209)
42003 * __satfractuqquha:                      Fixed-point fractional library routines.
42004                                                              (line 1211)
42005 * __satfractuqquhq2:                     Fixed-point fractional library routines.
42006                                                              (line 1205)
42007 * __satfractuqqusa:                      Fixed-point fractional library routines.
42008                                                              (line 1213)
42009 * __satfractuqqusq2:                     Fixed-point fractional library routines.
42010                                                              (line 1207)
42011 * __satfractuqquta:                      Fixed-point fractional library routines.
42012                                                              (line 1217)
42013 * __satfractusada:                       Fixed-point fractional library routines.
42014                                                              (line 1327)
42015 * __satfractusadq:                       Fixed-point fractional library routines.
42016                                                              (line 1324)
42017 * __satfractusaha:                       Fixed-point fractional library routines.
42018                                                              (line 1325)
42019 * __satfractusahq:                       Fixed-point fractional library routines.
42020                                                              (line 1322)
42021 * __satfractusaqq:                       Fixed-point fractional library routines.
42022                                                              (line 1321)
42023 * __satfractusasa:                       Fixed-point fractional library routines.
42024                                                              (line 1326)
42025 * __satfractusasq:                       Fixed-point fractional library routines.
42026                                                              (line 1323)
42027 * __satfractusata:                       Fixed-point fractional library routines.
42028                                                              (line 1328)
42029 * __satfractusauda2:                     Fixed-point fractional library routines.
42030                                                              (line 1339)
42031 * __satfractusaudq:                      Fixed-point fractional library routines.
42032                                                              (line 1335)
42033 * __satfractusauha2:                     Fixed-point fractional library routines.
42034                                                              (line 1337)
42035 * __satfractusauhq:                      Fixed-point fractional library routines.
42036                                                              (line 1331)
42037 * __satfractusauqq:                      Fixed-point fractional library routines.
42038                                                              (line 1330)
42039 * __satfractusausq:                      Fixed-point fractional library routines.
42040                                                              (line 1333)
42041 * __satfractusauta2:                     Fixed-point fractional library routines.
42042                                                              (line 1341)
42043 * __satfractusqda:                       Fixed-point fractional library routines.
42044                                                              (line 1248)
42045 * __satfractusqdq:                       Fixed-point fractional library routines.
42046                                                              (line 1244)
42047 * __satfractusqha:                       Fixed-point fractional library routines.
42048                                                              (line 1246)
42049 * __satfractusqhq:                       Fixed-point fractional library routines.
42050                                                              (line 1241)
42051 * __satfractusqqq:                       Fixed-point fractional library routines.
42052                                                              (line 1240)
42053 * __satfractusqsa:                       Fixed-point fractional library routines.
42054                                                              (line 1247)
42055 * __satfractusqsq:                       Fixed-point fractional library routines.
42056                                                              (line 1242)
42057 * __satfractusqta:                       Fixed-point fractional library routines.
42058                                                              (line 1250)
42059 * __satfractusquda:                      Fixed-point fractional library routines.
42060                                                              (line 1262)
42061 * __satfractusqudq2:                     Fixed-point fractional library routines.
42062                                                              (line 1256)
42063 * __satfractusquha:                      Fixed-point fractional library routines.
42064                                                              (line 1258)
42065 * __satfractusquhq2:                     Fixed-point fractional library routines.
42066                                                              (line 1254)
42067 * __satfractusquqq2:                     Fixed-point fractional library routines.
42068                                                              (line 1252)
42069 * __satfractusqusa:                      Fixed-point fractional library routines.
42070                                                              (line 1260)
42071 * __satfractusquta:                      Fixed-point fractional library routines.
42072                                                              (line 1264)
42073 * __satfractutada:                       Fixed-point fractional library routines.
42074                                                              (line 1379)
42075 * __satfractutadq:                       Fixed-point fractional library routines.
42076                                                              (line 1374)
42077 * __satfractutaha:                       Fixed-point fractional library routines.
42078                                                              (line 1376)
42079 * __satfractutahq:                       Fixed-point fractional library routines.
42080                                                              (line 1370)
42081 * __satfractutaqq:                       Fixed-point fractional library routines.
42082                                                              (line 1369)
42083 * __satfractutasa:                       Fixed-point fractional library routines.
42084                                                              (line 1377)
42085 * __satfractutasq:                       Fixed-point fractional library routines.
42086                                                              (line 1372)
42087 * __satfractutata:                       Fixed-point fractional library routines.
42088                                                              (line 1381)
42089 * __satfractutauda2:                     Fixed-point fractional library routines.
42090                                                              (line 1395)
42091 * __satfractutaudq:                      Fixed-point fractional library routines.
42092                                                              (line 1389)
42093 * __satfractutauha2:                     Fixed-point fractional library routines.
42094                                                              (line 1391)
42095 * __satfractutauhq:                      Fixed-point fractional library routines.
42096                                                              (line 1385)
42097 * __satfractutauqq:                      Fixed-point fractional library routines.
42098                                                              (line 1383)
42099 * __satfractutausa2:                     Fixed-point fractional library routines.
42100                                                              (line 1393)
42101 * __satfractutausq:                      Fixed-point fractional library routines.
42102                                                              (line 1387)
42103 * __ssaddda3:                            Fixed-point fractional library routines.
42104                                                              (line   67)
42105 * __ssadddq3:                            Fixed-point fractional library routines.
42106                                                              (line   63)
42107 * __ssaddha3:                            Fixed-point fractional library routines.
42108                                                              (line   65)
42109 * __ssaddhq3:                            Fixed-point fractional library routines.
42110                                                              (line   60)
42111 * __ssaddqq3:                            Fixed-point fractional library routines.
42112                                                              (line   59)
42113 * __ssaddsa3:                            Fixed-point fractional library routines.
42114                                                              (line   66)
42115 * __ssaddsq3:                            Fixed-point fractional library routines.
42116                                                              (line   61)
42117 * __ssaddta3:                            Fixed-point fractional library routines.
42118                                                              (line   69)
42119 * __ssashlda3:                           Fixed-point fractional library routines.
42120                                                              (line  402)
42121 * __ssashldq3:                           Fixed-point fractional library routines.
42122                                                              (line  399)
42123 * __ssashlha3:                           Fixed-point fractional library routines.
42124                                                              (line  400)
42125 * __ssashlhq3:                           Fixed-point fractional library routines.
42126                                                              (line  396)
42127 * __ssashlsa3:                           Fixed-point fractional library routines.
42128                                                              (line  401)
42129 * __ssashlsq3:                           Fixed-point fractional library routines.
42130                                                              (line  397)
42131 * __ssashlta3:                           Fixed-point fractional library routines.
42132                                                              (line  404)
42133 * __ssdivda3:                            Fixed-point fractional library routines.
42134                                                              (line  261)
42135 * __ssdivdq3:                            Fixed-point fractional library routines.
42136                                                              (line  257)
42137 * __ssdivha3:                            Fixed-point fractional library routines.
42138                                                              (line  259)
42139 * __ssdivhq3:                            Fixed-point fractional library routines.
42140                                                              (line  254)
42141 * __ssdivqq3:                            Fixed-point fractional library routines.
42142                                                              (line  253)
42143 * __ssdivsa3:                            Fixed-point fractional library routines.
42144                                                              (line  260)
42145 * __ssdivsq3:                            Fixed-point fractional library routines.
42146                                                              (line  255)
42147 * __ssdivta3:                            Fixed-point fractional library routines.
42148                                                              (line  263)
42149 * __ssmulda3:                            Fixed-point fractional library routines.
42150                                                              (line  193)
42151 * __ssmuldq3:                            Fixed-point fractional library routines.
42152                                                              (line  189)
42153 * __ssmulha3:                            Fixed-point fractional library routines.
42154                                                              (line  191)
42155 * __ssmulhq3:                            Fixed-point fractional library routines.
42156                                                              (line  186)
42157 * __ssmulqq3:                            Fixed-point fractional library routines.
42158                                                              (line  185)
42159 * __ssmulsa3:                            Fixed-point fractional library routines.
42160                                                              (line  192)
42161 * __ssmulsq3:                            Fixed-point fractional library routines.
42162                                                              (line  187)
42163 * __ssmulta3:                            Fixed-point fractional library routines.
42164                                                              (line  195)
42165 * __ssnegda2:                            Fixed-point fractional library routines.
42166                                                              (line  316)
42167 * __ssnegdq2:                            Fixed-point fractional library routines.
42168                                                              (line  313)
42169 * __ssnegha2:                            Fixed-point fractional library routines.
42170                                                              (line  314)
42171 * __ssneghq2:                            Fixed-point fractional library routines.
42172                                                              (line  311)
42173 * __ssnegqq2:                            Fixed-point fractional library routines.
42174                                                              (line  310)
42175 * __ssnegsa2:                            Fixed-point fractional library routines.
42176                                                              (line  315)
42177 * __ssnegsq2:                            Fixed-point fractional library routines.
42178                                                              (line  312)
42179 * __ssnegta2:                            Fixed-point fractional library routines.
42180                                                              (line  317)
42181 * __sssubda3:                            Fixed-point fractional library routines.
42182                                                              (line  129)
42183 * __sssubdq3:                            Fixed-point fractional library routines.
42184                                                              (line  125)
42185 * __sssubha3:                            Fixed-point fractional library routines.
42186                                                              (line  127)
42187 * __sssubhq3:                            Fixed-point fractional library routines.
42188                                                              (line  122)
42189 * __sssubqq3:                            Fixed-point fractional library routines.
42190                                                              (line  121)
42191 * __sssubsa3:                            Fixed-point fractional library routines.
42192                                                              (line  128)
42193 * __sssubsq3:                            Fixed-point fractional library routines.
42194                                                              (line  123)
42195 * __sssubta3:                            Fixed-point fractional library routines.
42196                                                              (line  131)
42197 * __subda3:                              Fixed-point fractional library routines.
42198                                                              (line  107)
42199 * __subdf3:                              Soft float library routines.
42200                                                              (line   31)
42201 * __subdq3:                              Fixed-point fractional library routines.
42202                                                              (line   95)
42203 * __subha3:                              Fixed-point fractional library routines.
42204                                                              (line  105)
42205 * __subhq3:                              Fixed-point fractional library routines.
42206                                                              (line   92)
42207 * __subqq3:                              Fixed-point fractional library routines.
42208                                                              (line   91)
42209 * __subsa3:                              Fixed-point fractional library routines.
42210                                                              (line  106)
42211 * __subsf3:                              Soft float library routines.
42212                                                              (line   30)
42213 * __subsq3:                              Fixed-point fractional library routines.
42214                                                              (line   93)
42215 * __subta3:                              Fixed-point fractional library routines.
42216                                                              (line  109)
42217 * __subtf3:                              Soft float library routines.
42218                                                              (line   33)
42219 * __subuda3:                             Fixed-point fractional library routines.
42220                                                              (line  115)
42221 * __subudq3:                             Fixed-point fractional library routines.
42222                                                              (line  103)
42223 * __subuha3:                             Fixed-point fractional library routines.
42224                                                              (line  111)
42225 * __subuhq3:                             Fixed-point fractional library routines.
42226                                                              (line   99)
42227 * __subuqq3:                             Fixed-point fractional library routines.
42228                                                              (line   97)
42229 * __subusa3:                             Fixed-point fractional library routines.
42230                                                              (line  113)
42231 * __subusq3:                             Fixed-point fractional library routines.
42232                                                              (line  101)
42233 * __subuta3:                             Fixed-point fractional library routines.
42234                                                              (line  117)
42235 * __subvdi3:                             Integer library routines.
42236                                                              (line  123)
42237 * __subvsi3:                             Integer library routines.
42238                                                              (line  122)
42239 * __subxf3:                              Soft float library routines.
42240                                                              (line   35)
42241 * __truncdfsf2:                          Soft float library routines.
42242                                                              (line   76)
42243 * __trunctfdf2:                          Soft float library routines.
42244                                                              (line   73)
42245 * __trunctfsf2:                          Soft float library routines.
42246                                                              (line   75)
42247 * __truncxfdf2:                          Soft float library routines.
42248                                                              (line   72)
42249 * __truncxfsf2:                          Soft float library routines.
42250                                                              (line   74)
42251 * __ucmpdi2:                             Integer library routines.
42252                                                              (line   93)
42253 * __ucmpti2:                             Integer library routines.
42254                                                              (line   95)
42255 * __udivdi3:                             Integer library routines.
42256                                                              (line   54)
42257 * __udivmoddi3:                          Integer library routines.
42258                                                              (line   61)
42259 * __udivsi3:                             Integer library routines.
42260                                                              (line   52)
42261 * __udivti3:                             Integer library routines.
42262                                                              (line   56)
42263 * __udivuda3:                            Fixed-point fractional library routines.
42264                                                              (line  246)
42265 * __udivudq3:                            Fixed-point fractional library routines.
42266                                                              (line  240)
42267 * __udivuha3:                            Fixed-point fractional library routines.
42268                                                              (line  242)
42269 * __udivuhq3:                            Fixed-point fractional library routines.
42270                                                              (line  236)
42271 * __udivuqq3:                            Fixed-point fractional library routines.
42272                                                              (line  234)
42273 * __udivusa3:                            Fixed-point fractional library routines.
42274                                                              (line  244)
42275 * __udivusq3:                            Fixed-point fractional library routines.
42276                                                              (line  238)
42277 * __udivuta3:                            Fixed-point fractional library routines.
42278                                                              (line  248)
42279 * __umoddi3:                             Integer library routines.
42280                                                              (line   71)
42281 * __umodsi3:                             Integer library routines.
42282                                                              (line   69)
42283 * __umodti3:                             Integer library routines.
42284                                                              (line   73)
42285 * __unorddf2:                            Soft float library routines.
42286                                                              (line  173)
42287 * __unordsf2:                            Soft float library routines.
42288                                                              (line  172)
42289 * __unordtf2:                            Soft float library routines.
42290                                                              (line  174)
42291 * __usadduda3:                           Fixed-point fractional library routines.
42292                                                              (line   85)
42293 * __usaddudq3:                           Fixed-point fractional library routines.
42294                                                              (line   79)
42295 * __usadduha3:                           Fixed-point fractional library routines.
42296                                                              (line   81)
42297 * __usadduhq3:                           Fixed-point fractional library routines.
42298                                                              (line   75)
42299 * __usadduqq3:                           Fixed-point fractional library routines.
42300                                                              (line   73)
42301 * __usaddusa3:                           Fixed-point fractional library routines.
42302                                                              (line   83)
42303 * __usaddusq3:                           Fixed-point fractional library routines.
42304                                                              (line   77)
42305 * __usadduta3:                           Fixed-point fractional library routines.
42306                                                              (line   87)
42307 * __usashluda3:                          Fixed-point fractional library routines.
42308                                                              (line  421)
42309 * __usashludq3:                          Fixed-point fractional library routines.
42310                                                              (line  415)
42311 * __usashluha3:                          Fixed-point fractional library routines.
42312                                                              (line  417)
42313 * __usashluhq3:                          Fixed-point fractional library routines.
42314                                                              (line  411)
42315 * __usashluqq3:                          Fixed-point fractional library routines.
42316                                                              (line  409)
42317 * __usashlusa3:                          Fixed-point fractional library routines.
42318                                                              (line  419)
42319 * __usashlusq3:                          Fixed-point fractional library routines.
42320                                                              (line  413)
42321 * __usashluta3:                          Fixed-point fractional library routines.
42322                                                              (line  423)
42323 * __usdivuda3:                           Fixed-point fractional library routines.
42324                                                              (line  280)
42325 * __usdivudq3:                           Fixed-point fractional library routines.
42326                                                              (line  274)
42327 * __usdivuha3:                           Fixed-point fractional library routines.
42328                                                              (line  276)
42329 * __usdivuhq3:                           Fixed-point fractional library routines.
42330                                                              (line  270)
42331 * __usdivuqq3:                           Fixed-point fractional library routines.
42332                                                              (line  268)
42333 * __usdivusa3:                           Fixed-point fractional library routines.
42334                                                              (line  278)
42335 * __usdivusq3:                           Fixed-point fractional library routines.
42336                                                              (line  272)
42337 * __usdivuta3:                           Fixed-point fractional library routines.
42338                                                              (line  282)
42339 * __usmuluda3:                           Fixed-point fractional library routines.
42340                                                              (line  212)
42341 * __usmuludq3:                           Fixed-point fractional library routines.
42342                                                              (line  206)
42343 * __usmuluha3:                           Fixed-point fractional library routines.
42344                                                              (line  208)
42345 * __usmuluhq3:                           Fixed-point fractional library routines.
42346                                                              (line  202)
42347 * __usmuluqq3:                           Fixed-point fractional library routines.
42348                                                              (line  200)
42349 * __usmulusa3:                           Fixed-point fractional library routines.
42350                                                              (line  210)
42351 * __usmulusq3:                           Fixed-point fractional library routines.
42352                                                              (line  204)
42353 * __usmuluta3:                           Fixed-point fractional library routines.
42354                                                              (line  214)
42355 * __usneguda2:                           Fixed-point fractional library routines.
42356                                                              (line  331)
42357 * __usnegudq2:                           Fixed-point fractional library routines.
42358                                                              (line  326)
42359 * __usneguha2:                           Fixed-point fractional library routines.
42360                                                              (line  328)
42361 * __usneguhq2:                           Fixed-point fractional library routines.
42362                                                              (line  322)
42363 * __usneguqq2:                           Fixed-point fractional library routines.
42364                                                              (line  321)
42365 * __usnegusa2:                           Fixed-point fractional library routines.
42366                                                              (line  329)
42367 * __usnegusq2:                           Fixed-point fractional library routines.
42368                                                              (line  324)
42369 * __usneguta2:                           Fixed-point fractional library routines.
42370                                                              (line  333)
42371 * __ussubuda3:                           Fixed-point fractional library routines.
42372                                                              (line  148)
42373 * __ussubudq3:                           Fixed-point fractional library routines.
42374                                                              (line  142)
42375 * __ussubuha3:                           Fixed-point fractional library routines.
42376                                                              (line  144)
42377 * __ussubuhq3:                           Fixed-point fractional library routines.
42378                                                              (line  138)
42379 * __ussubuqq3:                           Fixed-point fractional library routines.
42380                                                              (line  136)
42381 * __ussubusa3:                           Fixed-point fractional library routines.
42382                                                              (line  146)
42383 * __ussubusq3:                           Fixed-point fractional library routines.
42384                                                              (line  140)
42385 * __ussubuta3:                           Fixed-point fractional library routines.
42386                                                              (line  150)
42387 * abort:                                 Portability.        (line   21)
42388 * abs:                                   Arithmetic.         (line  195)
42389 * abs and attributes:                    Expressions.        (line   64)
42390 * ABS_EXPR:                              Unary and Binary Expressions.
42391                                                              (line    6)
42392 * absence_set:                           Processor pipeline description.
42393                                                              (line  220)
42394 * absM2 instruction pattern:             Standard Names.     (line  452)
42395 * absolute value:                        Arithmetic.         (line  195)
42396 * access to operands:                    Accessors.          (line    6)
42397 * access to special operands:            Special Accessors.  (line    6)
42398 * accessors:                             Accessors.          (line    6)
42399 * ACCUM_TYPE_SIZE:                       Type Layout.        (line   88)
42400 * ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   46)
42401 * ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line  135)
42402 * ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   26)
42403 * Adding a new GIMPLE statement code:    Adding a new GIMPLE statement code.
42404                                                              (line    6)
42405 * ADDITIONAL_REGISTER_NAMES:             Instruction Output. (line   15)
42406 * addM3 instruction pattern:             Standard Names.     (line  216)
42407 * addMODEcc instruction pattern:         Standard Names.     (line  886)
42408 * addr_diff_vec:                         Side Effects.       (line  302)
42409 * addr_diff_vec, length of:              Insn Lengths.       (line   26)
42410 * ADDR_EXPR:                             Storage References. (line    6)
42411 * addr_vec:                              Side Effects.       (line  297)
42412 * addr_vec, length of:                   Insn Lengths.       (line   26)
42413 * address constraints:                   Simple Constraints. (line  154)
42414 * address_operand <1>:                   Simple Constraints. (line  158)
42415 * address_operand:                       Machine-Independent Predicates.
42416                                                              (line   63)
42417 * addressing modes:                      Addressing Modes.   (line    6)
42418 * ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  202)
42419 * ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   35)
42420 * aggregates as return values:           Aggregate Return.   (line    6)
42421 * alias:                                 Alias analysis.     (line    6)
42422 * ALL_COP_ADDITIONAL_REGISTER_NAMES:     MIPS Coprocessors.  (line   32)
42423 * ALL_REGS:                              Register Classes.   (line   17)
42424 * allocate_stack instruction pattern:    Standard Names.     (line 1186)
42425 * alternate entry points:                Insns.              (line  140)
42426 * anchored addresses:                    Anchored Addresses. (line    6)
42427 * and:                                   Arithmetic.         (line  153)
42428 * and and attributes:                    Expressions.        (line   50)
42429 * and, canonicalization of:              Insn Canonicalizations.
42430                                                              (line   52)
42431 * andM3 instruction pattern:             Standard Names.     (line  222)
42432 * annotations:                           Annotations.        (line    6)
42433 * APPLY_RESULT_SIZE:                     Scalar Return.      (line  107)
42434 * ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  194)
42435 * ARG_POINTER_REGNUM:                    Frame Registers.    (line   41)
42436 * ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line   65)
42437 * arg_pointer_rtx:                       Frame Registers.    (line   90)
42438 * ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   35)
42439 * argument passing:                      Interface.          (line   36)
42440 * arguments in registers:                Register Arguments. (line    6)
42441 * arguments on stack:                    Stack Arguments.    (line    6)
42442 * arithmetic library:                    Soft float library routines.
42443                                                              (line    6)
42444 * arithmetic shift:                      Arithmetic.         (line  168)
42445 * arithmetic shift with signed saturation: Arithmetic.       (line  168)
42446 * arithmetic shift with unsigned saturation: Arithmetic.     (line  168)
42447 * arithmetic, in RTL:                    Arithmetic.         (line    6)
42448 * ARITHMETIC_TYPE_P:                     Types for C++.      (line   61)
42449 * array:                                 Types.              (line    6)
42450 * ARRAY_RANGE_REF:                       Storage References. (line    6)
42451 * ARRAY_REF:                             Storage References. (line    6)
42452 * ARRAY_TYPE:                            Types.              (line    6)
42453 * AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line  151)
42454 * ashift:                                Arithmetic.         (line  168)
42455 * ashift and attributes:                 Expressions.        (line   64)
42456 * ashiftrt:                              Arithmetic.         (line  185)
42457 * ashiftrt and attributes:               Expressions.        (line   64)
42458 * ashlM3 instruction pattern:            Standard Names.     (line  431)
42459 * ashrM3 instruction pattern:            Standard Names.     (line  441)
42460 * ASM_APP_OFF:                           File Framework.     (line   78)
42461 * ASM_APP_ON:                            File Framework.     (line   71)
42462 * ASM_COMMENT_START:                     File Framework.     (line   66)
42463 * ASM_DECLARE_CLASS_REFERENCE:           Label Output.       (line  437)
42464 * ASM_DECLARE_CONSTANT_NAME:             Label Output.       (line  128)
42465 * ASM_DECLARE_FUNCTION_NAME:             Label Output.       (line   87)
42466 * ASM_DECLARE_FUNCTION_SIZE:             Label Output.       (line  101)
42467 * ASM_DECLARE_OBJECT_NAME:               Label Output.       (line  114)
42468 * ASM_DECLARE_REGISTER_GLOBAL:           Label Output.       (line  143)
42469 * ASM_DECLARE_UNRESOLVED_REFERENCE:      Label Output.       (line  443)
42470 * ASM_FINAL_SPEC:                        Driver.             (line  144)
42471 * ASM_FINISH_DECLARE_OBJECT:             Label Output.       (line  151)
42472 * ASM_FORMAT_PRIVATE_NAME:               Label Output.       (line  355)
42473 * asm_fprintf:                           Instruction Output. (line  136)
42474 * ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  147)
42475 * ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  339)
42476 * asm_input:                             Side Effects.       (line  284)
42477 * asm_input and /v:                      Flags.              (line   94)
42478 * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   82)
42479 * ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   72)
42480 * asm_noperands:                         Insns.              (line  307)
42481 * asm_operands and /v:                   Flags.              (line   94)
42482 * asm_operands, RTL sharing:             Sharing.            (line   45)
42483 * asm_operands, usage:                   Assembler.          (line    6)
42484 * ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    9)
42485 * ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   26)
42486 * ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   79)
42487 * ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   84)
42488 * ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   71)
42489 * ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   30)
42490 * ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   38)
42491 * ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line  102)
42492 * ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   94)
42493 * ASM_OUTPUT_ASCII:                      Data Output.        (line   50)
42494 * ASM_OUTPUT_BSS:                        Uninitialized Data. (line   46)
42495 * ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   51)
42496 * ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   38)
42497 * ASM_OUTPUT_COMMON:                     Uninitialized Data. (line   10)
42498 * ASM_OUTPUT_DEBUG_LABEL:                Label Output.       (line  327)
42499 * ASM_OUTPUT_DEF:                        Label Output.       (line  376)
42500 * ASM_OUTPUT_DEF_FROM_DECLS:             Label Output.       (line  384)
42501 * ASM_OUTPUT_DWARF_DELTA:                SDB and DWARF.      (line   42)
42502 * ASM_OUTPUT_DWARF_OFFSET:               SDB and DWARF.      (line   46)
42503 * ASM_OUTPUT_DWARF_PCREL:                SDB and DWARF.      (line   52)
42504 * ASM_OUTPUT_DWARF_TABLE_REF:            SDB and DWARF.      (line   57)
42505 * ASM_OUTPUT_EXTERNAL:                   Label Output.       (line  264)
42506 * ASM_OUTPUT_FDESC:                      Data Output.        (line   59)
42507 * ASM_OUTPUT_IDENT:                      File Framework.     (line  100)
42508 * ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   17)
42509 * ASM_OUTPUT_LABEL:                      Label Output.       (line    9)
42510 * ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  300)
42511 * ASM_OUTPUT_LABELREF:                   Label Output.       (line  286)
42512 * ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   81)
42513 * ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   88)
42514 * ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   41)
42515 * ASM_OUTPUT_OPCODE:                     Instruction Output. (line   21)
42516 * ASM_OUTPUT_POOL_EPILOGUE:              Data Output.        (line  109)
42517 * ASM_OUTPUT_POOL_PROLOGUE:              Data Output.        (line   72)
42518 * ASM_OUTPUT_REG_POP:                    Instruction Output. (line  191)
42519 * ASM_OUTPUT_REG_PUSH:                   Instruction Output. (line  186)
42520 * ASM_OUTPUT_SIZE_DIRECTIVE:             Label Output.       (line   35)
42521 * ASM_OUTPUT_SKIP:                       Alignment Output.   (line   66)
42522 * ASM_OUTPUT_SOURCE_FILENAME:            File Framework.     (line   85)
42523 * ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   84)
42524 * ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  293)
42525 * ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   77)
42526 * ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  402)
42527 * ASM_OUTPUT_WEAKREF:                    Label Output.       (line  203)
42528 * ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   67)
42529 * ASM_SPEC:                              Driver.             (line  136)
42530 * ASM_STABD_OP:                          DBX Options.        (line   36)
42531 * ASM_STABN_OP:                          DBX Options.        (line   43)
42532 * ASM_STABS_OP:                          DBX Options.        (line   29)
42533 * ASM_WEAKEN_DECL:                       Label Output.       (line  195)
42534 * ASM_WEAKEN_LABEL:                      Label Output.       (line  182)
42535 * assemble_name:                         Label Output.       (line    8)
42536 * assemble_name_raw:                     Label Output.       (line   16)
42537 * assembler format:                      File Framework.     (line    6)
42538 * assembler instructions in RTL:         Assembler.          (line    6)
42539 * ASSEMBLER_DIALECT:                     Instruction Output. (line  159)
42540 * assigning attribute values to insns:   Tagging Insns.      (line    6)
42541 * asterisk in template:                  Output Statement.   (line   29)
42542 * atan2M3 instruction pattern:           Standard Names.     (line  522)
42543 * attr <1>:                              Tagging Insns.      (line   54)
42544 * attr:                                  Expressions.        (line  154)
42545 * attr_flag:                             Expressions.        (line  119)
42546 * attribute expressions:                 Expressions.        (line    6)
42547 * attribute specifications:              Attr Example.       (line    6)
42548 * attribute specifications example:      Attr Example.       (line    6)
42549 * ATTRIBUTE_ALIGNED_VALUE:               Storage Layout.     (line  184)
42550 * attributes:                            Attributes.         (line    6)
42551 * attributes, defining:                  Defining Attributes.
42552                                                              (line    6)
42553 * attributes, target-specific:           Target Attributes.  (line    6)
42554 * autoincrement addressing, availability: Portability.       (line   21)
42555 * autoincrement/decrement addressing:    Simple Constraints. (line   30)
42556 * automata_option:                       Processor pipeline description.
42557                                                              (line  301)
42558 * automaton based pipeline description:  Processor pipeline description.
42559                                                              (line    6)
42560 * automaton based scheduler:             Processor pipeline description.
42561                                                              (line    6)
42562 * AVOID_CCMODE_COPIES:                   Values in Registers.
42563                                                              (line  153)
42564 * backslash:                             Output Template.    (line   46)
42565 * barrier:                               Insns.              (line  160)
42566 * barrier and /f:                        Flags.              (line  125)
42567 * barrier and /v:                        Flags.              (line   44)
42568 * BASE_REG_CLASS:                        Register Classes.   (line  107)
42569 * basic block:                           Basic Blocks.       (line    6)
42570 * Basic Statements:                      Basic Statements.   (line    6)
42571 * basic-block.h:                         Control Flow.       (line    6)
42572 * BASIC_BLOCK:                           Basic Blocks.       (line   19)
42573 * basic_block:                           Basic Blocks.       (line    6)
42574 * BB_HEAD, BB_END:                       Maintaining the CFG.
42575                                                              (line   88)
42576 * bb_seq:                                GIMPLE sequences.   (line   73)
42577 * BIGGEST_ALIGNMENT:                     Storage Layout.     (line  174)
42578 * BIGGEST_FIELD_ALIGNMENT:               Storage Layout.     (line  195)
42579 * BImode:                                Machine Modes.      (line   22)
42580 * BIND_EXPR:                             Unary and Binary Expressions.
42581                                                              (line    6)
42582 * BINFO_TYPE:                            Classes.            (line    6)
42583 * bit-fields:                            Bit-Fields.         (line    6)
42584 * BIT_AND_EXPR:                          Unary and Binary Expressions.
42585                                                              (line    6)
42586 * BIT_IOR_EXPR:                          Unary and Binary Expressions.
42587                                                              (line    6)
42588 * BIT_NOT_EXPR:                          Unary and Binary Expressions.
42589                                                              (line    6)
42590 * BIT_XOR_EXPR:                          Unary and Binary Expressions.
42591                                                              (line    6)
42592 * BITFIELD_NBYTES_LIMITED:               Storage Layout.     (line  383)
42593 * BITS_BIG_ENDIAN:                       Storage Layout.     (line   12)
42594 * BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields.       (line    8)
42595 * BITS_PER_UNIT:                         Storage Layout.     (line   52)
42596 * BITS_PER_WORD:                         Storage Layout.     (line   57)
42597 * bitwise complement:                    Arithmetic.         (line  149)
42598 * bitwise exclusive-or:                  Arithmetic.         (line  163)
42599 * bitwise inclusive-or:                  Arithmetic.         (line  158)
42600 * bitwise logical-and:                   Arithmetic.         (line  153)
42601 * BLKmode:                               Machine Modes.      (line  183)
42602 * BLKmode, and function return values:   Calls.              (line   23)
42603 * block statement iterators <1>:         Maintaining the CFG.
42604                                                              (line   45)
42605 * block statement iterators:             Basic Blocks.       (line   68)
42606 * BLOCK_FOR_INSN, bb_for_stmt:           Maintaining the CFG.
42607                                                              (line   40)
42608 * BLOCK_REG_PADDING:                     Register Arguments. (line  229)
42609 * blockage instruction pattern:          Standard Names.     (line 1376)
42610 * Blocks:                                Blocks.             (line    6)
42611 * bool:                                  Misc.               (line  876)
42612 * BOOL_TYPE_SIZE:                        Type Layout.        (line   44)
42613 * BOOLEAN_TYPE:                          Types.              (line    6)
42614 * branch prediction:                     Profile information.
42615                                                              (line   24)
42616 * BRANCH_COST:                           Costs.              (line   52)
42617 * break_out_memory_refs:                 Addressing Modes.   (line  131)
42618 * BREAK_STMT:                            Statements for C++. (line    6)
42619 * bsi_commit_edge_inserts:               Maintaining the CFG.
42620                                                              (line  118)
42621 * bsi_end_p:                             Maintaining the CFG.
42622                                                              (line   60)
42623 * bsi_insert_after:                      Maintaining the CFG.
42624                                                              (line   72)
42625 * bsi_insert_before:                     Maintaining the CFG.
42626                                                              (line   78)
42627 * bsi_insert_on_edge:                    Maintaining the CFG.
42628                                                              (line  118)
42629 * bsi_last:                              Maintaining the CFG.
42630                                                              (line   56)
42631 * bsi_next:                              Maintaining the CFG.
42632                                                              (line   64)
42633 * bsi_prev:                              Maintaining the CFG.
42634                                                              (line   68)
42635 * bsi_remove:                            Maintaining the CFG.
42636                                                              (line   84)
42637 * bsi_start:                             Maintaining the CFG.
42638                                                              (line   52)
42639 * BSS_SECTION_ASM_OP:                    Sections.           (line   68)
42640 * bswap:                                 Arithmetic.         (line  236)
42641 * btruncM2 instruction pattern:          Standard Names.     (line  540)
42642 * build0:                                Macros and Functions.
42643                                                              (line   16)
42644 * build1:                                Macros and Functions.
42645                                                              (line   17)
42646 * build2:                                Macros and Functions.
42647                                                              (line   18)
42648 * build3:                                Macros and Functions.
42649                                                              (line   19)
42650 * build4:                                Macros and Functions.
42651                                                              (line   20)
42652 * build5:                                Macros and Functions.
42653                                                              (line   21)
42654 * build6:                                Macros and Functions.
42655                                                              (line   22)
42656 * builtin_longjmp instruction pattern:   Standard Names.     (line 1279)
42657 * builtin_setjmp_receiver instruction pattern: Standard Names.
42658                                                              (line 1269)
42659 * builtin_setjmp_setup instruction pattern: Standard Names.  (line 1258)
42660 * byte_mode:                             Machine Modes.      (line  336)
42661 * BYTES_BIG_ENDIAN:                      Storage Layout.     (line   24)
42662 * BYTES_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  221)
42663 * C statements for assembler output:     Output Statement.   (line    6)
42664 * C99 math functions, implicit usage:    Library Calls.      (line   76)
42665 * C_COMMON_OVERRIDE_OPTIONS:             Run-time Target.    (line  128)
42666 * c_register_pragma:                     Misc.               (line  404)
42667 * c_register_pragma_with_expansion:      Misc.               (line  406)
42668 * call <1>:                              Side Effects.       (line   86)
42669 * call:                                  Flags.              (line  239)
42670 * call instruction pattern:              Standard Names.     (line  933)
42671 * call usage:                            Calls.              (line   10)
42672 * call, in call_insn:                    Flags.              (line   33)
42673 * call, in mem:                          Flags.              (line   99)
42674 * call-clobbered register:               Register Basics.    (line   35)
42675 * call-saved register:                   Register Basics.    (line   35)
42676 * call-used register:                    Register Basics.    (line   35)
42677 * CALL_EXPR:                             Unary and Binary Expressions.
42678                                                              (line    6)
42679 * call_insn:                             Insns.              (line   95)
42680 * call_insn and /c:                      Flags.              (line   33)
42681 * call_insn and /f:                      Flags.              (line  125)
42682 * call_insn and /i:                      Flags.              (line   24)
42683 * call_insn and /j:                      Flags.              (line  179)
42684 * call_insn and /s:                      Flags.              (line   49)
42685 * call_insn and /u:                      Flags.              (line   19)
42686 * call_insn and /u or /i:                Flags.              (line   29)
42687 * call_insn and /v:                      Flags.              (line   44)
42688 * CALL_INSN_FUNCTION_USAGE:              Insns.              (line  101)
42689 * call_pop instruction pattern:          Standard Names.     (line  961)
42690 * CALL_POPS_ARGS:                        Stack Arguments.    (line  130)
42691 * CALL_REALLY_USED_REGISTERS:            Register Basics.    (line   46)
42692 * CALL_USED_REGISTERS:                   Register Basics.    (line   35)
42693 * call_used_regs:                        Register Basics.    (line   59)
42694 * call_value instruction pattern:        Standard Names.     (line  953)
42695 * call_value_pop instruction pattern:    Standard Names.     (line  961)
42696 * CALLER_SAVE_PROFITABLE:                Caller Saves.       (line   11)
42697 * calling conventions:                   Stack and Calling.  (line    6)
42698 * calling functions in RTL:              Calls.              (line    6)
42699 * can_create_pseudo_p:                   Standard Names.     (line   75)
42700 * CAN_DEBUG_WITHOUT_FP:                  Run-time Target.    (line  160)
42701 * can_fallthru:                          Basic Blocks.       (line   57)
42702 * canadian:                              Configure Terms.    (line    6)
42703 * CANNOT_CHANGE_MODE_CLASS:              Register Classes.   (line  496)
42704 * CANNOT_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory.
42705                                                              (line  280)
42706 * canonicalization of instructions:      Insn Canonicalizations.
42707                                                              (line    6)
42708 * CANONICALIZE_COMPARISON:               MODE_CC Condition Codes.
42709                                                              (line   55)
42710 * canonicalize_funcptr_for_compare instruction pattern: Standard Names.
42711                                                              (line 1117)
42712 * CASE_USE_BIT_TESTS:                    Misc.               (line   54)
42713 * CASE_VECTOR_MODE:                      Misc.               (line   27)
42714 * CASE_VECTOR_PC_RELATIVE:               Misc.               (line   40)
42715 * CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   31)
42716 * casesi instruction pattern:            Standard Names.     (line 1041)
42717 * cbranchMODE4 instruction pattern:      Standard Names.     (line  922)
42718 * cc0 <1>:                               CC0 Condition Codes.
42719                                                              (line    6)
42720 * cc0:                                   Regs and Memory.    (line  307)
42721 * cc0, RTL sharing:                      Sharing.            (line   27)
42722 * cc0_rtx:                               Regs and Memory.    (line  333)
42723 * CC1_SPEC:                              Driver.             (line  118)
42724 * CC1PLUS_SPEC:                          Driver.             (line  126)
42725 * cc_status:                             CC0 Condition Codes.
42726                                                              (line    6)
42727 * CC_STATUS_MDEP:                        CC0 Condition Codes.
42728                                                              (line   17)
42729 * CC_STATUS_MDEP_INIT:                   CC0 Condition Codes.
42730                                                              (line   23)
42731 * CCmode <1>:                            MODE_CC Condition Codes.
42732                                                              (line    6)
42733 * CCmode:                                Machine Modes.      (line  176)
42734 * CDImode:                               Machine Modes.      (line  202)
42735 * CEIL_DIV_EXPR:                         Unary and Binary Expressions.
42736                                                              (line    6)
42737 * CEIL_MOD_EXPR:                         Unary and Binary Expressions.
42738                                                              (line    6)
42739 * ceilM2 instruction pattern:            Standard Names.     (line  556)
42740 * CFA_FRAME_BASE_OFFSET:                 Frame Layout.       (line  226)
42741 * CFG, Control Flow Graph:               Control Flow.       (line    6)
42742 * cfghooks.h:                            Maintaining the CFG.
42743                                                              (line    6)
42744 * cgraph_finalize_function:              Parsing pass.       (line   52)
42745 * chain_circular:                        GTY Options.        (line  196)
42746 * chain_next:                            GTY Options.        (line  196)
42747 * chain_prev:                            GTY Options.        (line  196)
42748 * change_address:                        Standard Names.     (line   47)
42749 * char:                                  GIMPLE_ASM.         (line   53)
42750 * CHAR_TYPE_SIZE:                        Type Layout.        (line   39)
42751 * check_stack instruction pattern:       Standard Names.     (line 1204)
42752 * CHImode:                               Machine Modes.      (line  202)
42753 * class definitions, register:           Register Classes.   (line    6)
42754 * class preference constraints:          Class Preferences.  (line    6)
42755 * class, scope:                          Classes.            (line    6)
42756 * CLASS_LIKELY_SPILLED_P:                Register Classes.   (line  467)
42757 * CLASS_MAX_NREGS:                       Register Classes.   (line  484)
42758 * CLASS_TYPE_P:                          Types for C++.      (line   65)
42759 * classes of RTX codes:                  RTL Classes.        (line    6)
42760 * CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
42761 * CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   85)
42762 * CLASSTYPE_NON_POD_P:                   Classes.            (line   90)
42763 * CLEANUP_DECL:                          Statements for C++. (line    6)
42764 * CLEANUP_EXPR:                          Statements for C++. (line    6)
42765 * CLEANUP_POINT_EXPR:                    Unary and Binary Expressions.
42766                                                              (line    6)
42767 * CLEANUP_STMT:                          Statements for C++. (line    6)
42768 * Cleanups:                              Cleanups.           (line    6)
42769 * CLEAR_BY_PIECES_P:                     Costs.              (line  136)
42770 * clear_cache instruction pattern:       Standard Names.     (line 1520)
42771 * CLEAR_INSN_CACHE:                      Trampolines.        (line   99)
42772 * CLEAR_RATIO:                           Costs.              (line  124)
42773 * clobber:                               Side Effects.       (line  100)
42774 * clz:                                   Arithmetic.         (line  212)
42775 * CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  319)
42776 * clzM2 instruction pattern:             Standard Names.     (line  621)
42777 * cmpmemM instruction pattern:           Standard Names.     (line  751)
42778 * cmpstrM instruction pattern:           Standard Names.     (line  732)
42779 * cmpstrnM instruction pattern:          Standard Names.     (line  720)
42780 * code generation RTL sequences:         Expander Definitions.
42781                                                              (line    6)
42782 * code iterators in .md files:           Code Iterators.     (line    6)
42783 * code_label:                            Insns.              (line  119)
42784 * code_label and /i:                     Flags.              (line   59)
42785 * code_label and /v:                     Flags.              (line   44)
42786 * CODE_LABEL_NUMBER:                     Insns.              (line  119)
42787 * codes, RTL expression:                 RTL Objects.        (line   47)
42788 * COImode:                               Machine Modes.      (line  202)
42789 * COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
42790 * COLLECT_EXPORT_LIST:                   Misc.               (line  783)
42791 * COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
42792                                                              (line   44)
42793 * COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
42794                                                              (line   33)
42795 * commit_edge_insertions:                Maintaining the CFG.
42796                                                              (line  118)
42797 * compare:                               Arithmetic.         (line   43)
42798 * compare, canonicalization of:          Insn Canonicalizations.
42799                                                              (line   37)
42800 * comparison_operator:                   Machine-Independent Predicates.
42801                                                              (line  111)
42802 * compiler passes and files:             Passes.             (line    6)
42803 * complement, bitwise:                   Arithmetic.         (line  149)
42804 * COMPLEX_CST:                           Constant expressions.
42805                                                              (line    6)
42806 * COMPLEX_EXPR:                          Unary and Binary Expressions.
42807                                                              (line    6)
42808 * COMPLEX_TYPE:                          Types.              (line    6)
42809 * COMPONENT_REF:                         Storage References. (line    6)
42810 * Compound Expressions:                  Compound Expressions.
42811                                                              (line    6)
42812 * Compound Lvalues:                      Compound Lvalues.   (line    6)
42813 * COMPOUND_EXPR:                         Unary and Binary Expressions.
42814                                                              (line    6)
42815 * COMPOUND_LITERAL_EXPR:                 Unary and Binary Expressions.
42816                                                              (line    6)
42817 * COMPOUND_LITERAL_EXPR_DECL:            Unary and Binary Expressions.
42818                                                              (line  367)
42819 * COMPOUND_LITERAL_EXPR_DECL_EXPR:       Unary and Binary Expressions.
42820                                                              (line  367)
42821 * computed jump:                         Edges.              (line  128)
42822 * computing the length of an insn:       Insn Lengths.       (line    6)
42823 * concat:                                Regs and Memory.    (line  385)
42824 * concatn:                               Regs and Memory.    (line  391)
42825 * cond:                                  Comparisons.        (line   90)
42826 * cond and attributes:                   Expressions.        (line   37)
42827 * cond_exec:                             Side Effects.       (line  248)
42828 * COND_EXPR:                             Unary and Binary Expressions.
42829                                                              (line    6)
42830 * condition code register:               Regs and Memory.    (line  307)
42831 * condition code status:                 Condition Code.     (line    6)
42832 * condition codes:                       Comparisons.        (line   20)
42833 * conditional execution <1>:             Cond. Exec. Macros. (line    6)
42834 * conditional execution:                 Conditional Execution.
42835                                                              (line    6)
42836 * Conditional Expressions:               Conditional Expressions.
42837                                                              (line    6)
42838 * CONDITIONAL_REGISTER_USAGE:            Register Basics.    (line   60)
42839 * conditions, in patterns:               Patterns.           (line   43)
42840 * configuration file <1>:                Host Misc.          (line    6)
42841 * configuration file:                    Filesystem.         (line    6)
42842 * configure terms:                       Configure Terms.    (line    6)
42843 * CONJ_EXPR:                             Unary and Binary Expressions.
42844                                                              (line    6)
42845 * const:                                 Constants.          (line   99)
42846 * CONST0_RTX:                            Constants.          (line  119)
42847 * const0_rtx:                            Constants.          (line   16)
42848 * CONST1_RTX:                            Constants.          (line  119)
42849 * const1_rtx:                            Constants.          (line   16)
42850 * CONST2_RTX:                            Constants.          (line  119)
42851 * const2_rtx:                            Constants.          (line   16)
42852 * CONST_DECL:                            Declarations.       (line    6)
42853 * const_double:                          Constants.          (line   32)
42854 * const_double, RTL sharing:             Sharing.            (line   29)
42855 * CONST_DOUBLE_LOW:                      Constants.          (line   39)
42856 * CONST_DOUBLE_OK_FOR_CONSTRAINT_P:      Old Constraints.    (line   69)
42857 * CONST_DOUBLE_OK_FOR_LETTER_P:          Old Constraints.    (line   54)
42858 * const_double_operand:                  Machine-Independent Predicates.
42859                                                              (line   21)
42860 * const_fixed:                           Constants.          (line   52)
42861 * const_int:                             Constants.          (line    8)
42862 * const_int and attribute tests:         Expressions.        (line   47)
42863 * const_int and attributes:              Expressions.        (line   10)
42864 * const_int, RTL sharing:                Sharing.            (line   23)
42865 * const_int_operand:                     Machine-Independent Predicates.
42866                                                              (line   16)
42867 * CONST_OK_FOR_CONSTRAINT_P:             Old Constraints.    (line   49)
42868 * CONST_OK_FOR_LETTER_P:                 Old Constraints.    (line   40)
42869 * const_string:                          Constants.          (line   71)
42870 * const_string and attributes:           Expressions.        (line   20)
42871 * const_true_rtx:                        Constants.          (line   26)
42872 * const_vector:                          Constants.          (line   59)
42873 * const_vector, RTL sharing:             Sharing.            (line   32)
42874 * constant attributes:                   Constant Attributes.
42875                                                              (line    6)
42876 * constant definitions:                  Constant Definitions.
42877                                                              (line    6)
42878 * CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   29)
42879 * CONSTANT_ALIGNMENT:                    Storage Layout.     (line  242)
42880 * CONSTANT_P:                            Addressing Modes.   (line   36)
42881 * CONSTANT_POOL_ADDRESS_P:               Flags.              (line   10)
42882 * CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   64)
42883 * constants in constraints:              Simple Constraints. (line   60)
42884 * constm1_rtx:                           Constants.          (line   16)
42885 * constraint modifier characters:        Modifiers.          (line    6)
42886 * constraint, matching:                  Simple Constraints. (line  132)
42887 * CONSTRAINT_LEN:                        Old Constraints.    (line   12)
42888 * constraint_num:                        C Constraint Interface.
42889                                                              (line   38)
42890 * constraint_satisfied_p:                C Constraint Interface.
42891                                                              (line   54)
42892 * constraints:                           Constraints.        (line    6)
42893 * constraints, defining:                 Define Constraints. (line    6)
42894 * constraints, defining, obsolete method: Old Constraints.   (line    6)
42895 * constraints, machine specific:         Machine Constraints.
42896                                                              (line    6)
42897 * constraints, testing:                  C Constraint Interface.
42898                                                              (line    6)
42899 * CONSTRUCTOR:                           Unary and Binary Expressions.
42900                                                              (line    6)
42901 * constructors, automatic calls:         Collect2.           (line   15)
42902 * constructors, output of:               Initialization.     (line    6)
42903 * container:                             Containers.         (line    6)
42904 * CONTINUE_STMT:                         Statements for C++. (line    6)
42905 * contributors:                          Contributors.       (line    6)
42906 * controlling register usage:            Register Basics.    (line   76)
42907 * controlling the compilation driver:    Driver.             (line    6)
42908 * conventions, run-time:                 Interface.          (line    6)
42909 * conversions:                           Conversions.        (line    6)
42910 * CONVERT_EXPR:                          Unary and Binary Expressions.
42911                                                              (line    6)
42912 * copy_rtx:                              Addressing Modes.   (line  184)
42913 * copy_rtx_if_shared:                    Sharing.            (line   64)
42914 * copysignM3 instruction pattern:        Standard Names.     (line  602)
42915 * cosM2 instruction pattern:             Standard Names.     (line  481)
42916 * costs of instructions:                 Costs.              (line    6)
42917 * CP_INTEGRAL_TYPE:                      Types for C++.      (line   57)
42918 * cp_namespace_decls:                    Namespaces.         (line   49)
42919 * CP_TYPE_CONST_NON_VOLATILE_P:          Types for C++.      (line   33)
42920 * CP_TYPE_CONST_P:                       Types for C++.      (line   24)
42921 * CP_TYPE_QUALS:                         Types for C++.      (line    6)
42922 * CP_TYPE_RESTRICT_P:                    Types for C++.      (line   30)
42923 * CP_TYPE_VOLATILE_P:                    Types for C++.      (line   27)
42924 * CPLUSPLUS_CPP_SPEC:                    Driver.             (line  113)
42925 * CPP_SPEC:                              Driver.             (line  106)
42926 * CQImode:                               Machine Modes.      (line  202)
42927 * cross compilation and floating point:  Floating Point.     (line    6)
42928 * CRT_CALL_STATIC_FUNCTION:              Sections.           (line  122)
42929 * CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   35)
42930 * CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   39)
42931 * CSImode:                               Machine Modes.      (line  202)
42932 * cstoreMODE4 instruction pattern:       Standard Names.     (line  893)
42933 * CTImode:                               Machine Modes.      (line  202)
42934 * ctrapMM4 instruction pattern:          Standard Names.     (line 1345)
42935 * ctz:                                   Arithmetic.         (line  220)
42936 * CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  320)
42937 * ctzM2 instruction pattern:             Standard Names.     (line  630)
42938 * CUMULATIVE_ARGS:                       Register Arguments. (line  127)
42939 * current_function_epilogue_delay_list:  Function Entry.     (line  181)
42940 * current_function_is_leaf:              Leaf Functions.     (line   51)
42941 * current_function_outgoing_args_size:   Stack Arguments.    (line   45)
42942 * current_function_pops_args:            Function Entry.     (line  106)
42943 * current_function_pretend_args_size:    Function Entry.     (line  112)
42944 * current_function_uses_only_leaf_regs:  Leaf Functions.     (line   51)
42945 * current_insn_predicate:                Conditional Execution.
42946                                                              (line   26)
42947 * DAmode:                                Machine Modes.      (line  152)
42948 * data bypass:                           Processor pipeline description.
42949                                                              (line  106)
42950 * data dependence delays:                Processor pipeline description.
42951                                                              (line    6)
42952 * Data Dependency Analysis:              Dependency analysis.
42953                                                              (line    6)
42954 * data structures:                       Per-Function Data.  (line    6)
42955 * DATA_ALIGNMENT:                        Storage Layout.     (line  229)
42956 * DATA_SECTION_ASM_OP:                   Sections.           (line   53)
42957 * DBR_OUTPUT_SEQEND:                     Instruction Output. (line  120)
42958 * dbr_sequence_length:                   Instruction Output. (line  119)
42959 * DBX_BLOCKS_FUNCTION_RELATIVE:          DBX Options.        (line  103)
42960 * DBX_CONTIN_CHAR:                       DBX Options.        (line   66)
42961 * DBX_CONTIN_LENGTH:                     DBX Options.        (line   56)
42962 * DBX_DEBUGGING_INFO:                    DBX Options.        (line    9)
42963 * DBX_FUNCTION_FIRST:                    DBX Options.        (line   97)
42964 * DBX_LINES_FUNCTION_RELATIVE:           DBX Options.        (line  109)
42965 * DBX_NO_XREFS:                          DBX Options.        (line   50)
42966 * DBX_OUTPUT_LBRAC:                      DBX Hooks.          (line    9)
42967 * DBX_OUTPUT_MAIN_SOURCE_FILE_END:       File Names and DBX. (line   34)
42968 * DBX_OUTPUT_MAIN_SOURCE_FILENAME:       File Names and DBX. (line    9)
42969 * DBX_OUTPUT_NFUN:                       DBX Hooks.          (line   18)
42970 * DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX.
42971                                                              (line   42)
42972 * DBX_OUTPUT_RBRAC:                      DBX Hooks.          (line   15)
42973 * DBX_OUTPUT_SOURCE_LINE:                DBX Hooks.          (line   22)
42974 * DBX_REGISTER_NUMBER:                   All Debuggers.      (line    9)
42975 * DBX_REGPARM_STABS_CODE:                DBX Options.        (line   87)
42976 * DBX_REGPARM_STABS_LETTER:              DBX Options.        (line   92)
42977 * DBX_STATIC_CONST_VAR_CODE:             DBX Options.        (line   82)
42978 * DBX_STATIC_STAB_DATA_SECTION:          DBX Options.        (line   73)
42979 * DBX_TYPE_DECL_STABS_CODE:              DBX Options.        (line   78)
42980 * DBX_USE_BINCL:                         DBX Options.        (line  115)
42981 * DCmode:                                Machine Modes.      (line  197)
42982 * DDmode:                                Machine Modes.      (line   90)
42983 * De Morgan's law:                       Insn Canonicalizations.
42984                                                              (line   52)
42985 * dead_or_set_p:                         define_peephole.    (line   65)
42986 * debug_expr:                            Debug Information.  (line   22)
42987 * DEBUG_EXPR_DECL:                       Declarations.       (line    6)
42988 * debug_insn:                            Insns.              (line  239)
42989 * DEBUG_SYMS_TEXT:                       DBX Options.        (line   25)
42990 * DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   37)
42991 * DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   28)
42992 * decimal float library:                 Decimal float library routines.
42993                                                              (line    6)
42994 * DECL_ALIGN:                            Declarations.       (line    6)
42995 * DECL_ANTICIPATED:                      Functions for C++.  (line   42)
42996 * DECL_ARGUMENTS:                        Function Basics.    (line   36)
42997 * DECL_ARRAY_DELETE_OPERATOR_P:          Functions for C++.  (line  158)
42998 * DECL_ARTIFICIAL <1>:                   Function Properties.
42999                                                              (line   47)
43000 * DECL_ARTIFICIAL <2>:                   Function Basics.    (line    6)
43001 * DECL_ARTIFICIAL:                       Working with declarations.
43002                                                              (line   24)
43003 * DECL_ASSEMBLER_NAME:                   Function Basics.    (line    6)
43004 * DECL_ATTRIBUTES:                       Attributes.         (line   22)
43005 * DECL_BASE_CONSTRUCTOR_P:               Functions for C++.  (line   88)
43006 * DECL_COMPLETE_CONSTRUCTOR_P:           Functions for C++.  (line   84)
43007 * DECL_COMPLETE_DESTRUCTOR_P:            Functions for C++.  (line   98)
43008 * DECL_CONST_MEMFUNC_P:                  Functions for C++.  (line   71)
43009 * DECL_CONSTRUCTOR_P:                    Functions for C++.  (line   77)
43010 * DECL_CONTEXT:                          Namespaces.         (line   31)
43011 * DECL_CONV_FN_P:                        Functions for C++.  (line  105)
43012 * DECL_COPY_CONSTRUCTOR_P:               Functions for C++.  (line   92)
43013 * DECL_DESTRUCTOR_P:                     Functions for C++.  (line   95)
43014 * DECL_EXTERN_C_FUNCTION_P:              Functions for C++.  (line   46)
43015 * DECL_EXTERNAL <1>:                     Function Properties.
43016                                                              (line   25)
43017 * DECL_EXTERNAL:                         Declarations.       (line    6)
43018 * DECL_FUNCTION_MEMBER_P:                Functions for C++.  (line   61)
43019 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties.
43020                                                              (line   61)
43021 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION:   Function Basics.    (line    6)
43022 * DECL_FUNCTION_SPECIFIC_TARGET <1>:     Function Properties.
43023                                                              (line   55)
43024 * DECL_FUNCTION_SPECIFIC_TARGET:         Function Basics.    (line    6)
43025 * DECL_GLOBAL_CTOR_P:                    Functions for C++.  (line  108)
43026 * DECL_GLOBAL_DTOR_P:                    Functions for C++.  (line  112)
43027 * DECL_INITIAL <1>:                      Function Basics.    (line   51)
43028 * DECL_INITIAL:                          Declarations.       (line    6)
43029 * DECL_LINKONCE_P:                       Functions for C++.  (line   50)
43030 * DECL_LOCAL_FUNCTION_P:                 Functions for C++.  (line   38)
43031 * DECL_MAIN_P:                           Functions for C++.  (line   34)
43032 * DECL_NAME <1>:                         Namespaces.         (line   20)
43033 * DECL_NAME <2>:                         Function Basics.    (line    6)
43034 * DECL_NAME:                             Working with declarations.
43035                                                              (line    7)
43036 * DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   35)
43037 * DECL_NAMESPACE_STD_P:                  Namespaces.         (line   45)
43038 * DECL_NON_THUNK_FUNCTION_P:             Functions for C++.  (line  138)
43039 * DECL_NONCONVERTING_P:                  Functions for C++.  (line   80)
43040 * DECL_NONSTATIC_MEMBER_FUNCTION_P:      Functions for C++.  (line   68)
43041 * DECL_OVERLOADED_OPERATOR_P:            Functions for C++.  (line  102)
43042 * DECL_PURE_P:                           Function Properties.
43043                                                              (line   40)
43044 * DECL_RESULT:                           Function Basics.    (line   41)
43045 * DECL_SAVED_TREE:                       Function Basics.    (line   44)
43046 * DECL_SIZE:                             Declarations.       (line    6)
43047 * DECL_STATIC_FUNCTION_P:                Functions for C++.  (line   65)
43048 * DECL_STMT:                             Statements for C++. (line    6)
43049 * DECL_STMT_DECL:                        Statements for C++. (line    6)
43050 * DECL_THUNK_P:                          Functions for C++.  (line  116)
43051 * DECL_VIRTUAL_P:                        Function Properties.
43052                                                              (line   44)
43053 * DECL_VOLATILE_MEMFUNC_P:               Functions for C++.  (line   74)
43054 * declaration:                           Declarations.       (line    6)
43055 * declarations, RTL:                     RTL Declarations.   (line    6)
43056 * DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    9)
43057 * decrement_and_branch_until_zero instruction pattern: Standard Names.
43058                                                              (line 1079)
43059 * def_optype_d:                          Manipulating GIMPLE statements.
43060                                                              (line   94)
43061 * default:                               GTY Options.        (line   82)
43062 * default_file_start:                    File Framework.     (line    8)
43063 * DEFAULT_GDB_EXTENSIONS:                DBX Options.        (line   18)
43064 * DEFAULT_PCC_STRUCT_RETURN:             Aggregate Return.   (line   35)
43065 * DEFAULT_SIGNED_CHAR:                   Type Layout.        (line  154)
43066 * define_address_constraint:             Define Constraints. (line  107)
43067 * define_asm_attributes:                 Tagging Insns.      (line   73)
43068 * define_attr:                           Defining Attributes.
43069                                                              (line    6)
43070 * define_automaton:                      Processor pipeline description.
43071                                                              (line   53)
43072 * define_bypass:                         Processor pipeline description.
43073                                                              (line  197)
43074 * define_code_attr:                      Code Iterators.     (line    6)
43075 * define_code_iterator:                  Code Iterators.     (line    6)
43076 * define_cond_exec:                      Conditional Execution.
43077                                                              (line   13)
43078 * define_constants:                      Constant Definitions.
43079                                                              (line    6)
43080 * define_constraint:                     Define Constraints. (line   48)
43081 * define_cpu_unit:                       Processor pipeline description.
43082                                                              (line   68)
43083 * define_delay:                          Delay Slots.        (line   25)
43084 * define_expand:                         Expander Definitions.
43085                                                              (line   11)
43086 * define_insn:                           Patterns.           (line    6)
43087 * define_insn example:                   Example.            (line    6)
43088 * define_insn_and_split:                 Insn Splitting.     (line  170)
43089 * define_insn_reservation:               Processor pipeline description.
43090                                                              (line  106)
43091 * define_memory_constraint:              Define Constraints. (line   88)
43092 * define_mode_attr:                      Substitutions.      (line    6)
43093 * define_mode_iterator:                  Defining Mode Iterators.
43094                                                              (line    6)
43095 * define_peephole:                       define_peephole.    (line    6)
43096 * define_peephole2:                      define_peephole2.   (line    6)
43097 * define_predicate:                      Defining Predicates.
43098                                                              (line    6)
43099 * define_query_cpu_unit:                 Processor pipeline description.
43100                                                              (line   90)
43101 * define_register_constraint:            Define Constraints. (line   28)
43102 * define_reservation:                    Processor pipeline description.
43103                                                              (line  186)
43104 * define_special_predicate:              Defining Predicates.
43105                                                              (line    6)
43106 * define_split:                          Insn Splitting.     (line   32)
43107 * defining attributes and their values:  Defining Attributes.
43108                                                              (line    6)
43109 * defining constraints:                  Define Constraints. (line    6)
43110 * defining constraints, obsolete method: Old Constraints.    (line    6)
43111 * defining jump instruction patterns:    Jump Patterns.      (line    6)
43112 * defining looping instruction patterns: Looping Patterns.   (line    6)
43113 * defining peephole optimizers:          Peephole Definitions.
43114                                                              (line    6)
43115 * defining predicates:                   Defining Predicates.
43116                                                              (line    6)
43117 * defining RTL sequences for code generation: Expander Definitions.
43118                                                              (line    6)
43119 * delay slots, defining:                 Delay Slots.        (line    6)
43120 * DELAY_SLOTS_FOR_EPILOGUE:              Function Entry.     (line  163)
43121 * deletable:                             GTY Options.        (line  150)
43122 * DELETE_IF_ORDINARY:                    Filesystem.         (line   79)
43123 * Dependent Patterns:                    Dependent Patterns. (line    6)
43124 * desc:                                  GTY Options.        (line   82)
43125 * destructors, output of:                Initialization.     (line    6)
43126 * deterministic finite state automaton:  Processor pipeline description.
43127                                                              (line    6)
43128 * DF_SIZE:                               Type Layout.        (line  130)
43129 * DFmode:                                Machine Modes.      (line   73)
43130 * digits in constraint:                  Simple Constraints. (line  120)
43131 * DImode:                                Machine Modes.      (line   45)
43132 * DIR_SEPARATOR:                         Filesystem.         (line   18)
43133 * DIR_SEPARATOR_2:                       Filesystem.         (line   19)
43134 * directory options .md:                 Including Patterns. (line   44)
43135 * disabling certain registers:           Register Basics.    (line   76)
43136 * dispatch table:                        Dispatch Tables.    (line    8)
43137 * div:                                   Arithmetic.         (line  111)
43138 * div and attributes:                    Expressions.        (line   64)
43139 * division:                              Arithmetic.         (line  111)
43140 * divM3 instruction pattern:             Standard Names.     (line  222)
43141 * divmodM4 instruction pattern:          Standard Names.     (line  411)
43142 * DO_BODY:                               Statements for C++. (line    6)
43143 * DO_COND:                               Statements for C++. (line    6)
43144 * DO_STMT:                               Statements for C++. (line    6)
43145 * DOLLARS_IN_IDENTIFIERS:                Misc.               (line  491)
43146 * doloop_begin instruction pattern:      Standard Names.     (line 1110)
43147 * doloop_end instruction pattern:        Standard Names.     (line 1089)
43148 * DONE:                                  Expander Definitions.
43149                                                              (line   74)
43150 * DONT_USE_BUILTIN_SETJMP:               Exception Region Output.
43151                                                              (line   70)
43152 * DOUBLE_TYPE_SIZE:                      Type Layout.        (line   53)
43153 * DQmode:                                Machine Modes.      (line  115)
43154 * driver:                                Driver.             (line    6)
43155 * DRIVER_SELF_SPECS:                     Driver.             (line   71)
43156 * DUMPFILE_FORMAT:                       Filesystem.         (line   67)
43157 * DWARF2_ASM_LINE_DEBUG_INFO:            SDB and DWARF.      (line   36)
43158 * DWARF2_DEBUGGING_INFO:                 SDB and DWARF.      (line   13)
43159 * DWARF2_FRAME_INFO:                     SDB and DWARF.      (line   30)
43160 * DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  136)
43161 * DWARF2_UNWIND_INFO:                    Exception Region Output.
43162                                                              (line   40)
43163 * DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  152)
43164 * DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
43165                                                              (line   75)
43166 * DWARF_FRAME_REGISTERS:                 Frame Registers.    (line   96)
43167 * DWARF_FRAME_REGNUM:                    Frame Registers.    (line  128)
43168 * DWARF_REG_TO_UNWIND_COLUMN:            Frame Registers.    (line  120)
43169 * DWARF_ZERO_REG:                        Frame Layout.       (line  163)
43170 * DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   92)
43171 * E in constraint:                       Simple Constraints. (line   79)
43172 * earlyclobber operand:                  Modifiers.          (line   25)
43173 * edge:                                  Edges.              (line    6)
43174 * edge in the flow graph:                Edges.              (line    6)
43175 * edge iterators:                        Edges.              (line   15)
43176 * edge splitting:                        Maintaining the CFG.
43177                                                              (line  118)
43178 * EDGE_ABNORMAL:                         Edges.              (line  128)
43179 * EDGE_ABNORMAL, EDGE_ABNORMAL_CALL:     Edges.              (line  171)
43180 * EDGE_ABNORMAL, EDGE_EH:                Edges.              (line   96)
43181 * EDGE_ABNORMAL, EDGE_SIBCALL:           Edges.              (line  122)
43182 * EDGE_FALLTHRU, force_nonfallthru:      Edges.              (line   86)
43183 * EDOM, implicit usage:                  Library Calls.      (line   58)
43184 * EH_FRAME_IN_DATA_SECTION:              Exception Region Output.
43185                                                              (line   20)
43186 * EH_FRAME_SECTION_NAME:                 Exception Region Output.
43187                                                              (line   10)
43188 * eh_return instruction pattern:         Standard Names.     (line 1285)
43189 * EH_RETURN_DATA_REGNO:                  Exception Handling. (line    7)
43190 * EH_RETURN_HANDLER_RTX:                 Exception Handling. (line   39)
43191 * EH_RETURN_STACKADJ_RTX:                Exception Handling. (line   22)
43192 * EH_TABLES_CAN_BE_READ_ONLY:            Exception Region Output.
43193                                                              (line   29)
43194 * EH_USES:                               Function Entry.     (line  158)
43195 * ei_edge:                               Edges.              (line   43)
43196 * ei_end_p:                              Edges.              (line   27)
43197 * ei_last:                               Edges.              (line   23)
43198 * ei_next:                               Edges.              (line   35)
43199 * ei_one_before_end_p:                   Edges.              (line   31)
43200 * ei_prev:                               Edges.              (line   39)
43201 * ei_safe_safe:                          Edges.              (line   47)
43202 * ei_start:                              Edges.              (line   19)
43203 * ELIGIBLE_FOR_EPILOGUE_DELAY:           Function Entry.     (line  169)
43204 * ELIMINABLE_REGS:                       Elimination.        (line   47)
43205 * ELSE_CLAUSE:                           Statements for C++. (line    6)
43206 * Embedded C:                            Fixed-point fractional library routines.
43207                                                              (line    6)
43208 * EMIT_MODE_SET:                         Mode Switching.     (line   74)
43209 * Empty Statements:                      Empty Statements.   (line    6)
43210 * EMPTY_CLASS_EXPR:                      Statements for C++. (line    6)
43211 * EMPTY_FIELD_BOUNDARY:                  Storage Layout.     (line  296)
43212 * Emulated TLS:                          Emulated TLS.       (line    6)
43213 * ENABLE_EXECUTE_STACK:                  Trampolines.        (line  109)
43214 * enabled:                               Disable Insn Alternatives.
43215                                                              (line    6)
43216 * ENDFILE_SPEC:                          Driver.             (line  218)
43217 * endianness:                            Portability.        (line   21)
43218 * ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR:       Basic Blocks.       (line   28)
43219 * enum machine_mode:                     Machine Modes.      (line    6)
43220 * enum reg_class:                        Register Classes.   (line   65)
43221 * ENUMERAL_TYPE:                         Types.              (line    6)
43222 * epilogue:                              Function Entry.     (line    6)
43223 * epilogue instruction pattern:          Standard Names.     (line 1317)
43224 * EPILOGUE_USES:                         Function Entry.     (line  152)
43225 * eq:                                    Comparisons.        (line   52)
43226 * eq and attributes:                     Expressions.        (line   64)
43227 * eq_attr:                               Expressions.        (line   85)
43228 * EQ_EXPR:                               Unary and Binary Expressions.
43229                                                              (line    6)
43230 * equal:                                 Comparisons.        (line   52)
43231 * errno, implicit usage:                 Library Calls.      (line   70)
43232 * EXACT_DIV_EXPR:                        Unary and Binary Expressions.
43233                                                              (line    6)
43234 * examining SSA_NAMEs:                   SSA.                (line  218)
43235 * exception handling <1>:                Exception Handling. (line    6)
43236 * exception handling:                    Edges.              (line   96)
43237 * exception_receiver instruction pattern: Standard Names.    (line 1249)
43238 * exclamation point:                     Multi-Alternative.  (line   47)
43239 * exclusion_set:                         Processor pipeline description.
43240                                                              (line  220)
43241 * exclusive-or, bitwise:                 Arithmetic.         (line  163)
43242 * EXIT_EXPR:                             Unary and Binary Expressions.
43243                                                              (line    6)
43244 * EXIT_IGNORE_STACK:                     Function Entry.     (line  140)
43245 * expander definitions:                  Expander Definitions.
43246                                                              (line    6)
43247 * expM2 instruction pattern:             Standard Names.     (line  497)
43248 * EXPR_FILENAME:                         Working with declarations.
43249                                                              (line   14)
43250 * EXPR_LINENO:                           Working with declarations.
43251                                                              (line   20)
43252 * expr_list:                             Insns.              (line  545)
43253 * EXPR_STMT:                             Statements for C++. (line    6)
43254 * EXPR_STMT_EXPR:                        Statements for C++. (line    6)
43255 * expression:                            Expression trees.   (line    6)
43256 * expression codes:                      RTL Objects.        (line   47)
43257 * extendMN2 instruction pattern:         Standard Names.     (line  808)
43258 * extensible constraints:                Simple Constraints. (line  163)
43259 * EXTRA_ADDRESS_CONSTRAINT:              Old Constraints.    (line  123)
43260 * EXTRA_CONSTRAINT:                      Old Constraints.    (line   74)
43261 * EXTRA_CONSTRAINT_STR:                  Old Constraints.    (line   95)
43262 * EXTRA_MEMORY_CONSTRAINT:               Old Constraints.    (line  100)
43263 * EXTRA_SPECS:                           Driver.             (line  245)
43264 * extv instruction pattern:              Standard Names.     (line  844)
43265 * extzv instruction pattern:             Standard Names.     (line  859)
43266 * F in constraint:                       Simple Constraints. (line   84)
43267 * FAIL:                                  Expander Definitions.
43268                                                              (line   80)
43269 * fall-thru:                             Edges.              (line   69)
43270 * FATAL_EXIT_CODE:                       Host Misc.          (line    6)
43271 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
43272                                                              (line    6)
43273 * features, optional, in system conventions: Run-time Target.
43274                                                              (line   59)
43275 * ffs:                                   Arithmetic.         (line  206)
43276 * ffsM2 instruction pattern:             Standard Names.     (line  611)
43277 * FIELD_DECL:                            Declarations.       (line    6)
43278 * file_end_indicate_exec_stack:          File Framework.     (line   41)
43279 * files and passes of the compiler:      Passes.             (line    6)
43280 * files, generated:                      Files.              (line    6)
43281 * final_absence_set:                     Processor pipeline description.
43282                                                              (line  220)
43283 * FINAL_PRESCAN_INSN:                    Instruction Output. (line   46)
43284 * final_presence_set:                    Processor pipeline description.
43285                                                              (line  220)
43286 * final_scan_insn:                       Function Entry.     (line  181)
43287 * final_sequence:                        Instruction Output. (line  130)
43288 * FIND_BASE_TERM:                        Addressing Modes.   (line  115)
43289 * FINI_ARRAY_SECTION_ASM_OP:             Sections.           (line  115)
43290 * FINI_SECTION_ASM_OP:                   Sections.           (line  100)
43291 * finite state automaton minimization:   Processor pipeline description.
43292                                                              (line  301)
43293 * FIRST_PARM_OFFSET:                     Frame Layout.       (line   67)
43294 * FIRST_PARM_OFFSET and virtual registers: Regs and Memory.  (line   65)
43295 * FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    9)
43296 * FIRST_STACK_REG:                       Stack Registers.    (line   27)
43297 * FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
43298 * fix:                                   Conversions.        (line   66)
43299 * FIX_TRUNC_EXPR:                        Unary and Binary Expressions.
43300                                                              (line    6)
43301 * fix_truncMN2 instruction pattern:      Standard Names.     (line  795)
43302 * fixed register:                        Register Basics.    (line   15)
43303 * fixed-point fractional library:        Fixed-point fractional library routines.
43304                                                              (line    6)
43305 * FIXED_CONVERT_EXPR:                    Unary and Binary Expressions.
43306                                                              (line    6)
43307 * FIXED_CST:                             Constant expressions.
43308                                                              (line    6)
43309 * FIXED_POINT_TYPE:                      Types.              (line    6)
43310 * FIXED_REGISTERS:                       Register Basics.    (line   15)
43311 * fixed_regs:                            Register Basics.    (line   59)
43312 * fixMN2 instruction pattern:            Standard Names.     (line  775)
43313 * FIXUNS_TRUNC_LIKE_FIX_TRUNC:           Misc.               (line  100)
43314 * fixuns_truncMN2 instruction pattern:   Standard Names.     (line  799)
43315 * fixunsMN2 instruction pattern:         Standard Names.     (line  784)
43316 * flags in RTL expression:               Flags.              (line    6)
43317 * float:                                 Conversions.        (line   58)
43318 * FLOAT_EXPR:                            Unary and Binary Expressions.
43319                                                              (line    6)
43320 * float_extend:                          Conversions.        (line   33)
43321 * FLOAT_LIB_COMPARE_RETURNS_BOOL:        Library Calls.      (line   25)
43322 * FLOAT_STORE_FLAG_VALUE:                Misc.               (line  301)
43323 * float_truncate:                        Conversions.        (line   53)
43324 * FLOAT_TYPE_SIZE:                       Type Layout.        (line   49)
43325 * FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   43)
43326 * FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory.
43327                                                              (line  226)
43328 * floating point and cross compilation:  Floating Point.     (line    6)
43329 * Floating Point Emulation:              Target Fragment.    (line   15)
43330 * floating point emulation library, US Software GOFAST: Library Calls.
43331                                                              (line   44)
43332 * floatMN2 instruction pattern:          Standard Names.     (line  767)
43333 * floatunsMN2 instruction pattern:       Standard Names.     (line  771)
43334 * FLOOR_DIV_EXPR:                        Unary and Binary Expressions.
43335                                                              (line    6)
43336 * FLOOR_MOD_EXPR:                        Unary and Binary Expressions.
43337                                                              (line    6)
43338 * floorM2 instruction pattern:           Standard Names.     (line  532)
43339 * flow-insensitive alias analysis:       Alias analysis.     (line    6)
43340 * flow-sensitive alias analysis:         Alias analysis.     (line    6)
43341 * fmodM3 instruction pattern:            Standard Names.     (line  463)
43342 * FOR_BODY:                              Statements for C++. (line    6)
43343 * FOR_COND:                              Statements for C++. (line    6)
43344 * FOR_EXPR:                              Statements for C++. (line    6)
43345 * FOR_INIT_STMT:                         Statements for C++. (line    6)
43346 * FOR_STMT:                              Statements for C++. (line    6)
43347 * FORCE_CODE_SECTION_ALIGN:              Sections.           (line  146)
43348 * force_reg:                             Standard Names.     (line   36)
43349 * fract_convert:                         Conversions.        (line   82)
43350 * FRACT_TYPE_SIZE:                       Type Layout.        (line   68)
43351 * fractional types:                      Fixed-point fractional library routines.
43352                                                              (line    6)
43353 * fractMN2 instruction pattern:          Standard Names.     (line  817)
43354 * fractunsMN2 instruction pattern:       Standard Names.     (line  832)
43355 * frame layout:                          Frame Layout.       (line    6)
43356 * FRAME_ADDR_RTX:                        Frame Layout.       (line  116)
43357 * FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   31)
43358 * FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory.
43359                                                              (line   69)
43360 * FRAME_POINTER_CFA_OFFSET:              Frame Layout.       (line  212)
43361 * frame_pointer_needed:                  Function Entry.     (line   34)
43362 * FRAME_POINTER_REGNUM:                  Frame Registers.    (line   14)
43363 * FRAME_POINTER_REGNUM and virtual registers: Regs and Memory.
43364                                                              (line   74)
43365 * frame_pointer_rtx:                     Frame Registers.    (line   90)
43366 * frame_related:                         Flags.              (line  247)
43367 * frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags.
43368                                                              (line  125)
43369 * frame_related, in mem:                 Flags.              (line  103)
43370 * frame_related, in reg:                 Flags.              (line  112)
43371 * frame_related, in symbol_ref:          Flags.              (line  183)
43372 * frequency, count, BB_FREQ_BASE:        Profile information.
43373                                                              (line   30)
43374 * ftruncM2 instruction pattern:          Standard Names.     (line  790)
43375 * function <1>:                          Functions for C++.  (line    6)
43376 * function:                              Functions.          (line    6)
43377 * function call conventions:             Interface.          (line    6)
43378 * function entry and exit:               Function Entry.     (line    6)
43379 * function entry point, alternate function entry point: Edges.
43380                                                              (line  180)
43381 * function properties:                   Function Properties.
43382                                                              (line    6)
43383 * function-call insns:                   Calls.              (line    6)
43384 * FUNCTION_ARG:                          Register Arguments. (line   11)
43385 * FUNCTION_ARG_ADVANCE:                  Register Arguments. (line  186)
43386 * FUNCTION_ARG_BOUNDARY:                 Register Arguments. (line  239)
43387 * FUNCTION_ARG_OFFSET:                   Register Arguments. (line  197)
43388 * FUNCTION_ARG_PADDING:                  Register Arguments. (line  204)
43389 * FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  244)
43390 * FUNCTION_BOUNDARY:                     Storage Layout.     (line  171)
43391 * FUNCTION_DECL <1>:                     Functions for C++.  (line    6)
43392 * FUNCTION_DECL:                         Functions.          (line    6)
43393 * FUNCTION_INCOMING_ARG:                 Register Arguments. (line   68)
43394 * FUNCTION_MODE:                         Misc.               (line  356)
43395 * FUNCTION_OUTGOING_VALUE:               Scalar Return.      (line   56)
43396 * FUNCTION_PROFILER:                     Profiling.          (line    9)
43397 * FUNCTION_TYPE:                         Types.              (line    6)
43398 * FUNCTION_VALUE:                        Scalar Return.      (line   52)
43399 * FUNCTION_VALUE_REGNO_P:                Scalar Return.      (line   81)
43400 * functions, leaf:                       Leaf Functions.     (line    6)
43401 * fundamental type:                      Types.              (line    6)
43402 * g in constraint:                       Simple Constraints. (line  110)
43403 * G in constraint:                       Simple Constraints. (line   88)
43404 * garbage collector, invocation:         Invoking the garbage collector.
43405                                                              (line    6)
43406 * GCC and portability:                   Portability.        (line    6)
43407 * GCC_DRIVER_HOST_INITIALIZATION:        Host Misc.          (line   36)
43408 * gcov_type:                             Profile information.
43409                                                              (line   41)
43410 * ge:                                    Comparisons.        (line   72)
43411 * ge and attributes:                     Expressions.        (line   64)
43412 * GE_EXPR:                               Unary and Binary Expressions.
43413                                                              (line    6)
43414 * GEN_ERRNO_RTX:                         Library Calls.      (line   71)
43415 * gencodes:                              RTL passes.         (line   18)
43416 * general_operand:                       Machine-Independent Predicates.
43417                                                              (line  105)
43418 * GENERAL_REGS:                          Register Classes.   (line   23)
43419 * generated files:                       Files.              (line    6)
43420 * generating assembler output:           Output Statement.   (line    6)
43421 * generating insns:                      RTL Template.       (line    6)
43422 * GENERIC <1>:                           GENERIC.            (line    6)
43423 * GENERIC <2>:                           Gimplification pass.
43424                                                              (line   12)
43425 * GENERIC:                               Parsing pass.       (line    6)
43426 * generic predicates:                    Machine-Independent Predicates.
43427                                                              (line    6)
43428 * genflags:                              RTL passes.         (line   18)
43429 * get_attr:                              Expressions.        (line   80)
43430 * get_attr_length:                       Insn Lengths.       (line   46)
43431 * GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  333)
43432 * GET_CODE:                              RTL Objects.        (line   47)
43433 * get_frame_size:                        Elimination.        (line   34)
43434 * get_insns:                             Insns.              (line   34)
43435 * get_last_insn:                         Insns.              (line   34)
43436 * GET_MODE:                              Machine Modes.      (line  280)
43437 * GET_MODE_ALIGNMENT:                    Machine Modes.      (line  320)
43438 * GET_MODE_BITSIZE:                      Machine Modes.      (line  304)
43439 * GET_MODE_CLASS:                        Machine Modes.      (line  294)
43440 * GET_MODE_FBIT:                         Machine Modes.      (line  311)
43441 * GET_MODE_IBIT:                         Machine Modes.      (line  307)
43442 * GET_MODE_MASK:                         Machine Modes.      (line  315)
43443 * GET_MODE_NAME:                         Machine Modes.      (line  291)
43444 * GET_MODE_NUNITS:                       Machine Modes.      (line  329)
43445 * GET_MODE_SIZE:                         Machine Modes.      (line  301)
43446 * GET_MODE_UNIT_SIZE:                    Machine Modes.      (line  323)
43447 * GET_MODE_WIDER_MODE:                   Machine Modes.      (line  297)
43448 * GET_RTX_CLASS:                         RTL Classes.        (line    6)
43449 * GET_RTX_FORMAT:                        RTL Classes.        (line  130)
43450 * GET_RTX_LENGTH:                        RTL Classes.        (line  127)
43451 * geu:                                   Comparisons.        (line   72)
43452 * geu and attributes:                    Expressions.        (line   64)
43453 * GGC:                                   Type Information.   (line    6)
43454 * ggc_collect:                           Invoking the garbage collector.
43455                                                              (line    6)
43456 * GIMPLE <1>:                            GIMPLE.             (line    6)
43457 * GIMPLE <2>:                            Gimplification pass.
43458                                                              (line    6)
43459 * GIMPLE:                                Parsing pass.       (line   14)
43460 * GIMPLE Exception Handling:             GIMPLE Exception Handling.
43461                                                              (line    6)
43462 * GIMPLE instruction set:                GIMPLE instruction set.
43463                                                              (line    6)
43464 * GIMPLE sequences:                      GIMPLE sequences.   (line    6)
43465 * gimple_addresses_taken:                Manipulating GIMPLE statements.
43466                                                              (line   90)
43467 * GIMPLE_ASM:                            GIMPLE_ASM.         (line    6)
43468 * gimple_asm_clear_volatile:             GIMPLE_ASM.         (line   63)
43469 * gimple_asm_clobber_op:                 GIMPLE_ASM.         (line   46)
43470 * gimple_asm_input_op:                   GIMPLE_ASM.         (line   30)
43471 * gimple_asm_output_op:                  GIMPLE_ASM.         (line   38)
43472 * gimple_asm_set_clobber_op:             GIMPLE_ASM.         (line   50)
43473 * gimple_asm_set_input_op:               GIMPLE_ASM.         (line   34)
43474 * gimple_asm_set_output_op:              GIMPLE_ASM.         (line   42)
43475 * gimple_asm_set_volatile:               GIMPLE_ASM.         (line   60)
43476 * gimple_asm_volatile_p:                 GIMPLE_ASM.         (line   57)
43477 * GIMPLE_ASSIGN:                         GIMPLE_ASSIGN.      (line    6)
43478 * gimple_assign_cast_p:                  GIMPLE_ASSIGN.      (line   89)
43479 * gimple_assign_lhs:                     GIMPLE_ASSIGN.      (line   51)
43480 * gimple_assign_rhs1:                    GIMPLE_ASSIGN.      (line   57)
43481 * gimple_assign_rhs2:                    GIMPLE_ASSIGN.      (line   64)
43482 * gimple_assign_set_lhs:                 GIMPLE_ASSIGN.      (line   71)
43483 * gimple_assign_set_rhs1:                GIMPLE_ASSIGN.      (line   74)
43484 * gimple_assign_set_rhs2:                GIMPLE_ASSIGN.      (line   85)
43485 * gimple_bb:                             Manipulating GIMPLE statements.
43486                                                              (line   18)
43487 * GIMPLE_BIND:                           GIMPLE_BIND.        (line    6)
43488 * gimple_bind_add_seq:                   GIMPLE_BIND.        (line   36)
43489 * gimple_bind_add_stmt:                  GIMPLE_BIND.        (line   32)
43490 * gimple_bind_append_vars:               GIMPLE_BIND.        (line   19)
43491 * gimple_bind_block:                     GIMPLE_BIND.        (line   40)
43492 * gimple_bind_body:                      GIMPLE_BIND.        (line   23)
43493 * gimple_bind_set_block:                 GIMPLE_BIND.        (line   45)
43494 * gimple_bind_set_body:                  GIMPLE_BIND.        (line   28)
43495 * gimple_bind_set_vars:                  GIMPLE_BIND.        (line   15)
43496 * gimple_bind_vars:                      GIMPLE_BIND.        (line   12)
43497 * gimple_block:                          Manipulating GIMPLE statements.
43498                                                              (line   21)
43499 * gimple_build_asm:                      GIMPLE_ASM.         (line    8)
43500 * gimple_build_asm_vec:                  GIMPLE_ASM.         (line   17)
43501 * gimple_build_assign:                   GIMPLE_ASSIGN.      (line    7)
43502 * gimple_build_assign_with_ops:          GIMPLE_ASSIGN.      (line   30)
43503 * gimple_build_bind:                     GIMPLE_BIND.        (line    8)
43504 * gimple_build_call:                     GIMPLE_CALL.        (line    8)
43505 * gimple_build_call_from_tree:           GIMPLE_CALL.        (line   16)
43506 * gimple_build_call_vec:                 GIMPLE_CALL.        (line   25)
43507 * gimple_build_catch:                    GIMPLE_CATCH.       (line    8)
43508 * gimple_build_cond:                     GIMPLE_COND.        (line    8)
43509 * gimple_build_cond_from_tree:           GIMPLE_COND.        (line   16)
43510 * gimple_build_debug_bind:               GIMPLE_DEBUG.       (line    8)
43511 * gimple_build_eh_filter:                GIMPLE_EH_FILTER.   (line    8)
43512 * gimple_build_goto:                     GIMPLE_LABEL.       (line   18)
43513 * gimple_build_label:                    GIMPLE_LABEL.       (line    7)
43514 * gimple_build_nop:                      GIMPLE_NOP.         (line    7)
43515 * gimple_build_omp_atomic_load:          GIMPLE_OMP_ATOMIC_LOAD.
43516                                                              (line    8)
43517 * gimple_build_omp_atomic_store:         GIMPLE_OMP_ATOMIC_STORE.
43518                                                              (line    7)
43519 * gimple_build_omp_continue:             GIMPLE_OMP_CONTINUE.
43520                                                              (line    8)
43521 * gimple_build_omp_critical:             GIMPLE_OMP_CRITICAL.
43522                                                              (line    8)
43523 * gimple_build_omp_for:                  GIMPLE_OMP_FOR.     (line    9)
43524 * gimple_build_omp_master:               GIMPLE_OMP_MASTER.  (line    7)
43525 * gimple_build_omp_ordered:              GIMPLE_OMP_ORDERED. (line    7)
43526 * gimple_build_omp_parallel:             GIMPLE_OMP_PARALLEL.
43527                                                              (line    8)
43528 * gimple_build_omp_return:               GIMPLE_OMP_RETURN.  (line    7)
43529 * gimple_build_omp_section:              GIMPLE_OMP_SECTION. (line    7)
43530 * gimple_build_omp_sections:             GIMPLE_OMP_SECTIONS.
43531                                                              (line    8)
43532 * gimple_build_omp_sections_switch:      GIMPLE_OMP_SECTIONS.
43533                                                              (line   14)
43534 * gimple_build_omp_single:               GIMPLE_OMP_SINGLE.  (line    8)
43535 * gimple_build_resx:                     GIMPLE_RESX.        (line    7)
43536 * gimple_build_return:                   GIMPLE_RETURN.      (line    7)
43537 * gimple_build_switch:                   GIMPLE_SWITCH.      (line    8)
43538 * gimple_build_switch_vec:               GIMPLE_SWITCH.      (line   16)
43539 * gimple_build_try:                      GIMPLE_TRY.         (line    8)
43540 * gimple_build_wce:                      GIMPLE_WITH_CLEANUP_EXPR.
43541                                                              (line    7)
43542 * GIMPLE_CALL:                           GIMPLE_CALL.        (line    6)
43543 * gimple_call_arg:                       GIMPLE_CALL.        (line   66)
43544 * gimple_call_cannot_inline_p:           GIMPLE_CALL.        (line   91)
43545 * gimple_call_chain:                     GIMPLE_CALL.        (line   57)
43546 * gimple_call_copy_skip_args:            GIMPLE_CALL.        (line   98)
43547 * gimple_call_fn:                        GIMPLE_CALL.        (line   38)
43548 * gimple_call_fndecl:                    GIMPLE_CALL.        (line   46)
43549 * gimple_call_lhs:                       GIMPLE_CALL.        (line   29)
43550 * gimple_call_mark_uninlinable:          GIMPLE_CALL.        (line   88)
43551 * gimple_call_noreturn_p:                GIMPLE_CALL.        (line   94)
43552 * gimple_call_return_type:               GIMPLE_CALL.        (line   54)
43553 * gimple_call_set_arg:                   GIMPLE_CALL.        (line   76)
43554 * gimple_call_set_chain:                 GIMPLE_CALL.        (line   60)
43555 * gimple_call_set_fn:                    GIMPLE_CALL.        (line   42)
43556 * gimple_call_set_fndecl:                GIMPLE_CALL.        (line   51)
43557 * gimple_call_set_lhs:                   GIMPLE_CALL.        (line   35)
43558 * gimple_call_set_tail:                  GIMPLE_CALL.        (line   80)
43559 * gimple_call_tail_p:                    GIMPLE_CALL.        (line   85)
43560 * GIMPLE_CATCH:                          GIMPLE_CATCH.       (line    6)
43561 * gimple_catch_handler:                  GIMPLE_CATCH.       (line   20)
43562 * gimple_catch_set_handler:              GIMPLE_CATCH.       (line   28)
43563 * gimple_catch_set_types:                GIMPLE_CATCH.       (line   24)
43564 * gimple_catch_types:                    GIMPLE_CATCH.       (line   13)
43565 * gimple_code:                           Manipulating GIMPLE statements.
43566                                                              (line   15)
43567 * GIMPLE_COND:                           GIMPLE_COND.        (line    6)
43568 * gimple_cond_false_label:               GIMPLE_COND.        (line   60)
43569 * gimple_cond_lhs:                       GIMPLE_COND.        (line   30)
43570 * gimple_cond_make_false:                GIMPLE_COND.        (line   64)
43571 * gimple_cond_make_true:                 GIMPLE_COND.        (line   67)
43572 * gimple_cond_rhs:                       GIMPLE_COND.        (line   38)
43573 * gimple_cond_set_code:                  GIMPLE_COND.        (line   26)
43574 * gimple_cond_set_false_label:           GIMPLE_COND.        (line   56)
43575 * gimple_cond_set_lhs:                   GIMPLE_COND.        (line   34)
43576 * gimple_cond_set_rhs:                   GIMPLE_COND.        (line   42)
43577 * gimple_cond_set_true_label:            GIMPLE_COND.        (line   51)
43578 * gimple_cond_true_label:                GIMPLE_COND.        (line   46)
43579 * gimple_copy:                           Manipulating GIMPLE statements.
43580                                                              (line  147)
43581 * GIMPLE_DEBUG:                          GIMPLE_DEBUG.       (line    6)
43582 * GIMPLE_DEBUG_BIND:                     GIMPLE_DEBUG.       (line    6)
43583 * gimple_debug_bind_get_value:           GIMPLE_DEBUG.       (line   48)
43584 * gimple_debug_bind_get_var:             GIMPLE_DEBUG.       (line   45)
43585 * gimple_debug_bind_has_value_p:         GIMPLE_DEBUG.       (line   69)
43586 * gimple_debug_bind_reset_value:         GIMPLE_DEBUG.       (line   65)
43587 * gimple_debug_bind_set_value:           GIMPLE_DEBUG.       (line   61)
43588 * gimple_debug_bind_set_var:             GIMPLE_DEBUG.       (line   57)
43589 * GIMPLE_EH_FILTER:                      GIMPLE_EH_FILTER.   (line    6)
43590 * gimple_eh_filter_failure:              GIMPLE_EH_FILTER.   (line   19)
43591 * gimple_eh_filter_must_not_throw:       GIMPLE_EH_FILTER.   (line   33)
43592 * gimple_eh_filter_set_failure:          GIMPLE_EH_FILTER.   (line   29)
43593 * gimple_eh_filter_set_must_not_throw:   GIMPLE_EH_FILTER.   (line   37)
43594 * gimple_eh_filter_set_types:            GIMPLE_EH_FILTER.   (line   24)
43595 * gimple_eh_filter_types:                GIMPLE_EH_FILTER.   (line   12)
43596 * gimple_expr_type:                      Manipulating GIMPLE statements.
43597                                                              (line   24)
43598 * gimple_goto_dest:                      GIMPLE_LABEL.       (line   21)
43599 * gimple_goto_set_dest:                  GIMPLE_LABEL.       (line   24)
43600 * gimple_has_mem_ops:                    Manipulating GIMPLE statements.
43601                                                              (line   72)
43602 * gimple_has_ops:                        Manipulating GIMPLE statements.
43603                                                              (line   69)
43604 * gimple_has_volatile_ops:               Manipulating GIMPLE statements.
43605                                                              (line  134)
43606 * GIMPLE_LABEL:                          GIMPLE_LABEL.       (line    6)
43607 * gimple_label_label:                    GIMPLE_LABEL.       (line   11)
43608 * gimple_label_set_label:                GIMPLE_LABEL.       (line   14)
43609 * gimple_loaded_syms:                    Manipulating GIMPLE statements.
43610                                                              (line  122)
43611 * gimple_locus:                          Manipulating GIMPLE statements.
43612                                                              (line   42)
43613 * gimple_locus_empty_p:                  Manipulating GIMPLE statements.
43614                                                              (line   48)
43615 * gimple_modified_p:                     Manipulating GIMPLE statements.
43616                                                              (line  130)
43617 * gimple_no_warning_p:                   Manipulating GIMPLE statements.
43618                                                              (line   51)
43619 * GIMPLE_NOP:                            GIMPLE_NOP.         (line    6)
43620 * gimple_nop_p:                          GIMPLE_NOP.         (line   10)
43621 * gimple_num_ops <1>:                    Manipulating GIMPLE statements.
43622                                                              (line   75)
43623 * gimple_num_ops:                        Logical Operators.  (line   76)
43624 * GIMPLE_OMP_ATOMIC_LOAD:                GIMPLE_OMP_ATOMIC_LOAD.
43625                                                              (line    6)
43626 * gimple_omp_atomic_load_lhs:            GIMPLE_OMP_ATOMIC_LOAD.
43627                                                              (line   17)
43628 * gimple_omp_atomic_load_rhs:            GIMPLE_OMP_ATOMIC_LOAD.
43629                                                              (line   24)
43630 * gimple_omp_atomic_load_set_lhs:        GIMPLE_OMP_ATOMIC_LOAD.
43631                                                              (line   14)
43632 * gimple_omp_atomic_load_set_rhs:        GIMPLE_OMP_ATOMIC_LOAD.
43633                                                              (line   21)
43634 * GIMPLE_OMP_ATOMIC_STORE:               GIMPLE_OMP_ATOMIC_STORE.
43635                                                              (line    6)
43636 * gimple_omp_atomic_store_set_val:       GIMPLE_OMP_ATOMIC_STORE.
43637                                                              (line   12)
43638 * gimple_omp_atomic_store_val:           GIMPLE_OMP_ATOMIC_STORE.
43639                                                              (line   15)
43640 * gimple_omp_body:                       GIMPLE_OMP_PARALLEL.
43641                                                              (line   24)
43642 * GIMPLE_OMP_CONTINUE:                   GIMPLE_OMP_CONTINUE.
43643                                                              (line    6)
43644 * gimple_omp_continue_control_def:       GIMPLE_OMP_CONTINUE.
43645                                                              (line   13)
43646 * gimple_omp_continue_control_def_ptr:   GIMPLE_OMP_CONTINUE.
43647                                                              (line   17)
43648 * gimple_omp_continue_control_use:       GIMPLE_OMP_CONTINUE.
43649                                                              (line   24)
43650 * gimple_omp_continue_control_use_ptr:   GIMPLE_OMP_CONTINUE.
43651                                                              (line   28)
43652 * gimple_omp_continue_set_control_def:   GIMPLE_OMP_CONTINUE.
43653                                                              (line   20)
43654 * gimple_omp_continue_set_control_use:   GIMPLE_OMP_CONTINUE.
43655                                                              (line   31)
43656 * GIMPLE_OMP_CRITICAL:                   GIMPLE_OMP_CRITICAL.
43657                                                              (line    6)
43658 * gimple_omp_critical_name:              GIMPLE_OMP_CRITICAL.
43659                                                              (line   13)
43660 * gimple_omp_critical_set_name:          GIMPLE_OMP_CRITICAL.
43661                                                              (line   21)
43662 * GIMPLE_OMP_FOR:                        GIMPLE_OMP_FOR.     (line    6)
43663 * gimple_omp_for_clauses:                GIMPLE_OMP_FOR.     (line   20)
43664 * gimple_omp_for_final:                  GIMPLE_OMP_FOR.     (line   51)
43665 * gimple_omp_for_incr:                   GIMPLE_OMP_FOR.     (line   61)
43666 * gimple_omp_for_index:                  GIMPLE_OMP_FOR.     (line   31)
43667 * gimple_omp_for_initial:                GIMPLE_OMP_FOR.     (line   41)
43668 * gimple_omp_for_pre_body:               GIMPLE_OMP_FOR.     (line   70)
43669 * gimple_omp_for_set_clauses:            GIMPLE_OMP_FOR.     (line   27)
43670 * gimple_omp_for_set_cond:               GIMPLE_OMP_FOR.     (line   80)
43671 * gimple_omp_for_set_final:              GIMPLE_OMP_FOR.     (line   58)
43672 * gimple_omp_for_set_incr:               GIMPLE_OMP_FOR.     (line   67)
43673 * gimple_omp_for_set_index:              GIMPLE_OMP_FOR.     (line   38)
43674 * gimple_omp_for_set_initial:            GIMPLE_OMP_FOR.     (line   48)
43675 * gimple_omp_for_set_pre_body:           GIMPLE_OMP_FOR.     (line   75)
43676 * GIMPLE_OMP_MASTER:                     GIMPLE_OMP_MASTER.  (line    6)
43677 * GIMPLE_OMP_ORDERED:                    GIMPLE_OMP_ORDERED. (line    6)
43678 * GIMPLE_OMP_PARALLEL:                   GIMPLE_OMP_PARALLEL.
43679                                                              (line    6)
43680 * gimple_omp_parallel_child_fn:          GIMPLE_OMP_PARALLEL.
43681                                                              (line   42)
43682 * gimple_omp_parallel_clauses:           GIMPLE_OMP_PARALLEL.
43683                                                              (line   31)
43684 * gimple_omp_parallel_combined_p:        GIMPLE_OMP_PARALLEL.
43685                                                              (line   16)
43686 * gimple_omp_parallel_data_arg:          GIMPLE_OMP_PARALLEL.
43687                                                              (line   54)
43688 * gimple_omp_parallel_set_child_fn:      GIMPLE_OMP_PARALLEL.
43689                                                              (line   51)
43690 * gimple_omp_parallel_set_clauses:       GIMPLE_OMP_PARALLEL.
43691                                                              (line   38)
43692 * gimple_omp_parallel_set_combined_p:    GIMPLE_OMP_PARALLEL.
43693                                                              (line   20)
43694 * gimple_omp_parallel_set_data_arg:      GIMPLE_OMP_PARALLEL.
43695                                                              (line   62)
43696 * GIMPLE_OMP_RETURN:                     GIMPLE_OMP_RETURN.  (line    6)
43697 * gimple_omp_return_nowait_p:            GIMPLE_OMP_RETURN.  (line   14)
43698 * gimple_omp_return_set_nowait:          GIMPLE_OMP_RETURN.  (line   11)
43699 * GIMPLE_OMP_SECTION:                    GIMPLE_OMP_SECTION. (line    6)
43700 * gimple_omp_section_last_p:             GIMPLE_OMP_SECTION. (line   12)
43701 * gimple_omp_section_set_last:           GIMPLE_OMP_SECTION. (line   16)
43702 * GIMPLE_OMP_SECTIONS:                   GIMPLE_OMP_SECTIONS.
43703                                                              (line    6)
43704 * gimple_omp_sections_clauses:           GIMPLE_OMP_SECTIONS.
43705                                                              (line   30)
43706 * gimple_omp_sections_control:           GIMPLE_OMP_SECTIONS.
43707                                                              (line   17)
43708 * gimple_omp_sections_set_clauses:       GIMPLE_OMP_SECTIONS.
43709                                                              (line   37)
43710 * gimple_omp_sections_set_control:       GIMPLE_OMP_SECTIONS.
43711                                                              (line   26)
43712 * gimple_omp_set_body:                   GIMPLE_OMP_PARALLEL.
43713                                                              (line   28)
43714 * GIMPLE_OMP_SINGLE:                     GIMPLE_OMP_SINGLE.  (line    6)
43715 * gimple_omp_single_clauses:             GIMPLE_OMP_SINGLE.  (line   14)
43716 * gimple_omp_single_set_clauses:         GIMPLE_OMP_SINGLE.  (line   21)
43717 * gimple_op <1>:                         Manipulating GIMPLE statements.
43718                                                              (line   81)
43719 * gimple_op:                             Logical Operators.  (line   79)
43720 * GIMPLE_PHI:                            GIMPLE_PHI.         (line    6)
43721 * gimple_phi_capacity:                   GIMPLE_PHI.         (line   10)
43722 * gimple_phi_num_args:                   GIMPLE_PHI.         (line   14)
43723 * gimple_phi_result:                     GIMPLE_PHI.         (line   19)
43724 * gimple_phi_set_arg:                    GIMPLE_PHI.         (line   33)
43725 * gimple_phi_set_result:                 GIMPLE_PHI.         (line   25)
43726 * GIMPLE_RESX:                           GIMPLE_RESX.        (line    6)
43727 * gimple_resx_region:                    GIMPLE_RESX.        (line   13)
43728 * gimple_resx_set_region:                GIMPLE_RESX.        (line   16)
43729 * GIMPLE_RETURN:                         GIMPLE_RETURN.      (line    6)
43730 * gimple_return_retval:                  GIMPLE_RETURN.      (line   10)
43731 * gimple_return_set_retval:              GIMPLE_RETURN.      (line   14)
43732 * gimple_rhs_class:                      GIMPLE_ASSIGN.      (line   46)
43733 * gimple_seq_add_seq:                    GIMPLE sequences.   (line   32)
43734 * gimple_seq_add_stmt:                   GIMPLE sequences.   (line   26)
43735 * gimple_seq_alloc:                      GIMPLE sequences.   (line   62)
43736 * gimple_seq_copy:                       GIMPLE sequences.   (line   67)
43737 * gimple_seq_deep_copy:                  GIMPLE sequences.   (line   37)
43738 * gimple_seq_empty_p:                    GIMPLE sequences.   (line   70)
43739 * gimple_seq_first:                      GIMPLE sequences.   (line   44)
43740 * gimple_seq_init:                       GIMPLE sequences.   (line   59)
43741 * gimple_seq_last:                       GIMPLE sequences.   (line   47)
43742 * gimple_seq_reverse:                    GIMPLE sequences.   (line   40)
43743 * gimple_seq_set_first:                  GIMPLE sequences.   (line   55)
43744 * gimple_seq_set_last:                   GIMPLE sequences.   (line   51)
43745 * gimple_seq_singleton_p:                GIMPLE sequences.   (line   79)
43746 * gimple_set_block:                      Manipulating GIMPLE statements.
43747                                                              (line   39)
43748 * gimple_set_def_ops:                    Manipulating GIMPLE statements.
43749                                                              (line   98)
43750 * gimple_set_has_volatile_ops:           Manipulating GIMPLE statements.
43751                                                              (line  138)
43752 * gimple_set_locus:                      Manipulating GIMPLE statements.
43753                                                              (line   45)
43754 * gimple_set_op:                         Manipulating GIMPLE statements.
43755                                                              (line   87)
43756 * gimple_set_plf:                        Manipulating GIMPLE statements.
43757                                                              (line   62)
43758 * gimple_set_use_ops:                    Manipulating GIMPLE statements.
43759                                                              (line  105)
43760 * gimple_set_vdef_ops:                   Manipulating GIMPLE statements.
43761                                                              (line  119)
43762 * gimple_set_visited:                    Manipulating GIMPLE statements.
43763                                                              (line   55)
43764 * gimple_set_vuse_ops:                   Manipulating GIMPLE statements.
43765                                                              (line  112)
43766 * gimple_statement_base:                 Tuple representation.
43767                                                              (line   14)
43768 * gimple_statement_with_ops:             Tuple representation.
43769                                                              (line   96)
43770 * gimple_stored_syms:                    Manipulating GIMPLE statements.
43771                                                              (line  126)
43772 * GIMPLE_SWITCH:                         GIMPLE_SWITCH.      (line    6)
43773 * gimple_switch_default_label:           GIMPLE_SWITCH.      (line   46)
43774 * gimple_switch_index:                   GIMPLE_SWITCH.      (line   31)
43775 * gimple_switch_label:                   GIMPLE_SWITCH.      (line   37)
43776 * gimple_switch_num_labels:              GIMPLE_SWITCH.      (line   22)
43777 * gimple_switch_set_default_label:       GIMPLE_SWITCH.      (line   50)
43778 * gimple_switch_set_index:               GIMPLE_SWITCH.      (line   34)
43779 * gimple_switch_set_label:               GIMPLE_SWITCH.      (line   42)
43780 * gimple_switch_set_num_labels:          GIMPLE_SWITCH.      (line   27)
43781 * GIMPLE_TRY:                            GIMPLE_TRY.         (line    6)
43782 * gimple_try_catch_is_cleanup:           GIMPLE_TRY.         (line   20)
43783 * gimple_try_cleanup:                    GIMPLE_TRY.         (line   27)
43784 * gimple_try_eval:                       GIMPLE_TRY.         (line   23)
43785 * gimple_try_flags:                      GIMPLE_TRY.         (line   16)
43786 * gimple_try_set_catch_is_cleanup:       GIMPLE_TRY.         (line   32)
43787 * gimple_try_set_cleanup:                GIMPLE_TRY.         (line   41)
43788 * gimple_try_set_eval:                   GIMPLE_TRY.         (line   36)
43789 * gimple_visited_p:                      Manipulating GIMPLE statements.
43790                                                              (line   58)
43791 * gimple_wce_cleanup:                    GIMPLE_WITH_CLEANUP_EXPR.
43792                                                              (line   11)
43793 * gimple_wce_cleanup_eh_only:            GIMPLE_WITH_CLEANUP_EXPR.
43794                                                              (line   18)
43795 * gimple_wce_set_cleanup:                GIMPLE_WITH_CLEANUP_EXPR.
43796                                                              (line   15)
43797 * gimple_wce_set_cleanup_eh_only:        GIMPLE_WITH_CLEANUP_EXPR.
43798                                                              (line   22)
43799 * GIMPLE_WITH_CLEANUP_EXPR:              GIMPLE_WITH_CLEANUP_EXPR.
43800                                                              (line    6)
43801 * gimplification <1>:                    Gimplification pass.
43802                                                              (line    6)
43803 * gimplification:                        Parsing pass.       (line   14)
43804 * gimplifier:                            Parsing pass.       (line   14)
43805 * gimplify_assign:                       GIMPLE_ASSIGN.      (line   19)
43806 * gimplify_expr:                         Gimplification pass.
43807                                                              (line   18)
43808 * gimplify_function_tree:                Gimplification pass.
43809                                                              (line   18)
43810 * GLOBAL_INIT_PRIORITY:                  Functions for C++.  (line  141)
43811 * global_regs:                           Register Basics.    (line   59)
43812 * GO_IF_LEGITIMATE_ADDRESS:              Addressing Modes.   (line   91)
43813 * GO_IF_MODE_DEPENDENT_ADDRESS:          Addressing Modes.   (line  192)
43814 * GOFAST, floating point emulation library: Library Calls.   (line   44)
43815 * gofast_maybe_init_libfuncs:            Library Calls.      (line   44)
43816 * greater than:                          Comparisons.        (line   60)
43817 * gsi_after_labels:                      Sequence iterators. (line   76)
43818 * gsi_bb:                                Sequence iterators. (line   83)
43819 * gsi_commit_edge_inserts:               Sequence iterators. (line  194)
43820 * gsi_commit_one_edge_insert:            Sequence iterators. (line  190)
43821 * gsi_end_p:                             Sequence iterators. (line   60)
43822 * gsi_for_stmt:                          Sequence iterators. (line  157)
43823 * gsi_insert_after:                      Sequence iterators. (line  147)
43824 * gsi_insert_before:                     Sequence iterators. (line  136)
43825 * gsi_insert_on_edge:                    Sequence iterators. (line  174)
43826 * gsi_insert_on_edge_immediate:          Sequence iterators. (line  185)
43827 * gsi_insert_seq_after:                  Sequence iterators. (line  154)
43828 * gsi_insert_seq_before:                 Sequence iterators. (line  143)
43829 * gsi_insert_seq_on_edge:                Sequence iterators. (line  179)
43830 * gsi_last:                              Sequence iterators. (line   50)
43831 * gsi_last_bb:                           Sequence iterators. (line   56)
43832 * gsi_link_after:                        Sequence iterators. (line  115)
43833 * gsi_link_before:                       Sequence iterators. (line  105)
43834 * gsi_link_seq_after:                    Sequence iterators. (line  110)
43835 * gsi_link_seq_before:                   Sequence iterators. (line   99)
43836 * gsi_move_after:                        Sequence iterators. (line  161)
43837 * gsi_move_before:                       Sequence iterators. (line  166)
43838 * gsi_move_to_bb_end:                    Sequence iterators. (line  171)
43839 * gsi_next:                              Sequence iterators. (line   66)
43840 * gsi_one_before_end_p:                  Sequence iterators. (line   63)
43841 * gsi_prev:                              Sequence iterators. (line   69)
43842 * gsi_remove:                            Sequence iterators. (line   90)
43843 * gsi_replace:                           Sequence iterators. (line  130)
43844 * gsi_seq:                               Sequence iterators. (line   86)
43845 * gsi_split_seq_after:                   Sequence iterators. (line  120)
43846 * gsi_split_seq_before:                  Sequence iterators. (line  125)
43847 * gsi_start:                             Sequence iterators. (line   40)
43848 * gsi_start_bb:                          Sequence iterators. (line   46)
43849 * gsi_stmt:                              Sequence iterators. (line   72)
43850 * gt:                                    Comparisons.        (line   60)
43851 * gt and attributes:                     Expressions.        (line   64)
43852 * GT_EXPR:                               Unary and Binary Expressions.
43853                                                              (line    6)
43854 * gtu:                                   Comparisons.        (line   64)
43855 * gtu and attributes:                    Expressions.        (line   64)
43856 * GTY:                                   Type Information.   (line    6)
43857 * H in constraint:                       Simple Constraints. (line   88)
43858 * HAmode:                                Machine Modes.      (line  144)
43859 * HANDLE_PRAGMA_PACK_PUSH_POP:           Misc.               (line  467)
43860 * HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  478)
43861 * HANDLE_SYSV_PRAGMA:                    Misc.               (line  438)
43862 * HANDLER:                               Statements for C++. (line    6)
43863 * HANDLER_BODY:                          Statements for C++. (line    6)
43864 * HANDLER_PARMS:                         Statements for C++. (line    6)
43865 * hard registers:                        Regs and Memory.    (line    9)
43866 * HARD_FRAME_POINTER_REGNUM:             Frame Registers.    (line   20)
43867 * HARD_REGNO_CALL_PART_CLOBBERED:        Register Basics.    (line   53)
43868 * HARD_REGNO_CALLER_SAVE_MODE:           Caller Saves.       (line   20)
43869 * HARD_REGNO_MODE_OK:                    Values in Registers.
43870                                                              (line   58)
43871 * HARD_REGNO_NREGS:                      Values in Registers.
43872                                                              (line   11)
43873 * HARD_REGNO_NREGS_HAS_PADDING:          Values in Registers.
43874                                                              (line   25)
43875 * HARD_REGNO_NREGS_WITH_PADDING:         Values in Registers.
43876                                                              (line   43)
43877 * HARD_REGNO_RENAME_OK:                  Values in Registers.
43878                                                              (line  119)
43879 * HAS_INIT_SECTION:                      Macros for Initialization.
43880                                                              (line   19)
43881 * HAS_LONG_COND_BRANCH:                  Misc.               (line    9)
43882 * HAS_LONG_UNCOND_BRANCH:                Misc.               (line   18)
43883 * HAVE_DOS_BASED_FILE_SYSTEM:            Filesystem.         (line   11)
43884 * HAVE_POST_DECREMENT:                   Addressing Modes.   (line   12)
43885 * HAVE_POST_INCREMENT:                   Addressing Modes.   (line   11)
43886 * HAVE_POST_MODIFY_DISP:                 Addressing Modes.   (line   18)
43887 * HAVE_POST_MODIFY_REG:                  Addressing Modes.   (line   24)
43888 * HAVE_PRE_DECREMENT:                    Addressing Modes.   (line   10)
43889 * HAVE_PRE_INCREMENT:                    Addressing Modes.   (line    9)
43890 * HAVE_PRE_MODIFY_DISP:                  Addressing Modes.   (line   17)
43891 * HAVE_PRE_MODIFY_REG:                   Addressing Modes.   (line   23)
43892 * HCmode:                                Machine Modes.      (line  197)
43893 * HFmode:                                Machine Modes.      (line   58)
43894 * high:                                  Constants.          (line  109)
43895 * HImode:                                Machine Modes.      (line   29)
43896 * HImode, in insn:                       Insns.              (line  272)
43897 * host configuration:                    Host Config.        (line    6)
43898 * host functions:                        Host Common.        (line    6)
43899 * host hooks:                            Host Common.        (line    6)
43900 * host makefile fragment:                Host Fragment.      (line    6)
43901 * HOST_BIT_BUCKET:                       Filesystem.         (line   51)
43902 * HOST_EXECUTABLE_SUFFIX:                Filesystem.         (line   45)
43903 * HOST_HOOKS_EXTRA_SIGNALS:              Host Common.        (line   12)
43904 * HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY:   Host Common.        (line   45)
43905 * HOST_HOOKS_GT_PCH_USE_ADDRESS:         Host Common.        (line   26)
43906 * HOST_LACKS_INODE_NUMBERS:              Filesystem.         (line   89)
43907 * HOST_LONG_FORMAT:                      Host Misc.          (line   45)
43908 * HOST_LONG_LONG_FORMAT:                 Host Misc.          (line   41)
43909 * HOST_OBJECT_SUFFIX:                    Filesystem.         (line   40)
43910 * HOST_PTR_PRINTF:                       Host Misc.          (line   49)
43911 * HOT_TEXT_SECTION_NAME:                 Sections.           (line   43)
43912 * HQmode:                                Machine Modes.      (line  107)
43913 * I in constraint:                       Simple Constraints. (line   71)
43914 * i in constraint:                       Simple Constraints. (line   60)
43915 * identifier:                            Identifiers.        (line    6)
43916 * IDENTIFIER_LENGTH:                     Identifiers.        (line   22)
43917 * IDENTIFIER_NODE:                       Identifiers.        (line    6)
43918 * IDENTIFIER_OPNAME_P:                   Identifiers.        (line   27)
43919 * IDENTIFIER_POINTER:                    Identifiers.        (line   17)
43920 * IDENTIFIER_TYPENAME_P:                 Identifiers.        (line   33)
43921 * IEEE 754-2008:                         Decimal float library routines.
43922                                                              (line    6)
43923 * IF_COND:                               Statements for C++. (line    6)
43924 * if_marked:                             GTY Options.        (line  156)
43925 * IF_STMT:                               Statements for C++. (line    6)
43926 * if_then_else:                          Comparisons.        (line   80)
43927 * if_then_else and attributes:           Expressions.        (line   32)
43928 * if_then_else usage:                    Side Effects.       (line   56)
43929 * IFCVT_EXTRA_FIELDS:                    Misc.               (line  622)
43930 * IFCVT_INIT_EXTRA_FIELDS:               Misc.               (line  617)
43931 * IFCVT_MODIFY_CANCEL:                   Misc.               (line  611)
43932 * IFCVT_MODIFY_FINAL:                    Misc.               (line  605)
43933 * IFCVT_MODIFY_INSN:                     Misc.               (line  599)
43934 * IFCVT_MODIFY_MULTIPLE_TESTS:           Misc.               (line  592)
43935 * IFCVT_MODIFY_TESTS:                    Misc.               (line  581)
43936 * IMAGPART_EXPR:                         Unary and Binary Expressions.
43937                                                              (line    6)
43938 * Immediate Uses:                        SSA Operands.       (line  274)
43939 * immediate_operand:                     Machine-Independent Predicates.
43940                                                              (line   11)
43941 * IMMEDIATE_PREFIX:                      Instruction Output. (line  140)
43942 * in_struct:                             Flags.              (line  263)
43943 * in_struct, in code_label and note:     Flags.              (line   59)
43944 * in_struct, in insn and jump_insn and call_insn: Flags.     (line   49)
43945 * in_struct, in insn, jump_insn and call_insn: Flags.        (line  166)
43946 * in_struct, in mem:                     Flags.              (line   70)
43947 * in_struct, in subreg:                  Flags.              (line  205)
43948 * include:                               Including Patterns. (line    6)
43949 * INCLUDE_DEFAULTS:                      Driver.             (line  430)
43950 * inclusive-or, bitwise:                 Arithmetic.         (line  158)
43951 * INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  183)
43952 * INCOMING_REGNO:                        Register Basics.    (line   91)
43953 * INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  139)
43954 * INCOMING_STACK_BOUNDARY:               Storage Layout.     (line  166)
43955 * INDEX_REG_CLASS:                       Register Classes.   (line  134)
43956 * indirect_jump instruction pattern:     Standard Names.     (line 1037)
43957 * indirect_operand:                      Machine-Independent Predicates.
43958                                                              (line   71)
43959 * INDIRECT_REF:                          Storage References. (line    6)
43960 * INIT_ARRAY_SECTION_ASM_OP:             Sections.           (line  108)
43961 * INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  149)
43962 * INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  177)
43963 * INIT_CUMULATIVE_LIBCALL_ARGS:          Register Arguments. (line  170)
43964 * INIT_ENVIRONMENT:                      Driver.             (line  369)
43965 * INIT_EXPANDERS:                        Per-Function Data.  (line   39)
43966 * INIT_EXPR:                             Unary and Binary Expressions.
43967                                                              (line    6)
43968 * init_machine_status:                   Per-Function Data.  (line   45)
43969 * init_one_libfunc:                      Library Calls.      (line   15)
43970 * INIT_SECTION_ASM_OP <1>:               Macros for Initialization.
43971                                                              (line   10)
43972 * INIT_SECTION_ASM_OP:                   Sections.           (line   92)
43973 * INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   85)
43974 * INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   83)
43975 * INITIAL_FRAME_POINTER_OFFSET:          Elimination.        (line   35)
43976 * initialization routines:               Initialization.     (line    6)
43977 * inlining:                              Target Attributes.  (line   87)
43978 * insert_insn_on_edge:                   Maintaining the CFG.
43979                                                              (line  118)
43980 * insn:                                  Insns.              (line   63)
43981 * insn and /f:                           Flags.              (line  125)
43982 * insn and /j:                           Flags.              (line  175)
43983 * insn and /s:                           Flags.              (line   49)
43984 * insn and /u:                           Flags.              (line   39)
43985 * insn and /v:                           Flags.              (line   44)
43986 * insn attributes:                       Insn Attributes.    (line    6)
43987 * insn canonicalization:                 Insn Canonicalizations.
43988                                                              (line    6)
43989 * insn includes:                         Including Patterns. (line    6)
43990 * insn lengths, computing:               Insn Lengths.       (line    6)
43991 * insn splitting:                        Insn Splitting.     (line    6)
43992 * insn-attr.h:                           Defining Attributes.
43993                                                              (line   24)
43994 * INSN_ANNULLED_BRANCH_P:                Flags.              (line   39)
43995 * INSN_CODE:                             Insns.              (line  298)
43996 * INSN_DELETED_P:                        Flags.              (line   44)
43997 * INSN_FROM_TARGET_P:                    Flags.              (line   49)
43998 * insn_list:                             Insns.              (line  545)
43999 * INSN_REFERENCES_ARE_DELAYED:           Misc.               (line  520)
44000 * INSN_SETS_ARE_DELAYED:                 Misc.               (line  509)
44001 * INSN_UID:                              Insns.              (line   23)
44002 * INSN_VAR_LOCATION:                     Insns.              (line  239)
44003 * insns:                                 Insns.              (line    6)
44004 * insns, generating:                     RTL Template.       (line    6)
44005 * insns, recognizing:                    RTL Template.       (line    6)
44006 * instruction attributes:                Insn Attributes.    (line    6)
44007 * instruction latency time:              Processor pipeline description.
44008                                                              (line    6)
44009 * instruction patterns:                  Patterns.           (line    6)
44010 * instruction splitting:                 Insn Splitting.     (line    6)
44011 * insv instruction pattern:              Standard Names.     (line  862)
44012 * int:                                   Manipulating GIMPLE statements.
44013                                                              (line   66)
44014 * INT16_TYPE:                            Type Layout.        (line  237)
44015 * INT32_TYPE:                            Type Layout.        (line  238)
44016 * INT64_TYPE:                            Type Layout.        (line  239)
44017 * INT8_TYPE:                             Type Layout.        (line  236)
44018 * INT_FAST16_TYPE:                       Type Layout.        (line  253)
44019 * INT_FAST32_TYPE:                       Type Layout.        (line  254)
44020 * INT_FAST64_TYPE:                       Type Layout.        (line  255)
44021 * INT_FAST8_TYPE:                        Type Layout.        (line  252)
44022 * INT_LEAST16_TYPE:                      Type Layout.        (line  245)
44023 * INT_LEAST32_TYPE:                      Type Layout.        (line  246)
44024 * INT_LEAST64_TYPE:                      Type Layout.        (line  247)
44025 * INT_LEAST8_TYPE:                       Type Layout.        (line  244)
44026 * INT_TYPE_SIZE:                         Type Layout.        (line   12)
44027 * INTEGER_CST:                           Constant expressions.
44028                                                              (line    6)
44029 * INTEGER_TYPE:                          Types.              (line    6)
44030 * Interdependence of Patterns:           Dependent Patterns. (line    6)
44031 * interfacing to GCC output:             Interface.          (line    6)
44032 * interlock delays:                      Processor pipeline description.
44033                                                              (line    6)
44034 * intermediate representation lowering:  Parsing pass.       (line   14)
44035 * INTMAX_TYPE:                           Type Layout.        (line  213)
44036 * INTPTR_TYPE:                           Type Layout.        (line  260)
44037 * introduction:                          Top.                (line    6)
44038 * INVOKE__main:                          Macros for Initialization.
44039                                                              (line   51)
44040 * ior:                                   Arithmetic.         (line  158)
44041 * ior and attributes:                    Expressions.        (line   50)
44042 * ior, canonicalization of:              Insn Canonicalizations.
44043                                                              (line   52)
44044 * iorM3 instruction pattern:             Standard Names.     (line  222)
44045 * IRA_COVER_CLASSES:                     Register Classes.   (line  535)
44046 * IRA_HARD_REGNO_ADD_COST_MULTIPLIER:    Allocation Order.   (line   37)
44047 * IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  120)
44048 * is_gimple_omp:                         GIMPLE_OMP_PARALLEL.
44049                                                              (line   65)
44050 * iterators in .md files:                Iterators.          (line    6)
44051 * IV analysis on GIMPLE:                 Scalar evolutions.  (line    6)
44052 * IV analysis on RTL:                    loop-iv.            (line    6)
44053 * jump:                                  Flags.              (line  314)
44054 * jump instruction pattern:              Standard Names.     (line  928)
44055 * jump instruction patterns:             Jump Patterns.      (line    6)
44056 * jump instructions and set:             Side Effects.       (line   56)
44057 * jump, in call_insn:                    Flags.              (line  179)
44058 * jump, in insn:                         Flags.              (line  175)
44059 * jump, in mem:                          Flags.              (line   79)
44060 * JUMP_ALIGN:                            Alignment Output.   (line    9)
44061 * jump_insn:                             Insns.              (line   73)
44062 * jump_insn and /f:                      Flags.              (line  125)
44063 * jump_insn and /s:                      Flags.              (line   49)
44064 * jump_insn and /u:                      Flags.              (line   39)
44065 * jump_insn and /v:                      Flags.              (line   44)
44066 * JUMP_LABEL:                            Insns.              (line   80)
44067 * JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  152)
44068 * Jumps:                                 Jumps.              (line    6)
44069 * LABEL_ALIGN:                           Alignment Output.   (line   52)
44070 * LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   22)
44071 * LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP:    Alignment Output.   (line   30)
44072 * LABEL_ALIGN_MAX_SKIP:                  Alignment Output.   (line   62)
44073 * LABEL_ALT_ENTRY_P:                     Insns.              (line  140)
44074 * LABEL_ALTERNATE_NAME:                  Edges.              (line  180)
44075 * LABEL_DECL:                            Declarations.       (line    6)
44076 * LABEL_KIND:                            Insns.              (line  140)
44077 * LABEL_NUSES:                           Insns.              (line  136)
44078 * LABEL_PRESERVE_P:                      Flags.              (line   59)
44079 * label_ref:                             Constants.          (line   86)
44080 * label_ref and /v:                      Flags.              (line   65)
44081 * label_ref, RTL sharing:                Sharing.            (line   35)
44082 * LABEL_REF_NONLOCAL_P:                  Flags.              (line   65)
44083 * lang_hooks.gimplify_expr:              Gimplification pass.
44084                                                              (line   18)
44085 * lang_hooks.parse_file:                 Parsing pass.       (line    6)
44086 * language-dependent trees:              Language-dependent trees.
44087                                                              (line    6)
44088 * language-independent intermediate representation: Parsing pass.
44089                                                              (line   14)
44090 * large return values:                   Aggregate Return.   (line    6)
44091 * LARGEST_EXPONENT_IS_NORMAL:            Storage Layout.     (line  474)
44092 * LAST_STACK_REG:                        Stack Registers.    (line   31)
44093 * LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
44094 * lceilMN2:                              Standard Names.     (line  597)
44095 * LCSSA:                                 LCSSA.              (line    6)
44096 * LD_FINI_SWITCH:                        Macros for Initialization.
44097                                                              (line   29)
44098 * LD_INIT_SWITCH:                        Macros for Initialization.
44099                                                              (line   25)
44100 * LDD_SUFFIX:                            Macros for Initialization.
44101                                                              (line  116)
44102 * le:                                    Comparisons.        (line   76)
44103 * le and attributes:                     Expressions.        (line   64)
44104 * LE_EXPR:                               Unary and Binary Expressions.
44105                                                              (line    6)
44106 * leaf functions:                        Leaf Functions.     (line    6)
44107 * leaf_function_p:                       Standard Names.     (line  999)
44108 * LEAF_REG_REMAP:                        Leaf Functions.     (line   39)
44109 * LEAF_REGISTERS:                        Leaf Functions.     (line   25)
44110 * left rotate:                           Arithmetic.         (line  190)
44111 * left shift:                            Arithmetic.         (line  168)
44112 * LEGITIMATE_CONSTANT_P:                 Addressing Modes.   (line  207)
44113 * LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   31)
44114 * LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  147)
44115 * length:                                GTY Options.        (line   50)
44116 * less than:                             Comparisons.        (line   68)
44117 * less than or equal:                    Comparisons.        (line   76)
44118 * leu:                                   Comparisons.        (line   76)
44119 * leu and attributes:                    Expressions.        (line   64)
44120 * lfloorMN2:                             Standard Names.     (line  592)
44121 * LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
44122 * LIB_SPEC:                              Driver.             (line  170)
44123 * LIBCALL_VALUE:                         Scalar Return.      (line   60)
44124 * libgcc.a:                              Library Calls.      (line    6)
44125 * LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
44126 * LIBGCC2_HAS_DF_MODE:                   Type Layout.        (line  109)
44127 * LIBGCC2_HAS_TF_MODE:                   Type Layout.        (line  123)
44128 * LIBGCC2_HAS_XF_MODE:                   Type Layout.        (line  117)
44129 * LIBGCC2_LONG_DOUBLE_TYPE_SIZE:         Type Layout.        (line  103)
44130 * LIBGCC2_UNWIND_ATTRIBUTE:              Misc.               (line  982)
44131 * LIBGCC2_WORDS_BIG_ENDIAN:              Storage Layout.     (line   36)
44132 * LIBGCC_SPEC:                           Driver.             (line  178)
44133 * library subroutine names:              Library Calls.      (line    6)
44134 * LIBRARY_PATH_ENV:                      Misc.               (line  560)
44135 * LIMIT_RELOAD_CLASS:                    Register Classes.   (line  254)
44136 * Linear loop transformations framework: Lambda.             (line    6)
44137 * LINK_COMMAND_SPEC:                     Driver.             (line  299)
44138 * LINK_EH_SPEC:                          Driver.             (line  205)
44139 * LINK_ELIMINATE_DUPLICATE_LDIRECTORIES: Driver.             (line  309)
44140 * LINK_GCC_C_SEQUENCE_SPEC:              Driver.             (line  295)
44141 * LINK_LIBGCC_SPECIAL_1:                 Driver.             (line  290)
44142 * LINK_SPEC:                             Driver.             (line  163)
44143 * list:                                  Containers.         (line    6)
44144 * Liveness representation:               Liveness information.
44145                                                              (line    6)
44146 * lo_sum:                                Arithmetic.         (line   24)
44147 * load address instruction:              Simple Constraints. (line  154)
44148 * LOAD_EXTEND_OP:                        Misc.               (line   69)
44149 * load_multiple instruction pattern:     Standard Names.     (line  137)
44150 * LOCAL_ALIGNMENT:                       Storage Layout.     (line  255)
44151 * LOCAL_CLASS_P:                         Classes.            (line   73)
44152 * LOCAL_DECL_ALIGNMENT:                  Storage Layout.     (line  279)
44153 * LOCAL_INCLUDE_DIR:                     Driver.             (line  376)
44154 * LOCAL_LABEL_PREFIX:                    Instruction Output. (line  138)
44155 * LOCAL_REGNO:                           Register Basics.    (line  105)
44156 * LOG_LINKS:                             Insns.              (line  317)
44157 * Logical Operators:                     Logical Operators.  (line    6)
44158 * logical-and, bitwise:                  Arithmetic.         (line  153)
44159 * logM2 instruction pattern:             Standard Names.     (line  505)
44160 * LONG_ACCUM_TYPE_SIZE:                  Type Layout.        (line   93)
44161 * LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   58)
44162 * LONG_FRACT_TYPE_SIZE:                  Type Layout.        (line   73)
44163 * LONG_LONG_ACCUM_TYPE_SIZE:             Type Layout.        (line   98)
44164 * LONG_LONG_FRACT_TYPE_SIZE:             Type Layout.        (line   78)
44165 * LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   33)
44166 * LONG_TYPE_SIZE:                        Type Layout.        (line   22)
44167 * longjmp and automatic variables:       Interface.          (line   52)
44168 * Loop analysis:                         Loop representation.
44169                                                              (line    6)
44170 * Loop manipulation:                     Loop manipulation.  (line    6)
44171 * Loop querying:                         Loop querying.      (line    6)
44172 * Loop representation:                   Loop representation.
44173                                                              (line    6)
44174 * Loop-closed SSA form:                  LCSSA.              (line    6)
44175 * LOOP_ALIGN:                            Alignment Output.   (line   35)
44176 * LOOP_ALIGN_MAX_SKIP:                   Alignment Output.   (line   48)
44177 * LOOP_EXPR:                             Unary and Binary Expressions.
44178                                                              (line    6)
44179 * looping instruction patterns:          Looping Patterns.   (line    6)
44180 * lowering, language-dependent intermediate representation: Parsing pass.
44181                                                              (line   14)
44182 * lrintMN2:                              Standard Names.     (line  582)
44183 * lroundMN2:                             Standard Names.     (line  587)
44184 * LSHIFT_EXPR:                           Unary and Binary Expressions.
44185                                                              (line    6)
44186 * lshiftrt:                              Arithmetic.         (line  185)
44187 * lshiftrt and attributes:               Expressions.        (line   64)
44188 * lshrM3 instruction pattern:            Standard Names.     (line  441)
44189 * lt:                                    Comparisons.        (line   68)
44190 * lt and attributes:                     Expressions.        (line   64)
44191 * LT_EXPR:                               Unary and Binary Expressions.
44192                                                              (line    6)
44193 * LTGT_EXPR:                             Unary and Binary Expressions.
44194                                                              (line    6)
44195 * ltu:                                   Comparisons.        (line   68)
44196 * m in constraint:                       Simple Constraints. (line   17)
44197 * machine attributes:                    Target Attributes.  (line    6)
44198 * machine description macros:            Target Macros.      (line    6)
44199 * machine descriptions:                  Machine Desc.       (line    6)
44200 * machine mode conversions:              Conversions.        (line    6)
44201 * machine modes:                         Machine Modes.      (line    6)
44202 * machine specific constraints:          Machine Constraints.
44203                                                              (line    6)
44204 * machine-independent predicates:        Machine-Independent Predicates.
44205                                                              (line    6)
44206 * macros, target description:            Target Macros.      (line    6)
44207 * maddMN4 instruction pattern:           Standard Names.     (line  364)
44208 * MAKE_DECL_ONE_ONLY:                    Label Output.       (line  218)
44209 * make_phi_node:                         GIMPLE_PHI.         (line    7)
44210 * make_safe_from:                        Expander Definitions.
44211                                                              (line  148)
44212 * makefile fragment:                     Fragments.          (line    6)
44213 * makefile targets:                      Makefile.           (line    6)
44214 * MALLOC_ABI_ALIGNMENT:                  Storage Layout.     (line  180)
44215 * Manipulating GIMPLE statements:        Manipulating GIMPLE statements.
44216                                                              (line    6)
44217 * mark_hook:                             GTY Options.        (line  171)
44218 * marking roots:                         GGC Roots.          (line    6)
44219 * MASK_RETURN_ADDR:                      Exception Region Output.
44220                                                              (line   35)
44221 * match_dup <1>:                         define_peephole2.   (line   28)
44222 * match_dup:                             RTL Template.       (line   73)
44223 * match_dup and attributes:              Insn Lengths.       (line   16)
44224 * match_op_dup:                          RTL Template.       (line  163)
44225 * match_operand:                         RTL Template.       (line   16)
44226 * match_operand and attributes:          Expressions.        (line   55)
44227 * match_operator:                        RTL Template.       (line   95)
44228 * match_par_dup:                         RTL Template.       (line  219)
44229 * match_parallel:                        RTL Template.       (line  172)
44230 * match_scratch <1>:                     define_peephole2.   (line   28)
44231 * match_scratch:                         RTL Template.       (line   58)
44232 * matching constraint:                   Simple Constraints. (line  132)
44233 * matching operands:                     Output Template.    (line   49)
44234 * math library:                          Soft float library routines.
44235                                                              (line    6)
44236 * math, in RTL:                          Arithmetic.         (line    6)
44237 * MATH_LIBRARY:                          Misc.               (line  553)
44238 * matherr:                               Library Calls.      (line   58)
44239 * MAX_BITS_PER_WORD:                     Storage Layout.     (line   61)
44240 * MAX_CONDITIONAL_EXECUTE:               Misc.               (line  575)
44241 * MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  421)
44242 * MAX_MOVE_MAX:                          Misc.               (line  120)
44243 * MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  217)
44244 * MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   43)
44245 * MAX_STACK_ALIGNMENT:                   Storage Layout.     (line  210)
44246 * maxM3 instruction pattern:             Standard Names.     (line  234)
44247 * may_trap_p, tree_could_trap_p:         Edges.              (line  115)
44248 * maybe_undef:                           GTY Options.        (line  179)
44249 * mcount:                                Profiling.          (line   12)
44250 * MD_CAN_REDIRECT_BRANCH:                Misc.               (line  712)
44251 * MD_EXEC_PREFIX:                        Driver.             (line  330)
44252 * MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line   98)
44253 * MD_HANDLE_UNWABI:                      Exception Handling. (line  118)
44254 * MD_STARTFILE_PREFIX:                   Driver.             (line  358)
44255 * MD_STARTFILE_PREFIX_1:                 Driver.             (line  364)
44256 * MD_UNWIND_SUPPORT:                     Exception Handling. (line   94)
44257 * mem:                                   Regs and Memory.    (line  374)
44258 * mem and /c:                            Flags.              (line   99)
44259 * mem and /f:                            Flags.              (line  103)
44260 * mem and /i:                            Flags.              (line   85)
44261 * mem and /j:                            Flags.              (line   79)
44262 * mem and /s:                            Flags.              (line   70)
44263 * mem and /u:                            Flags.              (line  152)
44264 * mem and /v:                            Flags.              (line   94)
44265 * mem, RTL sharing:                      Sharing.            (line   40)
44266 * MEM_ADDR_SPACE:                        Special Accessors.  (line   39)
44267 * MEM_ALIAS_SET:                         Special Accessors.  (line    9)
44268 * MEM_ALIGN:                             Special Accessors.  (line   36)
44269 * MEM_EXPR:                              Special Accessors.  (line   20)
44270 * MEM_IN_STRUCT_P:                       Flags.              (line   70)
44271 * MEM_KEEP_ALIAS_SET_P:                  Flags.              (line   79)
44272 * MEM_NOTRAP_P:                          Flags.              (line   99)
44273 * MEM_OFFSET:                            Special Accessors.  (line   28)
44274 * MEM_POINTER:                           Flags.              (line  103)
44275 * MEM_READONLY_P:                        Flags.              (line  152)
44276 * MEM_SCALAR_P:                          Flags.              (line   85)
44277 * MEM_SIZE:                              Special Accessors.  (line   31)
44278 * MEM_VOLATILE_P:                        Flags.              (line   94)
44279 * MEMBER_TYPE_FORCES_BLK:                Storage Layout.     (line  401)
44280 * memory model:                          Memory model.       (line    6)
44281 * memory reference, nonoffsettable:      Simple Constraints. (line  246)
44282 * memory references in constraints:      Simple Constraints. (line   17)
44283 * memory_barrier instruction pattern:    Standard Names.     (line 1381)
44284 * MEMORY_MOVE_COST:                      Costs.              (line   29)
44285 * memory_operand:                        Machine-Independent Predicates.
44286                                                              (line   58)
44287 * METHOD_TYPE:                           Types.              (line    6)
44288 * MIN_UNITS_PER_WORD:                    Storage Layout.     (line   71)
44289 * MINIMUM_ALIGNMENT:                     Storage Layout.     (line  289)
44290 * MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  188)
44291 * minM3 instruction pattern:             Standard Names.     (line  234)
44292 * minus:                                 Arithmetic.         (line   36)
44293 * minus and attributes:                  Expressions.        (line   64)
44294 * minus, canonicalization of:            Insn Canonicalizations.
44295                                                              (line   27)
44296 * MINUS_EXPR:                            Unary and Binary Expressions.
44297                                                              (line    6)
44298 * MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
44299 * mod:                                   Arithmetic.         (line  131)
44300 * mod and attributes:                    Expressions.        (line   64)
44301 * mode classes:                          Machine Modes.      (line  219)
44302 * mode iterators in .md files:           Mode Iterators.     (line    6)
44303 * mode switching:                        Mode Switching.     (line    6)
44304 * MODE_ACCUM:                            Machine Modes.      (line  249)
44305 * MODE_AFTER:                            Mode Switching.     (line   49)
44306 * MODE_BASE_REG_CLASS:                   Register Classes.   (line  112)
44307 * MODE_BASE_REG_REG_CLASS:               Register Classes.   (line  118)
44308 * MODE_CC <1>:                           MODE_CC Condition Codes.
44309                                                              (line    6)
44310 * MODE_CC:                               Machine Modes.      (line  268)
44311 * MODE_CODE_BASE_REG_CLASS:              Register Classes.   (line  125)
44312 * MODE_COMPLEX_FLOAT:                    Machine Modes.      (line  260)
44313 * MODE_COMPLEX_INT:                      Machine Modes.      (line  257)
44314 * MODE_DECIMAL_FLOAT:                    Machine Modes.      (line  237)
44315 * MODE_ENTRY:                            Mode Switching.     (line   54)
44316 * MODE_EXIT:                             Mode Switching.     (line   60)
44317 * MODE_FLOAT:                            Machine Modes.      (line  233)
44318 * MODE_FRACT:                            Machine Modes.      (line  241)
44319 * MODE_FUNCTION:                         Machine Modes.      (line  264)
44320 * MODE_INT:                              Machine Modes.      (line  225)
44321 * MODE_NEEDED:                           Mode Switching.     (line   42)
44322 * MODE_PARTIAL_INT:                      Machine Modes.      (line  229)
44323 * MODE_PRIORITY_TO_MODE:                 Mode Switching.     (line   66)
44324 * MODE_RANDOM:                           Machine Modes.      (line  273)
44325 * MODE_UACCUM:                           Machine Modes.      (line  253)
44326 * MODE_UFRACT:                           Machine Modes.      (line  245)
44327 * MODES_TIEABLE_P:                       Values in Registers.
44328                                                              (line  129)
44329 * modifiers in constraints:              Modifiers.          (line    6)
44330 * MODIFY_EXPR:                           Unary and Binary Expressions.
44331                                                              (line    6)
44332 * MODIFY_JNI_METHOD_CALL:                Misc.               (line  790)
44333 * MODIFY_TARGET_NAME:                    Driver.             (line  385)
44334 * modM3 instruction pattern:             Standard Names.     (line  222)
44335 * modulo scheduling:                     RTL passes.         (line  131)
44336 * MOVE_BY_PIECES_P:                      Costs.              (line  113)
44337 * MOVE_MAX:                              Misc.               (line  115)
44338 * MOVE_MAX_PIECES:                       Costs.              (line  119)
44339 * MOVE_RATIO:                            Costs.              (line   97)
44340 * movM instruction pattern:              Standard Names.     (line   11)
44341 * movmemM instruction pattern:           Standard Names.     (line  654)
44342 * movmisalignM instruction pattern:      Standard Names.     (line  126)
44343 * movMODEcc instruction pattern:         Standard Names.     (line  873)
44344 * movstr instruction pattern:            Standard Names.     (line  689)
44345 * movstrictM instruction pattern:        Standard Names.     (line  120)
44346 * msubMN4 instruction pattern:           Standard Names.     (line  387)
44347 * mulhisi3 instruction pattern:          Standard Names.     (line  340)
44348 * mulM3 instruction pattern:             Standard Names.     (line  222)
44349 * mulqihi3 instruction pattern:          Standard Names.     (line  344)
44350 * mulsidi3 instruction pattern:          Standard Names.     (line  344)
44351 * mult:                                  Arithmetic.         (line   92)
44352 * mult and attributes:                   Expressions.        (line   64)
44353 * mult, canonicalization of:             Insn Canonicalizations.
44354                                                              (line   27)
44355 * MULT_EXPR:                             Unary and Binary Expressions.
44356                                                              (line    6)
44357 * MULTILIB_DEFAULTS:                     Driver.             (line  315)
44358 * MULTILIB_DIRNAMES:                     Target Fragment.    (line   64)
44359 * MULTILIB_EXCEPTIONS:                   Target Fragment.    (line   84)
44360 * MULTILIB_EXTRA_OPTS:                   Target Fragment.    (line   96)
44361 * MULTILIB_MATCHES:                      Target Fragment.    (line   77)
44362 * MULTILIB_OPTIONS:                      Target Fragment.    (line   44)
44363 * multiple alternative constraints:      Multi-Alternative.  (line    6)
44364 * MULTIPLE_SYMBOL_SPACES:                Misc.               (line  533)
44365 * multiplication:                        Arithmetic.         (line   92)
44366 * multiplication with signed saturation: Arithmetic.         (line   92)
44367 * multiplication with unsigned saturation: Arithmetic.       (line   92)
44368 * MUST_USE_SJLJ_EXCEPTIONS:              Exception Region Output.
44369                                                              (line   64)
44370 * n in constraint:                       Simple Constraints. (line   65)
44371 * N_REG_CLASSES:                         Register Classes.   (line   76)
44372 * name:                                  Identifiers.        (line    6)
44373 * named address spaces:                  Named Address Spaces.
44374                                                              (line    6)
44375 * named patterns and conditions:         Patterns.           (line   47)
44376 * names, pattern:                        Standard Names.     (line    6)
44377 * namespace, scope:                      Namespaces.         (line    6)
44378 * NAMESPACE_DECL <1>:                    Namespaces.         (line    6)
44379 * NAMESPACE_DECL:                        Declarations.       (line    6)
44380 * NATIVE_SYSTEM_HEADER_DIR:              Target Fragment.    (line  103)
44381 * ne:                                    Comparisons.        (line   56)
44382 * ne and attributes:                     Expressions.        (line   64)
44383 * NE_EXPR:                               Unary and Binary Expressions.
44384                                                              (line    6)
44385 * nearbyintM2 instruction pattern:       Standard Names.     (line  564)
44386 * neg:                                   Arithmetic.         (line   81)
44387 * neg and attributes:                    Expressions.        (line   64)
44388 * neg, canonicalization of:              Insn Canonicalizations.
44389                                                              (line   27)
44390 * NEGATE_EXPR:                           Unary and Binary Expressions.
44391                                                              (line    6)
44392 * negation:                              Arithmetic.         (line   81)
44393 * negation with signed saturation:       Arithmetic.         (line   81)
44394 * negation with unsigned saturation:     Arithmetic.         (line   81)
44395 * negM2 instruction pattern:             Standard Names.     (line  449)
44396 * nested functions, trampolines for:     Trampolines.        (line    6)
44397 * nested_ptr:                            GTY Options.        (line  186)
44398 * next_bb, prev_bb, FOR_EACH_BB:         Basic Blocks.       (line   10)
44399 * NEXT_INSN:                             Insns.              (line   30)
44400 * NEXT_OBJC_RUNTIME:                     Library Calls.      (line   94)
44401 * nil:                                   RTL Objects.        (line   73)
44402 * NO_DBX_BNSYM_ENSYM:                    DBX Hooks.          (line   39)
44403 * NO_DBX_FUNCTION_END:                   DBX Hooks.          (line   33)
44404 * NO_DBX_GCC_MARKER:                     File Names and DBX. (line   28)
44405 * NO_DBX_MAIN_SOURCE_DIRECTORY:          File Names and DBX. (line   23)
44406 * NO_DOLLAR_IN_LABEL:                    Misc.               (line  497)
44407 * NO_DOT_IN_LABEL:                       Misc.               (line  503)
44408 * NO_FUNCTION_CSE:                       Costs.              (line  209)
44409 * NO_IMPLICIT_EXTERN_C:                  Misc.               (line  376)
44410 * NO_PROFILE_COUNTERS:                   Profiling.          (line   28)
44411 * NO_REGS:                               Register Classes.   (line   17)
44412 * NON_LVALUE_EXPR:                       Unary and Binary Expressions.
44413                                                              (line    6)
44414 * nondeterministic finite state automaton: Processor pipeline description.
44415                                                              (line  301)
44416 * nonimmediate_operand:                  Machine-Independent Predicates.
44417                                                              (line  101)
44418 * nonlocal goto handler:                 Edges.              (line  171)
44419 * nonlocal_goto instruction pattern:     Standard Names.     (line 1221)
44420 * nonlocal_goto_receiver instruction pattern: Standard Names.
44421                                                              (line 1238)
44422 * nonmemory_operand:                     Machine-Independent Predicates.
44423                                                              (line   97)
44424 * nonoffsettable memory reference:       Simple Constraints. (line  246)
44425 * nop instruction pattern:               Standard Names.     (line 1032)
44426 * NOP_EXPR:                              Unary and Binary Expressions.
44427                                                              (line    6)
44428 * normal predicates:                     Predicates.         (line   31)
44429 * not:                                   Arithmetic.         (line  149)
44430 * not and attributes:                    Expressions.        (line   50)
44431 * not equal:                             Comparisons.        (line   56)
44432 * not, canonicalization of:              Insn Canonicalizations.
44433                                                              (line   27)
44434 * note:                                  Insns.              (line  168)
44435 * note and /i:                           Flags.              (line   59)
44436 * note and /v:                           Flags.              (line   44)
44437 * NOTE_INSN_BASIC_BLOCK, CODE_LABEL, notes: Basic Blocks.    (line   41)
44438 * NOTE_INSN_BLOCK_BEG:                   Insns.              (line  193)
44439 * NOTE_INSN_BLOCK_END:                   Insns.              (line  193)
44440 * NOTE_INSN_DELETED:                     Insns.              (line  183)
44441 * NOTE_INSN_DELETED_LABEL:               Insns.              (line  188)
44442 * NOTE_INSN_EH_REGION_BEG:               Insns.              (line  199)
44443 * NOTE_INSN_EH_REGION_END:               Insns.              (line  199)
44444 * NOTE_INSN_FUNCTION_BEG:                Insns.              (line  223)
44445 * NOTE_INSN_LOOP_BEG:                    Insns.              (line  207)
44446 * NOTE_INSN_LOOP_CONT:                   Insns.              (line  213)
44447 * NOTE_INSN_LOOP_END:                    Insns.              (line  207)
44448 * NOTE_INSN_LOOP_VTOP:                   Insns.              (line  217)
44449 * NOTE_INSN_VAR_LOCATION:                Insns.              (line  227)
44450 * NOTE_LINE_NUMBER:                      Insns.              (line  168)
44451 * NOTE_SOURCE_FILE:                      Insns.              (line  168)
44452 * NOTE_VAR_LOCATION:                     Insns.              (line  227)
44453 * NOTICE_UPDATE_CC:                      CC0 Condition Codes.
44454                                                              (line   31)
44455 * NUM_MACHINE_MODES:                     Machine Modes.      (line  286)
44456 * NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   30)
44457 * Number of iterations analysis:         Number of iterations.
44458                                                              (line    6)
44459 * o in constraint:                       Simple Constraints. (line   23)
44460 * OBJC_GEN_METHOD_LABEL:                 Label Output.       (line  412)
44461 * OBJC_JBLEN:                            Misc.               (line  977)
44462 * OBJECT_FORMAT_COFF:                    Macros for Initialization.
44463                                                              (line   97)
44464 * OFFSET_TYPE:                           Types.              (line    6)
44465 * offsettable address:                   Simple Constraints. (line   23)
44466 * OImode:                                Machine Modes.      (line   51)
44467 * Omega a solver for linear programming problems: Omega.     (line    6)
44468 * OMP_ATOMIC:                            OpenMP.             (line    6)
44469 * OMP_CLAUSE:                            OpenMP.             (line    6)
44470 * OMP_CONTINUE:                          OpenMP.             (line    6)
44471 * OMP_CRITICAL:                          OpenMP.             (line    6)
44472 * OMP_FOR:                               OpenMP.             (line    6)
44473 * OMP_MASTER:                            OpenMP.             (line    6)
44474 * OMP_ORDERED:                           OpenMP.             (line    6)
44475 * OMP_PARALLEL:                          OpenMP.             (line    6)
44476 * OMP_RETURN:                            OpenMP.             (line    6)
44477 * OMP_SECTION:                           OpenMP.             (line    6)
44478 * OMP_SECTIONS:                          OpenMP.             (line    6)
44479 * OMP_SINGLE:                            OpenMP.             (line    6)
44480 * one_cmplM2 instruction pattern:        Standard Names.     (line  651)
44481 * operand access:                        Accessors.          (line    6)
44482 * Operand Access Routines:               SSA Operands.       (line  119)
44483 * operand constraints:                   Constraints.        (line    6)
44484 * Operand Iterators:                     SSA Operands.       (line  119)
44485 * operand predicates:                    Predicates.         (line    6)
44486 * operand substitution:                  Output Template.    (line    6)
44487 * operands <1>:                          Patterns.           (line   53)
44488 * operands:                              SSA Operands.       (line    6)
44489 * Operands:                              Operands.           (line    6)
44490 * operator predicates:                   Predicates.         (line    6)
44491 * optc-gen.awk:                          Options.            (line    6)
44492 * Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
44493 * OPTIMIZATION_OPTIONS:                  Run-time Target.    (line  134)
44494 * OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    9)
44495 * option specification files:            Options.            (line    6)
44496 * OPTION_DEFAULT_SPECS:                  Driver.             (line   88)
44497 * optional hardware or system features:  Run-time Target.    (line   59)
44498 * options, directory search:             Including Patterns. (line   44)
44499 * order of register allocation:          Allocation Order.   (line    6)
44500 * ORDER_REGS_FOR_LOCAL_ALLOC:            Allocation Order.   (line   23)
44501 * ordered_comparison_operator:           Machine-Independent Predicates.
44502                                                              (line  116)
44503 * ORDERED_EXPR:                          Unary and Binary Expressions.
44504                                                              (line    6)
44505 * Ordering of Patterns:                  Pattern Ordering.   (line    6)
44506 * ORIGINAL_REGNO:                        Special Accessors.  (line   44)
44507 * other register constraints:            Simple Constraints. (line  163)
44508 * OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   71)
44509 * OUTGOING_REGNO:                        Register Basics.    (line   98)
44510 * output of assembler code:              File Framework.     (line    6)
44511 * output statements:                     Output Statement.   (line    6)
44512 * output templates:                      Output Template.    (line    6)
44513 * OUTPUT_ADDR_CONST_EXTRA:               Data Output.        (line   39)
44514 * output_asm_insn:                       Output Statement.   (line   53)
44515 * OUTPUT_QUOTED_STRING:                  File Framework.     (line   93)
44516 * OVERLOAD:                              Functions for C++.  (line    6)
44517 * OVERRIDE_ABI_FORMAT:                   Register Arguments. (line  140)
44518 * OVERRIDE_OPTIONS:                      Run-time Target.    (line  105)
44519 * OVL_CURRENT:                           Functions for C++.  (line    6)
44520 * OVL_NEXT:                              Functions for C++.  (line    6)
44521 * p in constraint:                       Simple Constraints. (line  154)
44522 * PAD_VARARGS_DOWN:                      Register Arguments. (line  221)
44523 * parallel:                              Side Effects.       (line  204)
44524 * param_is:                              GTY Options.        (line  114)
44525 * parameters, c++ abi:                   C++ ABI.            (line    6)
44526 * parameters, miscellaneous:             Misc.               (line    6)
44527 * parameters, precompiled headers:       PCH Target.         (line    6)
44528 * paramN_is:                             GTY Options.        (line  132)
44529 * parity:                                Arithmetic.         (line  232)
44530 * parityM2 instruction pattern:          Standard Names.     (line  645)
44531 * PARM_BOUNDARY:                         Storage Layout.     (line  145)
44532 * PARM_DECL:                             Declarations.       (line    6)
44533 * PARSE_LDD_OUTPUT:                      Macros for Initialization.
44534                                                              (line  121)
44535 * passes and files of the compiler:      Passes.             (line    6)
44536 * passing arguments:                     Interface.          (line   36)
44537 * PATH_SEPARATOR:                        Filesystem.         (line   31)
44538 * PATTERN:                               Insns.              (line  288)
44539 * pattern conditions:                    Patterns.           (line   43)
44540 * pattern names:                         Standard Names.     (line    6)
44541 * Pattern Ordering:                      Pattern Ordering.   (line    6)
44542 * patterns:                              Patterns.           (line    6)
44543 * pc:                                    Regs and Memory.    (line  361)
44544 * pc and attributes:                     Insn Lengths.       (line   20)
44545 * pc, RTL sharing:                       Sharing.            (line   25)
44546 * PC_REGNUM:                             Register Basics.    (line  112)
44547 * pc_rtx:                                Regs and Memory.    (line  366)
44548 * PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  315)
44549 * PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   65)
44550 * PDImode:                               Machine Modes.      (line   40)
44551 * peephole optimization, RTL representation: Side Effects.   (line  238)
44552 * peephole optimizer definitions:        Peephole Definitions.
44553                                                              (line    6)
44554 * per-function data:                     Per-Function Data.  (line    6)
44555 * percent sign:                          Output Template.    (line    6)
44556 * PHI nodes:                             SSA.                (line   31)
44557 * phi_arg_d:                             GIMPLE_PHI.         (line   28)
44558 * PHI_ARG_DEF:                           SSA.                (line   71)
44559 * PHI_ARG_EDGE:                          SSA.                (line   68)
44560 * PHI_ARG_ELT:                           SSA.                (line   63)
44561 * PHI_NUM_ARGS:                          SSA.                (line   59)
44562 * PHI_RESULT:                            SSA.                (line   56)
44563 * PIC:                                   PIC.                (line    6)
44564 * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   26)
44565 * PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   16)
44566 * pipeline hazard recognizer:            Processor pipeline description.
44567                                                              (line    6)
44568 * Plugins:                               Plugins.            (line    6)
44569 * plus:                                  Arithmetic.         (line   14)
44570 * plus and attributes:                   Expressions.        (line   64)
44571 * plus, canonicalization of:             Insn Canonicalizations.
44572                                                              (line   27)
44573 * PLUS_EXPR:                             Unary and Binary Expressions.
44574                                                              (line    6)
44575 * Pmode:                                 Misc.               (line  344)
44576 * pmode_register_operand:                Machine-Independent Predicates.
44577                                                              (line   35)
44578 * pointer:                               Types.              (line    6)
44579 * POINTER_PLUS_EXPR:                     Unary and Binary Expressions.
44580                                                              (line    6)
44581 * POINTER_SIZE:                          Storage Layout.     (line   83)
44582 * POINTER_TYPE:                          Types.              (line    6)
44583 * POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   89)
44584 * pop_operand:                           Machine-Independent Predicates.
44585                                                              (line   88)
44586 * popcount:                              Arithmetic.         (line  228)
44587 * popcountM2 instruction pattern:        Standard Names.     (line  639)
44588 * portability:                           Portability.        (line    6)
44589 * position independent code:             PIC.                (line    6)
44590 * post_dec:                              Incdec.             (line   25)
44591 * post_inc:                              Incdec.             (line   30)
44592 * post_modify:                           Incdec.             (line   33)
44593 * POSTDECREMENT_EXPR:                    Unary and Binary Expressions.
44594                                                              (line    6)
44595 * POSTINCREMENT_EXPR:                    Unary and Binary Expressions.
44596                                                              (line    6)
44597 * POWI_MAX_MULTS:                        Misc.               (line  845)
44598 * powM3 instruction pattern:             Standard Names.     (line  513)
44599 * pragma:                                Misc.               (line  381)
44600 * pre_dec:                               Incdec.             (line    8)
44601 * PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  113)
44602 * pre_inc:                               Incdec.             (line   22)
44603 * pre_modify:                            Incdec.             (line   51)
44604 * PREDECREMENT_EXPR:                     Unary and Binary Expressions.
44605                                                              (line    6)
44606 * predefined macros:                     Run-time Target.    (line    6)
44607 * predicates:                            Predicates.         (line    6)
44608 * predicates and machine modes:          Predicates.         (line   31)
44609 * predication <1>:                       Cond. Exec. Macros. (line    6)
44610 * predication:                           Conditional Execution.
44611                                                              (line    6)
44612 * predict.def:                           Profile information.
44613                                                              (line   24)
44614 * PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   42)
44615 * PREFERRED_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  246)
44616 * PREFERRED_RELOAD_CLASS:                Register Classes.   (line  211)
44617 * PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  159)
44618 * prefetch:                              Side Effects.       (line  312)
44619 * prefetch and /v:                       Flags.              (line  232)
44620 * prefetch instruction pattern:          Standard Names.     (line 1360)
44621 * PREFETCH_SCHEDULE_BARRIER_P:           Flags.              (line  232)
44622 * PREINCREMENT_EXPR:                     Unary and Binary Expressions.
44623                                                              (line    6)
44624 * presence_set:                          Processor pipeline description.
44625                                                              (line  220)
44626 * preserving SSA form:                   SSA.                (line   76)
44627 * preserving virtual SSA form:           SSA.                (line  186)
44628 * prev_active_insn:                      define_peephole.    (line   60)
44629 * PREV_INSN:                             Insns.              (line   26)
44630 * PRINT_OPERAND:                         Instruction Output. (line   81)
44631 * PRINT_OPERAND_ADDRESS:                 Instruction Output. (line  109)
44632 * PRINT_OPERAND_PUNCT_VALID_P:           Instruction Output. (line  102)
44633 * probe_stack instruction pattern:       Standard Names.     (line 1213)
44634 * processor functional units:            Processor pipeline description.
44635                                                              (line    6)
44636 * processor pipeline description:        Processor pipeline description.
44637                                                              (line    6)
44638 * product:                               Arithmetic.         (line   92)
44639 * profile feedback:                      Profile information.
44640                                                              (line   14)
44641 * profile representation:                Profile information.
44642                                                              (line    6)
44643 * PROFILE_BEFORE_PROLOGUE:               Profiling.          (line   35)
44644 * PROFILE_HOOK:                          Profiling.          (line   23)
44645 * profiling, code generation:            Profiling.          (line    6)
44646 * program counter:                       Regs and Memory.    (line  362)
44647 * prologue:                              Function Entry.     (line    6)
44648 * prologue instruction pattern:          Standard Names.     (line 1304)
44649 * PROMOTE_MODE:                          Storage Layout.     (line  100)
44650 * pseudo registers:                      Regs and Memory.    (line    9)
44651 * PSImode:                               Machine Modes.      (line   32)
44652 * PTRDIFF_TYPE:                          Type Layout.        (line  184)
44653 * purge_dead_edges <1>:                  Maintaining the CFG.
44654                                                              (line   93)
44655 * purge_dead_edges:                      Edges.              (line  104)
44656 * push address instruction:              Simple Constraints. (line  154)
44657 * PUSH_ARGS:                             Stack Arguments.    (line   18)
44658 * PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   26)
44659 * push_operand:                          Machine-Independent Predicates.
44660                                                              (line   81)
44661 * push_reload:                           Addressing Modes.   (line  171)
44662 * PUSH_ROUNDING:                         Stack Arguments.    (line   32)
44663 * pushM1 instruction pattern:            Standard Names.     (line  209)
44664 * PUT_CODE:                              RTL Objects.        (line   47)
44665 * PUT_MODE:                              Machine Modes.      (line  283)
44666 * PUT_REG_NOTE_KIND:                     Insns.              (line  350)
44667 * PUT_SDB_:                              SDB and DWARF.      (line   69)
44668 * QCmode:                                Machine Modes.      (line  197)
44669 * QFmode:                                Machine Modes.      (line   54)
44670 * QImode:                                Machine Modes.      (line   25)
44671 * QImode, in insn:                       Insns.              (line  272)
44672 * QQmode:                                Machine Modes.      (line  103)
44673 * qualified type <1>:                    Types for C++.      (line    6)
44674 * qualified type:                        Types.              (line    6)
44675 * querying function unit reservations:   Processor pipeline description.
44676                                                              (line   90)
44677 * question mark:                         Multi-Alternative.  (line   41)
44678 * quotient:                              Arithmetic.         (line  111)
44679 * r in constraint:                       Simple Constraints. (line   56)
44680 * RANGE_TEST_NON_SHORT_CIRCUIT:          Costs.              (line  213)
44681 * RDIV_EXPR:                             Unary and Binary Expressions.
44682                                                              (line    6)
44683 * READONLY_DATA_SECTION_ASM_OP:          Sections.           (line   63)
44684 * real operands:                         SSA Operands.       (line    6)
44685 * REAL_ARITHMETIC:                       Floating Point.     (line   66)
44686 * REAL_CST:                              Constant expressions.
44687                                                              (line    6)
44688 * REAL_LIBGCC_SPEC:                      Driver.             (line  187)
44689 * REAL_NM_FILE_NAME:                     Macros for Initialization.
44690                                                              (line  106)
44691 * REAL_TYPE:                             Types.              (line    6)
44692 * REAL_VALUE_ABS:                        Floating Point.     (line   82)
44693 * REAL_VALUE_ATOF:                       Floating Point.     (line   50)
44694 * REAL_VALUE_FIX:                        Floating Point.     (line   41)
44695 * REAL_VALUE_FROM_INT:                   Floating Point.     (line   99)
44696 * REAL_VALUE_ISINF:                      Floating Point.     (line   59)
44697 * REAL_VALUE_ISNAN:                      Floating Point.     (line   62)
44698 * REAL_VALUE_NEGATE:                     Floating Point.     (line   79)
44699 * REAL_VALUE_NEGATIVE:                   Floating Point.     (line   56)
44700 * REAL_VALUE_TO_INT:                     Floating Point.     (line   93)
44701 * REAL_VALUE_TO_TARGET_DECIMAL128:       Data Output.        (line  144)
44702 * REAL_VALUE_TO_TARGET_DECIMAL32:        Data Output.        (line  142)
44703 * REAL_VALUE_TO_TARGET_DECIMAL64:        Data Output.        (line  143)
44704 * REAL_VALUE_TO_TARGET_DOUBLE:           Data Output.        (line  140)
44705 * REAL_VALUE_TO_TARGET_LONG_DOUBLE:      Data Output.        (line  141)
44706 * REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  139)
44707 * REAL_VALUE_TRUNCATE:                   Floating Point.     (line   86)
44708 * REAL_VALUE_TYPE:                       Floating Point.     (line   26)
44709 * REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   45)
44710 * REAL_VALUES_EQUAL:                     Floating Point.     (line   32)
44711 * REAL_VALUES_LESS:                      Floating Point.     (line   38)
44712 * REALPART_EXPR:                         Unary and Binary Expressions.
44713                                                              (line    6)
44714 * recog_data.operand:                    Instruction Output. (line   39)
44715 * recognizing insns:                     RTL Template.       (line    6)
44716 * RECORD_TYPE <1>:                       Classes.            (line    6)
44717 * RECORD_TYPE:                           Types.              (line    6)
44718 * redirect_edge_and_branch:              Profile information.
44719                                                              (line   71)
44720 * redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
44721                                                              (line  103)
44722 * reduc_smax_M instruction pattern:      Standard Names.     (line  240)
44723 * reduc_smin_M instruction pattern:      Standard Names.     (line  240)
44724 * reduc_splus_M instruction pattern:     Standard Names.     (line  252)
44725 * reduc_umax_M instruction pattern:      Standard Names.     (line  246)
44726 * reduc_umin_M instruction pattern:      Standard Names.     (line  246)
44727 * reduc_uplus_M instruction pattern:     Standard Names.     (line  258)
44728 * reference:                             Types.              (line    6)
44729 * REFERENCE_TYPE:                        Types.              (line    6)
44730 * reg:                                   Regs and Memory.    (line    9)
44731 * reg and /f:                            Flags.              (line  112)
44732 * reg and /i:                            Flags.              (line  107)
44733 * reg and /v:                            Flags.              (line  116)
44734 * reg, RTL sharing:                      Sharing.            (line   17)
44735 * REG_ALLOC_ORDER:                       Allocation Order.   (line    9)
44736 * REG_BR_PRED:                           Insns.              (line  531)
44737 * REG_BR_PROB:                           Insns.              (line  525)
44738 * REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information.
44739                                                              (line   82)
44740 * REG_BR_PROB_BASE, EDGE_FREQUENCY:      Profile information.
44741                                                              (line   52)
44742 * REG_CC_SETTER:                         Insns.              (line  496)
44743 * REG_CC_USER:                           Insns.              (line  496)
44744 * REG_CLASS_CONTENTS:                    Register Classes.   (line   86)
44745 * reg_class_contents:                    Register Basics.    (line   59)
44746 * REG_CLASS_FROM_CONSTRAINT:             Old Constraints.    (line   35)
44747 * REG_CLASS_FROM_LETTER:                 Old Constraints.    (line   27)
44748 * REG_CLASS_NAMES:                       Register Classes.   (line   81)
44749 * REG_CROSSING_JUMP:                     Insns.              (line  409)
44750 * REG_DEAD:                              Insns.              (line  361)
44751 * REG_DEAD, REG_UNUSED:                  Liveness information.
44752                                                              (line   32)
44753 * REG_DEP_ANTI:                          Insns.              (line  518)
44754 * REG_DEP_OUTPUT:                        Insns.              (line  514)
44755 * REG_DEP_TRUE:                          Insns.              (line  511)
44756 * REG_EH_REGION, EDGE_ABNORMAL_CALL:     Edges.              (line  110)
44757 * REG_EQUAL:                             Insns.              (line  424)
44758 * REG_EQUIV:                             Insns.              (line  424)
44759 * REG_EXPR:                              Special Accessors.  (line   50)
44760 * REG_FRAME_RELATED_EXPR:                Insns.              (line  537)
44761 * REG_FUNCTION_VALUE_P:                  Flags.              (line  107)
44762 * REG_INC:                               Insns.              (line  377)
44763 * reg_label and /v:                      Flags.              (line   65)
44764 * REG_LABEL_OPERAND:                     Insns.              (line  391)
44765 * REG_LABEL_TARGET:                      Insns.              (line  400)
44766 * reg_names <1>:                         Instruction Output. (line   93)
44767 * reg_names:                             Register Basics.    (line   59)
44768 * REG_NONNEG:                            Insns.              (line  383)
44769 * REG_NOTE_KIND:                         Insns.              (line  350)
44770 * REG_NOTES:                             Insns.              (line  324)
44771 * REG_OFFSET:                            Special Accessors.  (line   54)
44772 * REG_OK_STRICT:                         Register Classes.   (line  148)
44773 * REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   56)
44774 * REG_PARM_STACK_SPACE, and FUNCTION_ARG: Register Arguments.
44775                                                              (line   52)
44776 * REG_POINTER:                           Flags.              (line  112)
44777 * REG_SETJMP:                            Insns.              (line  418)
44778 * REG_UNUSED:                            Insns.              (line  370)
44779 * REG_USERVAR_P:                         Flags.              (line  116)
44780 * regclass_for_constraint:               C Constraint Interface.
44781                                                              (line   60)
44782 * register allocation order:             Allocation Order.   (line    6)
44783 * register class definitions:            Register Classes.   (line    6)
44784 * register class preference constraints: Class Preferences.  (line    6)
44785 * register pairs:                        Values in Registers.
44786                                                              (line   69)
44787 * Register Transfer Language (RTL):      RTL.                (line    6)
44788 * register usage:                        Registers.          (line    6)
44789 * REGISTER_MOVE_COST:                    Costs.              (line   10)
44790 * REGISTER_NAMES:                        Instruction Output. (line    9)
44791 * register_operand:                      Machine-Independent Predicates.
44792                                                              (line   30)
44793 * REGISTER_PREFIX:                       Instruction Output. (line  137)
44794 * REGISTER_TARGET_PRAGMAS:               Misc.               (line  382)
44795 * registers arguments:                   Register Arguments. (line    6)
44796 * registers in constraints:              Simple Constraints. (line   56)
44797 * REGMODE_NATURAL_SIZE:                  Values in Registers.
44798                                                              (line   50)
44799 * REGNO_MODE_CODE_OK_FOR_BASE_P:         Register Classes.   (line  181)
44800 * REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  154)
44801 * REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  166)
44802 * REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  140)
44803 * REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  194)
44804 * REGNO_REG_CLASS:                       Register Classes.   (line  101)
44805 * regs_ever_live:                        Function Entry.     (line   21)
44806 * regular expressions:                   Processor pipeline description.
44807                                                              (line    6)
44808 * relative costs:                        Costs.              (line    6)
44809 * RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  325)
44810 * reload_completed:                      Standard Names.     (line  999)
44811 * reload_in instruction pattern:         Standard Names.     (line   99)
44812 * reload_in_progress:                    Standard Names.     (line   57)
44813 * reload_out instruction pattern:        Standard Names.     (line   99)
44814 * reloading:                             RTL passes.         (line  182)
44815 * remainder:                             Arithmetic.         (line  131)
44816 * remainderM3 instruction pattern:       Standard Names.     (line  472)
44817 * reorder:                               GTY Options.        (line  210)
44818 * representation of RTL:                 RTL.                (line    6)
44819 * reservation delays:                    Processor pipeline description.
44820                                                              (line    6)
44821 * rest_of_decl_compilation:              Parsing pass.       (line   52)
44822 * rest_of_type_compilation:              Parsing pass.       (line   52)
44823 * restore_stack_block instruction pattern: Standard Names.   (line 1133)
44824 * restore_stack_function instruction pattern: Standard Names.
44825                                                              (line 1133)
44826 * restore_stack_nonlocal instruction pattern: Standard Names.
44827                                                              (line 1133)
44828 * RESULT_DECL:                           Declarations.       (line    6)
44829 * return:                                Side Effects.       (line   72)
44830 * return instruction pattern:            Standard Names.     (line  986)
44831 * return values in registers:            Scalar Return.      (line    6)
44832 * RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  135)
44833 * RETURN_ADDR_OFFSET:                    Exception Handling. (line   60)
44834 * RETURN_ADDR_RTX:                       Frame Layout.       (line  124)
44835 * RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   51)
44836 * RETURN_EXPR:                           Statements for C++. (line    6)
44837 * RETURN_POPS_ARGS:                      Stack Arguments.    (line   90)
44838 * RETURN_STMT:                           Statements for C++. (line    6)
44839 * return_val:                            Flags.              (line  299)
44840 * return_val, in call_insn:              Flags.              (line   24)
44841 * return_val, in mem:                    Flags.              (line   85)
44842 * return_val, in reg:                    Flags.              (line  107)
44843 * return_val, in symbol_ref:             Flags.              (line  220)
44844 * returning aggregate values:            Aggregate Return.   (line    6)
44845 * returning structures and unions:       Interface.          (line   10)
44846 * reverse probability:                   Profile information.
44847                                                              (line   66)
44848 * REVERSE_CONDEXEC_PREDICATES_P:         Cond. Exec. Macros. (line   11)
44849 * REVERSE_CONDITION:                     MODE_CC Condition Codes.
44850                                                              (line   87)
44851 * REVERSIBLE_CC_MODE:                    MODE_CC Condition Codes.
44852                                                              (line   73)
44853 * right rotate:                          Arithmetic.         (line  190)
44854 * right shift:                           Arithmetic.         (line  185)
44855 * rintM2 instruction pattern:            Standard Names.     (line  572)
44856 * RISC:                                  Processor pipeline description.
44857                                                              (line    6)
44858 * roots, marking:                        GGC Roots.          (line    6)
44859 * rotate:                                Arithmetic.         (line  190)
44860 * rotatert:                              Arithmetic.         (line  190)
44861 * rotlM3 instruction pattern:            Standard Names.     (line  441)
44862 * rotrM3 instruction pattern:            Standard Names.     (line  441)
44863 * ROUND_DIV_EXPR:                        Unary and Binary Expressions.
44864                                                              (line    6)
44865 * ROUND_MOD_EXPR:                        Unary and Binary Expressions.
44866                                                              (line    6)
44867 * ROUND_TOWARDS_ZERO:                    Storage Layout.     (line  465)
44868 * ROUND_TYPE_ALIGN:                      Storage Layout.     (line  412)
44869 * roundM2 instruction pattern:           Standard Names.     (line  548)
44870 * RSHIFT_EXPR:                           Unary and Binary Expressions.
44871                                                              (line    6)
44872 * RTL addition:                          Arithmetic.         (line   14)
44873 * RTL addition with signed saturation:   Arithmetic.         (line   14)
44874 * RTL addition with unsigned saturation: Arithmetic.         (line   14)
44875 * RTL classes:                           RTL Classes.        (line    6)
44876 * RTL comparison:                        Arithmetic.         (line   43)
44877 * RTL comparison operations:             Comparisons.        (line    6)
44878 * RTL constant expression types:         Constants.          (line    6)
44879 * RTL constants:                         Constants.          (line    6)
44880 * RTL declarations:                      RTL Declarations.   (line    6)
44881 * RTL difference:                        Arithmetic.         (line   36)
44882 * RTL expression:                        RTL Objects.        (line    6)
44883 * RTL expressions for arithmetic:        Arithmetic.         (line    6)
44884 * RTL format:                            RTL Classes.        (line   71)
44885 * RTL format characters:                 RTL Classes.        (line   76)
44886 * RTL function-call insns:               Calls.              (line    6)
44887 * RTL insn template:                     RTL Template.       (line    6)
44888 * RTL integers:                          RTL Objects.        (line    6)
44889 * RTL memory expressions:                Regs and Memory.    (line    6)
44890 * RTL object types:                      RTL Objects.        (line    6)
44891 * RTL postdecrement:                     Incdec.             (line    6)
44892 * RTL postincrement:                     Incdec.             (line    6)
44893 * RTL predecrement:                      Incdec.             (line    6)
44894 * RTL preincrement:                      Incdec.             (line    6)
44895 * RTL register expressions:              Regs and Memory.    (line    6)
44896 * RTL representation:                    RTL.                (line    6)
44897 * RTL side effect expressions:           Side Effects.       (line    6)
44898 * RTL strings:                           RTL Objects.        (line    6)
44899 * RTL structure sharing assumptions:     Sharing.            (line    6)
44900 * RTL subtraction:                       Arithmetic.         (line   36)
44901 * RTL subtraction with signed saturation: Arithmetic.        (line   36)
44902 * RTL subtraction with unsigned saturation: Arithmetic.      (line   36)
44903 * RTL sum:                               Arithmetic.         (line   14)
44904 * RTL vectors:                           RTL Objects.        (line    6)
44905 * RTL_CONST_CALL_P:                      Flags.              (line   19)
44906 * RTL_CONST_OR_PURE_CALL_P:              Flags.              (line   29)
44907 * RTL_LOOPING_CONST_OR_PURE_CALL_P:      Flags.              (line   33)
44908 * RTL_PURE_CALL_P:                       Flags.              (line   24)
44909 * RTX (See RTL):                         RTL Objects.        (line    6)
44910 * RTX codes, classes of:                 RTL Classes.        (line    6)
44911 * RTX_FRAME_RELATED_P:                   Flags.              (line  125)
44912 * run-time conventions:                  Interface.          (line    6)
44913 * run-time target specification:         Run-time Target.    (line    6)
44914 * s in constraint:                       Simple Constraints. (line   92)
44915 * same_type_p:                           Types.              (line   88)
44916 * SAmode:                                Machine Modes.      (line  148)
44917 * sat_fract:                             Conversions.        (line   90)
44918 * satfractMN2 instruction pattern:       Standard Names.     (line  825)
44919 * satfractunsMN2 instruction pattern:    Standard Names.     (line  838)
44920 * satisfies_constraint_:                 C Constraint Interface.
44921                                                              (line   47)
44922 * SAVE_EXPR:                             Unary and Binary Expressions.
44923                                                              (line    6)
44924 * save_stack_block instruction pattern:  Standard Names.     (line 1133)
44925 * save_stack_function instruction pattern: Standard Names.   (line 1133)
44926 * save_stack_nonlocal instruction pattern: Standard Names.   (line 1133)
44927 * SBSS_SECTION_ASM_OP:                   Sections.           (line   77)
44928 * Scalar evolutions:                     Scalar evolutions.  (line    6)
44929 * scalars, returned as values:           Scalar Return.      (line    6)
44930 * SCHED_GROUP_P:                         Flags.              (line  166)
44931 * SCmode:                                Machine Modes.      (line  197)
44932 * scratch:                               Regs and Memory.    (line  298)
44933 * scratch operands:                      Regs and Memory.    (line  298)
44934 * scratch, RTL sharing:                  Sharing.            (line   35)
44935 * scratch_operand:                       Machine-Independent Predicates.
44936                                                              (line   50)
44937 * SDATA_SECTION_ASM_OP:                  Sections.           (line   58)
44938 * SDB_ALLOW_FORWARD_REFERENCES:          SDB and DWARF.      (line   87)
44939 * SDB_ALLOW_UNKNOWN_REFERENCES:          SDB and DWARF.      (line   82)
44940 * SDB_DEBUGGING_INFO:                    SDB and DWARF.      (line    9)
44941 * SDB_DELIM:                             SDB and DWARF.      (line   75)
44942 * SDB_OUTPUT_SOURCE_LINE:                SDB and DWARF.      (line   92)
44943 * SDmode:                                Machine Modes.      (line   85)
44944 * sdot_prodM instruction pattern:        Standard Names.     (line  264)
44945 * search options:                        Including Patterns. (line   44)
44946 * SECONDARY_INPUT_RELOAD_CLASS:          Register Classes.   (line  350)
44947 * SECONDARY_MEMORY_NEEDED:               Register Classes.   (line  406)
44948 * SECONDARY_MEMORY_NEEDED_MODE:          Register Classes.   (line  425)
44949 * SECONDARY_MEMORY_NEEDED_RTX:           Register Classes.   (line  416)
44950 * SECONDARY_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  351)
44951 * SECONDARY_RELOAD_CLASS:                Register Classes.   (line  349)
44952 * SELECT_CC_MODE:                        MODE_CC Condition Codes.
44953                                                              (line    7)
44954 * sequence:                              Side Effects.       (line  254)
44955 * Sequence iterators:                    Sequence iterators. (line    6)
44956 * set:                                   Side Effects.       (line   15)
44957 * set and /f:                            Flags.              (line  125)
44958 * SET_ASM_OP:                            Label Output.       (line  379)
44959 * set_attr:                              Tagging Insns.      (line   31)
44960 * set_attr_alternative:                  Tagging Insns.      (line   49)
44961 * set_bb_seq:                            GIMPLE sequences.   (line   76)
44962 * SET_BY_PIECES_P:                       Costs.              (line  154)
44963 * SET_DEST:                              Side Effects.       (line   69)
44964 * SET_IS_RETURN_P:                       Flags.              (line  175)
44965 * SET_LABEL_KIND:                        Insns.              (line  140)
44966 * set_optab_libfunc:                     Library Calls.      (line   15)
44967 * SET_RATIO:                             Costs.              (line  142)
44968 * SET_SRC:                               Side Effects.       (line   69)
44969 * SET_TYPE_STRUCTURAL_EQUALITY:          Types.              (line    6)
44970 * setmemM instruction pattern:           Standard Names.     (line  697)
44971 * SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line  102)
44972 * SF_SIZE:                               Type Layout.        (line  129)
44973 * SFmode:                                Machine Modes.      (line   66)
44974 * sharing of RTL components:             Sharing.            (line    6)
44975 * shift:                                 Arithmetic.         (line  168)
44976 * SHIFT_COUNT_TRUNCATED:                 Misc.               (line  127)
44977 * SHLIB_SUFFIX:                          Macros for Initialization.
44978                                                              (line  129)
44979 * SHORT_ACCUM_TYPE_SIZE:                 Type Layout.        (line   83)
44980 * SHORT_FRACT_TYPE_SIZE:                 Type Layout.        (line   63)
44981 * SHORT_IMMEDIATES_SIGN_EXTEND:          Misc.               (line   96)
44982 * SHORT_TYPE_SIZE:                       Type Layout.        (line   16)
44983 * sibcall_epilogue instruction pattern:  Standard Names.     (line 1330)
44984 * sibling call:                          Edges.              (line  122)
44985 * SIBLING_CALL_P:                        Flags.              (line  179)
44986 * SIG_ATOMIC_TYPE:                       Type Layout.        (line  235)
44987 * sign_extend:                           Conversions.        (line   23)
44988 * sign_extract:                          Bit-Fields.         (line    8)
44989 * sign_extract, canonicalization of:     Insn Canonicalizations.
44990                                                              (line   88)
44991 * signed division:                       Arithmetic.         (line  111)
44992 * signed division with signed saturation: Arithmetic.        (line  111)
44993 * signed maximum:                        Arithmetic.         (line  136)
44994 * signed minimum:                        Arithmetic.         (line  136)
44995 * SImode:                                Machine Modes.      (line   37)
44996 * simple constraints:                    Simple Constraints. (line    6)
44997 * sincos math function, implicit usage:  Library Calls.      (line   84)
44998 * sinM2 instruction pattern:             Standard Names.     (line  489)
44999 * SIZE_ASM_OP:                           Label Output.       (line   23)
45000 * SIZE_TYPE:                             Type Layout.        (line  168)
45001 * skip:                                  GTY Options.        (line   77)
45002 * SLOW_BYTE_ACCESS:                      Costs.              (line   66)
45003 * SLOW_UNALIGNED_ACCESS:                 Costs.              (line   81)
45004 * SMALL_REGISTER_CLASSES:                Register Classes.   (line  448)
45005 * smax:                                  Arithmetic.         (line  136)
45006 * smin:                                  Arithmetic.         (line  136)
45007 * sms, swing, software pipelining:       RTL passes.         (line  131)
45008 * smulM3_highpart instruction pattern:   Standard Names.     (line  356)
45009 * soft float library:                    Soft float library routines.
45010                                                              (line    6)
45011 * special:                               GTY Options.        (line  230)
45012 * special predicates:                    Predicates.         (line   31)
45013 * SPECS:                                 Target Fragment.    (line  108)
45014 * speed of instructions:                 Costs.              (line    6)
45015 * split_block:                           Maintaining the CFG.
45016                                                              (line  110)
45017 * splitting instructions:                Insn Splitting.     (line    6)
45018 * SQmode:                                Machine Modes.      (line  111)
45019 * sqrt:                                  Arithmetic.         (line  202)
45020 * sqrtM2 instruction pattern:            Standard Names.     (line  455)
45021 * square root:                           Arithmetic.         (line  202)
45022 * ss_abs:                                Arithmetic.         (line  195)
45023 * ss_ashift:                             Arithmetic.         (line  168)
45024 * ss_div:                                Arithmetic.         (line  111)
45025 * ss_minus:                              Arithmetic.         (line   36)
45026 * ss_mult:                               Arithmetic.         (line   92)
45027 * ss_neg:                                Arithmetic.         (line   81)
45028 * ss_plus:                               Arithmetic.         (line   14)
45029 * ss_truncate:                           Conversions.        (line   43)
45030 * SSA:                                   SSA.                (line    6)
45031 * SSA_NAME_DEF_STMT:                     SSA.                (line  221)
45032 * SSA_NAME_VERSION:                      SSA.                (line  226)
45033 * ssaddM3 instruction pattern:           Standard Names.     (line  222)
45034 * ssashlM3 instruction pattern:          Standard Names.     (line  431)
45035 * ssdivM3 instruction pattern:           Standard Names.     (line  222)
45036 * ssmaddMN4 instruction pattern:         Standard Names.     (line  379)
45037 * ssmsubMN4 instruction pattern:         Standard Names.     (line  403)
45038 * ssmulM3 instruction pattern:           Standard Names.     (line  222)
45039 * ssnegM2 instruction pattern:           Standard Names.     (line  449)
45040 * sssubM3 instruction pattern:           Standard Names.     (line  222)
45041 * ssum_widenM3 instruction pattern:      Standard Names.     (line  274)
45042 * stack arguments:                       Stack Arguments.    (line    6)
45043 * stack frame layout:                    Frame Layout.       (line    6)
45044 * stack smashing protection:             Stack Smashing Protection.
45045                                                              (line    6)
45046 * STACK_ALIGNMENT_NEEDED:                Frame Layout.       (line   48)
45047 * STACK_BOUNDARY:                        Storage Layout.     (line  151)
45048 * STACK_CHECK_BUILTIN:                   Stack Checking.     (line   32)
45049 * STACK_CHECK_FIXED_FRAME_SIZE:          Stack Checking.     (line   83)
45050 * STACK_CHECK_MAX_FRAME_SIZE:            Stack Checking.     (line   74)
45051 * STACK_CHECK_MAX_VAR_SIZE:              Stack Checking.     (line   90)
45052 * STACK_CHECK_MOVING_SP:                 Stack Checking.     (line   54)
45053 * STACK_CHECK_PROBE_INTERVAL_EXP:        Stack Checking.     (line   46)
45054 * STACK_CHECK_PROTECT:                   Stack Checking.     (line   63)
45055 * STACK_CHECK_STATIC_BUILTIN:            Stack Checking.     (line   39)
45056 * STACK_DYNAMIC_OFFSET:                  Frame Layout.       (line   75)
45057 * STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory.
45058                                                              (line   83)
45059 * STACK_GROWS_DOWNWARD:                  Frame Layout.       (line    9)
45060 * STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   81)
45061 * STACK_POINTER_OFFSET:                  Frame Layout.       (line   58)
45062 * STACK_POINTER_OFFSET and virtual registers: Regs and Memory.
45063                                                              (line   93)
45064 * STACK_POINTER_REGNUM:                  Frame Registers.    (line    9)
45065 * STACK_POINTER_REGNUM and virtual registers: Regs and Memory.
45066                                                              (line   83)
45067 * stack_pointer_rtx:                     Frame Registers.    (line   90)
45068 * stack_protect_set instruction pattern: Standard Names.     (line 1501)
45069 * stack_protect_test instruction pattern: Standard Names.    (line 1511)
45070 * STACK_PUSH_CODE:                       Frame Layout.       (line   17)
45071 * STACK_REG_COVER_CLASS:                 Stack Registers.    (line   23)
45072 * STACK_REGS:                            Stack Registers.    (line   20)
45073 * STACK_SAVEAREA_MODE:                   Storage Layout.     (line  428)
45074 * STACK_SIZE_MODE:                       Storage Layout.     (line  440)
45075 * STACK_SLOT_ALIGNMENT:                  Storage Layout.     (line  266)
45076 * standard pattern names:                Standard Names.     (line    6)
45077 * STANDARD_INCLUDE_COMPONENT:            Driver.             (line  425)
45078 * STANDARD_INCLUDE_DIR:                  Driver.             (line  417)
45079 * STANDARD_STARTFILE_PREFIX:             Driver.             (line  337)
45080 * STANDARD_STARTFILE_PREFIX_1:           Driver.             (line  344)
45081 * STANDARD_STARTFILE_PREFIX_2:           Driver.             (line  351)
45082 * STARTFILE_SPEC:                        Driver.             (line  210)
45083 * STARTING_FRAME_OFFSET:                 Frame Layout.       (line   39)
45084 * STARTING_FRAME_OFFSET and virtual registers: Regs and Memory.
45085                                                              (line   74)
45086 * Statement and operand traversals:      Statement and operand traversals.
45087                                                              (line    6)
45088 * Statement Sequences:                   Statement Sequences.
45089                                                              (line    6)
45090 * statements <1>:                        Statements for C++. (line    6)
45091 * statements:                            Function Properties.
45092                                                              (line    6)
45093 * Statements:                            Statements.         (line    6)
45094 * Static profile estimation:             Profile information.
45095                                                              (line   24)
45096 * static single assignment:              SSA.                (line    6)
45097 * STATIC_CHAIN_INCOMING_REGNUM:          Frame Registers.    (line   64)
45098 * STATIC_CHAIN_REGNUM:                   Frame Registers.    (line   63)
45099 * stdarg.h and register arguments:       Register Arguments. (line   47)
45100 * STDC_0_IN_SYSTEM_HEADERS:              Misc.               (line  365)
45101 * STMT_EXPR:                             Unary and Binary Expressions.
45102                                                              (line    6)
45103 * STMT_IS_FULL_EXPR_P:                   Statements for C++. (line   22)
45104 * storage layout:                        Storage Layout.     (line    6)
45105 * STORE_BY_PIECES_P:                     Costs.              (line  161)
45106 * STORE_FLAG_VALUE:                      Misc.               (line  216)
45107 * store_multiple instruction pattern:    Standard Names.     (line  160)
45108 * strcpy:                                Storage Layout.     (line  236)
45109 * STRICT_ALIGNMENT:                      Storage Layout.     (line  310)
45110 * strict_low_part:                       RTL Declarations.   (line    9)
45111 * strict_memory_address_p:               Addressing Modes.   (line  181)
45112 * STRING_CST:                            Constant expressions.
45113                                                              (line    6)
45114 * STRING_POOL_ADDRESS_P:                 Flags.              (line  183)
45115 * strlenM instruction pattern:           Standard Names.     (line  760)
45116 * structure value address:               Aggregate Return.   (line    6)
45117 * STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  302)
45118 * structures, returning:                 Interface.          (line   10)
45119 * subM3 instruction pattern:             Standard Names.     (line  222)
45120 * SUBOBJECT:                             Statements for C++. (line    6)
45121 * SUBOBJECT_CLEANUP:                     Statements for C++. (line    6)
45122 * subreg:                                Regs and Memory.    (line   97)
45123 * subreg and /s:                         Flags.              (line  205)
45124 * subreg and /u:                         Flags.              (line  198)
45125 * subreg and /u and /v:                  Flags.              (line  188)
45126 * subreg, in strict_low_part:            RTL Declarations.   (line    9)
45127 * SUBREG_BYTE:                           Regs and Memory.    (line  289)
45128 * SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  188)
45129 * SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  198)
45130 * SUBREG_PROMOTED_VAR_P:                 Flags.              (line  205)
45131 * SUBREG_REG:                            Regs and Memory.    (line  289)
45132 * SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
45133 * SUPPORTS_INIT_PRIORITY:                Macros for Initialization.
45134                                                              (line   58)
45135 * SUPPORTS_ONE_ONLY:                     Label Output.       (line  227)
45136 * SUPPORTS_WEAK:                         Label Output.       (line  208)
45137 * SWITCH_BODY:                           Statements for C++. (line    6)
45138 * SWITCH_COND:                           Statements for C++. (line    6)
45139 * SWITCH_CURTAILS_COMPILATION:           Driver.             (line   33)
45140 * SWITCH_STMT:                           Statements for C++. (line    6)
45141 * SWITCH_TAKES_ARG:                      Driver.             (line    9)
45142 * SWITCHES_NEED_SPACES:                  Driver.             (line   47)
45143 * SYMBOL_FLAG_ANCHOR:                    Special Accessors.  (line  110)
45144 * SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line   92)
45145 * SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   85)
45146 * SYMBOL_FLAG_HAS_BLOCK_INFO:            Special Accessors.  (line  106)
45147 * SYMBOL_FLAG_LOCAL:                     Special Accessors.  (line   88)
45148 * SYMBOL_FLAG_SMALL:                     Special Accessors.  (line   97)
45149 * SYMBOL_FLAG_TLS_SHIFT:                 Special Accessors.  (line  101)
45150 * symbol_ref:                            Constants.          (line   76)
45151 * symbol_ref and /f:                     Flags.              (line  183)
45152 * symbol_ref and /i:                     Flags.              (line  220)
45153 * symbol_ref and /u:                     Flags.              (line   10)
45154 * symbol_ref and /v:                     Flags.              (line  224)
45155 * symbol_ref, RTL sharing:               Sharing.            (line   20)
45156 * SYMBOL_REF_ANCHOR_P:                   Special Accessors.  (line  110)
45157 * SYMBOL_REF_BLOCK:                      Special Accessors.  (line  123)
45158 * SYMBOL_REF_BLOCK_OFFSET:               Special Accessors.  (line  128)
45159 * SYMBOL_REF_CONSTANT:                   Special Accessors.  (line   71)
45160 * SYMBOL_REF_DATA:                       Special Accessors.  (line   75)
45161 * SYMBOL_REF_DECL:                       Special Accessors.  (line   59)
45162 * SYMBOL_REF_EXTERNAL_P:                 Special Accessors.  (line   92)
45163 * SYMBOL_REF_FLAG:                       Flags.              (line  224)
45164 * SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections.  (line  269)
45165 * SYMBOL_REF_FLAGS:                      Special Accessors.  (line   79)
45166 * SYMBOL_REF_FUNCTION_P:                 Special Accessors.  (line   85)
45167 * SYMBOL_REF_HAS_BLOCK_INFO_P:           Special Accessors.  (line  106)
45168 * SYMBOL_REF_LOCAL_P:                    Special Accessors.  (line   88)
45169 * SYMBOL_REF_SMALL_P:                    Special Accessors.  (line   97)
45170 * SYMBOL_REF_TLS_MODEL:                  Special Accessors.  (line  101)
45171 * SYMBOL_REF_USED:                       Flags.              (line  215)
45172 * SYMBOL_REF_WEAK:                       Flags.              (line  220)
45173 * symbolic label:                        Sharing.            (line   20)
45174 * sync_addMODE instruction pattern:      Standard Names.     (line 1417)
45175 * sync_andMODE instruction pattern:      Standard Names.     (line 1417)
45176 * sync_compare_and_swapMODE instruction pattern: Standard Names.
45177                                                              (line 1387)
45178 * sync_iorMODE instruction pattern:      Standard Names.     (line 1417)
45179 * sync_lock_releaseMODE instruction pattern: Standard Names. (line 1482)
45180 * sync_lock_test_and_setMODE instruction pattern: Standard Names.
45181                                                              (line 1456)
45182 * sync_nandMODE instruction pattern:     Standard Names.     (line 1417)
45183 * sync_new_addMODE instruction pattern:  Standard Names.     (line 1449)
45184 * sync_new_andMODE instruction pattern:  Standard Names.     (line 1449)
45185 * sync_new_iorMODE instruction pattern:  Standard Names.     (line 1449)
45186 * sync_new_nandMODE instruction pattern: Standard Names.     (line 1449)
45187 * sync_new_subMODE instruction pattern:  Standard Names.     (line 1449)
45188 * sync_new_xorMODE instruction pattern:  Standard Names.     (line 1449)
45189 * sync_old_addMODE instruction pattern:  Standard Names.     (line 1432)
45190 * sync_old_andMODE instruction pattern:  Standard Names.     (line 1432)
45191 * sync_old_iorMODE instruction pattern:  Standard Names.     (line 1432)
45192 * sync_old_nandMODE instruction pattern: Standard Names.     (line 1432)
45193 * sync_old_subMODE instruction pattern:  Standard Names.     (line 1432)
45194 * sync_old_xorMODE instruction pattern:  Standard Names.     (line 1432)
45195 * sync_subMODE instruction pattern:      Standard Names.     (line 1417)
45196 * sync_xorMODE instruction pattern:      Standard Names.     (line 1417)
45197 * SYSROOT_HEADERS_SUFFIX_SPEC:           Driver.             (line  239)
45198 * SYSROOT_SUFFIX_SPEC:                   Driver.             (line  234)
45199 * SYSTEM_INCLUDE_DIR:                    Driver.             (line  408)
45200 * t-TARGET:                              Target Fragment.    (line    6)
45201 * table jump:                            Basic Blocks.       (line   57)
45202 * tablejump instruction pattern:         Standard Names.     (line 1061)
45203 * tag:                                   GTY Options.        (line   82)
45204 * tagging insns:                         Tagging Insns.      (line    6)
45205 * tail calls:                            Tail Calls.         (line    6)
45206 * TAmode:                                Machine Modes.      (line  156)
45207 * target attributes:                     Target Attributes.  (line    6)
45208 * target description macros:             Target Macros.      (line    6)
45209 * target functions:                      Target Structure.   (line    6)
45210 * target hooks:                          Target Structure.   (line    6)
45211 * target makefile fragment:              Target Fragment.    (line    6)
45212 * target specifications:                 Run-time Target.    (line    6)
45213 * TARGET_ADDR_SPACE_ADDRESS_MODE:        Named Address Spaces.
45214                                                              (line   47)
45215 * TARGET_ADDR_SPACE_CONVERT:             Named Address Spaces.
45216                                                              (line   90)
45217 * TARGET_ADDR_SPACE_KEYWORDS:            Named Address Spaces.
45218                                                              (line   30)
45219 * TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces.
45220                                                              (line   65)
45221 * TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS:  Named Address Spaces.
45222                                                              (line   74)
45223 * TARGET_ADDR_SPACE_POINTER_MODE:        Named Address Spaces.
45224                                                              (line   40)
45225 * TARGET_ADDR_SPACE_SUBSET_P:            Named Address Spaces.
45226                                                              (line   81)
45227 * TARGET_ADDR_SPACE_VALID_POINTER_MODE:  Named Address Spaces.
45228                                                              (line   54)
45229 * TARGET_ADDRESS_COST:                   Costs.              (line  245)
45230 * TARGET_ALIGN_ANON_BITFIELD:            Storage Layout.     (line  387)
45231 * TARGET_ALLOCATE_INITIAL_VALUE:         Misc.               (line  727)
45232 * TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS:  Misc.               (line  999)
45233 * TARGET_ARG_PARTIAL_BYTES:              Register Arguments. (line   83)
45234 * TARGET_ARM_EABI_UNWINDER:              Exception Region Output.
45235                                                              (line  113)
45236 * TARGET_ASM_ALIGNED_DI_OP:              Data Output.        (line   10)
45237 * TARGET_ASM_ALIGNED_HI_OP:              Data Output.        (line    8)
45238 * TARGET_ASM_ALIGNED_SI_OP:              Data Output.        (line    9)
45239 * TARGET_ASM_ALIGNED_TI_OP:              Data Output.        (line   11)
45240 * TARGET_ASM_ASSEMBLE_VISIBILITY:        Label Output.       (line  239)
45241 * TARGET_ASM_BYTE_OP:                    Data Output.        (line    7)
45242 * TARGET_ASM_CAN_OUTPUT_MI_THUNK:        Function Entry.     (line  237)
45243 * TARGET_ASM_CLOSE_PAREN:                Data Output.        (line  130)
45244 * TARGET_ASM_CODE_END:                   File Framework.     (line   59)
45245 * TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
45246                                                              (line   69)
45247 * TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
45248                                                              (line   83)
45249 * TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL:    Dispatch Tables.    (line   74)
45250 * TARGET_ASM_EMIT_UNWIND_LABEL:          Dispatch Tables.    (line   63)
45251 * TARGET_ASM_EXTERNAL_LIBCALL:           Label Output.       (line  274)
45252 * TARGET_ASM_FILE_END:                   File Framework.     (line   37)
45253 * TARGET_ASM_FILE_START:                 File Framework.     (line    9)
45254 * TARGET_ASM_FILE_START_APP_OFF:         File Framework.     (line   17)
45255 * TARGET_ASM_FILE_START_FILE_DIRECTIVE:  File Framework.     (line   31)
45256 * TARGET_ASM_FINAL_POSTSCAN_INSN:        Instruction Output. (line   69)
45257 * TARGET_ASM_FUNCTION_BEGIN_EPILOGUE:    Function Entry.     (line   61)
45258 * TARGET_ASM_FUNCTION_END_PROLOGUE:      Function Entry.     (line   55)
45259 * TARGET_ASM_FUNCTION_EPILOGUE:          Function Entry.     (line   68)
45260 * TARGET_ASM_FUNCTION_PROLOGUE:          Function Entry.     (line   11)
45261 * TARGET_ASM_FUNCTION_RODATA_SECTION:    Sections.           (line  216)
45262 * TARGET_ASM_GLOBALIZE_DECL_NAME:        Label Output.       (line  174)
45263 * TARGET_ASM_GLOBALIZE_LABEL:            Label Output.       (line  165)
45264 * TARGET_ASM_INIT_SECTIONS:              Sections.           (line  161)
45265 * TARGET_ASM_INTEGER:                    Data Output.        (line   27)
45266 * TARGET_ASM_INTERNAL_LABEL:             Label Output.       (line  310)
45267 * TARGET_ASM_LTO_END:                    File Framework.     (line   54)
45268 * TARGET_ASM_LTO_START:                  File Framework.     (line   49)
45269 * TARGET_ASM_MARK_DECL_PRESERVED:        Label Output.       (line  281)
45270 * TARGET_ASM_NAMED_SECTION:              File Framework.     (line  106)
45271 * TARGET_ASM_OPEN_PAREN:                 Data Output.        (line  129)
45272 * TARGET_ASM_OUTPUT_ANCHOR:              Anchored Addresses. (line   44)
45273 * TARGET_ASM_OUTPUT_DWARF_DTPREL:        SDB and DWARF.      (line   64)
45274 * TARGET_ASM_OUTPUT_MI_THUNK:            Function Entry.     (line  195)
45275 * TARGET_ASM_RECORD_GCC_SWITCHES:        File Framework.     (line  136)
45276 * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework.    (line  180)
45277 * TARGET_ASM_RELOC_RW_MASK:              Sections.           (line  170)
45278 * TARGET_ASM_SELECT_RTX_SECTION:         Sections.           (line  224)
45279 * TARGET_ASM_SELECT_SECTION:             Sections.           (line  182)
45280 * TARGET_ASM_TRAMPOLINE_TEMPLATE:        Trampolines.        (line   29)
45281 * TARGET_ASM_TTYPE:                      Exception Region Output.
45282                                                              (line  107)
45283 * TARGET_ASM_UNALIGNED_DI_OP:            Data Output.        (line   14)
45284 * TARGET_ASM_UNALIGNED_HI_OP:            Data Output.        (line   12)
45285 * TARGET_ASM_UNALIGNED_SI_OP:            Data Output.        (line   13)
45286 * TARGET_ASM_UNALIGNED_TI_OP:            Data Output.        (line   15)
45287 * TARGET_ASM_UNIQUE_SECTION:             Sections.           (line  203)
45288 * TARGET_ATTRIBUTE_TABLE:                Target Attributes.  (line   11)
45289 * TARGET_BINDS_LOCAL_P:                  Sections.           (line  294)
45290 * TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc.          (line  825)
45291 * TARGET_BRANCH_TARGET_REGISTER_CLASS:   Misc.               (line  817)
45292 * TARGET_BUILD_BUILTIN_VA_LIST:          Register Arguments. (line  264)
45293 * TARGET_BUILTIN_DECL:                   Misc.               (line  660)
45294 * TARGET_BUILTIN_RECIPROCAL:             Addressing Modes.   (line  242)
45295 * TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  109)
45296 * TARGET_C99_FUNCTIONS:                  Library Calls.      (line   77)
45297 * TARGET_CALLEE_COPIES:                  Register Arguments. (line  115)
45298 * TARGET_CAN_ELIMINATE:                  Elimination.        (line   75)
45299 * TARGET_CAN_INLINE_P:                   Target Attributes.  (line  128)
45300 * TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  223)
45301 * TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  803)
45302 * TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  273)
45303 * TARGET_CASE_VALUES_THRESHOLD:          Misc.               (line   47)
45304 * TARGET_CC_MODES_COMPATIBLE:            MODE_CC Condition Codes.
45305                                                              (line  116)
45306 * TARGET_CHECK_PCH_TARGET_FLAGS:         PCH Target.         (line   28)
45307 * TARGET_COMMUTATIVE_P:                  Misc.               (line  720)
45308 * TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   19)
45309 * TARGET_CONST_ANCHOR:                   Misc.               (line 1010)
45310 * TARGET_CONVERT_TO_TYPE:                Misc.               (line  963)
45311 * TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    9)
45312 * TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI.            (line   87)
45313 * TARGET_CXX_CDTOR_RETURNS_THIS:         C++ ABI.            (line   38)
45314 * TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT:   C++ ABI.            (line   62)
45315 * TARGET_CXX_COOKIE_HAS_SIZE:            C++ ABI.            (line   25)
45316 * TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI.       (line   54)
45317 * TARGET_CXX_GET_COOKIE_SIZE:            C++ ABI.            (line   18)
45318 * TARGET_CXX_GUARD_MASK_BIT:             C++ ABI.            (line   12)
45319 * TARGET_CXX_GUARD_TYPE:                 C++ ABI.            (line    7)
45320 * TARGET_CXX_IMPORT_EXPORT_CLASS:        C++ ABI.            (line   30)
45321 * TARGET_CXX_KEY_METHOD_MAY_BE_INLINE:   C++ ABI.            (line   43)
45322 * TARGET_CXX_LIBRARY_RTTI_COMDAT:        C++ ABI.            (line   69)
45323 * TARGET_CXX_USE_AEABI_ATEXIT:           C++ ABI.            (line   74)
45324 * TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT:  C++ ABI.            (line   80)
45325 * TARGET_DECIMAL_FLOAT_SUPPORTED_P:      Storage Layout.     (line  512)
45326 * TARGET_DECLSPEC:                       Target Attributes.  (line   65)
45327 * TARGET_DEFAULT_PACK_STRUCT:            Misc.               (line  485)
45328 * TARGET_DEFAULT_SHORT_ENUMS:            Type Layout.        (line  160)
45329 * TARGET_DEFAULT_TARGET_FLAGS:           Run-time Target.    (line   56)
45330 * TARGET_DEFERRED_OUTPUT_DEFS:           Label Output.       (line  394)
45331 * TARGET_DELEGITIMIZE_ADDRESS:           Addressing Modes.   (line  214)
45332 * TARGET_DLLIMPORT_DECL_ATTRIBUTES:      Target Attributes.  (line   47)
45333 * TARGET_DWARF_CALLING_CONVENTION:       SDB and DWARF.      (line   18)
45334 * TARGET_DWARF_HANDLE_FRAME_UNSPEC:      Frame Layout.       (line  172)
45335 * TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
45336                                                              (line   90)
45337 * TARGET_EDOM:                           Library Calls.      (line   59)
45338 * TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS:  Emulated TLS.       (line   68)
45339 * TARGET_EMUTLS_GET_ADDRESS:             Emulated TLS.       (line   19)
45340 * TARGET_EMUTLS_REGISTER_COMMON:         Emulated TLS.       (line   24)
45341 * TARGET_EMUTLS_TMPL_PREFIX:             Emulated TLS.       (line   45)
45342 * TARGET_EMUTLS_TMPL_SECTION:            Emulated TLS.       (line   36)
45343 * TARGET_EMUTLS_VAR_ALIGN_FIXED:         Emulated TLS.       (line   63)
45344 * TARGET_EMUTLS_VAR_FIELDS:              Emulated TLS.       (line   49)
45345 * TARGET_EMUTLS_VAR_INIT:                Emulated TLS.       (line   57)
45346 * TARGET_EMUTLS_VAR_PREFIX:              Emulated TLS.       (line   41)
45347 * TARGET_EMUTLS_VAR_SECTION:             Emulated TLS.       (line   31)
45348 * TARGET_ENCODE_SECTION_INFO:            Sections.           (line  245)
45349 * TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes.
45350                                                              (line   83)
45351 * TARGET_ENCODE_SECTION_INFO usage:      Instruction Output. (line  113)
45352 * TARGET_ENUM_VA_LIST:                   Scalar Return.      (line   96)
45353 * TARGET_EXECUTABLE_SUFFIX:              Misc.               (line  777)
45354 * TARGET_EXPAND_BUILTIN:                 Misc.               (line  670)
45355 * TARGET_EXPAND_BUILTIN_SAVEREGS:        Varargs.            (line   92)
45356 * TARGET_EXPAND_TO_RTL_HOOK:             Storage Layout.     (line  518)
45357 * TARGET_EXPR:                           Unary and Binary Expressions.
45358                                                              (line    6)
45359 * TARGET_EXTRA_INCLUDES:                 Misc.               (line  856)
45360 * TARGET_EXTRA_LIVE_ON_ENTRY:            Tail Calls.         (line   21)
45361 * TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  863)
45362 * TARGET_FIXED_CONDITION_CODE_REGS:      MODE_CC Condition Codes.
45363                                                              (line  101)
45364 * TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  515)
45365 * target_flags:                          Run-time Target.    (line   52)
45366 * TARGET_FLT_EVAL_METHOD:                Type Layout.        (line  141)
45367 * TARGET_FN_ABI_VA_LIST:                 Register Arguments. (line  268)
45368 * TARGET_FOLD_BUILTIN:                   Misc.               (line  691)
45369 * TARGET_FORMAT_TYPES:                   Misc.               (line  883)
45370 * TARGET_FRAME_POINTER_REQUIRED:         Elimination.        (line    9)
45371 * TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes.  (line   87)
45372 * TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    8)
45373 * TARGET_FUNCTION_VALUE:                 Scalar Return.      (line   11)
45374 * TARGET_GET_DRAP_RTX:                   Misc.               (line  993)
45375 * TARGET_GET_PCH_VALIDITY:               PCH Target.         (line    7)
45376 * TARGET_GIMPLIFY_VA_ARG_EXPR:           Register Arguments. (line  279)
45377 * TARGET_HANDLE_C_OPTION:                Run-time Target.    (line   78)
45378 * TARGET_HANDLE_OPTION:                  Run-time Target.    (line   61)
45379 * TARGET_HANDLE_PRAGMA_EXTERN_PREFIX:    Misc.               (line  482)
45380 * TARGET_HARD_REGNO_SCRATCH_OK:          Values in Registers.
45381                                                              (line  144)
45382 * TARGET_HAS_SINCOS:                     Library Calls.      (line   85)
45383 * TARGET_HAVE_CONDITIONAL_EXECUTION:     Misc.               (line  839)
45384 * TARGET_HAVE_CTORS_DTORS:               Macros for Initialization.
45385                                                              (line   64)
45386 * TARGET_HAVE_NAMED_SECTIONS:            File Framework.     (line  113)
45387 * TARGET_HAVE_SRODATA_SECTION:           Sections.           (line  290)
45388 * TARGET_HAVE_SWITCHABLE_BSS_SECTIONS:   File Framework.     (line  117)
45389 * TARGET_HAVE_TLS:                       Sections.           (line  303)
45390 * TARGET_HELP:                           Run-time Target.    (line  154)
45391 * TARGET_IN_SMALL_DATA_P:                Sections.           (line  286)
45392 * TARGET_INIT_BUILTINS:                  Misc.               (line  642)
45393 * TARGET_INIT_DWARF_REG_SIZES_EXTRA:     Exception Region Output.
45394                                                              (line   99)
45395 * TARGET_INIT_LIBFUNCS:                  Library Calls.      (line   16)
45396 * TARGET_INSERT_ATTRIBUTES:              Target Attributes.  (line   74)
45397 * TARGET_INSTANTIATE_DECLS:              Storage Layout.     (line  526)
45398 * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc.              (line  917)
45399 * TARGET_INVALID_BINARY_OP:              Misc.               (line  936)
45400 * TARGET_INVALID_CONVERSION:             Misc.               (line  923)
45401 * TARGET_INVALID_PARAMETER_TYPE:         Misc.               (line  942)
45402 * TARGET_INVALID_RETURN_TYPE:            Misc.               (line  949)
45403 * TARGET_INVALID_UNARY_OP:               Misc.               (line  929)
45404 * TARGET_INVALID_WITHIN_DOLOOP:          Misc.               (line  700)
45405 * TARGET_IRA_COVER_CLASSES:              Register Classes.   (line  511)
45406 * TARGET_LEGITIMATE_ADDRESS_P:           Addressing Modes.   (line   50)
45407 * TARGET_LEGITIMIZE_ADDRESS:             Addressing Modes.   (line  128)
45408 * TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   35)
45409 * TARGET_LIBCALL_VALUE:                  Scalar Return.      (line   69)
45410 * TARGET_LIBGCC_CMP_RETURN_MODE:         Storage Layout.     (line  449)
45411 * TARGET_LIBGCC_SDATA_SECTION:           Sections.           (line  133)
45412 * TARGET_LIBGCC_SHIFT_COUNT_MODE:        Storage Layout.     (line  455)
45413 * TARGET_MACHINE_DEPENDENT_REORG:        Misc.               (line  627)
45414 * TARGET_MANGLE_DECL_ASSEMBLER_NAME:     Sections.           (line  235)
45415 * TARGET_MANGLE_TYPE:                    Storage Layout.     (line  530)
45416 * TARGET_MAX_ANCHOR_OFFSET:              Anchored Addresses. (line   39)
45417 * TARGET_MD_ASM_CLOBBERS:                Misc.               (line  543)
45418 * TARGET_MEM_CONSTRAINT:                 Addressing Modes.   (line  105)
45419 * TARGET_MEM_REF:                        Storage References. (line    6)
45420 * TARGET_MERGE_DECL_ATTRIBUTES:          Target Attributes.  (line   39)
45421 * TARGET_MERGE_TYPE_ATTRIBUTES:          Target Attributes.  (line   31)
45422 * TARGET_MIN_ANCHOR_OFFSET:              Anchored Addresses. (line   33)
45423 * TARGET_MIN_DIVISIONS_FOR_RECIP_MUL:    Misc.               (line  106)
45424 * TARGET_MODE_REP_EXTENDED:              Misc.               (line  191)
45425 * TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  485)
45426 * TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   62)
45427 * TARGET_MUST_PASS_IN_STACK, and FUNCTION_ARG: Register Arguments.
45428                                                              (line   52)
45429 * TARGET_N_FORMAT_TYPES:                 Misc.               (line  888)
45430 * TARGET_NARROW_VOLATILE_BITFIELD:       Storage Layout.     (line  393)
45431 * TARGET_OBJECT_SUFFIX:                  Misc.               (line  772)
45432 * TARGET_OBJFMT_CPP_BUILTINS:            Run-time Target.    (line   46)
45433 * TARGET_OPTF:                           Misc.               (line  870)
45434 * TARGET_OPTION_PRAGMA_PARSE:            Target Attributes.  (line  122)
45435 * TARGET_OPTION_PRINT:                   Target Attributes.  (line  117)
45436 * TARGET_OPTION_RESTORE:                 Target Attributes.  (line  111)
45437 * TARGET_OPTION_SAVE:                    Target Attributes.  (line  105)
45438 * TARGET_OPTION_TRANSLATE_TABLE:         Driver.             (line   53)
45439 * TARGET_OPTION_VALID_ATTRIBUTE_P:       Target Attributes.  (line   94)
45440 * TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   42)
45441 * TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE:  Run-time Target.    (line  119)
45442 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES:    Misc.               (line  892)
45443 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc.            (line  898)
45444 * TARGET_OVERRIDES_FORMAT_INIT:          Misc.               (line  902)
45445 * TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  103)
45446 * TARGET_PCH_VALID_P:                    PCH Target.         (line   13)
45447 * TARGET_POSIX_IO:                       Misc.               (line  567)
45448 * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  153)
45449 * TARGET_PROMOTE_FUNCTION_MODE:          Storage Layout.     (line  125)
45450 * TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   11)
45451 * TARGET_PROMOTED_TYPE:                  Misc.               (line  955)
45452 * TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  278)
45453 * TARGET_RELAXED_ORDERING:               Misc.               (line  907)
45454 * TARGET_RESOLVE_OVERLOADED_BUILTIN:     Misc.               (line  680)
45455 * TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   17)
45456 * TARGET_RETURN_IN_MSB:                  Scalar Return.      (line  112)
45457 * TARGET_RTX_COSTS:                      Costs.              (line  219)
45458 * TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  291)
45459 * TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   37)
45460 * TARGET_SCHED_ADJUST_PRIORITY:          Scheduling.         (line   52)
45461 * TARGET_SCHED_ALLOC_SCHED_CONTEXT:      Scheduling.         (line  243)
45462 * TARGET_SCHED_CLEAR_SCHED_CONTEXT:      Scheduling.         (line  258)
45463 * TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling.     (line   89)
45464 * TARGET_SCHED_DFA_NEW_CYCLE:            Scheduling.         (line  204)
45465 * TARGET_SCHED_DFA_POST_ADVANCE_CYCLE:   Scheduling.         (line  160)
45466 * TARGET_SCHED_DFA_POST_CYCLE_INSN:      Scheduling.         (line  144)
45467 * TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE:    Scheduling.         (line  153)
45468 * TARGET_SCHED_DFA_PRE_CYCLE_INSN:       Scheduling.         (line  132)
45469 * TARGET_SCHED_FINISH:                   Scheduling.         (line  109)
45470 * TARGET_SCHED_FINISH_GLOBAL:            Scheduling.         (line  126)
45471 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
45472                                                              (line  168)
45473 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
45474                                                              (line  196)
45475 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling.
45476                                                              (line  297)
45477 * TARGET_SCHED_FREE_SCHED_CONTEXT:       Scheduling.         (line  262)
45478 * TARGET_SCHED_GEN_SPEC_CHECK:           Scheduling.         (line  284)
45479 * TARGET_SCHED_H_I_D_EXTENDED:           Scheduling.         (line  238)
45480 * TARGET_SCHED_INIT:                     Scheduling.         (line   99)
45481 * TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling.         (line  149)
45482 * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  141)
45483 * TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  118)
45484 * TARGET_SCHED_INIT_SCHED_CONTEXT:       Scheduling.         (line  248)
45485 * TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  215)
45486 * TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   12)
45487 * TARGET_SCHED_NEEDS_BLOCK_P:            Scheduling.         (line  277)
45488 * TARGET_SCHED_REORDER:                  Scheduling.         (line   60)
45489 * TARGET_SCHED_REORDER2:                 Scheduling.         (line   77)
45490 * TARGET_SCHED_SET_SCHED_CONTEXT:        Scheduling.         (line  254)
45491 * TARGET_SCHED_SET_SCHED_FLAGS:          Scheduling.         (line  309)
45492 * TARGET_SCHED_SMS_RES_MII:              Scheduling.         (line  315)
45493 * TARGET_SCHED_SPECULATE_INSN:           Scheduling.         (line  266)
45494 * TARGET_SCHED_VARIABLE_ISSUE:           Scheduling.         (line   24)
45495 * TARGET_SECONDARY_RELOAD:               Register Classes.   (line  272)
45496 * TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  123)
45497 * TARGET_SET_CURRENT_FUNCTION:           Misc.               (line  754)
45498 * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   26)
45499 * TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line  101)
45500 * TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  154)
45501 * TARGET_SPLIT_COMPLEX_ARG:              Register Arguments. (line  252)
45502 * TARGET_STACK_PROTECT_FAIL:             Stack Smashing Protection.
45503                                                              (line   17)
45504 * TARGET_STACK_PROTECT_GUARD:            Stack Smashing Protection.
45505                                                              (line    7)
45506 * TARGET_STATIC_CHAIN:                   Frame Registers.    (line   78)
45507 * TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  137)
45508 * TARGET_STRIP_NAME_ENCODING:            Sections.           (line  282)
45509 * TARGET_STRUCT_VALUE_RTX:               Aggregate Return.   (line   45)
45510 * TARGET_SUPPORT_VECTOR_MISALIGNMENT:    Addressing Modes.   (line  345)
45511 * TARGET_TERMINATE_DW2_EH_FRAME_INFO:    Exception Region Output.
45512                                                              (line   84)
45513 * TARGET_TRAMPOLINE_ADJUST_ADDRESS:      Trampolines.        (line   75)
45514 * TARGET_TRAMPOLINE_INIT:                Trampolines.        (line   56)
45515 * TARGET_UNSPEC_MAY_TRAP_P:              Misc.               (line  746)
45516 * TARGET_UNWIND_EMIT:                    Dispatch Tables.    (line   81)
45517 * TARGET_UNWIND_INFO:                    Exception Region Output.
45518                                                              (line   56)
45519 * TARGET_UNWIND_TABLES_DEFAULT:          Exception Region Output.
45520                                                              (line   60)
45521 * TARGET_UNWIND_WORD_MODE:               Storage Layout.     (line  461)
45522 * TARGET_UPDATE_STACK_BOUNDARY:          Misc.               (line  989)
45523 * TARGET_USE_ANCHORS_FOR_SYMBOL_P:       Anchored Addresses. (line   55)
45524 * TARGET_USE_BLOCKS_FOR_CONSTANT_P:      Addressing Modes.   (line  235)
45525 * TARGET_USE_JCR_SECTION:                Misc.               (line  971)
45526 * TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  129)
45527 * TARGET_VALID_DLLIMPORT_ATTRIBUTE_P:    Target Attributes.  (line   60)
45528 * TARGET_VALID_POINTER_MODE:             Register Arguments. (line  285)
45529 * TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  303)
45530 * TARGET_VECTORIZE_BUILTIN_CONVERSION:   Addressing Modes.   (line  320)
45531 * TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes.  (line  251)
45532 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN: Addressing Modes. (line  277)
45533 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD: Addressing Modes.  (line  289)
45534 * TARGET_VECTORIZE_BUILTIN_VEC_PERM:     Addressing Modes.   (line  312)
45535 * TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK:  Addressing Modes.   (line  316)
45536 * TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes.
45537                                                              (line  302)
45538 * TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes.
45539                                                              (line  335)
45540 * TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
45541                                                              (line  307)
45542 * TARGET_VERSION:                        Run-time Target.    (line   92)
45543 * TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  331)
45544 * TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  325)
45545 * TARGET_VTABLE_USES_DESCRIPTORS:        Type Layout.        (line  314)
45546 * TARGET_WEAK_NOT_IN_ARCHIVE_TOC:        Label Output.       (line  245)
45547 * targetm:                               Target Structure.   (line    7)
45548 * targets, makefile:                     Makefile.           (line    6)
45549 * TCmode:                                Machine Modes.      (line  197)
45550 * TDmode:                                Machine Modes.      (line   94)
45551 * TEMPLATE_DECL:                         Declarations.       (line    6)
45552 * Temporaries:                           Temporaries.        (line    6)
45553 * termination routines:                  Initialization.     (line    6)
45554 * testing constraints:                   C Constraint Interface.
45555                                                              (line    6)
45556 * TEXT_SECTION_ASM_OP:                   Sections.           (line   38)
45557 * TF_SIZE:                               Type Layout.        (line  132)
45558 * TFmode:                                Machine Modes.      (line   98)
45559 * THEN_CLAUSE:                           Statements for C++. (line    6)
45560 * THREAD_MODEL_SPEC:                     Driver.             (line  225)
45561 * THROW_EXPR:                            Unary and Binary Expressions.
45562                                                              (line    6)
45563 * THUNK_DECL:                            Declarations.       (line    6)
45564 * THUNK_DELTA:                           Declarations.       (line    6)
45565 * TImode:                                Machine Modes.      (line   48)
45566 * TImode, in insn:                       Insns.              (line  272)
45567 * TLS_COMMON_ASM_OP:                     Sections.           (line   82)
45568 * TLS_SECTION_ASM_FLAG:                  Sections.           (line   87)
45569 * tm.h macros:                           Target Macros.      (line    6)
45570 * TQFmode:                               Machine Modes.      (line   62)
45571 * TQmode:                                Machine Modes.      (line  119)
45572 * TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line   49)
45573 * TRAMPOLINE_SECTION:                    Trampolines.        (line   40)
45574 * TRAMPOLINE_SIZE:                       Trampolines.        (line   45)
45575 * trampolines for nested functions:      Trampolines.        (line    6)
45576 * TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  123)
45577 * trap instruction pattern:              Standard Names.     (line 1340)
45578 * tree <1>:                              Macros and Functions.
45579                                                              (line    6)
45580 * tree:                                  Tree overview.      (line    6)
45581 * Tree SSA:                              Tree SSA.           (line    6)
45582 * TREE_CHAIN:                            Macros and Functions.
45583                                                              (line    6)
45584 * tree_code <1>:                         GIMPLE_OMP_FOR.     (line   83)
45585 * tree_code <2>:                         GIMPLE_COND.        (line   21)
45586 * tree_code <3>:                         GIMPLE_ASSIGN.      (line   41)
45587 * tree_code:                             Manipulating GIMPLE statements.
45588                                                              (line   31)
45589 * TREE_CODE:                             Tree overview.      (line    6)
45590 * tree_int_cst_equal:                    Constant expressions.
45591                                                              (line    6)
45592 * TREE_INT_CST_HIGH:                     Constant expressions.
45593                                                              (line    6)
45594 * TREE_INT_CST_LOW:                      Constant expressions.
45595                                                              (line    6)
45596 * tree_int_cst_lt:                       Constant expressions.
45597                                                              (line    6)
45598 * TREE_LIST:                             Containers.         (line    6)
45599 * TREE_OPERAND:                          Expression trees.   (line    6)
45600 * TREE_PUBLIC <1>:                       Function Properties.
45601                                                              (line   28)
45602 * TREE_PUBLIC:                           Function Basics.    (line    6)
45603 * TREE_PURPOSE:                          Containers.         (line    6)
45604 * TREE_READONLY:                         Function Properties.
45605                                                              (line   37)
45606 * tree_size:                             Macros and Functions.
45607                                                              (line   13)
45608 * TREE_STATIC:                           Function Properties.
45609                                                              (line   31)
45610 * TREE_STRING_LENGTH:                    Constant expressions.
45611                                                              (line    6)
45612 * TREE_STRING_POINTER:                   Constant expressions.
45613                                                              (line    6)
45614 * TREE_THIS_VOLATILE:                    Function Properties.
45615                                                              (line   34)
45616 * TREE_TYPE <1>:                         Types for C++.      (line    6)
45617 * TREE_TYPE <2>:                         Function Basics.    (line   47)
45618 * TREE_TYPE <3>:                         Expression trees.   (line    6)
45619 * TREE_TYPE <4>:                         Working with declarations.
45620                                                              (line   11)
45621 * TREE_TYPE <5>:                         Types.              (line    6)
45622 * TREE_TYPE:                             Macros and Functions.
45623                                                              (line    6)
45624 * TREE_VALUE:                            Containers.         (line    6)
45625 * TREE_VEC:                              Containers.         (line    6)
45626 * TREE_VEC_ELT:                          Containers.         (line    6)
45627 * TREE_VEC_LENGTH:                       Containers.         (line    6)
45628 * TRULY_NOOP_TRUNCATION:                 Misc.               (line  177)
45629 * TRUNC_DIV_EXPR:                        Unary and Binary Expressions.
45630                                                              (line    6)
45631 * TRUNC_MOD_EXPR:                        Unary and Binary Expressions.
45632                                                              (line    6)
45633 * truncate:                              Conversions.        (line   38)
45634 * truncMN2 instruction pattern:          Standard Names.     (line  803)
45635 * TRUTH_AND_EXPR:                        Unary and Binary Expressions.
45636                                                              (line    6)
45637 * TRUTH_ANDIF_EXPR:                      Unary and Binary Expressions.
45638                                                              (line    6)
45639 * TRUTH_NOT_EXPR:                        Unary and Binary Expressions.
45640                                                              (line    6)
45641 * TRUTH_OR_EXPR:                         Unary and Binary Expressions.
45642                                                              (line    6)
45643 * TRUTH_ORIF_EXPR:                       Unary and Binary Expressions.
45644                                                              (line    6)
45645 * TRUTH_XOR_EXPR:                        Unary and Binary Expressions.
45646                                                              (line    6)
45647 * TRY_BLOCK:                             Statements for C++. (line    6)
45648 * TRY_HANDLERS:                          Statements for C++. (line    6)
45649 * TRY_STMTS:                             Statements for C++. (line    6)
45650 * Tuple specific accessors:              Tuple specific accessors.
45651                                                              (line    6)
45652 * tuples:                                Tuple representation.
45653                                                              (line    6)
45654 * type:                                  Types.              (line    6)
45655 * type declaration:                      Declarations.       (line    6)
45656 * TYPE_ALIGN <1>:                        Types for C++.      (line    6)
45657 * TYPE_ALIGN:                            Types.              (line    6)
45658 * TYPE_ARG_TYPES <1>:                    Types for C++.      (line    6)
45659 * TYPE_ARG_TYPES:                        Types.              (line    6)
45660 * TYPE_ASM_OP:                           Label Output.       (line   55)
45661 * TYPE_ATTRIBUTES:                       Attributes.         (line   25)
45662 * TYPE_BINFO:                            Classes.            (line    6)
45663 * TYPE_BUILT_IN:                         Types for C++.      (line   68)
45664 * TYPE_CANONICAL:                        Types.              (line    6)
45665 * TYPE_CONTEXT <1>:                      Types for C++.      (line    6)
45666 * TYPE_CONTEXT:                          Types.              (line    6)
45667 * TYPE_DECL:                             Declarations.       (line    6)
45668 * TYPE_FIELDS <1>:                       Classes.            (line    6)
45669 * TYPE_FIELDS <2>:                       Types for C++.      (line    6)
45670 * TYPE_FIELDS:                           Types.              (line    6)
45671 * TYPE_HAS_ARRAY_NEW_OPERATOR:           Classes.            (line   96)
45672 * TYPE_HAS_DEFAULT_CONSTRUCTOR:          Classes.            (line   81)
45673 * TYPE_HAS_MUTABLE_P:                    Classes.            (line   86)
45674 * TYPE_HAS_NEW_OPERATOR:                 Classes.            (line   93)
45675 * TYPE_MAIN_VARIANT <1>:                 Types for C++.      (line    6)
45676 * TYPE_MAIN_VARIANT:                     Types.              (line    6)
45677 * TYPE_MAX_VALUE:                        Types.              (line    6)
45678 * TYPE_METHOD_BASETYPE <1>:              Types for C++.      (line    6)
45679 * TYPE_METHOD_BASETYPE:                  Types.              (line    6)
45680 * TYPE_METHODS:                          Classes.            (line    6)
45681 * TYPE_MIN_VALUE:                        Types.              (line    6)
45682 * TYPE_NAME <1>:                         Types for C++.      (line    6)
45683 * TYPE_NAME:                             Types.              (line    6)
45684 * TYPE_NOTHROW_P:                        Functions for C++.  (line  154)
45685 * TYPE_OFFSET_BASETYPE <1>:              Types for C++.      (line    6)
45686 * TYPE_OFFSET_BASETYPE:                  Types.              (line    6)
45687 * TYPE_OPERAND_FMT:                      Label Output.       (line   66)
45688 * TYPE_OVERLOADS_ARRAY_REF:              Classes.            (line  104)
45689 * TYPE_OVERLOADS_ARROW:                  Classes.            (line  107)
45690 * TYPE_OVERLOADS_CALL_EXPR:              Classes.            (line  100)
45691 * TYPE_POLYMORPHIC_P:                    Classes.            (line   77)
45692 * TYPE_PRECISION <1>:                    Types for C++.      (line    6)
45693 * TYPE_PRECISION:                        Types.              (line    6)
45694 * TYPE_PTR_P:                            Types for C++.      (line   74)
45695 * TYPE_PTRFN_P:                          Types for C++.      (line   78)
45696 * TYPE_PTRMEM_P:                         Types for C++.      (line    6)
45697 * TYPE_PTROB_P:                          Types for C++.      (line   81)
45698 * TYPE_PTROBV_P:                         Types for C++.      (line    6)
45699 * TYPE_QUAL_CONST <1>:                   Types for C++.      (line    6)
45700 * TYPE_QUAL_CONST:                       Types.              (line    6)
45701 * TYPE_QUAL_RESTRICT <1>:                Types for C++.      (line    6)
45702 * TYPE_QUAL_RESTRICT:                    Types.              (line    6)
45703 * TYPE_QUAL_VOLATILE <1>:                Types for C++.      (line    6)
45704 * TYPE_QUAL_VOLATILE:                    Types.              (line    6)
45705 * TYPE_RAISES_EXCEPTIONS:                Functions for C++.  (line  149)
45706 * TYPE_SIZE <1>:                         Types for C++.      (line    6)
45707 * TYPE_SIZE:                             Types.              (line    6)
45708 * TYPE_STRUCTURAL_EQUALITY_P:            Types.              (line    6)
45709 * TYPE_UNQUALIFIED <1>:                  Types for C++.      (line    6)
45710 * TYPE_UNQUALIFIED:                      Types.              (line    6)
45711 * TYPE_VFIELD:                           Classes.            (line    6)
45712 * TYPENAME_TYPE:                         Types for C++.      (line    6)
45713 * TYPENAME_TYPE_FULLNAME <1>:            Types for C++.      (line    6)
45714 * TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
45715 * TYPEOF_TYPE:                           Types for C++.      (line    6)
45716 * UDAmode:                               Machine Modes.      (line  168)
45717 * udiv:                                  Arithmetic.         (line  125)
45718 * udivM3 instruction pattern:            Standard Names.     (line  222)
45719 * udivmodM4 instruction pattern:         Standard Names.     (line  428)
45720 * udot_prodM instruction pattern:        Standard Names.     (line  265)
45721 * UDQmode:                               Machine Modes.      (line  136)
45722 * UHAmode:                               Machine Modes.      (line  160)
45723 * UHQmode:                               Machine Modes.      (line  128)
45724 * UINT16_TYPE:                           Type Layout.        (line  241)
45725 * UINT32_TYPE:                           Type Layout.        (line  242)
45726 * UINT64_TYPE:                           Type Layout.        (line  243)
45727 * UINT8_TYPE:                            Type Layout.        (line  240)
45728 * UINT_FAST16_TYPE:                      Type Layout.        (line  257)
45729 * UINT_FAST32_TYPE:                      Type Layout.        (line  258)
45730 * UINT_FAST64_TYPE:                      Type Layout.        (line  259)
45731 * UINT_FAST8_TYPE:                       Type Layout.        (line  256)
45732 * UINT_LEAST16_TYPE:                     Type Layout.        (line  249)
45733 * UINT_LEAST32_TYPE:                     Type Layout.        (line  250)
45734 * UINT_LEAST64_TYPE:                     Type Layout.        (line  251)
45735 * UINT_LEAST8_TYPE:                      Type Layout.        (line  248)
45736 * UINTMAX_TYPE:                          Type Layout.        (line  224)
45737 * UINTPTR_TYPE:                          Type Layout.        (line  261)
45738 * umaddMN4 instruction pattern:          Standard Names.     (line  375)
45739 * umax:                                  Arithmetic.         (line  144)
45740 * umaxM3 instruction pattern:            Standard Names.     (line  222)
45741 * umin:                                  Arithmetic.         (line  144)
45742 * uminM3 instruction pattern:            Standard Names.     (line  222)
45743 * umod:                                  Arithmetic.         (line  131)
45744 * umodM3 instruction pattern:            Standard Names.     (line  222)
45745 * umsubMN4 instruction pattern:          Standard Names.     (line  399)
45746 * umulhisi3 instruction pattern:         Standard Names.     (line  347)
45747 * umulM3_highpart instruction pattern:   Standard Names.     (line  361)
45748 * umulqihi3 instruction pattern:         Standard Names.     (line  347)
45749 * umulsidi3 instruction pattern:         Standard Names.     (line  347)
45750 * unchanging:                            Flags.              (line  324)
45751 * unchanging, in call_insn:              Flags.              (line   19)
45752 * unchanging, in jump_insn, call_insn and insn: Flags.       (line   39)
45753 * unchanging, in mem:                    Flags.              (line  152)
45754 * unchanging, in subreg:                 Flags.              (line  188)
45755 * unchanging, in symbol_ref:             Flags.              (line   10)
45756 * UNEQ_EXPR:                             Unary and Binary Expressions.
45757                                                              (line    6)
45758 * UNGE_EXPR:                             Unary and Binary Expressions.
45759                                                              (line    6)
45760 * UNGT_EXPR:                             Unary and Binary Expressions.
45761                                                              (line    6)
45762 * UNION_TYPE <1>:                        Classes.            (line    6)
45763 * UNION_TYPE:                            Types.              (line    6)
45764 * unions, returning:                     Interface.          (line   10)
45765 * UNITS_PER_SIMD_WORD:                   Storage Layout.     (line   77)
45766 * UNITS_PER_WORD:                        Storage Layout.     (line   67)
45767 * UNKNOWN_TYPE <1>:                      Types for C++.      (line    6)
45768 * UNKNOWN_TYPE:                          Types.              (line    6)
45769 * UNLE_EXPR:                             Unary and Binary Expressions.
45770                                                              (line    6)
45771 * UNLIKELY_EXECUTED_TEXT_SECTION_NAME:   Sections.           (line   49)
45772 * UNLT_EXPR:                             Unary and Binary Expressions.
45773                                                              (line    6)
45774 * UNORDERED_EXPR:                        Unary and Binary Expressions.
45775                                                              (line    6)
45776 * unshare_all_rtl:                       Sharing.            (line   58)
45777 * unsigned division:                     Arithmetic.         (line  125)
45778 * unsigned division with unsigned saturation: Arithmetic.    (line  125)
45779 * unsigned greater than:                 Comparisons.        (line   64)
45780 * unsigned less than:                    Comparisons.        (line   68)
45781 * unsigned minimum and maximum:          Arithmetic.         (line  144)
45782 * unsigned_fix:                          Conversions.        (line   77)
45783 * unsigned_float:                        Conversions.        (line   62)
45784 * unsigned_fract_convert:                Conversions.        (line   97)
45785 * unsigned_sat_fract:                    Conversions.        (line  103)
45786 * unspec:                                Side Effects.       (line  287)
45787 * unspec_volatile:                       Side Effects.       (line  287)
45788 * untyped_call instruction pattern:      Standard Names.     (line  971)
45789 * untyped_return instruction pattern:    Standard Names.     (line 1021)
45790 * UPDATE_PATH_HOST_CANONICALIZE (PATH):  Filesystem.         (line   59)
45791 * update_ssa:                            SSA.                (line   76)
45792 * update_stmt <1>:                       SSA Operands.       (line    6)
45793 * update_stmt:                           Manipulating GIMPLE statements.
45794                                                              (line  141)
45795 * update_stmt_if_modified:               Manipulating GIMPLE statements.
45796                                                              (line  144)
45797 * UQQmode:                               Machine Modes.      (line  123)
45798 * US Software GOFAST, floating point emulation library: Library Calls.
45799                                                              (line   44)
45800 * us_ashift:                             Arithmetic.         (line  168)
45801 * us_minus:                              Arithmetic.         (line   36)
45802 * us_mult:                               Arithmetic.         (line   92)
45803 * us_neg:                                Arithmetic.         (line   81)
45804 * us_plus:                               Arithmetic.         (line   14)
45805 * US_SOFTWARE_GOFAST:                    Library Calls.      (line   45)
45806 * us_truncate:                           Conversions.        (line   48)
45807 * usaddM3 instruction pattern:           Standard Names.     (line  222)
45808 * USAmode:                               Machine Modes.      (line  164)
45809 * usashlM3 instruction pattern:          Standard Names.     (line  431)
45810 * usdivM3 instruction pattern:           Standard Names.     (line  222)
45811 * use:                                   Side Effects.       (line  162)
45812 * USE_C_ALLOCA:                          Host Misc.          (line   19)
45813 * USE_LD_AS_NEEDED:                      Driver.             (line  198)
45814 * USE_LOAD_POST_DECREMENT:               Costs.              (line  174)
45815 * USE_LOAD_POST_INCREMENT:               Costs.              (line  169)
45816 * USE_LOAD_PRE_DECREMENT:                Costs.              (line  184)
45817 * USE_LOAD_PRE_INCREMENT:                Costs.              (line  179)
45818 * use_optype_d:                          Manipulating GIMPLE statements.
45819                                                              (line  101)
45820 * use_param:                             GTY Options.        (line  114)
45821 * use_paramN:                            GTY Options.        (line  132)
45822 * use_params:                            GTY Options.        (line  140)
45823 * USE_SELECT_SECTION_FOR_FUNCTIONS:      Sections.           (line  195)
45824 * USE_STORE_POST_DECREMENT:              Costs.              (line  194)
45825 * USE_STORE_POST_INCREMENT:              Costs.              (line  189)
45826 * USE_STORE_PRE_DECREMENT:               Costs.              (line  204)
45827 * USE_STORE_PRE_INCREMENT:               Costs.              (line  199)
45828 * used:                                  Flags.              (line  342)
45829 * used, in symbol_ref:                   Flags.              (line  215)
45830 * USER_LABEL_PREFIX:                     Instruction Output. (line  139)
45831 * USING_STMT:                            Statements for C++. (line    6)
45832 * usmaddMN4 instruction pattern:         Standard Names.     (line  383)
45833 * usmsubMN4 instruction pattern:         Standard Names.     (line  407)
45834 * usmulhisi3 instruction pattern:        Standard Names.     (line  351)
45835 * usmulM3 instruction pattern:           Standard Names.     (line  222)
45836 * usmulqihi3 instruction pattern:        Standard Names.     (line  351)
45837 * usmulsidi3 instruction pattern:        Standard Names.     (line  351)
45838 * usnegM2 instruction pattern:           Standard Names.     (line  449)
45839 * USQmode:                               Machine Modes.      (line  132)
45840 * ussubM3 instruction pattern:           Standard Names.     (line  222)
45841 * usum_widenM3 instruction pattern:      Standard Names.     (line  275)
45842 * UTAmode:                               Machine Modes.      (line  172)
45843 * UTQmode:                               Machine Modes.      (line  140)
45844 * V in constraint:                       Simple Constraints. (line   43)
45845 * VA_ARG_EXPR:                           Unary and Binary Expressions.
45846                                                              (line    6)
45847 * values, returned by functions:         Scalar Return.      (line    6)
45848 * VAR_DECL:                              Declarations.       (line    6)
45849 * var_location:                          Debug Information.  (line   14)
45850 * varargs implementation:                Varargs.            (line    6)
45851 * variable:                              Declarations.       (line    6)
45852 * Variable Location Debug Information in RTL: Debug Information.
45853                                                              (line    6)
45854 * vashlM3 instruction pattern:           Standard Names.     (line  445)
45855 * vashrM3 instruction pattern:           Standard Names.     (line  445)
45856 * vec_concat:                            Vector Operations.  (line   28)
45857 * vec_duplicate:                         Vector Operations.  (line   33)
45858 * VEC_EXTRACT_EVEN_EXPR:                 Vectors.            (line    6)
45859 * vec_extract_evenM instruction pattern: Standard Names.     (line  176)
45860 * VEC_EXTRACT_ODD_EXPR:                  Vectors.            (line    6)
45861 * vec_extract_oddM instruction pattern:  Standard Names.     (line  183)
45862 * vec_extractM instruction pattern:      Standard Names.     (line  171)
45863 * vec_initM instruction pattern:         Standard Names.     (line  204)
45864 * VEC_INTERLEAVE_HIGH_EXPR:              Vectors.            (line    6)
45865 * vec_interleave_highM instruction pattern: Standard Names.  (line  190)
45866 * VEC_INTERLEAVE_LOW_EXPR:               Vectors.            (line    6)
45867 * vec_interleave_lowM instruction pattern: Standard Names.   (line  197)
45868 * VEC_LSHIFT_EXPR:                       Vectors.            (line    6)
45869 * vec_merge:                             Vector Operations.  (line   11)
45870 * VEC_PACK_FIX_TRUNC_EXPR:               Vectors.            (line    6)
45871 * VEC_PACK_SAT_EXPR:                     Vectors.            (line    6)
45872 * vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line  302)
45873 * vec_pack_ssat_M instruction pattern:   Standard Names.     (line  295)
45874 * VEC_PACK_TRUNC_EXPR:                   Vectors.            (line    6)
45875 * vec_pack_trunc_M instruction pattern:  Standard Names.     (line  288)
45876 * vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line  302)
45877 * vec_pack_usat_M instruction pattern:   Standard Names.     (line  295)
45878 * VEC_RSHIFT_EXPR:                       Vectors.            (line    6)
45879 * vec_select:                            Vector Operations.  (line   19)
45880 * vec_setM instruction pattern:          Standard Names.     (line  166)
45881 * vec_shl_M instruction pattern:         Standard Names.     (line  282)
45882 * vec_shr_M instruction pattern:         Standard Names.     (line  282)
45883 * VEC_UNPACK_FLOAT_HI_EXPR:              Vectors.            (line    6)
45884 * VEC_UNPACK_FLOAT_LO_EXPR:              Vectors.            (line    6)
45885 * VEC_UNPACK_HI_EXPR:                    Vectors.            (line    6)
45886 * VEC_UNPACK_LO_EXPR:                    Vectors.            (line    6)
45887 * vec_unpacks_float_hi_M instruction pattern: Standard Names.
45888                                                              (line  324)
45889 * vec_unpacks_float_lo_M instruction pattern: Standard Names.
45890                                                              (line  324)
45891 * vec_unpacks_hi_M instruction pattern:  Standard Names.     (line  309)
45892 * vec_unpacks_lo_M instruction pattern:  Standard Names.     (line  309)
45893 * vec_unpacku_float_hi_M instruction pattern: Standard Names.
45894                                                              (line  324)
45895 * vec_unpacku_float_lo_M instruction pattern: Standard Names.
45896                                                              (line  324)
45897 * vec_unpacku_hi_M instruction pattern:  Standard Names.     (line  317)
45898 * vec_unpacku_lo_M instruction pattern:  Standard Names.     (line  317)
45899 * VEC_WIDEN_MULT_HI_EXPR:                Vectors.            (line    6)
45900 * VEC_WIDEN_MULT_LO_EXPR:                Vectors.            (line    6)
45901 * vec_widen_smult_hi_M instruction pattern: Standard Names.  (line  333)
45902 * vec_widen_smult_lo_M instruction pattern: Standard Names.  (line  333)
45903 * vec_widen_umult_hi_M instruction pattern: Standard Names.  (line  333)
45904 * vec_widen_umult_lo__M instruction pattern: Standard Names. (line  333)
45905 * vector:                                Containers.         (line    6)
45906 * vector operations:                     Vector Operations.  (line    6)
45907 * VECTOR_CST:                            Constant expressions.
45908                                                              (line    6)
45909 * VECTOR_STORE_FLAG_VALUE:               Misc.               (line  308)
45910 * virtual operands:                      SSA Operands.       (line    6)
45911 * VIRTUAL_INCOMING_ARGS_REGNUM:          Regs and Memory.    (line   59)
45912 * VIRTUAL_OUTGOING_ARGS_REGNUM:          Regs and Memory.    (line   87)
45913 * VIRTUAL_STACK_DYNAMIC_REGNUM:          Regs and Memory.    (line   78)
45914 * VIRTUAL_STACK_VARS_REGNUM:             Regs and Memory.    (line   69)
45915 * VLIW:                                  Processor pipeline description.
45916                                                              (line    6)
45917 * vlshrM3 instruction pattern:           Standard Names.     (line  445)
45918 * VMS:                                   Filesystem.         (line   37)
45919 * VMS_DEBUGGING_INFO:                    VMS Debug.          (line    9)
45920 * VOID_TYPE:                             Types.              (line    6)
45921 * VOIDmode:                              Machine Modes.      (line  190)
45922 * volatil:                               Flags.              (line  356)
45923 * volatil, in insn, call_insn, jump_insn, code_label, barrier, and note: Flags.
45924                                                              (line   44)
45925 * volatil, in label_ref and reg_label:   Flags.              (line   65)
45926 * volatil, in mem, asm_operands, and asm_input: Flags.       (line   94)
45927 * volatil, in reg:                       Flags.              (line  116)
45928 * volatil, in subreg:                    Flags.              (line  188)
45929 * volatil, in symbol_ref:                Flags.              (line  224)
45930 * volatile memory references:            Flags.              (line  357)
45931 * volatile, in prefetch:                 Flags.              (line  232)
45932 * voptype_d:                             Manipulating GIMPLE statements.
45933                                                              (line  108)
45934 * voting between constraint alternatives: Class Preferences. (line    6)
45935 * vrotlM3 instruction pattern:           Standard Names.     (line  445)
45936 * vrotrM3 instruction pattern:           Standard Names.     (line  445)
45937 * walk_dominator_tree:                   SSA.                (line  256)
45938 * walk_gimple_op:                        Statement and operand traversals.
45939                                                              (line   32)
45940 * walk_gimple_seq:                       Statement and operand traversals.
45941                                                              (line   50)
45942 * walk_gimple_stmt:                      Statement and operand traversals.
45943                                                              (line   13)
45944 * walk_use_def_chains:                   SSA.                (line  232)
45945 * WCHAR_TYPE:                            Type Layout.        (line  192)
45946 * WCHAR_TYPE_SIZE:                       Type Layout.        (line  200)
45947 * which_alternative:                     Output Statement.   (line   59)
45948 * WHILE_BODY:                            Statements for C++. (line    6)
45949 * WHILE_COND:                            Statements for C++. (line    6)
45950 * WHILE_STMT:                            Statements for C++. (line    6)
45951 * WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line  147)
45952 * WINT_TYPE:                             Type Layout.        (line  205)
45953 * word_mode:                             Machine Modes.      (line  336)
45954 * WORD_REGISTER_OPERATIONS:              Misc.               (line   63)
45955 * WORD_SWITCH_TAKES_ARG:                 Driver.             (line   20)
45956 * WORDS_BIG_ENDIAN:                      Storage Layout.     (line   29)
45957 * WORDS_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  217)
45958 * X in constraint:                       Simple Constraints. (line  114)
45959 * x-HOST:                                Host Fragment.      (line    6)
45960 * XCmode:                                Machine Modes.      (line  197)
45961 * XCOFF_DEBUGGING_INFO:                  DBX Options.        (line   13)
45962 * XEXP:                                  Accessors.          (line    6)
45963 * XF_SIZE:                               Type Layout.        (line  131)
45964 * XFmode:                                Machine Modes.      (line   79)
45965 * XINT:                                  Accessors.          (line    6)
45966 * xm-MACHINE.h <1>:                      Host Misc.          (line    6)
45967 * xm-MACHINE.h:                          Filesystem.         (line    6)
45968 * xor:                                   Arithmetic.         (line  163)
45969 * xor, canonicalization of:              Insn Canonicalizations.
45970                                                              (line   79)
45971 * xorM3 instruction pattern:             Standard Names.     (line  222)
45972 * XSTR:                                  Accessors.          (line    6)
45973 * XVEC:                                  Accessors.          (line   41)
45974 * XVECEXP:                               Accessors.          (line   48)
45975 * XVECLEN:                               Accessors.          (line   44)
45976 * XWINT:                                 Accessors.          (line    6)
45977 * zero_extend:                           Conversions.        (line   28)
45978 * zero_extendMN2 instruction pattern:    Standard Names.     (line  813)
45979 * zero_extract:                          Bit-Fields.         (line   30)
45980 * zero_extract, canonicalization of:     Insn Canonicalizations.
45981                                                              (line   88)
45984 \x1f
45985 Tag Table:
45986 Node: Top\x7f2100
45987 Node: Contributing\x7f5152
45988 Node: Portability\x7f5893
45989 Node: Interface\x7f7681
45990 Node: Libgcc\x7f10721
45991 Node: Integer library routines\x7f12562
45992 Node: Soft float library routines\x7f19401
45993 Node: Decimal float library routines\x7f31338
45994 Node: Fixed-point fractional library routines\x7f47095
45995 Node: Exception handling routines\x7f147493
45996 Node: Miscellaneous routines\x7f148600
45997 Node: Languages\x7f148983
45998 Node: Source Tree\x7f150532
45999 Node: Configure Terms\x7f151114
46000 Node: Top Level\x7f154072
46001 Node: gcc Directory\x7f157241
46002 Node: Subdirectories\x7f158191
46003 Node: Configuration\x7f160063
46004 Node: Config Fragments\x7f160783
46005 Node: System Config\x7f162012
46006 Node: Configuration Files\x7f162948
46007 Node: Build\x7f165395
46008 Node: Makefile\x7f165807
46009 Ref: Makefile-Footnote-1\x7f172455
46010 Ref: Makefile-Footnote-2\x7f172600
46011 Node: Library Files\x7f172672
46012 Node: Headers\x7f173234
46013 Node: Documentation\x7f175317
46014 Node: Texinfo Manuals\x7f176176
46015 Node: Man Page Generation\x7f178516
46016 Node: Miscellaneous Docs\x7f180431
46017 Node: Front End\x7f181820
46018 Node: Front End Directory\x7f185739
46019 Node: Front End Config\x7f187059
46020 Node: Front End Makefile\x7f190001
46021 Node: Back End\x7f193783
46022 Node: Testsuites\x7f197462
46023 Node: Test Idioms\x7f198393
46024 Node: Test Directives\x7f201790
46025 Node: Directives\x7f202317
46026 Node: Selectors\x7f212385
46027 Node: Effective-Target Keywords\x7f213527
46028 Node: Add Options\x7f230072
46029 Node: Require Support\x7f230869
46030 Node: Final Actions\x7f233376
46031 Node: Ada Tests\x7f237439
46032 Node: C Tests\x7f238781
46033 Node: libgcj Tests\x7f243204
46034 Node: LTO Testing\x7f244331
46035 Node: gcov Testing\x7f245936
46036 Node: profopt Testing\x7f248923
46037 Node: compat Testing\x7f250638
46038 Node: Torture Tests\x7f254878
46039 Node: Options\x7f256495
46040 Node: Option file format\x7f256935
46041 Node: Option properties\x7f259684
46042 Node: Passes\x7f266159
46043 Node: Parsing pass\x7f266903
46044 Node: Gimplification pass\x7f270431
46045 Node: Pass manager\x7f272258
46046 Node: Tree SSA passes\x7f274053
46047 Node: RTL passes\x7f296588
46048 Node: RTL\x7f308931
46049 Node: RTL Objects\x7f311119
46050 Node: RTL Classes\x7f314993
46051 Node: Accessors\x7f319945
46052 Node: Special Accessors\x7f322339
46053 Node: Flags\x7f327705
46054 Node: Machine Modes\x7f343880
46055 Node: Constants\x7f356196
46056 Node: Regs and Memory\x7f362225
46057 Node: Arithmetic\x7f380126
46058 Node: Comparisons\x7f389758
46059 Node: Bit-Fields\x7f394050
46060 Node: Vector Operations\x7f395602
46061 Node: Conversions\x7f397437
46062 Node: RTL Declarations\x7f401935
46063 Node: Side Effects\x7f402756
46064 Node: Incdec\x7f419078
46065 Node: Assembler\x7f422413
46066 Node: Debug Information\x7f423958
46067 Node: Insns\x7f425156
46068 Node: Calls\x7f451356
46069 Node: Sharing\x7f453949
46070 Node: Reading RTL\x7f457059
46071 Node: GENERIC\x7f458051
46072 Node: Deficiencies\x7f459924
46073 Node: Tree overview\x7f460165
46074 Node: Macros and Functions\x7f464292
46075 Node: Identifiers\x7f465117
46076 Node: Containers\x7f466728
46077 Node: Types\x7f467885
46078 Node: Declarations\x7f479981
46079 Node: Working with declarations\x7f480476
46080 Node: Internal structure\x7f486082
46081 Node: Current structure hierarchy\x7f486466
46082 Node: Adding new DECL node types\x7f488560
46083 Node: Attributes\x7f492633
46084 Node: Expression trees\x7f493878
46085 Node: Constant expressions\x7f495631
46086 Node: Storage References\x7f499850
46087 Node: Unary and Binary Expressions\x7f503024
46088 Node: Vectors\x7f522442
46089 Node: Statements\x7f527371
46090 Node: Basic Statements\x7f527891
46091 Node: Blocks\x7f532398
46092 Node: Statement Sequences\x7f533802
46093 Node: Empty Statements\x7f534135
46094 Node: Jumps\x7f534709
46095 Node: Cleanups\x7f535362
46096 Node: OpenMP\x7f537130
46097 Node: Functions\x7f542877
46098 Node: Function Basics\x7f543348
46099 Node: Function Properties\x7f547033
46100 Node: Language-dependent trees\x7f550162
46101 Node: C and C++ Trees\x7f551048
46102 Node: Types for C++\x7f553952
46103 Node: Namespaces\x7f558922
46104 Node: Classes\x7f562029
46105 Node: Functions for C++\x7f567107
46106 Node: Statements for C++\x7f573360
46107 Node: C++ Expressions\x7f581408
46108 Node: Java Trees\x7f582909
46109 Node: GIMPLE\x7f583022
46110 Node: Tuple representation\x7f586643
46111 Node: GIMPLE instruction set\x7f595298
46112 Node: GIMPLE Exception Handling\x7f596966
46113 Node: Temporaries\x7f598880
46114 Ref: Temporaries-Footnote-1\x7f600199
46115 Node: Operands\x7f600262
46116 Node: Compound Expressions\x7f601036
46117 Node: Compound Lvalues\x7f601270
46118 Node: Conditional Expressions\x7f602036
46119 Node: Logical Operators\x7f602706
46120 Node: Manipulating GIMPLE statements\x7f609497
46121 Node: Tuple specific accessors\x7f615425
46122 Node: `GIMPLE_ASM'\x7f616244
46123 Node: `GIMPLE_ASSIGN'\x7f618849
46124 Node: `GIMPLE_BIND'\x7f622794
46125 Node: `GIMPLE_CALL'\x7f624601
46126 Node: `GIMPLE_CATCH'\x7f628860
46127 Node: `GIMPLE_COND'\x7f630003
46128 Node: `GIMPLE_DEBUG'\x7f632791
46129 Node: `GIMPLE_EH_FILTER'\x7f636163
46130 Node: `GIMPLE_LABEL'\x7f637650
46131 Node: `GIMPLE_NOP'\x7f638625
46132 Node: `GIMPLE_OMP_ATOMIC_LOAD'\x7f638994
46133 Node: `GIMPLE_OMP_ATOMIC_STORE'\x7f639904
46134 Node: `GIMPLE_OMP_CONTINUE'\x7f640543
46135 Node: `GIMPLE_OMP_CRITICAL'\x7f641893
46136 Node: `GIMPLE_OMP_FOR'\x7f642829
46137 Node: `GIMPLE_OMP_MASTER'\x7f646339
46138 Node: `GIMPLE_OMP_ORDERED'\x7f646722
46139 Node: `GIMPLE_OMP_PARALLEL'\x7f647122
46140 Node: `GIMPLE_OMP_RETURN'\x7f649891
46141 Node: `GIMPLE_OMP_SECTION'\x7f650541
46142 Node: `GIMPLE_OMP_SECTIONS'\x7f651207
46143 Node: `GIMPLE_OMP_SINGLE'\x7f652811
46144 Node: `GIMPLE_PHI'\x7f653747
46145 Node: `GIMPLE_RESX'\x7f655160
46146 Node: `GIMPLE_RETURN'\x7f655879
46147 Node: `GIMPLE_SWITCH'\x7f656447
46148 Node: `GIMPLE_TRY'\x7f658577
46149 Node: `GIMPLE_WITH_CLEANUP_EXPR'\x7f660367
46150 Node: GIMPLE sequences\x7f661250
46151 Node: Sequence iterators\x7f664456
46152 Node: Adding a new GIMPLE statement code\x7f672911
46153 Node: Statement and operand traversals\x7f674191
46154 Node: Tree SSA\x7f676801
46155 Node: Annotations\x7f678587
46156 Node: SSA Operands\x7f679113
46157 Node: SSA\x7f693644
46158 Node: Alias analysis\x7f705935
46159 Node: Memory model\x7f709715
46160 Node: Loop Analysis and Representation\x7f711078
46161 Node: Loop representation\x7f712259
46162 Node: Loop querying\x7f719179
46163 Node: Loop manipulation\x7f722012
46164 Node: LCSSA\x7f724380
46165 Node: Scalar evolutions\x7f726452
46166 Node: loop-iv\x7f729696
46167 Node: Number of iterations\x7f731622
46168 Node: Dependency analysis\x7f734431
46169 Node: Lambda\x7f740799
46170 Node: Omega\x7f742470
46171 Node: Control Flow\x7f744035
46172 Node: Basic Blocks\x7f745030
46173 Node: Edges\x7f749598
46174 Node: Profile information\x7f758160
46175 Node: Maintaining the CFG\x7f762846
46176 Node: Liveness information\x7f769723
46177 Node: Machine Desc\x7f771849
46178 Node: Overview\x7f774317
46179 Node: Patterns\x7f776358
46180 Node: Example\x7f779796
46181 Node: RTL Template\x7f781231
46182 Node: Output Template\x7f791886
46183 Node: Output Statement\x7f795851
46184 Node: Predicates\x7f799813
46185 Node: Machine-Independent Predicates\x7f802731
46186 Node: Defining Predicates\x7f807676
46187 Node: Constraints\x7f813641
46188 Node: Simple Constraints\x7f814889
46189 Node: Multi-Alternative\x7f827095
46190 Node: Class Preferences\x7f829936
46191 Node: Modifiers\x7f830828
46192 Node: Machine Constraints\x7f834960
46193 Node: Disable Insn Alternatives\x7f871823
46194 Node: Define Constraints\x7f874716
46195 Node: C Constraint Interface\x7f881497
46196 Node: Standard Names\x7f885138
46197 Ref: shift patterns\x7f904066
46198 Ref: prologue instruction pattern\x7f943785
46199 Ref: epilogue instruction pattern\x7f944278
46200 Node: Pattern Ordering\x7f953994
46201 Node: Dependent Patterns\x7f955230
46202 Node: Jump Patterns\x7f956850
46203 Ref: Jump Patterns-Footnote-1\x7f958994
46204 Node: Looping Patterns\x7f959040
46205 Node: Insn Canonicalizations\x7f963768
46206 Node: Expander Definitions\x7f967719
46207 Node: Insn Splitting\x7f975837
46208 Node: Including Patterns\x7f985439
46209 Node: Peephole Definitions\x7f987219
46210 Node: define_peephole\x7f988472
46211 Node: define_peephole2\x7f994803
46212 Node: Insn Attributes\x7f997870
46213 Node: Defining Attributes\x7f998976
46214 Node: Expressions\x7f1001496
46215 Node: Tagging Insns\x7f1008098
46216 Node: Attr Example\x7f1012451
46217 Node: Insn Lengths\x7f1014825
46218 Node: Constant Attributes\x7f1017884
46219 Node: Delay Slots\x7f1019053
46220 Node: Processor pipeline description\x7f1022277
46221 Ref: Processor pipeline description-Footnote-1\x7f1039895
46222 Node: Conditional Execution\x7f1040217
46223 Node: Constant Definitions\x7f1043070
46224 Node: Iterators\x7f1044665
46225 Node: Mode Iterators\x7f1045112
46226 Node: Defining Mode Iterators\x7f1046090
46227 Node: Substitutions\x7f1047584
46228 Node: Examples\x7f1049825
46229 Node: Code Iterators\x7f1051273
46230 Node: Target Macros\x7f1053530
46231 Node: Target Structure\x7f1056618
46232 Node: Driver\x7f1057887
46233 Node: Run-time Target\x7f1081568
46234 Node: Per-Function Data\x7f1089440
46235 Node: Storage Layout\x7f1092203
46236 Node: Type Layout\x7f1117789
46237 Node: Registers\x7f1132289
46238 Node: Register Basics\x7f1133263
46239 Node: Allocation Order\x7f1138830
46240 Node: Values in Registers\x7f1140851
46241 Node: Leaf Functions\x7f1148340
46242 Node: Stack Registers\x7f1151198
46243 Node: Register Classes\x7f1152470
46244 Node: Old Constraints\x7f1180095
46245 Node: Stack and Calling\x7f1187247
46246 Node: Frame Layout\x7f1187781
46247 Node: Exception Handling\x7f1198661
46248 Node: Stack Checking\x7f1205039
46249 Node: Frame Registers\x7f1209852
46250 Node: Elimination\x7f1216745
46251 Node: Stack Arguments\x7f1220974
46252 Node: Register Arguments\x7f1227783
46253 Node: Scalar Return\x7f1243266
46254 Node: Aggregate Return\x7f1249358
46255 Node: Caller Saves\x7f1253039
46256 Node: Function Entry\x7f1254217
46257 Node: Profiling\x7f1266845
46258 Node: Tail Calls\x7f1268544
46259 Node: Stack Smashing Protection\x7f1269910
46260 Node: Varargs\x7f1271022
46261 Node: Trampolines\x7f1279017
46262 Node: Library Calls\x7f1285664
46263 Node: Addressing Modes\x7f1290514
46264 Node: Anchored Addresses\x7f1307923
46265 Node: Condition Code\x7f1310572
46266 Node: CC0 Condition Codes\x7f1312701
46267 Node: MODE_CC Condition Codes\x7f1315947
46268 Node: Cond. Exec. Macros\x7f1322176
46269 Node: Costs\x7f1323155
46270 Node: Scheduling\x7f1336616
46271 Node: Sections\x7f1353883
46272 Node: PIC\x7f1368951
46273 Node: Assembler Format\x7f1370955
46274 Node: File Framework\x7f1372093
46275 Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS\x7f1377568
46276 Node: Data Output\x7f1380833
46277 Node: Uninitialized Data\x7f1388592
46278 Node: Label Output\x7f1394156
46279 Node: Initialization\x7f1415846
46280 Node: Macros for Initialization\x7f1421808
46281 Node: Instruction Output\x7f1428260
46282 Node: Dispatch Tables\x7f1437931
46283 Node: Exception Region Output\x7f1441746
46284 Node: Alignment Output\x7f1447488
46285 Node: Debugging Info\x7f1451651
46286 Node: All Debuggers\x7f1452321
46287 Node: DBX Options\x7f1455176
46288 Node: DBX Hooks\x7f1460625
46289 Node: File Names and DBX\x7f1462551
46290 Node: SDB and DWARF\x7f1464663
46291 Node: VMS Debug\x7f1468964
46292 Node: Floating Point\x7f1469534
46293 Node: Mode Switching\x7f1474357
46294 Node: Target Attributes\x7f1478283
46295 Node: Emulated TLS\x7f1485119
46296 Node: MIPS Coprocessors\x7f1488509
46297 Node: PCH Target\x7f1490078
46298 Node: C++ ABI\x7f1491620
46299 Node: Named Address Spaces\x7f1496269
46300 Node: Misc\x7f1501371
46301 Ref: TARGET_SHIFT_TRUNCATION_MASK\x7f1508800
46302 Node: Host Config\x7f1553311
46303 Node: Host Common\x7f1554379
46304 Node: Filesystem\x7f1556758
46305 Node: Host Misc\x7f1560873
46306 Node: Fragments\x7f1563322
46307 Node: Target Fragment\x7f1564517
46308 Node: Host Fragment\x7f1570407
46309 Node: Collect2\x7f1570647
46310 Node: Header Dirs\x7f1573283
46311 Node: Type Information\x7f1574706
46312 Node: GTY Options\x7f1576997
46313 Node: GGC Roots\x7f1587677
46314 Node: Files\x7f1588397
46315 Node: Invoking the garbage collector\x7f1591143
46316 Node: Plugins\x7f1592196
46317 Node: Funding\x7f1608018
46318 Node: GNU Project\x7f1610505
46319 Node: Copying\x7f1611154
46320 Node: GNU Free Documentation License\x7f1648685
46321 Node: Contributors\x7f1671094
46322 Node: Option Index\x7f1707781
46323 Node: Concept Index\x7f1708366
46324 \x1f
46325 End Tag Table