Create startup files from the GCC sources and drop our versions.
[dragonfly.git] / contrib / gcc-4.0 / gcc / doc / gccint.info
1 This is doc/gccint.info, produced by makeinfo version 4.8 from
2 /scratch/mitchell/gcc-releases/gcc-4.0.1/gcc-4.0.1/gcc/doc/gccint.texi.
3
4  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
5 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
6
7  Permission is granted to copy, distribute and/or modify this document
8 under the terms of the GNU Free Documentation License, Version 1.2 or
9 any later version published by the Free Software Foundation; with the
10 Invariant Sections being "GNU General Public License" and "Funding Free
11 Software", the Front-Cover texts being (a) (see below), and with the
12 Back-Cover Texts being (b) (see below).  A copy of the license is
13 included in the section entitled "GNU Free Documentation License".
14
15  (a) The FSF's Front-Cover Text is:
16
17  A GNU Manual
18
19  (b) The FSF's Back-Cover Text is:
20
21  You have freedom to copy and modify this GNU Manual, like GNU
22 software.  Copies published by the Free Software Foundation raise
23 funds for GNU development.
24
25 INFO-DIR-SECTION Programming
26 START-INFO-DIR-ENTRY
27 * gccint: (gccint).            Internals of the GNU Compiler Collection.
28 END-INFO-DIR-ENTRY
29  This file documents the internals of the GNU compilers.
30
31  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
32 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
33
34  Permission is granted to copy, distribute and/or modify this document
35 under the terms of the GNU Free Documentation License, Version 1.2 or
36 any later version published by the Free Software Foundation; with the
37 Invariant Sections being "GNU General Public License" and "Funding Free
38 Software", the Front-Cover texts being (a) (see below), and with the
39 Back-Cover Texts being (b) (see below).  A copy of the license is
40 included in the section entitled "GNU Free Documentation License".
41
42  (a) The FSF's Front-Cover Text is:
43
44  A GNU Manual
45
46  (b) The FSF's Back-Cover Text is:
47
48  You have freedom to copy and modify this GNU Manual, like GNU
49 software.  Copies published by the Free Software Foundation raise
50 funds for GNU development.
51
52
53 \1f
54 File: gccint.info,  Node: Top,  Next: Contributing,  Up: (DIR)
55
56 Introduction
57 ************
58
59 This manual documents the internals of the GNU compilers, including how
60 to port them to new targets and some information about how to write
61 front ends for new languages.  It corresponds to GCC version 4.0.1.
62 The use of the GNU compilers is documented in a separate manual.  *Note
63 Introduction: (gcc)Top.
64
65  This manual is mainly a reference manual rather than a tutorial.  It
66 discusses how to contribute to GCC (*note Contributing::), the
67 characteristics of the machines supported by GCC as hosts and targets
68 (*note Portability::), how GCC relates to the ABIs on such systems
69 (*note Interface::), and the characteristics of the languages for which
70 GCC front ends are written (*note Languages::).  It then describes the
71 GCC source tree structure and build system, some of the interfaces to
72 GCC front ends, and how support for a target system is implemented in
73 GCC.
74
75  Additional tutorial information is linked to from
76 `http://gcc.gnu.org/readings.html'.
77
78 * Menu:
79
80 * Contributing::    How to contribute to testing and developing GCC.
81 * Portability::     Goals of GCC's portability features.
82 * Interface::       Function-call interface of GCC output.
83 * Libgcc::          Low-level runtime library used by GCC.
84 * Languages::       Languages for which GCC front ends are written.
85 * Source Tree::     GCC source tree structure and build system.
86 * Passes::          Order of passes, what they do, and what each file is for.
87 * Trees::           The source representation used by the C and C++ front ends.
88 * RTL::             The intermediate representation that most passes work on.
89 * Control Flow::    Maintaining and manipulating the control flow graph.
90 * Tree SSA::        Analysis and optimization of the tree representation.
91 * Machine Desc::    How to write machine description instruction patterns.
92 * Target Macros::   How to write the machine description C macros and functions.
93 * Host Config::     Writing the `xm-MACHINE.h' file.
94 * Fragments::       Writing the `t-TARGET' and `x-HOST' files.
95 * Collect2::        How `collect2' works; how it finds `ld'.
96 * Header Dirs::     Understanding the standard header file directories.
97 * Type Information:: GCC's memory management; generating type information.
98
99 * Funding::         How to help assure funding for free software.
100 * GNU Project::     The GNU Project and GNU/Linux.
101
102 * Copying::         GNU General Public License says
103                      how you can copy and share GCC.
104 * GNU Free Documentation License:: How you can copy and share this manual.
105 * Contributors::    People who have contributed to GCC.
106
107 * Option Index::    Index to command line options.
108 * Concept Index::   Index of concepts and symbol names.
109
110 \1f
111 File: gccint.info,  Node: Contributing,  Next: Portability,  Prev: Top,  Up: Top
112
113 1 Contributing to GCC Development
114 *********************************
115
116 If you would like to help pretest GCC releases to assure they work well,
117 current development sources are available by CVS (see
118 `http://gcc.gnu.org/cvs.html').  Source and binary snapshots are also
119 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
120
121  If you would like to work on improvements to GCC, please read the
122 advice at these URLs:
123
124      `http://gcc.gnu.org/contribute.html'
125      `http://gcc.gnu.org/contributewhy.html'
126
127 for information on how to make useful contributions and avoid
128 duplication of effort.  Suggested projects are listed at
129 `http://gcc.gnu.org/projects/'.
130
131 \1f
132 File: gccint.info,  Node: Portability,  Next: Interface,  Prev: Contributing,  Up: Top
133
134 2 GCC and Portability
135 *********************
136
137 GCC itself aims to be portable to any machine where `int' is at least a
138 32-bit type.  It aims to target machines with a flat (non-segmented)
139 byte addressed data address space (the code address space can be
140 separate).  Target ABIs may have 8, 16, 32 or 64-bit `int' type.  `char'
141 can be wider than 8 bits.
142
143  GCC gets most of the information about the target machine from a
144 machine description which gives an algebraic formula for each of the
145 machine's instructions.  This is a very clean way to describe the
146 target.  But when the compiler needs information that is difficult to
147 express in this fashion, ad-hoc parameters have been defined for
148 machine descriptions.  The purpose of portability is to reduce the
149 total work needed on the compiler; it was not of interest for its own
150 sake.
151
152  GCC does not contain machine dependent code, but it does contain code
153 that depends on machine parameters such as endianness (whether the most
154 significant byte has the highest or lowest address of the bytes in a
155 word) and the availability of autoincrement addressing.  In the
156 RTL-generation pass, it is often necessary to have multiple strategies
157 for generating code for a particular kind of syntax tree, strategies
158 that are usable for different combinations of parameters.  Often, not
159 all possible cases have been addressed, but only the common ones or
160 only the ones that have been encountered.  As a result, a new target
161 may require additional strategies.  You will know if this happens
162 because the compiler will call `abort'.  Fortunately, the new
163 strategies can be added in a machine-independent fashion, and will
164 affect only the target machines that need them.
165
166 \1f
167 File: gccint.info,  Node: Interface,  Next: Libgcc,  Prev: Portability,  Up: Top
168
169 3 Interfacing to GCC Output
170 ***************************
171
172 GCC is normally configured to use the same function calling convention
173 normally in use on the target system.  This is done with the
174 machine-description macros described (*note Target Macros::).
175
176  However, returning of structure and union values is done differently on
177 some target machines.  As a result, functions compiled with PCC
178 returning such types cannot be called from code compiled with GCC, and
179 vice versa.  This does not cause trouble often because few Unix library
180 routines return structures or unions.
181
182  GCC code returns structures and unions that are 1, 2, 4 or 8 bytes
183 long in the same registers used for `int' or `double' return values.
184 (GCC typically allocates variables of such types in registers also.)
185 Structures and unions of other sizes are returned by storing them into
186 an address passed by the caller (usually in a register).  The target
187 hook `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
188
189  By contrast, PCC on most target machines returns structures and unions
190 of any size by copying the data into an area of static storage, and then
191 returning the address of that storage as if it were a pointer value.
192 The caller must copy the data from that memory area to the place where
193 the value is wanted.  This is slower than the method used by GCC, and
194 fails to be reentrant.
195
196  On some target machines, such as RISC machines and the 80386, the
197 standard system convention is to pass to the subroutine the address of
198 where to return the value.  On these machines, GCC has been configured
199 to be compatible with the standard compiler, when this method is used.
200 It may not be compatible for structures of 1, 2, 4 or 8 bytes.
201
202  GCC uses the system's standard convention for passing arguments.  On
203 some machines, the first few arguments are passed in registers; in
204 others, all are passed on the stack.  It would be possible to use
205 registers for argument passing on any machine, and this would probably
206 result in a significant speedup.  But the result would be complete
207 incompatibility with code that follows the standard convention.  So this
208 change is practical only if you are switching to GCC as the sole C
209 compiler for the system.  We may implement register argument passing on
210 certain machines once we have a complete GNU system so that we can
211 compile the libraries with GCC.
212
213  On some machines (particularly the SPARC), certain types of arguments
214 are passed "by invisible reference".  This means that the value is
215 stored in memory, and the address of the memory location is passed to
216 the subroutine.
217
218  If you use `longjmp', beware of automatic variables.  ISO C says that
219 automatic variables that are not declared `volatile' have undefined
220 values after a `longjmp'.  And this is all GCC promises to do, because
221 it is very difficult to restore register variables correctly, and one
222 of GCC's features is that it can put variables in registers without
223 your asking it to.
224
225 \1f
226 File: gccint.info,  Node: Libgcc,  Next: Languages,  Prev: Interface,  Up: Top
227
228 4 The GCC low-level runtime library
229 ***********************************
230
231 GCC provides a low-level runtime library, `libgcc.a' or `libgcc_s.so.1'
232 on some platforms.  GCC generates calls to routines in this library
233 automatically, whenever it needs to perform some operation that is too
234 complicated to emit inline code for.
235
236  Most of the routines in `libgcc' handle arithmetic operations that the
237 target processor cannot perform directly.  This includes integer
238 multiply and divide on some machines, and all floating-point operations
239 on other machines.  `libgcc' also includes routines for exception
240 handling, and a handful of miscellaneous operations.
241
242  Some of these routines can be defined in mostly machine-independent C.
243 Others must be hand-written in assembly language for each processor
244 that needs them.
245
246  GCC will also generate calls to C library routines, such as `memcpy'
247 and `memset', in some cases.  The set of routines that GCC may possibly
248 use is documented in *Note Other Builtins: (gcc)Other Builtins.
249
250  These routines take arguments and return values of a specific machine
251 mode, not a specific C type.  *Note Machine Modes::, for an explanation
252 of this concept.  For illustrative purposes, in this chapter the
253 floating point type `float' is assumed to correspond to `SFmode';
254 `double' to `DFmode'; and `long double' to both `TFmode' and `XFmode'.
255 Similarly, the integer types `int' and `unsigned int' correspond to
256 `SImode'; `long' and `unsigned long' to `DImode'; and `long long' and
257 `unsigned long long' to `TImode'.
258
259 * Menu:
260
261 * Integer library routines::
262 * Soft float library routines::
263 * Exception handling routines::
264 * Miscellaneous routines::
265
266 \1f
267 File: gccint.info,  Node: Integer library routines,  Next: Soft float library routines,  Up: Libgcc
268
269 4.1 Routines for integer arithmetic
270 ===================================
271
272 The integer arithmetic routines are used on platforms that don't provide
273 hardware support for arithmetic operations on some modes.
274
275 4.1.1 Arithmetic functions
276 --------------------------
277
278  -- Runtime Function: int __ashlsi3 (int A, int B)
279  -- Runtime Function: long __ashldi3 (long A, int B)
280  -- Runtime Function: long long __ashlti3 (long long A, int B)
281      These functions return the result of shifting A left by B bits.
282
283  -- Runtime Function: int __ashrsi3 (int A, int B)
284  -- Runtime Function: long __ashrdi3 (long A, int B)
285  -- Runtime Function: long long __ashrti3 (long long A, int B)
286      These functions return the result of arithmetically shifting A
287      right by B bits.
288
289  -- Runtime Function: int __divsi3 (int A, int B)
290  -- Runtime Function: long __divdi3 (long A, long B)
291  -- Runtime Function: long long __divti3 (long long A, long long B)
292      These functions return the quotient of the signed division of A and
293      B.
294
295  -- Runtime Function: int __lshrsi3 (int A, int B)
296  -- Runtime Function: long __lshrdi3 (long A, int B)
297  -- Runtime Function: long long __lshrti3 (long long A, int B)
298      These functions return the result of logically shifting A right by
299      B bits.
300
301  -- Runtime Function: int __modsi3 (int A, int B)
302  -- Runtime Function: long __moddi3 (long A, long B)
303  -- Runtime Function: long long __modti3 (long long A, long long B)
304      These functions return the remainder of the signed division of A
305      and B.
306
307  -- Runtime Function: int __mulsi3 (int A, int B)
308  -- Runtime Function: long __muldi3 (long A, long B)
309  -- Runtime Function: long long __multi3 (long long A, long long B)
310      These functions return the product of A and B.
311
312  -- Runtime Function: long __negdi2 (long A)
313  -- Runtime Function: long long __negti2 (long long A)
314      These functions return the negation of A.
315
316  -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
317           int B)
318  -- Runtime Function: unsigned long __udivdi3 (unsigned long A,
319           unsigned long B)
320  -- Runtime Function: unsigned long long __udivti3 (unsigned long long
321           A, unsigned long long B)
322      These functions return the quotient of the unsigned division of A
323      and B.
324
325  -- Runtime Function: unsigned long __udivmoddi3 (unsigned long A,
326           unsigned long B, unsigned long *C)
327  -- Runtime Function: unsigned long long __udivti3 (unsigned long long
328           A, unsigned long long B, unsigned long long *C)
329      These functions calculate both the quotient and remainder of the
330      unsigned division of A and B.  The return value is the quotient,
331      and the remainder is placed in variable pointed to by C.
332
333  -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
334           int B)
335  -- Runtime Function: unsigned long __umoddi3 (unsigned long A,
336           unsigned long B)
337  -- Runtime Function: unsigned long long __umodti3 (unsigned long long
338           A, unsigned long long B)
339      These functions return the remainder of the unsigned division of A
340      and B.
341
342 4.1.2 Comparison functions
343 --------------------------
344
345 The following functions implement integral comparisons.  These functions
346 implement a low-level compare, upon which the higher level comparison
347 operators (such as less than and greater than or equal to) can be
348 constructed.  The returned values lie in the range zero to two, to allow
349 the high-level operators to be implemented by testing the returned
350 result using either signed or unsigned comparison.
351
352  -- Runtime Function: int __cmpdi2 (long A, long B)
353  -- Runtime Function: int __cmpti2 (long long A, long long B)
354      These functions perform a signed comparison of A and B.  If A is
355      less than B, they return 0; if A is greater than B, they return 2;
356      and if A and B are equal they return 1.
357
358  -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
359  -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned
360           long long B)
361      These functions perform an unsigned comparison of A and B.  If A
362      is less than B, they return 0; if A is greater than B, they return
363      2; and if A and B are equal they return 1.
364
365 4.1.3 Trapping arithmetic functions
366 -----------------------------------
367
368 The following functions implement trapping arithmetic.  These functions
369 call the libc function `abort' upon signed arithmetic overflow.
370
371  -- Runtime Function: int __absvsi2 (int A)
372  -- Runtime Function: long __absvdi2 (long A)
373      These functions return the absolute value of A.
374
375  -- Runtime Function: int __addvsi3 (int A, int B)
376  -- Runtime Function: long __addvdi3 (long A, long B)
377      These functions return the sum of A and B; that is `A + B'.
378
379  -- Runtime Function: int __mulvsi3 (int A, int B)
380  -- Runtime Function: long __mulvdi3 (long A, long B)
381      The functions return the product of A and B; that is `A * B'.
382
383  -- Runtime Function: int __negvsi2 (int A)
384  -- Runtime Function: long __negvdi2 (long A)
385      These functions return the negation of A; that is `-A'.
386
387  -- Runtime Function: int __subvsi3 (int A, int B)
388  -- Runtime Function: long __subvdi3 (long A, long B)
389      These functions return the difference between B and A; that is `A
390      - B'.
391
392 4.1.4 Bit operations
393 --------------------
394
395  -- Runtime Function: int __clzsi2 (int A)
396  -- Runtime Function: int __clzdi2 (long A)
397  -- Runtime Function: int __clzti2 (long long A)
398      These functions return the number of leading 0-bits in A, starting
399      at the most significant bit position.  If A is zero, the result is
400      undefined.
401
402  -- Runtime Function: int __ctzsi2 (int A)
403  -- Runtime Function: int __ctzdi2 (long A)
404  -- Runtime Function: int __ctzti2 (long long A)
405      These functions return the number of trailing 0-bits in A, starting
406      at the least significant bit position.  If A is zero, the result is
407      undefined.
408
409  -- Runtime Function: int __ffsdi2 (long A)
410  -- Runtime Function: int __ffsti2 (long long A)
411      These functions return the index of the least significant 1-bit in
412      A, or the value zero if A is zero.  The least significant bit is
413      index one.
414
415  -- Runtime Function: int __paritysi2 (int A)
416  -- Runtime Function: int __paritydi2 (long A)
417  -- Runtime Function: int __parityti2 (long long A)
418      These functions return the value zero if the number of bits set in
419      A is even, and the value one otherwise.
420
421  -- Runtime Function: int __popcountsi2 (int A)
422  -- Runtime Function: int __popcountdi2 (long A)
423  -- Runtime Function: int __popcountti2 (long long A)
424      These functions return the number of bits set in A.
425
426 \1f
427 File: gccint.info,  Node: Soft float library routines,  Next: Exception handling routines,  Prev: Integer library routines,  Up: Libgcc
428
429 4.2 Routines for floating point emulation
430 =========================================
431
432 The software floating point library is used on machines which do not
433 have hardware support for floating point.  It is also used whenever
434 `-msoft-float' is used to disable generation of floating point
435 instructions.  (Not all targets support this switch.)
436
437  For compatibility with other compilers, the floating point emulation
438 routines can be renamed with the `DECLARE_LIBRARY_RENAMES' macro (*note
439 Library Calls::).  In this section, the default names are used.
440
441  Presently the library does not support `XFmode', which is used for
442 `long double' on some architectures.
443
444 4.2.1 Arithmetic functions
445 --------------------------
446
447  -- Runtime Function: float __addsf3 (float A, float B)
448  -- Runtime Function: double __adddf3 (double A, double B)
449  -- Runtime Function: long double __addtf3 (long double A, long double
450           B)
451  -- Runtime Function: long double __addxf3 (long double A, long double
452           B)
453      These functions return the sum of A and B.
454
455  -- Runtime Function: float __subsf3 (float A, float B)
456  -- Runtime Function: double __subdf3 (double A, double B)
457  -- Runtime Function: long double __subtf3 (long double A, long double
458           B)
459  -- Runtime Function: long double __subxf3 (long double A, long double
460           B)
461      These functions return the difference between B and A; that is,
462      A - B.
463
464  -- Runtime Function: float __mulsf3 (float A, float B)
465  -- Runtime Function: double __muldf3 (double A, double B)
466  -- Runtime Function: long double __multf3 (long double A, long double
467           B)
468  -- Runtime Function: long double __mulxf3 (long double A, long double
469           B)
470      These functions return the product of A and B.
471
472  -- Runtime Function: float __divsf3 (float A, float B)
473  -- Runtime Function: double __divdf3 (double A, double B)
474  -- Runtime Function: long double __divtf3 (long double A, long double
475           B)
476  -- Runtime Function: long double __divxf3 (long double A, long double
477           B)
478      These functions return the quotient of A and B; that is, A / B.
479
480  -- Runtime Function: float __negsf2 (float A)
481  -- Runtime Function: double __negdf2 (double A)
482  -- Runtime Function: long double __negtf2 (long double A)
483  -- Runtime Function: long double __negxf2 (long double A)
484      These functions return the negation of A.  They simply flip the
485      sign bit, so they can produce negative zero and negative NaN.
486
487 4.2.2 Conversion functions
488 --------------------------
489
490  -- Runtime Function: double __extendsfdf2 (float A)
491  -- Runtime Function: long double __extendsftf2 (float A)
492  -- Runtime Function: long double __extendsfxf2 (float A)
493  -- Runtime Function: long double __extenddftf2 (double A)
494  -- Runtime Function: long double __extenddfxf2 (double A)
495      These functions extend A to the wider mode of their return type.
496
497  -- Runtime Function: double __truncxfdf2 (long double A)
498  -- Runtime Function: double __trunctfdf2 (long double A)
499  -- Runtime Function: float __truncxfsf2 (long double A)
500  -- Runtime Function: float __trunctfsf2 (long double A)
501  -- Runtime Function: float __truncdfsf2 (double A)
502      These functions truncate A to the narrower mode of their return
503      type, rounding toward zero.
504
505  -- Runtime Function: int __fixsfsi (float A)
506  -- Runtime Function: int __fixdfsi (double A)
507  -- Runtime Function: int __fixtfsi (long double A)
508  -- Runtime Function: int __fixxfsi (long double A)
509      These functions convert A to a signed integer, rounding toward
510      zero.
511
512  -- Runtime Function: long __fixsfdi (float A)
513  -- Runtime Function: long __fixdfdi (double A)
514  -- Runtime Function: long __fixtfdi (long double A)
515  -- Runtime Function: long __fixxfdi (long double A)
516      These functions convert A to a signed long, rounding toward zero.
517
518  -- Runtime Function: long long __fixsfti (float A)
519  -- Runtime Function: long long __fixdfti (double A)
520  -- Runtime Function: long long __fixtfti (long double A)
521  -- Runtime Function: long long __fixxfti (long double A)
522      These functions convert A to a signed long long, rounding toward
523      zero.
524
525  -- Runtime Function: unsigned int __fixunssfsi (float A)
526  -- Runtime Function: unsigned int __fixunsdfsi (double A)
527  -- Runtime Function: unsigned int __fixunstfsi (long double A)
528  -- Runtime Function: unsigned int __fixunsxfsi (long double A)
529      These functions convert A to an unsigned integer, rounding toward
530      zero.  Negative values all become zero.
531
532  -- Runtime Function: unsigned long __fixunssfdi (float A)
533  -- Runtime Function: unsigned long __fixunsdfdi (double A)
534  -- Runtime Function: unsigned long __fixunstfdi (long double A)
535  -- Runtime Function: unsigned long __fixunsxfdi (long double A)
536      These functions convert A to an unsigned long, rounding toward
537      zero.  Negative values all become zero.
538
539  -- Runtime Function: unsigned long long __fixunssfti (float A)
540  -- Runtime Function: unsigned long long __fixunsdfti (double A)
541  -- Runtime Function: unsigned long long __fixunstfti (long double A)
542  -- Runtime Function: unsigned long long __fixunsxfti (long double A)
543      These functions convert A to an unsigned long long, rounding
544      toward zero.  Negative values all become zero.
545
546  -- Runtime Function: float __floatsisf (int I)
547  -- Runtime Function: double __floatsidf (int I)
548  -- Runtime Function: long double __floatsitf (int I)
549  -- Runtime Function: long double __floatsixf (int I)
550      These functions convert I, a signed integer, to floating point.
551
552  -- Runtime Function: float __floatdisf (long I)
553  -- Runtime Function: double __floatdidf (long I)
554  -- Runtime Function: long double __floatditf (long I)
555  -- Runtime Function: long double __floatdixf (long I)
556      These functions convert I, a signed long, to floating point.
557
558  -- Runtime Function: float __floattisf (long long I)
559  -- Runtime Function: double __floattidf (long long I)
560  -- Runtime Function: long double __floattitf (long long I)
561  -- Runtime Function: long double __floattixf (long long I)
562      These functions convert I, a signed long long, to floating point.
563
564 4.2.3 Comparison functions
565 --------------------------
566
567 There are two sets of basic comparison functions.
568
569  -- Runtime Function: int __cmpsf2 (float A, float B)
570  -- Runtime Function: int __cmpdf2 (double A, double B)
571  -- Runtime Function: int __cmptf2 (long double A, long double B)
572      These functions calculate a <=> b.  That is, if A is less than B,
573      they return -1; if A is greater than B, they return 1; and if A
574      and B are equal they return 0.  If either argument is NaN they
575      return 1, but you should not rely on this; if NaN is a
576      possibility, use one of the higher-level comparison functions.
577
578  -- Runtime Function: int __unordsf2 (float A, float B)
579  -- Runtime Function: int __unorddf2 (double A, double B)
580  -- Runtime Function: int __unordtf2 (long double A, long double B)
581      These functions return a nonzero value if either argument is NaN,
582      otherwise 0.
583
584  There is also a complete group of higher level functions which
585 correspond directly to comparison operators.  They implement the ISO C
586 semantics for floating-point comparisons, taking NaN into account.  Pay
587 careful attention to the return values defined for each set.  Under the
588 hood, all of these routines are implemented as
589
590        if (__unordXf2 (a, b))
591          return E;
592        return __cmpXf2 (a, b);
593
594 where E is a constant chosen to give the proper behavior for NaN.
595 Thus, the meaning of the return value is different for each set.  Do
596 not rely on this implementation; only the semantics documented below
597 are guaranteed.
598
599  -- Runtime Function: int __eqsf2 (float A, float B)
600  -- Runtime Function: int __eqdf2 (double A, double B)
601  -- Runtime Function: int __eqtf2 (long double A, long double B)
602      These functions return zero if neither argument is NaN, and A and
603      B are equal.
604
605  -- Runtime Function: int __nesf2 (float A, float B)
606  -- Runtime Function: int __nedf2 (double A, double B)
607  -- Runtime Function: int __netf2 (long double A, long double B)
608      These functions return a nonzero value if either argument is NaN,
609      or if A and B are unequal.
610
611  -- Runtime Function: int __gesf2 (float A, float B)
612  -- Runtime Function: int __gedf2 (double A, double B)
613  -- Runtime Function: int __getf2 (long double A, long double B)
614      These functions return a value greater than or equal to zero if
615      neither argument is NaN, and A is greater than or equal to B.
616
617  -- Runtime Function: int __ltsf2 (float A, float B)
618  -- Runtime Function: int __ltdf2 (double A, double B)
619  -- Runtime Function: int __lttf2 (long double A, long double B)
620      These functions return a value less than zero if neither argument
621      is NaN, and A is strictly less than B.
622
623  -- Runtime Function: int __lesf2 (float A, float B)
624  -- Runtime Function: int __ledf2 (double A, double B)
625  -- Runtime Function: int __letf2 (long double A, long double B)
626      These functions return a value less than or equal to zero if
627      neither argument is NaN, and A is less than or equal to B.
628
629  -- Runtime Function: int __gtsf2 (float A, float B)
630  -- Runtime Function: int __gtdf2 (double A, double B)
631  -- Runtime Function: int __gttf2 (long double A, long double B)
632      These functions return a value greater than zero if neither
633      argument is NaN, and A is strictly greater than B.
634
635 \1f
636 File: gccint.info,  Node: Exception handling routines,  Next: Miscellaneous routines,  Prev: Soft float library routines,  Up: Libgcc
637
638 4.3 Language-independent routines for exception handling
639 ========================================================
640
641 document me!
642
643        _Unwind_DeleteException
644        _Unwind_Find_FDE
645        _Unwind_ForcedUnwind
646        _Unwind_GetGR
647        _Unwind_GetIP
648        _Unwind_GetLanguageSpecificData
649        _Unwind_GetRegionStart
650        _Unwind_GetTextRelBase
651        _Unwind_GetDataRelBase
652        _Unwind_RaiseException
653        _Unwind_Resume
654        _Unwind_SetGR
655        _Unwind_SetIP
656        _Unwind_FindEnclosingFunction
657        _Unwind_SjLj_Register
658        _Unwind_SjLj_Unregister
659        _Unwind_SjLj_RaiseException
660        _Unwind_SjLj_ForcedUnwind
661        _Unwind_SjLj_Resume
662        __deregister_frame
663        __deregister_frame_info
664        __deregister_frame_info_bases
665        __register_frame
666        __register_frame_info
667        __register_frame_info_bases
668        __register_frame_info_table
669        __register_frame_info_table_bases
670        __register_frame_table
671
672 \1f
673 File: gccint.info,  Node: Miscellaneous routines,  Prev: Exception handling routines,  Up: Libgcc
674
675 4.4 Miscellaneous runtime library routines
676 ==========================================
677
678 4.4.1 Cache control functions
679 -----------------------------
680
681  -- Runtime Function: void __clear_cache (char *BEG, char *END)
682      This function clears the instruction cache between BEG and END.
683
684 \1f
685 File: gccint.info,  Node: Languages,  Next: Source Tree,  Prev: Libgcc,  Up: Top
686
687 5 Language Front Ends in GCC
688 ****************************
689
690 The interface to front ends for languages in GCC, and in particular the
691 `tree' structure (*note Trees::), was initially designed for C, and
692 many aspects of it are still somewhat biased towards C and C-like
693 languages.  It is, however, reasonably well suited to other procedural
694 languages, and front ends for many such languages have been written for
695 GCC.
696
697  Writing a compiler as a front end for GCC, rather than compiling
698 directly to assembler or generating C code which is then compiled by
699 GCC, has several advantages:
700
701    * GCC front ends benefit from the support for many different target
702      machines already present in GCC.
703
704    * GCC front ends benefit from all the optimizations in GCC.  Some of
705      these, such as alias analysis, may work better when GCC is
706      compiling directly from source code then when it is compiling from
707      generated C code.
708
709    * Better debugging information is generated when compiling directly
710      from source code than when going via intermediate generated C code.
711
712  Because of the advantages of writing a compiler as a GCC front end,
713 GCC front ends have also been created for languages very different from
714 those for which GCC was designed, such as the declarative
715 logic/functional language Mercury.  For these reasons, it may also be
716 useful to implement compilers created for specialized purposes (for
717 example, as part of a research project) as GCC front ends.
718
719 \1f
720 File: gccint.info,  Node: Source Tree,  Next: Passes,  Prev: Languages,  Up: Top
721
722 6 Source Tree Structure and Build System
723 ****************************************
724
725 This chapter describes the structure of the GCC source tree, and how
726 GCC is built.  The user documentation for building and installing GCC
727 is in a separate manual (`http://gcc.gnu.org/install/'), with which it
728 is presumed that you are familiar.
729
730 * Menu:
731
732 * Configure Terms:: Configuration terminology and history.
733 * Top Level::       The top level source directory.
734 * gcc Directory::   The `gcc' subdirectory.
735 * Testsuites::      The GCC testsuites.
736
737 \1f
738 File: gccint.info,  Node: Configure Terms,  Next: Top Level,  Up: Source Tree
739
740 6.1 Configure Terms and History
741 ===============================
742
743 The configure and build process has a long and colorful history, and can
744 be confusing to anyone who doesn't know why things are the way they are.
745 While there are other documents which describe the configuration process
746 in detail, here are a few things that everyone working on GCC should
747 know.
748
749  There are three system names that the build knows about: the machine
750 you are building on ("build"), the machine that you are building for
751 ("host"), and the machine that GCC will produce code for ("target").
752 When you configure GCC, you specify these with `--build=', `--host=',
753 and `--target='.
754
755  Specifying the host without specifying the build should be avoided, as
756 `configure' may (and once did) assume that the host you specify is also
757 the build, which may not be true.
758
759  If build, host, and target are all the same, this is called a
760 "native".  If build and host are the same but target is different, this
761 is called a "cross".  If build, host, and target are all different this
762 is called a "canadian" (for obscure reasons dealing with Canada's
763 political party and the background of the person working on the build
764 at that time).  If host and target are the same, but build is
765 different, you are using a cross-compiler to build a native for a
766 different system.  Some people call this a "host-x-host", "crossed
767 native", or "cross-built native".  If build and target are the same,
768 but host is different, you are using a cross compiler to build a cross
769 compiler that produces code for the machine you're building on.  This
770 is rare, so there is no common way of describing it.  There is a
771 proposal to call this a "crossback".
772
773  If build and host are the same, the GCC you are building will also be
774 used to build the target libraries (like `libstdc++').  If build and
775 host are different, you must have already build and installed a cross
776 compiler that will be used to build the target libraries (if you
777 configured with `--target=foo-bar', this compiler will be called
778 `foo-bar-gcc').
779
780  In the case of target libraries, the machine you're building for is the
781 machine you specified with `--target'.  So, build is the machine you're
782 building on (no change there), host is the machine you're building for
783 (the target libraries are built for the target, so host is the target
784 you specified), and target doesn't apply (because you're not building a
785 compiler, you're building libraries).  The configure/make process will
786 adjust these variables as needed.  It also sets `$with_cross_host' to
787 the original `--host' value in case you need it.
788
789  The `libiberty' support library is built up to three times: once for
790 the host, once for the target (even if they are the same), and once for
791 the build if build and host are different.  This allows it to be used
792 by all programs which are generated in the course of the build process.
793
794 \1f
795 File: gccint.info,  Node: Top Level,  Next: gcc Directory,  Prev: Configure Terms,  Up: Source Tree
796
797 6.2 Top Level Source Directory
798 ==============================
799
800 The top level source directory in a GCC distribution contains several
801 files and directories that are shared with other software distributions
802 such as that of GNU Binutils.  It also contains several subdirectories
803 that contain parts of GCC and its runtime libraries:
804
805 `boehm-gc'
806      The Boehm conservative garbage collector, used as part of the Java
807      runtime library.
808
809 `contrib'
810      Contributed scripts that may be found useful in conjunction with
811      GCC.  One of these, `contrib/texi2pod.pl', is used to generate man
812      pages from Texinfo manuals as part of the GCC build process.
813
814 `fastjar'
815      An implementation of the `jar' command, used with the Java front
816      end.
817
818 `gcc'
819      The main sources of GCC itself (except for runtime libraries),
820      including optimizers, support for different target architectures,
821      language front ends, and testsuites.  *Note The `gcc'
822      Subdirectory: gcc Directory, for details.
823
824 `include'
825      Headers for the `libiberty' library.
826
827 `libada'
828      The Ada runtime library.
829
830 `libcpp'
831      The C preprocessor library.
832
833 `libgfortran'
834      The Fortran runtime library.
835
836 `libffi'
837      The `libffi' library, used as part of the Java runtime library.
838
839 `libiberty'
840      The `libiberty' library, used for portability and for some
841      generally useful data structures and algorithms.  *Note
842      Introduction: (libiberty)Top, for more information about this
843      library.
844
845 `libjava'
846      The Java runtime library.
847
848 `libmudflap'
849      The `libmudflap' library, used for instrumenting pointer and array
850      dereferencing operations.
851
852 `libobjc'
853      The Objective-C and Objective-C++ runtime library.
854
855 `libstdc++-v3'
856      The C++ runtime library.
857
858 `maintainer-scripts'
859      Scripts used by the `gccadmin' account on `gcc.gnu.org'.
860
861 `zlib'
862      The `zlib' compression library, used by the Java front end and as
863      part of the Java runtime library.
864
865  The build system in the top level directory, including how recursion
866 into subdirectories works and how building runtime libraries for
867 multilibs is handled, is documented in a separate manual, included with
868 GNU Binutils.  *Note GNU configure and build system: (configure)Top,
869 for details.
870
871 \1f
872 File: gccint.info,  Node: gcc Directory,  Next: Testsuites,  Prev: Top Level,  Up: Source Tree
873
874 6.3 The `gcc' Subdirectory
875 ==========================
876
877 The `gcc' directory contains many files that are part of the C sources
878 of GCC, other files used as part of the configuration and build
879 process, and subdirectories including documentation and a testsuite.
880 The files that are sources of GCC are documented in a separate chapter.
881 *Note Passes and Files of the Compiler: Passes.
882
883 * Menu:
884
885 * Subdirectories:: Subdirectories of `gcc'.
886 * Configuration::  The configuration process, and the files it uses.
887 * Build::          The build system in the `gcc' directory.
888 * Makefile::       Targets in `gcc/Makefile'.
889 * Library Files::  Library source files and headers under `gcc/'.
890 * Headers::        Headers installed by GCC.
891 * Documentation::  Building documentation in GCC.
892 * Front End::      Anatomy of a language front end.
893 * Back End::       Anatomy of a target back end.
894
895 \1f
896 File: gccint.info,  Node: Subdirectories,  Next: Configuration,  Up: gcc Directory
897
898 6.3.1 Subdirectories of `gcc'
899 -----------------------------
900
901 The `gcc' directory contains the following subdirectories:
902
903 `LANGUAGE'
904      Subdirectories for various languages.  Directories containing a
905      file `config-lang.in' are language subdirectories.  The contents of
906      the subdirectories `cp' (for C++), `objc' (for Objective-C) and
907      `objcp' (for Objective-C++) are documented in this manual (*note
908      Passes and Files of the Compiler: Passes.); those for other
909      languages are not.  *Note Anatomy of a Language Front End: Front
910      End, for details of the files in these directories.
911
912 `config'
913      Configuration files for supported architectures and operating
914      systems.  *Note Anatomy of a Target Back End: Back End, for
915      details of the files in this directory.
916
917 `doc'
918      Texinfo documentation for GCC, together with automatically
919      generated man pages and support for converting the installation
920      manual to HTML.  *Note Documentation::.
921
922 `fixinc'
923      The support for fixing system headers to work with GCC.  See
924      `fixinc/README' for more information.  The headers fixed by this
925      mechanism are installed in `LIBSUBDIR/include'.  Along with those
926      headers, `README-fixinc' is also installed, as
927      `LIBSUBDIR/include/README'.
928
929 `ginclude'
930      System headers installed by GCC, mainly those required by the C
931      standard of freestanding implementations.  *Note Headers Installed
932      by GCC: Headers, for details of when these and other headers are
933      installed.
934
935 `intl'
936      GNU `libintl', from GNU `gettext', for systems which do not
937      include it in libc.  Properly, this directory should be at top
938      level, parallel to the `gcc' directory.
939
940 `po'
941      Message catalogs with translations of messages produced by GCC into
942      various languages, `LANGUAGE.po'.  This directory also contains
943      `gcc.pot', the template for these message catalogues, `exgettext',
944      a wrapper around `gettext' to extract the messages from the GCC
945      sources and create `gcc.pot', which is run by `make gcc.pot', and
946      `EXCLUDES', a list of files from which messages should not be
947      extracted.
948
949 `testsuite'
950      The GCC testsuites (except for those for runtime libraries).
951      *Note Testsuites::.
952
953 \1f
954 File: gccint.info,  Node: Configuration,  Next: Build,  Prev: Subdirectories,  Up: gcc Directory
955
956 6.3.2 Configuration in the `gcc' Directory
957 ------------------------------------------
958
959 The `gcc' directory is configured with an Autoconf-generated script
960 `configure'.  The `configure' script is generated from `configure.ac'
961 and `aclocal.m4'.  From the files `configure.ac' and `acconfig.h',
962 Autoheader generates the file `config.in'.  The file `cstamp-h.in' is
963 used as a timestamp.
964
965 * Menu:
966
967 * Config Fragments::     Scripts used by `configure'.
968 * System Config::        The `config.build', `config.host', and
969                          `config.gcc' files.
970 * Configuration Files::  Files created by running `configure'.
971
972 \1f
973 File: gccint.info,  Node: Config Fragments,  Next: System Config,  Up: Configuration
974
975 6.3.2.1 Scripts Used by `configure'
976 ...................................
977
978 `configure' uses some other scripts to help in its work:
979
980    * The standard GNU `config.sub' and `config.guess' files, kept in
981      the top level directory, are used.  FIXME: when is the
982      `config.guess' file in the `gcc' directory (that just calls the
983      top level one) used?
984
985    * The file `config.gcc' is used to handle configuration specific to
986      the particular target machine.  The file `config.build' is used to
987      handle configuration specific to the particular build machine.
988      The file `config.host' is used to handle configuration specific to
989      the particular host machine.  (In general, these should only be
990      used for features that cannot reasonably be tested in Autoconf
991      feature tests.)  *Note The `config.build'; `config.host'; and
992      `config.gcc' Files: System Config, for details of the contents of
993      these files.
994
995    * Each language subdirectory has a file `LANGUAGE/config-lang.in'
996      that is used for front-end-specific configuration.  *Note The
997      Front End `config-lang.in' File: Front End Config, for details of
998      this file.
999
1000    * A helper script `configure.frag' is used as part of creating the
1001      output of `configure'.
1002
1003 \1f
1004 File: gccint.info,  Node: System Config,  Next: Configuration Files,  Prev: Config Fragments,  Up: Configuration
1005
1006 6.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files
1007 .................................................................
1008
1009 The `config.build' file contains specific rules for particular systems
1010 which GCC is built on.  This should be used as rarely as possible, as
1011 the behavior of the build system can always be detected by autoconf.
1012
1013  The `config.host' file contains specific rules for particular systems
1014 which GCC will run on.  This is rarely needed.
1015
1016  The `config.gcc' file contains specific rules for particular systems
1017 which GCC will generate code for.  This is usually needed.
1018
1019  Each file has a list of the shell variables it sets, with
1020 descriptions, at the top of the file.
1021
1022  FIXME: document the contents of these files, and what variables should
1023 be set to control build, host and target configuration.
1024
1025 \1f
1026 File: gccint.info,  Node: Configuration Files,  Prev: System Config,  Up: Configuration
1027
1028 6.3.2.3 Files Created by `configure'
1029 ....................................
1030
1031 Here we spell out what files will be set up by `configure' in the `gcc'
1032 directory.  Some other files are created as temporary files in the
1033 configuration process, and are not used in the subsequent build; these
1034 are not documented.
1035
1036    * `Makefile' is constructed from `Makefile.in', together with the
1037      host and target fragments (*note Makefile Fragments: Fragments.)
1038      `t-TARGET' and `x-HOST' from `config', if any, and language
1039      Makefile fragments `LANGUAGE/Make-lang.in'.
1040
1041    * `auto-host.h' contains information about the host machine
1042      determined by `configure'.  If the host machine is different from
1043      the build machine, then `auto-build.h' is also created, containing
1044      such information about the build machine.
1045
1046    * `config.status' is a script that may be run to recreate the
1047      current configuration.
1048
1049    * `configargs.h' is a header containing details of the arguments
1050      passed to `configure' to configure GCC, and of the thread model
1051      used.
1052
1053    * `cstamp-h' is used as a timestamp.
1054
1055    * `fixinc/Makefile' is constructed from `fixinc/Makefile.in'.
1056
1057    * `gccbug', a script for reporting bugs in GCC, is constructed from
1058      `gccbug.in'.
1059
1060    * `intl/Makefile' is constructed from `intl/Makefile.in'.
1061
1062    * `mklibgcc', a shell script to create a Makefile to build libgcc,
1063      is constructed from `mklibgcc.in'.
1064
1065    * If a language `config-lang.in' file (*note The Front End
1066      `config-lang.in' File: Front End Config.) sets `outputs', then the
1067      files listed in `outputs' there are also generated.
1068
1069  The following configuration headers are created from the Makefile,
1070 using `mkconfig.sh', rather than directly by `configure'.  `config.h',
1071 `bconfig.h' and `tconfig.h' all contain the `xm-MACHINE.h' header, if
1072 any, appropriate to the host, build and target machines respectively,
1073 the configuration headers for the target, and some definitions; for the
1074 host and build machines, these include the autoconfigured headers
1075 generated by `configure'.  The other configuration headers are
1076 determined by `config.gcc'.  They also contain the typedefs for `rtx',
1077 `rtvec' and `tree'.
1078
1079    * `config.h', for use in programs that run on the host machine.
1080
1081    * `bconfig.h', for use in programs that run on the build machine.
1082
1083    * `tconfig.h', for use in programs and libraries for the target
1084      machine.
1085
1086    * `tm_p.h', which includes the header `MACHINE-protos.h' that
1087      contains prototypes for functions in the target `.c' file.  FIXME:
1088      why is such a separate header necessary?
1089
1090 \1f
1091 File: gccint.info,  Node: Build,  Next: Makefile,  Prev: Configuration,  Up: gcc Directory
1092
1093 6.3.3 Build System in the `gcc' Directory
1094 -----------------------------------------
1095
1096 FIXME: describe the build system, including what is built in what
1097 stages.  Also list the various source files that are used in the build
1098 process but aren't source files of GCC itself and so aren't documented
1099 below (*note Passes::).
1100
1101 \1f
1102 File: gccint.info,  Node: Makefile,  Next: Library Files,  Prev: Build,  Up: gcc Directory
1103
1104 6.3.4 Makefile Targets
1105 ----------------------
1106
1107 `all'
1108      This is the default target.  Depending on what your
1109      build/host/target configuration is, it coordinates all the things
1110      that need to be built.
1111
1112 `doc'
1113      Produce info-formatted documentation and man pages.  Essentially it
1114      calls `make man' and `make info'.
1115
1116 `dvi'
1117      Produce DVI-formatted documentation.
1118
1119 `html'
1120      Produce HTML-formatted documentation.
1121
1122 `man'
1123      Generate man pages.
1124
1125 `info'
1126      Generate info-formatted pages.
1127
1128 `mostlyclean'
1129      Delete the files made while building the compiler.
1130
1131 `clean'
1132      That, and all the other files built by `make all'.
1133
1134 `distclean'
1135      That, and all the files created by `configure'.
1136
1137 `maintainer-clean'
1138      Distclean plus any file that can be generated from other files.
1139      Note that additional tools may be required beyond what is normally
1140      needed to build gcc.
1141
1142 `srcextra'
1143      Generates files in the source directory that do not exist in CVS
1144      but should go into a release tarball.  One example is
1145      `gcc/java/parse.c' which is generated from the CVS source file
1146      `gcc/java/parse.y'.
1147
1148 `srcinfo'
1149 `srcman'
1150      Copies the info-formatted and manpage documentation into the source
1151      directory usually for the purpose of generating a release tarball.
1152
1153 `install'
1154      Installs gcc.
1155
1156 `uninstall'
1157      Deletes installed files.
1158
1159 `check'
1160      Run the testsuite.  This creates a `testsuite' subdirectory that
1161      has various `.sum' and `.log' files containing the results of the
1162      testing.  You can run subsets with, for example, `make check-gcc'.
1163      You can specify specific tests by setting RUNTESTFLAGS to be the
1164      name of the `.exp' file, optionally followed by (for some tests)
1165      an equals and a file wildcard, like:
1166
1167           make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
1168
1169      Note that running the testsuite may require additional tools be
1170      installed, such as TCL or dejagnu.
1171
1172 `bootstrap'
1173      Builds GCC three times--once with the native compiler, once with
1174      the native-built compiler it just built, and once with the
1175      compiler it built the second time.  In theory, the last two should
1176      produce the same results, which `make compare' can check.  Each
1177      step of this process is called a "stage", and the results of each
1178      stage N (N = 1...3) are copied to a subdirectory `stageN/'.
1179
1180 `bootstrap-lean'
1181      Like `bootstrap', except that the various stages are removed once
1182      they're no longer needed.  This saves disk space.
1183
1184 `bubblestrap'
1185      This incrementally rebuilds each of the three stages, one at a
1186      time.  It does this by "bubbling" the stages up from their
1187      subdirectories (if they had been built previously), rebuilding
1188      them, and copying them back to their subdirectories.  This will
1189      allow you to, for example, continue a bootstrap after fixing a bug
1190      which causes the stage2 build to crash.
1191
1192 `quickstrap'
1193      Rebuilds the most recently built stage.  Since each stage requires
1194      special invocation, using this target means you don't have to keep
1195      track of which stage you're on or what invocation that stage needs.
1196
1197 `cleanstrap'
1198      Removed everything (`make clean') and rebuilds (`make bootstrap').
1199
1200 `restrap'
1201      Like `cleanstrap', except that the process starts from the first
1202      stage build, not from scratch.
1203
1204 `stageN (N = 1...4)'
1205      For each stage, moves the appropriate files to the `stageN'
1206      subdirectory.
1207
1208 `unstageN (N = 1...4)'
1209      Undoes the corresponding `stageN'.
1210
1211 `restageN (N = 1...4)'
1212      Undoes the corresponding `stageN' and rebuilds it with the
1213      appropriate flags.
1214
1215 `compare'
1216      Compares the results of stages 2 and 3.  This ensures that the
1217      compiler is running properly, since it should produce the same
1218      object files regardless of how it itself was compiled.
1219
1220 `profiledbootstrap'
1221      Builds a compiler with profiling feedback information.  For more
1222      information, see *Note Building with profile feedback:
1223      (gccinstall)Building.  This is actually a target in the top-level
1224      directory, which then recurses into the `gcc' subdirectory
1225      multiple times.
1226
1227
1228 \1f
1229 File: gccint.info,  Node: Library Files,  Next: Headers,  Prev: Makefile,  Up: gcc Directory
1230
1231 6.3.5 Library Source Files and Headers under the `gcc' Directory
1232 ----------------------------------------------------------------
1233
1234 FIXME: list here, with explanation, all the C source files and headers
1235 under the `gcc' directory that aren't built into the GCC executable but
1236 rather are part of runtime libraries and object files, such as
1237 `crtstuff.c' and `unwind-dw2.c'.  *Note Headers Installed by GCC:
1238 Headers, for more information about the `ginclude' directory.
1239
1240 \1f
1241 File: gccint.info,  Node: Headers,  Next: Documentation,  Prev: Library Files,  Up: gcc Directory
1242
1243 6.3.6 Headers Installed by GCC
1244 ------------------------------
1245
1246 In general, GCC expects the system C library to provide most of the
1247 headers to be used with it.  However, GCC will fix those headers if
1248 necessary to make them work with GCC, and will install some headers
1249 required of freestanding implementations.  These headers are installed
1250 in `LIBSUBDIR/include'.  Headers for non-C runtime libraries are also
1251 installed by GCC; these are not documented here.  (FIXME: document them
1252 somewhere.)
1253
1254  Several of the headers GCC installs are in the `ginclude' directory.
1255 These headers, `iso646.h', `stdarg.h', `stdbool.h', and `stddef.h', are
1256 installed in `LIBSUBDIR/include', unless the target Makefile fragment
1257 (*note Target Fragment::) overrides this by setting `USER_H'.
1258
1259  In addition to these headers and those generated by fixing system
1260 headers to work with GCC, some other headers may also be installed in
1261 `LIBSUBDIR/include'.  `config.gcc' may set `extra_headers'; this
1262 specifies additional headers under `config' to be installed on some
1263 systems.
1264
1265  GCC installs its own version of `<float.h>', from `ginclude/float.h'.
1266 This is done to cope with command-line options that change the
1267 representation of floating point numbers.
1268
1269  GCC also installs its own version of `<limits.h>'; this is generated
1270 from `glimits.h', together with `limitx.h' and `limity.h' if the system
1271 also has its own version of `<limits.h>'.  (GCC provides its own header
1272 because it is required of ISO C freestanding implementations, but needs
1273 to include the system header from its own header as well because other
1274 standards such as POSIX specify additional values to be defined in
1275 `<limits.h>'.)  The system's `<limits.h>' header is used via
1276 `LIBSUBDIR/include/syslimits.h', which is copied from `gsyslimits.h' if
1277 it does not need fixing to work with GCC; if it needs fixing,
1278 `syslimits.h' is the fixed copy.
1279
1280 \1f
1281 File: gccint.info,  Node: Documentation,  Next: Front End,  Prev: Headers,  Up: gcc Directory
1282
1283 6.3.7 Building Documentation
1284 ----------------------------
1285
1286 The main GCC documentation is in the form of manuals in Texinfo format.
1287 These are installed in Info format, and DVI versions may be generated
1288 by `make dvi' and HTML versions may be generated by `make html'.  In
1289 addition, some man pages are generated from the Texinfo manuals, there
1290 are some other text files with miscellaneous documentation, and runtime
1291 libraries have their own documentation outside the `gcc' directory.
1292 FIXME: document the documentation for runtime libraries somewhere.
1293
1294 * Menu:
1295
1296 * Texinfo Manuals::      GCC manuals in Texinfo format.
1297 * Man Page Generation::  Generating man pages from Texinfo manuals.
1298 * Miscellaneous Docs::   Miscellaneous text files with documentation.
1299
1300 \1f
1301 File: gccint.info,  Node: Texinfo Manuals,  Next: Man Page Generation,  Up: Documentation
1302
1303 6.3.7.1 Texinfo Manuals
1304 .......................
1305
1306 The manuals for GCC as a whole, and the C and C++ front ends, are in
1307 files `doc/*.texi'.  Other front ends have their own manuals in files
1308 `LANGUAGE/*.texi'.  Common files `doc/include/*.texi' are provided
1309 which may be included in multiple manuals; the following files are in
1310 `doc/include':
1311
1312 `fdl.texi'
1313      The GNU Free Documentation License.
1314
1315 `funding.texi'
1316      The section "Funding Free Software".
1317
1318 `gcc-common.texi'
1319      Common definitions for manuals.
1320
1321 `gpl.texi'
1322      The GNU General Public License.
1323
1324 `texinfo.tex'
1325      A copy of `texinfo.tex' known to work with the GCC manuals.
1326
1327  DVI formatted manuals are generated by `make dvi', which uses
1328 `texi2dvi' (via the Makefile macro `$(TEXI2DVI)').  HTML formatted
1329 manuals are generated by `make html'.  Info manuals are generated by
1330 `make info' (which is run as part of a bootstrap); this generates the
1331 manuals in the source directory, using `makeinfo' via the Makefile
1332 macro `$(MAKEINFO)', and they are included in release distributions.
1333
1334  Manuals are also provided on the GCC web site, in both HTML and
1335 PostScript forms.  This is done via the script
1336 `maintainer-scripts/update_web_docs'.  Each manual to be provided
1337 online must be listed in the definition of `MANUALS' in that file; a
1338 file `NAME.texi' must only appear once in the source tree, and the
1339 output manual must have the same name as the source file.  (However,
1340 other Texinfo files, included in manuals but not themselves the root
1341 files of manuals, may have names that appear more than once in the
1342 source tree.)  The manual file `NAME.texi' should only include other
1343 files in its own directory or in `doc/include'.  HTML manuals will be
1344 generated by `makeinfo --html' and PostScript manuals by `texi2dvi' and
1345 `dvips'.  All Texinfo files that are parts of manuals must be checked
1346 into CVS, even if they are generated files, for the generation of
1347 online manuals to work.
1348
1349  The installation manual, `doc/install.texi', is also provided on the
1350 GCC web site.  The HTML version is generated by the script
1351 `doc/install.texi2html'.
1352
1353 \1f
1354 File: gccint.info,  Node: Man Page Generation,  Next: Miscellaneous Docs,  Prev: Texinfo Manuals,  Up: Documentation
1355
1356 6.3.7.2 Man Page Generation
1357 ...........................
1358
1359 Because of user demand, in addition to full Texinfo manuals, man pages
1360 are provided which contain extracts from those manuals.  These man
1361 pages are generated from the Texinfo manuals using
1362 `contrib/texi2pod.pl' and `pod2man'.  (The man page for `g++',
1363 `cp/g++.1', just contains a `.so' reference to `gcc.1', but all the
1364 other man pages are generated from Texinfo manuals.)
1365
1366  Because many systems may not have the necessary tools installed to
1367 generate the man pages, they are only generated if the `configure'
1368 script detects that recent enough tools are installed, and the
1369 Makefiles allow generating man pages to fail without aborting the
1370 build.  Man pages are also included in release distributions.  They are
1371 generated in the source directory.
1372
1373  Magic comments in Texinfo files starting `@c man' control what parts
1374 of a Texinfo file go into a man page.  Only a subset of Texinfo is
1375 supported by `texi2pod.pl', and it may be necessary to add support for
1376 more Texinfo features to this script when generating new man pages.  To
1377 improve the man page output, some special Texinfo macros are provided
1378 in `doc/include/gcc-common.texi' which `texi2pod.pl' understands:
1379
1380 `@gcctabopt'
1381      Use in the form `@table @gcctabopt' for tables of options, where
1382      for printed output the effect of `@code' is better than that of
1383      `@option' but for man page output a different effect is wanted.
1384
1385 `@gccoptlist'
1386      Use for summary lists of options in manuals.
1387
1388 `@gol'
1389      Use at the end of each line inside `@gccoptlist'.  This is
1390      necessary to avoid problems with differences in how the
1391      `@gccoptlist' macro is handled by different Texinfo formatters.
1392
1393  FIXME: describe the `texi2pod.pl' input language and magic comments in
1394 more detail.
1395
1396 \1f
1397 File: gccint.info,  Node: Miscellaneous Docs,  Prev: Man Page Generation,  Up: Documentation
1398
1399 6.3.7.3 Miscellaneous Documentation
1400 ...................................
1401
1402 In addition to the formal documentation that is installed by GCC, there
1403 are several other text files with miscellaneous documentation:
1404
1405 `ABOUT-GCC-NLS'
1406      Notes on GCC's Native Language Support.  FIXME: this should be
1407      part of this manual rather than a separate file.
1408
1409 `ABOUT-NLS'
1410      Notes on the Free Translation Project.
1411
1412 `COPYING'
1413      The GNU General Public License.
1414
1415 `COPYING.LIB'
1416      The GNU Lesser General Public License.
1417
1418 `*ChangeLog*'
1419 `*/ChangeLog*'
1420      Change log files for various parts of GCC.
1421
1422 `LANGUAGES'
1423      Details of a few changes to the GCC front-end interface.  FIXME:
1424      the information in this file should be part of general
1425      documentation of the front-end interface in this manual.
1426
1427 `ONEWS'
1428      Information about new features in old versions of GCC.  (For recent
1429      versions, the information is on the GCC web site.)
1430
1431 `README.Portability'
1432      Information about portability issues when writing code in GCC.
1433      FIXME: why isn't this part of this manual or of the GCC Coding
1434      Conventions?
1435
1436 `SERVICE'
1437      A pointer to the GNU Service Directory.
1438
1439  FIXME: document such files in subdirectories, at least `config', `cp',
1440 `objc', `testsuite'.
1441
1442 \1f
1443 File: gccint.info,  Node: Front End,  Next: Back End,  Prev: Documentation,  Up: gcc Directory
1444
1445 6.3.8 Anatomy of a Language Front End
1446 -------------------------------------
1447
1448 A front end for a language in GCC has the following parts:
1449
1450    * A directory `LANGUAGE' under `gcc' containing source files for
1451      that front end.  *Note The Front End `LANGUAGE' Directory: Front
1452      End Directory, for details.
1453
1454    * A mention of the language in the list of supported languages in
1455      `gcc/doc/install.texi'.
1456
1457    * A mention of the name under which the language's runtime library is
1458      recognized by `--enable-shared=PACKAGE' in the documentation of
1459      that option in `gcc/doc/install.texi'.
1460
1461    * A mention of any special prerequisites for building the front end
1462      in the documentation of prerequisites in `gcc/doc/install.texi'.
1463
1464    * Details of contributors to that front end in
1465      `gcc/doc/contrib.texi'.  If the details are in that front end's
1466      own manual then there should be a link to that manual's list in
1467      `contrib.texi'.
1468
1469    * Information about support for that language in
1470      `gcc/doc/frontends.texi'.
1471
1472    * Information about standards for that language, and the front end's
1473      support for them, in `gcc/doc/standards.texi'.  This may be a link
1474      to such information in the front end's own manual.
1475
1476    * Details of source file suffixes for that language and `-x LANG'
1477      options supported, in `gcc/doc/invoke.texi'.
1478
1479    * Entries in `default_compilers' in `gcc.c' for source file suffixes
1480      for that language.
1481
1482    * Preferably testsuites, which may be under `gcc/testsuite' or
1483      runtime library directories.  FIXME: document somewhere how to
1484      write testsuite harnesses.
1485
1486    * Probably a runtime library for the language, outside the `gcc'
1487      directory.  FIXME: document this further.
1488
1489    * Details of the directories of any runtime libraries in
1490      `gcc/doc/sourcebuild.texi'.
1491
1492  If the front end is added to the official GCC CVS repository, the
1493 following are also necessary:
1494
1495    * At least one Bugzilla component for bugs in that front end and
1496      runtime libraries.  This category needs to be mentioned in
1497      `gcc/gccbug.in', as well as being added to the Bugzilla database.
1498
1499    * Normally, one or more maintainers of that front end listed in
1500      `MAINTAINERS'.
1501
1502    * Mentions on the GCC web site in `index.html' and `frontends.html',
1503      with any relevant links on `readings.html'.  (Front ends that are
1504      not an official part of GCC may also be listed on
1505      `frontends.html', with relevant links.)
1506
1507    * A news item on `index.html', and possibly an announcement on the
1508      <gcc-announce@gcc.gnu.org> mailing list.
1509
1510    * The front end's manuals should be mentioned in
1511      `maintainer-scripts/update_web_docs' (*note Texinfo Manuals::) and
1512      the online manuals should be linked to from
1513      `onlinedocs/index.html'.
1514
1515    * Any old releases or CVS repositories of the front end, before its
1516      inclusion in GCC, should be made available on the GCC FTP site
1517      `ftp://gcc.gnu.org/pub/gcc/old-releases/'.
1518
1519    * The release and snapshot script `maintainer-scripts/gcc_release'
1520      should be updated to generate appropriate tarballs for this front
1521      end.  The associated `maintainer-scripts/snapshot-README' and
1522      `maintainer-scripts/snapshot-index.html' files should be updated
1523      to list the tarballs and diffs for this front end.
1524
1525    * If this front end includes its own version files that include the
1526      current date, `maintainer-scripts/update_version' should be
1527      updated accordingly.
1528
1529    * `CVSROOT/modules' in the GCC CVS repository should be updated.
1530
1531 * Menu:
1532
1533 * Front End Directory::  The front end `LANGUAGE' directory.
1534 * Front End Config::     The front end `config-lang.in' file.
1535
1536 \1f
1537 File: gccint.info,  Node: Front End Directory,  Next: Front End Config,  Up: Front End
1538
1539 6.3.8.1 The Front End `LANGUAGE' Directory
1540 ..........................................
1541
1542 A front end `LANGUAGE' directory contains the source files of that
1543 front end (but not of any runtime libraries, which should be outside
1544 the `gcc' directory).  This includes documentation, and possibly some
1545 subsidiary programs build alongside the front end.  Certain files are
1546 special and other parts of the compiler depend on their names:
1547
1548 `config-lang.in'
1549      This file is required in all language subdirectories.  *Note The
1550      Front End `config-lang.in' File: Front End Config, for details of
1551      its contents
1552
1553 `Make-lang.in'
1554      This file is required in all language subdirectories.  It contains
1555      targets `LANG.HOOK' (where `LANG' is the setting of `language' in
1556      `config-lang.in') for the following values of `HOOK', and any
1557      other Makefile rules required to build those targets (which may if
1558      necessary use other Makefiles specified in `outputs' in
1559      `config-lang.in', although this is deprecated).  Some hooks are
1560      defined by using a double-colon rule for `HOOK', rather than by
1561      using a target of form `LANG.HOOK'.  These hooks are called
1562      "double-colon hooks" below.  It also adds any testsuite targets
1563      that can use the standard rule in `gcc/Makefile.in' to the variable
1564      `lang_checks'.
1565
1566     `all.build'
1567     `all.cross'
1568     `start.encap'
1569     `rest.encap'
1570           FIXME: exactly what goes in each of these targets?
1571
1572     `tags'
1573           Build an `etags' `TAGS' file in the language subdirectory in
1574           the source tree.
1575
1576     `info'
1577           Build info documentation for the front end, in the build
1578           directory.  This target is only called by `make bootstrap' if
1579           a suitable version of `makeinfo' is available, so does not
1580           need to check for this, and should fail if an error occurs.
1581
1582     `dvi'
1583           Build DVI documentation for the front end, in the build
1584           directory.  This should be done using `$(TEXI2DVI)', with
1585           appropriate `-I' arguments pointing to directories of
1586           included files.  This hook is a double-colon hook.
1587
1588     `html'
1589           Build HTML documentation for the front end, in the build
1590           directory.
1591
1592     `man'
1593           Build generated man pages for the front end from Texinfo
1594           manuals (*note Man Page Generation::), in the build
1595           directory.  This target is only called if the necessary tools
1596           are available, but should ignore errors so as not to stop the
1597           build if errors occur; man pages are optional and the tools
1598           involved may be installed in a broken way.
1599
1600     `install-normal'
1601           FIXME: what is this target for?
1602
1603     `install-common'
1604           Install everything that is part of the front end, apart from
1605           the compiler executables listed in `compilers' in
1606           `config-lang.in'.
1607
1608     `install-info'
1609           Install info documentation for the front end, if it is
1610           present in the source directory.  This target should have
1611           dependencies on info files that should be installed.  This
1612           hook is a double-colon hook.
1613
1614     `install-man'
1615           Install man pages for the front end.  This target should
1616           ignore errors.
1617
1618     `srcextra'
1619           Copies its dependencies into the source directory.  This
1620           generally should be used for generated files such as Bison
1621           output files which are not present in CVS, but should be
1622           included in any release tarballs.  This target will be
1623           executed during a bootstrap if
1624           `--enable-generated-files-in-srcdir' was specified as a
1625           `configure' option.
1626
1627     `srcinfo'
1628     `srcman'
1629           Copies its dependencies into the source directory.  These
1630           targets will be executed during a bootstrap if
1631           `--enable-generated-files-in-srcdir' was specified as a
1632           `configure' option.
1633
1634     `uninstall'
1635           Uninstall files installed by installing the compiler.  This is
1636           currently documented not to be supported, so the hook need
1637           not do anything.
1638
1639     `mostlyclean'
1640     `clean'
1641     `distclean'
1642     `maintainer-clean'
1643           The language parts of the standard GNU `*clean' targets.
1644           *Note Standard Targets for Users: (standards)Standard
1645           Targets, for details of the standard targets.  For GCC,
1646           `maintainer-clean' should delete all generated files in the
1647           source directory that are not checked into CVS, but should
1648           not delete anything checked into CVS.
1649
1650     `stage1'
1651     `stage2'
1652     `stage3'
1653     `stage4'
1654     `stageprofile'
1655     `stagefeedback'
1656           Move to the stage directory files not included in
1657           `stagestuff' in `config-lang.in' or otherwise moved by the
1658           main `Makefile'.
1659
1660 `lang.opt'
1661      This file registers the set of switches that the front end accepts
1662      on the command line, and their `--help' text.  The file format is
1663      documented in the file `c.opt'.  These files are processed by the
1664      script `opts.sh'.
1665
1666 `lang-specs.h'
1667      This file provides entries for `default_compilers' in `gcc.c'
1668      which override the default of giving an error that a compiler for
1669      that language is not installed.
1670
1671 `LANGUAGE-tree.def'
1672      This file, which need not exist, defines any language-specific tree
1673      codes.
1674
1675 \1f
1676 File: gccint.info,  Node: Front End Config,  Prev: Front End Directory,  Up: Front End
1677
1678 6.3.8.2 The Front End `config-lang.in' File
1679 ...........................................
1680
1681 Each language subdirectory contains a `config-lang.in' file.  In
1682 addition the main directory contains `c-config-lang.in', which contains
1683 limited information for the C language.  This file is a shell script
1684 that may define some variables describing the language:
1685
1686 `language'
1687      This definition must be present, and gives the name of the language
1688      for some purposes such as arguments to `--enable-languages'.
1689
1690 `lang_requires'
1691      If defined, this variable lists (space-separated) language front
1692      ends other than C that this front end requires to be enabled (with
1693      the names given being their `language' settings).  For example, the
1694      Java front end depends on the C++ front end, so sets
1695      `lang_requires=c++'.
1696
1697 `target_libs'
1698      If defined, this variable lists (space-separated) targets in the
1699      top level `Makefile' to build the runtime libraries for this
1700      language, such as `target-libobjc'.
1701
1702 `lang_dirs'
1703      If defined, this variable lists (space-separated) top level
1704      directories (parallel to `gcc'), apart from the runtime libraries,
1705      that should not be configured if this front end is not built.
1706
1707 `build_by_default'
1708      If defined to `no', this language front end is not built unless
1709      enabled in a `--enable-languages' argument.  Otherwise, front ends
1710      are built by default, subject to any special logic in
1711      `configure.ac' (as is present to disable the Ada front end if the
1712      Ada compiler is not already installed).
1713
1714 `boot_language'
1715      If defined to `yes', this front end is built in stage 1 of the
1716      bootstrap.  This is only relevant to front ends written in their
1717      own languages.
1718
1719 `compilers'
1720      If defined, a space-separated list of compiler executables that
1721      will be run by the driver.  The names here will each end with
1722      `\$(exeext)'.
1723
1724 `stagestuff'
1725      If defined, a space-separated list of files that should be moved to
1726      the `stageN' directories in each stage of bootstrap.
1727
1728 `outputs'
1729      If defined, a space-separated list of files that should be
1730      generated by `configure' substituting values in them.  This
1731      mechanism can be used to create a file `LANGUAGE/Makefile' from
1732      `LANGUAGE/Makefile.in', but this is deprecated, building
1733      everything from the single `gcc/Makefile' is preferred.
1734
1735 `gtfiles'
1736      If defined, a space-separated list of files that should be scanned
1737      by gengtype.c to generate the garbage collection tables and
1738      routines for this language.  This excludes the files that are
1739      common to all front ends.  *Note Type Information::.
1740
1741 `need_gmp'
1742      If defined  to `yes', this frontend requires the GMP library.
1743      Enables configure tests for GMP, which set `GMPLIBS' and `GMPINC'
1744      appropriately.
1745
1746
1747 \1f
1748 File: gccint.info,  Node: Back End,  Prev: Front End,  Up: gcc Directory
1749
1750 6.3.9 Anatomy of a Target Back End
1751 ----------------------------------
1752
1753 A back end for a target architecture in GCC has the following parts:
1754
1755    * A directory `MACHINE' under `gcc/config', containing a machine
1756      description `MACHINE.md' file (*note Machine Descriptions: Machine
1757      Desc.), header files `MACHINE.h' and `MACHINE-protos.h' and a
1758      source file `MACHINE.c' (*note Target Description Macros and
1759      Functions: Target Macros.), possibly a target Makefile fragment
1760      `t-MACHINE' (*note The Target Makefile Fragment: Target
1761      Fragment.), and maybe some other files.  The names of these files
1762      may be changed from the defaults given by explicit specifications
1763      in `config.gcc'.
1764
1765    * If necessary, a file `MACHINE-modes.def' in the `MACHINE'
1766      directory, containing additional machine modes to represent
1767      condition codes.  *Note Condition Code::, for further details.
1768
1769    * Entries in `config.gcc' (*note The `config.gcc' File: System
1770      Config.) for the systems with this target architecture.
1771
1772    * Documentation in `gcc/doc/invoke.texi' for any command-line
1773      options supported by this target (*note Run-time Target
1774      Specification: Run-time Target.).  This means both entries in the
1775      summary table of options and details of the individual options.
1776
1777    * Documentation in `gcc/doc/extend.texi' for any target-specific
1778      attributes supported (*note Defining target-specific uses of
1779      `__attribute__': Target Attributes.), including where the same
1780      attribute is already supported on some targets, which are
1781      enumerated in the manual.
1782
1783    * Documentation in `gcc/doc/extend.texi' for any target-specific
1784      pragmas supported.
1785
1786    * Documentation in `gcc/doc/extend.texi' of any target-specific
1787      built-in functions supported.
1788
1789    * Documentation in `gcc/doc/extend.texi' of any target-specific
1790      format checking styles supported.
1791
1792    * Documentation in `gcc/doc/md.texi' of any target-specific
1793      constraint letters (*note Constraints for Particular Machines:
1794      Machine Constraints.).
1795
1796    * A note in `gcc/doc/contrib.texi' under the person or people who
1797      contributed the target support.
1798
1799    * Entries in `gcc/doc/install.texi' for all target triplets
1800      supported with this target architecture, giving details of any
1801      special notes about installation for this target, or saying that
1802      there are no special notes if there are none.
1803
1804    * Possibly other support outside the `gcc' directory for runtime
1805      libraries.  FIXME: reference docs for this.  The libstdc++ porting
1806      manual needs to be installed as info for this to work, or to be a
1807      chapter of this manual.
1808
1809  If the back end is added to the official GCC CVS repository, the
1810 following are also necessary:
1811
1812    * An entry for the target architecture in `readings.html' on the GCC
1813      web site, with any relevant links.
1814
1815    * Details of the properties of the back end and target architecture
1816      in `backends.html' on the GCC web site.
1817
1818    * A news item about the contribution of support for that target
1819      architecture, in `index.html' on the GCC web site.
1820
1821    * Normally, one or more maintainers of that target listed in
1822      `MAINTAINERS'.  Some existing architectures may be unmaintained,
1823      but it would be unusual to add support for a target that does not
1824      have a maintainer when support is added.
1825
1826 \1f
1827 File: gccint.info,  Node: Testsuites,  Prev: gcc Directory,  Up: Source Tree
1828
1829 6.4 Testsuites
1830 ==============
1831
1832 GCC contains several testsuites to help maintain compiler quality.
1833 Most of the runtime libraries and language front ends in GCC have
1834 testsuites.  Currently only the C language testsuites are documented
1835 here; FIXME: document the others.
1836
1837 * Menu:
1838
1839 * Test Idioms::     Idioms used in testsuite code.
1840 * Test Directives:: Directives used within DejaGnu tests.
1841 * Ada Tests::       The Ada language testsuites.
1842 * C Tests::         The C language testsuites.
1843 * libgcj Tests::    The Java library testsuites.
1844 * gcov Testing::    Support for testing gcov.
1845 * profopt Testing:: Support for testing profile-directed optimizations.
1846 * compat Testing::  Support for testing binary compatibility.
1847
1848 \1f
1849 File: gccint.info,  Node: Test Idioms,  Next: Test Directives,  Up: Testsuites
1850
1851 6.4.1 Idioms Used in Testsuite Code
1852 -----------------------------------
1853
1854 In general C testcases have a trailing `-N.c', starting with `-1.c', in
1855 case other testcases with similar names are added later.  If the test
1856 is a test of some well-defined feature, it should have a name referring
1857 to that feature such as `FEATURE-1.c'.  If it does not test a
1858 well-defined feature but just happens to exercise a bug somewhere in
1859 the compiler, and a bug report has been filed for this bug in the GCC
1860 bug database, `prBUG-NUMBER-1.c' is the appropriate form of name.
1861 Otherwise (for miscellaneous bugs not filed in the GCC bug database),
1862 and previously more generally, test cases are named after the date on
1863 which they were added.  This allows people to tell at a glance whether
1864 a test failure is because of a recently found bug that has not yet been
1865 fixed, or whether it may be a regression, but does not give any other
1866 information about the bug or where discussion of it may be found.  Some
1867 other language testsuites follow similar conventions.
1868
1869  In the `gcc.dg' testsuite, it is often necessary to test that an error
1870 is indeed a hard error and not just a warning--for example, where it is
1871 a constraint violation in the C standard, which must become an error
1872 with `-pedantic-errors'.  The following idiom, where the first line
1873 shown is line LINE of the file and the line that generates the error,
1874 is used for this:
1875
1876      /* { dg-bogus "warning" "warning in place of error" } */
1877      /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
1878
1879  It may be necessary to check that an expression is an integer constant
1880 expression and has a certain value.  To check that `E' has value `V',
1881 an idiom similar to the following is used:
1882
1883      char x[((E) == (V) ? 1 : -1)];
1884
1885  In `gcc.dg' tests, `__typeof__' is sometimes used to make assertions
1886 about the types of expressions.  See, for example,
1887 `gcc.dg/c99-condexpr-1.c'.  The more subtle uses depend on the exact
1888 rules for the types of conditional expressions in the C standard; see,
1889 for example, `gcc.dg/c99-intconst-1.c'.
1890
1891  It is useful to be able to test that optimizations are being made
1892 properly.  This cannot be done in all cases, but it can be done where
1893 the optimization will lead to code being optimized away (for example,
1894 where flow analysis or alias analysis should show that certain code
1895 cannot be called) or to functions not being called because they have
1896 been expanded as built-in functions.  Such tests go in
1897 `gcc.c-torture/execute'.  Where code should be optimized away, a call
1898 to a nonexistent function such as `link_failure ()' may be inserted; a
1899 definition
1900
1901      #ifndef __OPTIMIZE__
1902      void
1903      link_failure (void)
1904      {
1905        abort ();
1906      }
1907      #endif
1908
1909 will also be needed so that linking still succeeds when the test is run
1910 without optimization.  When all calls to a built-in function should
1911 have been optimized and no calls to the non-built-in version of the
1912 function should remain, that function may be defined as `static' to
1913 call `abort ()' (although redeclaring a function as static may not work
1914 on all targets).
1915
1916  All testcases must be portable.  Target-specific testcases must have
1917 appropriate code to avoid causing failures on unsupported systems;
1918 unfortunately, the mechanisms for this differ by directory.
1919
1920  FIXME: discuss non-C testsuites here.
1921
1922 \1f
1923 File: gccint.info,  Node: Test Directives,  Next: Ada Tests,  Prev: Test Idioms,  Up: Testsuites
1924
1925 6.4.2 Directives used within DejaGnu tests
1926 ------------------------------------------
1927
1928 Test directives appear within comments in a test source file and begin
1929 with `dg-'.  Some of these are defined within DegaGnu and others are
1930 local to the GCC testsuite.
1931
1932  The order in which test directives appear in a test can be important:
1933 directives local to GCC sometimes override information used by the
1934 DejaGnu directives, which know nothing about the GCC directives, so the
1935 DejaGnu directives must precede GCC directives.
1936
1937  Several test directives include selectors which are usually preceded by
1938 the keyword `target' or `xfail'.  A selector is: one or more target
1939 triplets, possibly including wildcard characters; a single
1940 effective-target keyword; or a logical expression.  Depending on the
1941 context, the selector specifies whether a test is skipped and reported
1942 as unsupported or is expected to fail.  Use `*-*-*' to match any target.
1943 Effective-target keywords are defined in `target-supports.exp' in the
1944 GCC testsuite.
1945
1946  A selector expression appears within curly braces and uses a single
1947 logical operator: one of `!', `&&', or `||'.  An operand is another
1948 selector expression, an effective-target keyword, a single target
1949 triplet, or a list of target triplets within quotes or curly braces.
1950 For example:
1951
1952      { target { ! "hppa*-*-* ia64*-*-*" } }
1953      { target { powerpc*-*-* && lp64 } }
1954      { xfail { lp64 || vect_no_align } }
1955
1956 `{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
1957      DO-WHAT-KEYWORD specifies how the test is compiled and whether it
1958      is executed.  It is one of:
1959
1960     `preprocess'
1961           Compile with `-E' to run only the preprocessor.
1962
1963     `assemble'
1964           Compile with `-S' to produce an assembly code file.
1965
1966     `compile'
1967           Compile with `-c' to produce a relocatable object file.
1968
1969     `link'
1970           Compile, assemble, and link to produce an executable file.
1971
1972     `run'
1973           Produce and run an executable file, which is expected to
1974           return an exit code of 0.
1975
1976      The default is `compile'.  That can be overridden for a set of
1977      tests by redefining `dg-do-what-default' within the `.exp' file
1978      for those tests.
1979
1980      If the directive includes the optional `{ target SELECTOR }' then
1981      the test is skipped unless the target system is included in the
1982      list of target triplets or matches the effective-target keyword.
1983
1984      If the directive includes the optional `{ xfail SELECTOR }' and
1985      the selector is met then the test is expected to fail.  For `dg-do
1986      run', execution is expected to fail but compilation is expected to
1987      pass.
1988
1989 `{ dg-options OPTIONS [{ target SELECTOR }] }'
1990      This DejaGnu directive provides a list of compiler options, to be
1991      used if the target system matches SELECTOR, that replace the
1992      default options used for this set of tests.
1993
1994 `{ dg-skip-if COMMENT { SELECTOR } { INCLUDE-OPTS } { EXCLUDE-OPTS } }'
1995      Skip the test if the test system is included in SELECTOR and if
1996      each of the options in INCLUDE-OPTS is in the set of options with
1997      which the test would be compiled and if none of the options in
1998      EXCLUDE-OPTS is in the set of options with which the test would be
1999      compiled.
2000
2001      Use `"*"' for an empty INCLUDE-OPTS list and `""' for an empty
2002      EXCLUDE-OPTS list.
2003
2004 `{ dg-xfail-if COMMENT { SELECTOR } { INCLUDE-OPTS } { EXCLUDE-OPTS } }'
2005      Expect the test to fail if the conditions (which are the same as
2006      for `dg-skip-if') are met.
2007
2008 `{ dg-require-SUPPORT args }'
2009      Skip the test if the target does not provide the required support;
2010      see `gcc-dg.exp' in the GCC testsuite for the actual directives.
2011      These directives must appear after any `dg-do' directive in the
2012      test.  They require at least one argument, which can be an empty
2013      string if the specific procedure does not examine the argument.
2014
2015 `{ dg-require-effective-target KEYWORD }'
2016      Skip the test if the test target, including current multilib flags,
2017      is not covered by the effective-target keyword.  This directive
2018      must appear after any `dg-do' directive in the test.
2019
2020 `{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
2021      This DejaGnu directive appears on a source line that is expected
2022      to get an error message, or else specifies the source line
2023      associated with the message.  If there is no message for that line
2024      or if the text of that message is not matched by REGEXP then the
2025      check fails and COMMENT is included in the `FAIL' message.  The
2026      check does not look for the string `"error"' unless it is part of
2027      REGEXP.
2028
2029 `{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
2030      This DejaGnu directive appears on a source line that is expected
2031      to get a warning message, or else specifies the source line
2032      associated with the message.  If there is no message for that line
2033      or if the text of that message is not matched by REGEXP then the
2034      check fails and COMMENT is included in the `FAIL' message.  The
2035      check does not look for the string `"warning"' unless it is part
2036      of REGEXP.
2037
2038 `{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
2039      This DejaGnu directive appears on a source line that should not
2040      get a message matching REGEXP, or else specifies the source line
2041      associated with the bogus message.  It is usually used with `xfail'
2042      to indicate that the message is a known problem for a particular
2043      set of targets.
2044
2045 `{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
2046      This DejaGnu directive indicates that the test is expected to fail
2047      due to compiler messages that are not handled by `dg-error',
2048      `dg-warning' or `dg-bogus'.
2049
2050 `{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
2051      This DejaGnu directive compares REGEXP to the combined output that
2052      the test executable writes to `stdout' and `stderr'.
2053
2054 `{ dg-prune-output REGEXP }'
2055      Prune messages matching REGEXP from test output.
2056
2057 `{ dg-additional-files "FILELIST" }'
2058      Specify additional files, other than source files, that must be
2059      copied to the system where the compiler runs.
2060
2061 `{ dg-additional-sources "FILELIST" }'
2062      Specify additional source files to appear in the compile line
2063      following the main test file.
2064
2065 `{ dg-final { LOCAL-DIRECTIVE } }'
2066      This DejaGnu directive is placed within a comment anywhere in the
2067      source file and is processed after the test has been compiled and
2068      run.  Multiple `dg-final' commands are processed in the order in
2069      which they appear in the source file.
2070
2071      The GCC testsuite defines the following directives to be used
2072      within `dg-final'.
2073
2074     `scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
2075           Passes if REGEXP matches text in FILENAME.
2076
2077     `scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
2078           Passes if REGEXP does not match text in FILENAME.
2079
2080     `scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
2081           Passes if SYMBOL is defined as a hidden symbol in the test's
2082           assembly output.
2083
2084     `scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
2085           Passes if SYMBOL is not defined as a hidden symbol in the
2086           test's assembly output.
2087
2088     `scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
2089           Passes if REGEX is matched exactly NUM times in the test's
2090           assembler output.
2091
2092     `scan-assembler REGEX [{ target/xfail SELECTOR }]'
2093           Passes if REGEX matches text in the test's assembler output.
2094
2095     `scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
2096           Passes if REGEX does not match text in the test's assembler
2097           output.
2098
2099     `scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
2100           Passes if REGEX matches text in the test's demangled
2101           assembler output.
2102
2103     `scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
2104           Passes if REGEX does not match text in the test's demangled
2105           assembler output.
2106
2107     `scan-tree-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
2108           Passes if REGEX is found exactly NUM times in the dump file
2109           with suffix SUFFIX.
2110
2111     `scan-tree-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
2112           Passes if REGEX matches text in the dump file with suffix
2113           SUFFIX.
2114
2115     `scan-tree-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
2116           Passes if REGEX does not match text in the dump file with
2117           suffix SUFFIX.
2118
2119     `scan-tree-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
2120           Passes if REGEX matches demangled text in the dump file with
2121           suffix SUFFIX.
2122
2123     `scan-tree-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
2124           Passes if REGEX does not match demangled text in the dump
2125           file with suffix SUFFIX.
2126
2127     `run-gcov SOURCEFILE'
2128           Check line counts in `gcov' tests.
2129
2130     `run-gcov [branches] [calls] { OPTS SOURCEFILE }'
2131           Check branch and/or call counts, in addition to line counts,
2132           in `gcov' tests.
2133
2134 \1f
2135 File: gccint.info,  Node: Ada Tests,  Next: C Tests,  Prev: Test Directives,  Up: Testsuites
2136
2137 6.4.3 Ada Language Testsuites
2138 -----------------------------
2139
2140 The Ada testsuite includes executable tests from the ACATS 2.5
2141 testsuite, publicly available at
2142 `http://www.adaic.org/compilers/acats/2.5'
2143
2144  These tests are integrated in the GCC testsuite in the
2145 `gcc/testsuite/ada/acats' directory, and enabled automatically when
2146 running `make check', assuming the Ada language has been enabled when
2147 configuring GCC.
2148
2149  You can also run the Ada testsuite independently, using `make
2150 check-ada', or run a subset of the tests by specifying which chapter to
2151 run, e.g.:
2152
2153      $ make check-ada CHAPTERS="c3 c9"
2154
2155  The tests are organized by directory, each directory corresponding to
2156 a chapter of the Ada Reference Manual.  So for example, c9 corresponds
2157 to chapter 9, which deals with tasking features of the language.
2158
2159  There is also an extra chapter called `gcc' containing a template for
2160 creating new executable tests.
2161
2162  The tests are run using two `sh' scripts: `run_acats' and
2163 `run_all.sh'.  To run the tests using a simulator or a cross target,
2164 see the small customization section at the top of `run_all.sh'.
2165
2166  These tests are run using the build tree: they can be run without doing
2167 a `make install'.
2168
2169 \1f
2170 File: gccint.info,  Node: C Tests,  Next: libgcj Tests,  Prev: Ada Tests,  Up: Testsuites
2171
2172 6.4.4 C Language Testsuites
2173 ---------------------------
2174
2175 GCC contains the following C language testsuites, in the
2176 `gcc/testsuite' directory:
2177
2178 `gcc.dg'
2179      This contains tests of particular features of the C compiler,
2180      using the more modern `dg' harness.  Correctness tests for various
2181      compiler features should go here if possible.
2182
2183      Magic comments determine whether the file is preprocessed,
2184      compiled, linked or run.  In these tests, error and warning
2185      message texts are compared against expected texts or regular
2186      expressions given in comments.  These tests are run with the
2187      options `-ansi -pedantic' unless other options are given in the
2188      test.  Except as noted below they are not run with multiple
2189      optimization options.
2190
2191 `gcc.dg/compat'
2192      This subdirectory contains tests for binary compatibility using
2193      `compat.exp', which in turn uses the language-independent support
2194      (*note Support for testing binary compatibility: compat Testing.).
2195
2196 `gcc.dg/cpp'
2197      This subdirectory contains tests of the preprocessor.
2198
2199 `gcc.dg/debug'
2200      This subdirectory contains tests for debug formats.  Tests in this
2201      subdirectory are run for each debug format that the compiler
2202      supports.
2203
2204 `gcc.dg/format'
2205      This subdirectory contains tests of the `-Wformat' format
2206      checking.  Tests in this directory are run with and without
2207      `-DWIDE'.
2208
2209 `gcc.dg/noncompile'
2210      This subdirectory contains tests of code that should not compile
2211      and does not need any special compilation options.  They are run
2212      with multiple optimization options, since sometimes invalid code
2213      crashes the compiler with optimization.
2214
2215 `gcc.dg/special'
2216      FIXME: describe this.
2217
2218 `gcc.c-torture'
2219      This contains particular code fragments which have historically
2220      broken easily.  These tests are run with multiple optimization
2221      options, so tests for features which only break at some
2222      optimization levels belong here.  This also contains tests to
2223      check that certain optimizations occur.  It might be worthwhile to
2224      separate the correctness tests cleanly from the code quality
2225      tests, but it hasn't been done yet.
2226
2227 `gcc.c-torture/compat'
2228      FIXME: describe this.
2229
2230      This directory should probably not be used for new tests.
2231
2232 `gcc.c-torture/compile'
2233      This testsuite contains test cases that should compile, but do not
2234      need to link or run.  These test cases are compiled with several
2235      different combinations of optimization options.  All warnings are
2236      disabled for these test cases, so this directory is not suitable if
2237      you wish to test for the presence or absence of compiler warnings.
2238      While special options can be set, and tests disabled on specific
2239      platforms, by the use of `.x' files, mostly these test cases
2240      should not contain platform dependencies.  FIXME: discuss how
2241      defines such as `NO_LABEL_VALUES' and `STACK_SIZE' are used.
2242
2243 `gcc.c-torture/execute'
2244      This testsuite contains test cases that should compile, link and
2245      run; otherwise the same comments as for `gcc.c-torture/compile'
2246      apply.
2247
2248 `gcc.c-torture/execute/ieee'
2249      This contains tests which are specific to IEEE floating point.
2250
2251 `gcc.c-torture/unsorted'
2252      FIXME: describe this.
2253
2254      This directory should probably not be used for new tests.
2255
2256 `gcc.c-torture/misc-tests'
2257      This directory contains C tests that require special handling.
2258      Some of these tests have individual expect files, and others share
2259      special-purpose expect files:
2260
2261     ``bprob*.c''
2262           Test `-fbranch-probabilities' using `bprob.exp', which in
2263           turn uses the generic, language-independent framework (*note
2264           Support for testing profile-directed optimizations: profopt
2265           Testing.).
2266
2267     ``dg-*.c''
2268           Test the testsuite itself using `dg-test.exp'.
2269
2270     ``gcov*.c''
2271           Test `gcov' output using `gcov.exp', which in turn uses the
2272           language-independent support (*note Support for testing gcov:
2273           gcov Testing.).
2274
2275     ``i386-pf-*.c''
2276           Test i386-specific support for data prefetch using
2277           `i386-prefetch.exp'.
2278
2279
2280  FIXME: merge in `testsuite/README.gcc' and discuss the format of test
2281 cases and magic comments more.
2282
2283 \1f
2284 File: gccint.info,  Node: libgcj Tests,  Next: gcov Testing,  Prev: C Tests,  Up: Testsuites
2285
2286 6.4.5 The Java library testsuites.
2287 ----------------------------------
2288
2289 Runtime tests are executed via `make check' in the
2290 `TARGET/libjava/testsuite' directory in the build tree.  Additional
2291 runtime tests can be checked into this testsuite.
2292
2293  Regression testing of the core packages in libgcj is also covered by
2294 the Mauve testsuite.  The Mauve Project develops tests for the Java
2295 Class Libraries.  These tests are run as part of libgcj testing by
2296 placing the Mauve tree within the libjava testsuite sources at
2297 `libjava/testsuite/libjava.mauve/mauve', or by specifying the location
2298 of that tree when invoking `make', as in `make MAUVEDIR=~/mauve check'.
2299
2300  To detect regressions, a mechanism in `mauve.exp' compares the
2301 failures for a test run against the list of expected failures in
2302 `libjava/testsuite/libjava.mauve/xfails' from the source hierarchy.
2303 Update this file when adding new failing tests to Mauve, or when fixing
2304 bugs in libgcj that had caused Mauve test failures.
2305
2306  The Jacks project provides a testsuite for Java compilers that can be
2307 used to test changes that affect the GCJ front end.  This testsuite is
2308 run as part of Java testing by placing the Jacks tree within the libjava
2309 testsuite sources at `libjava/testsuite/libjava.jacks/jacks'.
2310
2311  We encourage developers to contribute test cases to Mauve and Jacks.
2312
2313 \1f
2314 File: gccint.info,  Node: gcov Testing,  Next: profopt Testing,  Prev: libgcj Tests,  Up: Testsuites
2315
2316 6.4.6 Support for testing `gcov'
2317 --------------------------------
2318
2319 Language-independent support for testing `gcov', and for checking that
2320 branch profiling produces expected values, is provided by the expect
2321 file `gcov.exp'.  `gcov' tests also rely on procedures in `gcc.dg.exp'
2322 to compile and run the test program.  A typical `gcov' test contains
2323 the following DejaGnu commands within comments:
2324
2325      { dg-options "-fprofile-arcs -ftest-coverage" }
2326      { dg-do run { target native } }
2327      { dg-final { run-gcov sourcefile } }
2328
2329  Checks of `gcov' output can include line counts, branch percentages,
2330 and call return percentages.  All of these checks are requested via
2331 commands that appear in comments in the test's source file.  Commands
2332 to check line counts are processed by default.  Commands to check
2333 branch percentages and call return percentages are processed if the
2334 `run-gcov' command has arguments `branches' or `calls', respectively.
2335 For example, the following specifies checking both, as well as passing
2336 `-b' to `gcov':
2337
2338      { dg-final { run-gcov branches calls { -b sourcefile } } }
2339
2340  A line count command appears within a comment on the source line that
2341 is expected to get the specified count and has the form `count(CNT)'.
2342 A test should only check line counts for lines that will get the same
2343 count for any architecture.
2344
2345  Commands to check branch percentages (`branch') and call return
2346 percentages (`returns') are very similar to each other.  A beginning
2347 command appears on or before the first of a range of lines that will
2348 report the percentage, and the ending command follows that range of
2349 lines.  The beginning command can include a list of percentages, all of
2350 which are expected to be found within the range.  A range is terminated
2351 by the next command of the same kind.  A command `branch(end)' or
2352 `returns(end)' marks the end of a range without starting a new one.
2353 For example:
2354
2355      if (i > 10 && j > i && j < 20)  /* branch(27 50 75) */
2356                                      /* branch(end) */
2357        foo (i, j);
2358
2359  For a call return percentage, the value specified is the percentage of
2360 calls reported to return.  For a branch percentage, the value is either
2361 the expected percentage or 100 minus that value, since the direction of
2362 a branch can differ depending on the target or the optimization level.
2363
2364  Not all branches and calls need to be checked.  A test should not
2365 check for branches that might be optimized away or replaced with
2366 predicated instructions.  Don't check for calls inserted by the
2367 compiler or ones that might be inlined or optimized away.
2368
2369  A single test can check for combinations of line counts, branch
2370 percentages, and call return percentages.  The command to check a line
2371 count must appear on the line that will report that count, but commands
2372 to check branch percentages and call return percentages can bracket the
2373 lines that report them.
2374
2375 \1f
2376 File: gccint.info,  Node: profopt Testing,  Next: compat Testing,  Prev: gcov Testing,  Up: Testsuites
2377
2378 6.4.7 Support for testing profile-directed optimizations
2379 --------------------------------------------------------
2380
2381 The file `profopt.exp' provides language-independent support for
2382 checking correct execution of a test built with profile-directed
2383 optimization.  This testing requires that a test program be built and
2384 executed twice.  The first time it is compiled to generate profile
2385 data, and the second time it is compiled to use the data that was
2386 generated during the first execution.  The second execution is to
2387 verify that the test produces the expected results.
2388
2389  To check that the optimization actually generated better code, a test
2390 can be built and run a third time with normal optimizations to verify
2391 that the performance is better with the profile-directed optimizations.
2392 `profopt.exp' has the beginnings of this kind of support.
2393
2394  `profopt.exp' provides generic support for profile-directed
2395 optimizations.  Each set of tests that uses it provides information
2396 about a specific optimization:
2397
2398 `tool'
2399      tool being tested, e.g., `gcc'
2400
2401 `profile_option'
2402      options used to generate profile data
2403
2404 `feedback_option'
2405      options used to optimize using that profile data
2406
2407 `prof_ext'
2408      suffix of profile data files
2409
2410 `PROFOPT_OPTIONS'
2411      list of options with which to run each test, similar to the lists
2412      for torture tests
2413
2414 \1f
2415 File: gccint.info,  Node: compat Testing,  Prev: profopt Testing,  Up: Testsuites
2416
2417 6.4.8 Support for testing binary compatibility
2418 ----------------------------------------------
2419
2420 The file `compat.exp' provides language-independent support for binary
2421 compatibility testing.  It supports testing interoperability of two
2422 compilers that follow the same ABI, or of multiple sets of compiler
2423 options that should not affect binary compatibility.  It is intended to
2424 be used for testsuites that complement ABI testsuites.
2425
2426  A test supported by this framework has three parts, each in a separate
2427 source file: a main program and two pieces that interact with each
2428 other to split up the functionality being tested.
2429
2430 `TESTNAME_main.SUFFIX'
2431      Contains the main program, which calls a function in file
2432      `TESTNAME_x.SUFFIX'.
2433
2434 `TESTNAME_x.SUFFIX'
2435      Contains at least one call to a function in `TESTNAME_y.SUFFIX'.
2436
2437 `TESTNAME_y.SUFFIX'
2438      Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'.
2439
2440  Within each test, the main program and one functional piece are
2441 compiled by the GCC under test.  The other piece can be compiled by an
2442 alternate compiler.  If no alternate compiler is specified, then all
2443 three source files are all compiled by the GCC under test.  You can
2444 specify pairs of sets of compiler options.  The first element of such a
2445 pair specifies options used with the GCC under test, and the second
2446 element of the pair specifies options used with the alternate compiler.
2447 Each test is compiled with each pair of options.
2448
2449  `compat.exp' defines default pairs of compiler options.  These can be
2450 overridden by defining the environment variable `COMPAT_OPTIONS' as:
2451
2452      COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
2453        ...[list {TSTN} {ALTN}]]"
2454
2455  where TSTI and ALTI are lists of options, with TSTI used by the
2456 compiler under test and ALTI used by the alternate compiler.  For
2457 example, with `[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
2458 the test is first built with `-g -O0' by the compiler under test and
2459 with `-O3' by the alternate compiler.  The test is built a second time
2460 using `-fpic' by the compiler under test and `-fPIC -O2' by the
2461 alternate compiler.
2462
2463  An alternate compiler is specified by defining an environment variable
2464 to be the full pathname of an installed compiler; for C define
2465 `ALT_CC_UNDER_TEST', and for C++ define `ALT_CXX_UNDER_TEST'.  These
2466 will be written to the `site.exp' file used by DejaGnu.  The default is
2467 to build each test with the compiler under test using the first of each
2468 pair of compiler options from `COMPAT_OPTIONS'.  When
2469 `ALT_CC_UNDER_TEST' or `ALT_CXX_UNDER_TEST' is `same', each test is
2470 built using the compiler under test but with combinations of the
2471 options from `COMPAT_OPTIONS'.
2472
2473  To run only the C++ compatibility suite using the compiler under test
2474 and another version of GCC using specific compiler options, do the
2475 following from `OBJDIR/gcc':
2476
2477      rm site.exp
2478      make -k \
2479        ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
2480        COMPAT_OPTIONS="lists as shown above" \
2481        check-c++ \
2482        RUNTESTFLAGS="compat.exp"
2483
2484  A test that fails when the source files are compiled with different
2485 compilers, but passes when the files are compiled with the same
2486 compiler, demonstrates incompatibility of the generated code or runtime
2487 support.  A test that fails for the alternate compiler but passes for
2488 the compiler under test probably tests for a bug that was fixed in the
2489 compiler under test but is present in the alternate compiler.
2490
2491  The binary compatibility tests support a small number of test framework
2492 commands that appear within comments in a test file.
2493
2494 `dg-require-*'
2495      These commands can be used in `TESTNAME_main.SUFFIX' to skip the
2496      test if specific support is not available on the target.
2497
2498 `dg-options'
2499      The specified options are used for compiling this particular source
2500      file, appended to the options from `COMPAT_OPTIONS'.  When this
2501      command appears in `TESTNAME_main.SUFFIX' the options are also
2502      used to link the test program.
2503
2504 `dg-xfail-if'
2505      This command can be used in a secondary source file to specify that
2506      compilation is expected to fail for particular options on
2507      particular targets.
2508
2509 \1f
2510 File: gccint.info,  Node: Passes,  Next: Trees,  Prev: Source Tree,  Up: Top
2511
2512 7 Passes and Files of the Compiler
2513 **********************************
2514
2515 This chapter is dedicated to giving an overview of the optimization and
2516 code generation passes of the compiler.  In the process, it describes
2517 some of the language front end interface, though this description is no
2518 where near complete.
2519
2520 * Menu:
2521
2522 * Parsing pass::         The language front end turns text into bits.
2523 * Gimplification pass::  The bits are turned into something we can optimize.
2524 * Pass manager::         Sequencing the optimization passes.
2525 * Tree-SSA passes::      Optimizations on a high-level representation.
2526 * RTL passes::           Optimizations on a low-level representation.
2527
2528 \1f
2529 File: gccint.info,  Node: Parsing pass,  Next: Gimplification pass,  Up: Passes
2530
2531 7.1 Parsing pass
2532 ================
2533
2534 The language front end is invoked only once, via
2535 `lang_hooks.parse_file', to parse the entire input.  The language front
2536 end may use any intermediate language representation deemed
2537 appropriate.  The C front end uses GENERIC trees (CROSSREF), plus a
2538 double handful of language specific tree codes defined in
2539 `c-common.def'.  The Fortran front end uses a completely different
2540 private representation.
2541
2542  At some point the front end must translate the representation used in
2543 the front end to a representation understood by the language-independent
2544 portions of the compiler.  Current practice takes one of two forms.
2545 The C front end manually invokes the gimplifier (CROSSREF) on each
2546 function, and uses the gimplifier callbacks to convert the
2547 language-specific tree nodes directly to GIMPLE (CROSSREF) before
2548 passing the function off to be compiled.  The Fortran front end
2549 converts from a private representation to GENERIC, which is later
2550 lowered to GIMPLE when the function is compiled.  Which route to choose
2551 probably depends on how well GENERIC (plus extensions) can be made to
2552 match up with the source language and necessary parsing data structures.
2553
2554  BUG: Gimplification must occur before nested function lowering, and
2555 nested function lowering must be done by the front end before passing
2556 the data off to cgraph.
2557
2558  TODO: Cgraph should control nested function lowering.  It would only
2559 be invoked when it is certain that the outer-most function is used.
2560
2561  TODO: Cgraph needs a gimplify_function callback.  It should be invoked
2562 when (1) it is certain that the function is used, (2) warning flags
2563 specified by the user require some amount of compilation in order to
2564 honor, (3) the language indicates that semantic analysis is not
2565 complete until gimplification occurs.  Hum... this sounds overly
2566 complicated.  Perhaps we should just have the front end gimplify
2567 always; in most cases it's only one function call.
2568
2569  The front end needs to pass all function definitions and top level
2570 declarations off to the middle-end so that they can be compiled and
2571 emitted to the object file.  For a simple procedural language, it is
2572 usually most convenient to do this as each top level declaration or
2573 definition is seen.  There is also a distinction to be made between
2574 generating functional code and generating complete debug information.
2575 The only thing that is absolutely required for functional code is that
2576 function and data _definitions_ be passed to the middle-end.  For
2577 complete debug information, function, data and type declarations should
2578 all be passed as well.
2579
2580  In any case, the front end needs each complete top-level function or
2581 data declaration, and each data definition should be passed to
2582 `rest_of_decl_compilation'.  Each complete type definition should be
2583 passed to `rest_of_type_compilation'.  Each function definition should
2584 be passed to `cgraph_finalize_function'.
2585
2586  TODO: I know rest_of_compilation currently has all sorts of
2587 rtl-generation semantics.  I plan to move all code generation bits
2588 (both tree and rtl) to compile_function.  Should we hide cgraph from
2589 the front ends and move back to rest_of_compilation as the official
2590 interface?  Possibly we should rename all three interfaces such that
2591 the names match in some meaningful way and that is more descriptive
2592 than "rest_of".
2593
2594  The middle-end will, at its option, emit the function and data
2595 definitions immediately or queue them for later processing.
2596
2597 \1f
2598 File: gccint.info,  Node: Gimplification pass,  Next: Pass manager,  Prev: Parsing pass,  Up: Passes
2599
2600 7.2 Gimplification pass
2601 =======================
2602
2603 "Gimplification" is a whimsical term for the process of converting the
2604 intermediate representation of a function into the GIMPLE language
2605 (CROSSREF).  The term stuck, and so words like "gimplification",
2606 "gimplify", "gimplifier" and the like are sprinkled throughout this
2607 section of code.
2608
2609  While a front end may certainly choose to generate GIMPLE directly if
2610 it chooses, this can be a moderately complex process unless the
2611 intermediate language used by the front end is already fairly simple.
2612 Usually it is easier to generate GENERIC trees plus extensions and let
2613 the language-independent gimplifier do most of the work.
2614
2615  The main entry point to this pass is `gimplify_function_tree' located
2616 in `gimplify.c'.  From here we process the entire function gimplifying
2617 each statement in turn.  The main workhorse for this pass is
2618 `gimplify_expr'.  Approximately everything passes through here at least
2619 once, and it is from here that we invoke the `lang_hooks.gimplify_expr'
2620 callback.
2621
2622  The callback should examine the expression in question and return
2623 `GS_UNHANDLED' if the expression is not a language specific construct
2624 that requires attention.  Otherwise it should alter the expression in
2625 some way to such that forward progress is made toward producing valid
2626 GIMPLE.  If the callback is certain that the transformation is complete
2627 and the expression is valid GIMPLE, it should return `GS_ALL_DONE'.
2628 Otherwise it should return `GS_OK', which will cause the expression to
2629 be processed again.  If the callback encounters an error during the
2630 transformation (because the front end is relying on the gimplification
2631 process to finish semantic checks), it should return `GS_ERROR'.
2632
2633 \1f
2634 File: gccint.info,  Node: Pass manager,  Next: Tree-SSA passes,  Prev: Gimplification pass,  Up: Passes
2635
2636 7.3 Pass manager
2637 ================
2638
2639 The pass manager is located in `passes.c', `tree-optimize.c' and
2640 `tree-pass.h'.  Its job is to run all of the individual passes in the
2641 correct order, and take care of standard bookkeeping that applies to
2642 every pass.
2643
2644  The theory of operation is that each pass defines a structure that
2645 represents everything we need to know about that pass--when it should
2646 be run, how it should be run, what intermediate language form or
2647 on-the-side data structures it needs.  We register the pass to be run
2648 in some particular order, and the pass manager arranges for everything
2649 to happen in the correct order.
2650
2651  The actuality doesn't completely live up to the theory at present.
2652 Command-line switches and `timevar_id_t' enumerations must still be
2653 defined elsewhere.  The pass manager validates constraints but does not
2654 attempt to (re-)generate data structures or lower intermediate language
2655 form based on the requirements of the next pass.  Nevertheless, what is
2656 present is useful, and a far sight better than nothing at all.
2657
2658  TODO: describe the global variables set up by the pass manager, and a
2659 brief description of how a new pass should use it.  I need to look at
2660 what info rtl passes use first...
2661
2662 \1f
2663 File: gccint.info,  Node: Tree-SSA passes,  Next: RTL passes,  Prev: Pass manager,  Up: Passes
2664
2665 7.4 Tree-SSA passes
2666 ===================
2667
2668 The following briefly describes the tree optimization passes that are
2669 run after gimplification and what source files they are located in.
2670
2671    * Remove useless statements
2672
2673      This pass is an extremely simple sweep across the gimple code in
2674      which we identify obviously dead code and remove it.  Here we do
2675      things like simplify `if' statements with constant conditions,
2676      remove exception handling constructs surrounding code that
2677      obviously cannot throw, remove lexical bindings that contain no
2678      variables, and other assorted simplistic cleanups.  The idea is to
2679      get rid of the obvious stuff quickly rather than wait until later
2680      when it's more work to get rid of it.  This pass is located in
2681      `tree-cfg.c' and described by `pass_remove_useless_stmts'.
2682
2683    * Mudflap declaration registration
2684
2685      If mudflap (*note -fmudflap -fmudflapth -fmudflapir:
2686      (gcc.info)Optimize Options.) is enabled, we generate code to
2687      register some variable declarations with the mudflap runtime.
2688      Specifically, the runtime tracks the lifetimes of those variable
2689      declarations that have their addresses taken, or whose bounds are
2690      unknown at compile time (`extern').  This pass generates new
2691      exception handling constructs (`try'/`finally'), and so must run
2692      before those are lowered.  In addition, the pass enqueues
2693      declarations of static variables whose lifetimes extend to the
2694      entire program.  The pass is located in `tree-mudflap.c' and is
2695      described by `pass_mudflap_1'.
2696
2697    * Lower control flow
2698
2699      This pass flattens `if' statements (`COND_EXPR') and and moves
2700      lexical bindings (`BIND_EXPR') out of line.  After this pass, all
2701      `if' statements will have exactly two `goto' statements in its
2702      `then' and `else' arms.  Lexical binding information for each
2703      statement will be found in `TREE_BLOCK' rather than being inferred
2704      from its position under a `BIND_EXPR'.  This pass is found in
2705      `gimple-low.c' and is described by `pass_lower_cf'.
2706
2707    * Lower exception handling control flow
2708
2709      This pass decomposes high-level exception handling constructs
2710      (`TRY_FINALLY_EXPR' and `TRY_CATCH_EXPR') into a form that
2711      explicitly represents the control flow involved.  After this pass,
2712      `lookup_stmt_eh_region' will return a non-negative number for any
2713      statement that may have EH control flow semantics; examine
2714      `tree_can_throw_internal' or `tree_can_throw_external' for exact
2715      semantics.  Exact control flow may be extracted from
2716      `foreach_reachable_handler'.  The EH region nesting tree is defined
2717      in `except.h' and built in `except.c'.  The lowering pass itself
2718      is in `tree-eh.c' and is described by `pass_lower_eh'.
2719
2720    * Build the control flow graph
2721
2722      This pass decomposes a function into basic blocks and creates all
2723      of the edges that connect them.  It is located in `tree-cfg.c' and
2724      is described by `pass_build_cfg'.
2725
2726    * Find all referenced variables
2727
2728      This pass walks the entire function and collects an array of all
2729      variables referenced in the function, `referenced_vars'.  The
2730      index at which a variable is found in the array is used as a UID
2731      for the variable within this function.  This data is needed by the
2732      SSA rewriting routines.  The pass is located in `tree-dfa.c' and
2733      is described by `pass_referenced_vars'.
2734
2735    * Enter static single assignment form
2736
2737      This pass rewrites the function such that it is in SSA form.  After
2738      this pass, all `is_gimple_reg' variables will be referenced by
2739      `SSA_NAME', and all occurrences of other variables will be
2740      annotated with `VDEFS' and `VUSES'; phi nodes will have been
2741      inserted as necessary for each basic block.  This pass is located
2742      in `tree-ssa.c' and is described by `pass_build_ssa'.
2743
2744    * Warn for uninitialized variables
2745
2746      This pass scans the function for uses of `SSA_NAME's that are fed
2747      by default definition.  For non-parameter variables, such uses are
2748      uninitialized.  The pass is run twice, before and after
2749      optimization.  In the first pass we only warn for uses that are
2750      positively uninitialized; in the second pass we warn for uses that
2751      are possibly uninitialized.  The pass is located in `tree-ssa.c'
2752      and is defined by `pass_early_warn_uninitialized' and
2753      `pass_late_warn_uninitialized'.
2754
2755    * Dead code elimination
2756
2757      This pass scans the function for statements without side effects
2758      whose result is unused.  It does not do memory life analysis, so
2759      any value that is stored in memory is considered used.  The pass
2760      is run multiple times throughout the optimization process.  It is
2761      located in `tree-ssa-dce.c' and is described by `pass_dce'.
2762
2763    * Dominator optimizations
2764
2765      This pass performs trivial dominator-based copy and constant
2766      propagation, expression simplification, and jump threading.  It is
2767      run multiple times throughout the optimization process.  It it
2768      located in `tree-ssa-dom.c' and is described by `pass_dominator'.
2769
2770    * Redundant phi elimination
2771
2772      This pass removes phi nodes for which all of the arguments are the
2773      same value, excluding feedback.  Such degenerate forms are
2774      typically created by removing unreachable code.  The pass is run
2775      multiple times throughout the optimization process.  It is located
2776      in `tree-ssa.c' and is described by `pass_redundant_phi'.o
2777
2778    * Forward propagation of single-use variables
2779
2780      This pass attempts to remove redundant computation by substituting
2781      variables that are used once into the expression that uses them and
2782      seeing if the result can be simplified.  It is located in
2783      `tree-ssa-forwprop.c' and is described by `pass_forwprop'.
2784
2785    * Copy Renaming
2786
2787      This pass attempts to change the name of compiler temporaries
2788      involved in copy operations such that SSA->normal can coalesce the
2789      copy away.  When compiler temporaries are copies of user
2790      variables, it also renames the compiler temporary to the user
2791      variable resulting in better use of user symbols.  It is located
2792      in `tree-ssa-copyrename.c' and is described by `pass_copyrename'.
2793
2794    * PHI node optimizations
2795
2796      This pass recognizes forms of phi inputs that can be represented as
2797      conditional expressions and rewrites them into straight line code.
2798      It is located in `tree-ssa-phiopt.c' and is described by
2799      `pass_phiopt'.
2800
2801    * May-alias optimization
2802
2803      This pass performs a flow sensitive SSA-based points-to analysis.
2804      The resulting may-alias, must-alias, and escape analysis
2805      information is used to promote variables from in-memory
2806      addressable objects to non-aliased variables that can be renamed
2807      into SSA form.  We also update the `VDEF'/`VUSE' memory tags for
2808      non-renamable aggregates so that we get fewer false kills.  The
2809      pass is located in `tree-ssa-alias.c' and is described by
2810      `pass_may_alias'.
2811
2812    * Profiling
2813
2814      This pass rewrites the function in order to collect runtime block
2815      and value profiling data.  Such data may be fed back into the
2816      compiler on a subsequent run so as to allow optimization based on
2817      expected execution frequencies.  The pass is located in
2818      `predict.c' and is described by `pass_profile'.
2819
2820    * Lower complex arithmetic
2821
2822      This pass rewrites complex arithmetic operations into their
2823      component scalar arithmetic operations.  The pass is located in
2824      `tree-complex.c' and is described by `pass_lower_complex'.
2825
2826    * Scalar replacement of aggregates
2827
2828      This pass rewrites suitable non-aliased local aggregate variables
2829      into a set of scalar variables.  The resulting scalar variables are
2830      rewritten into SSA form, which allows subsequent optimization
2831      passes to do a significantly better job with them.  The pass is
2832      located in `tree-sra.c' and is described by `pass_sra'.
2833
2834    * Dead store elimination
2835
2836      This pass eliminates stores to memory that are subsequently
2837      overwritten by another store, without any intervening loads.  The
2838      pass is located in `tree-ssa-dse.c' and is described by `pass_dse'.
2839
2840    * Tail recursion elimination
2841
2842      This pass transforms tail recursion into a loop.  It is located in
2843      `tree-tailcall.c' and is described by `pass_tail_recursion'.
2844
2845    * Partial redundancy elimination
2846
2847      This pass eliminates partially redundant computations, as well as
2848      performing load motion.  The pass is located in `tree-ssa-pre.c'
2849      and is described by `pass_pre'.
2850
2851    * Loop optimization
2852
2853      The main driver of the pass is placed in `tree-ssa-loop.c' and
2854      described by `pass_loop'.
2855
2856      The optimizations performed by this pass are:
2857
2858      Loop invariant motion.  This pass moves only invariants that would
2859      be hard to handle on rtl level (function calls, operations that
2860      expand to nontrivial sequences of insns).  With `-funswitch-loops'
2861      it also moves operands of conditions that are invariant out of the
2862      loop, so that we can use just trivial invariantness analysis in
2863      loop unswitching.  The pass also includes store motion.  The pass
2864      is implemented in `tree-ssa-loop-im.c'.
2865
2866      Canonical induction variable creation.  This pass creates a simple
2867      counter for number of iterations of the loop and replaces the exit
2868      condition of the loop using it, in case when a complicated
2869      analysis is necessary to determine the number of iterations.
2870      Later optimizations then may determine the number easily.  The
2871      pass is implemented in `tree-ssa-loop-ivcanon.c'.
2872
2873      Induction variable optimizations.  This pass performs standard
2874      induction variable optimizations, including strength reduction,
2875      induction variable merging and induction variable elimination.
2876      The pass is implemented in `tree-ssa-loop-ivopts.c'.
2877
2878      Loop unswitching.  This pass moves the conditional jumps that are
2879      invariant out of the loops.  To achieve this, a duplicate of the
2880      loop is created for each possible outcome of conditional jump(s).
2881      The pass is implemented in `tree-ssa-loop-unswitch.c'.  This pass
2882      should eventually replace the rtl-level loop unswitching in
2883      `loop-unswitch.c', but currently the rtl-level pass is not
2884      completely redundant yet due to deficiencies in tree level alias
2885      analysis.
2886
2887      The optimizations also use various utility functions contained in
2888      `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and
2889      `cfgloopmanip.c'.
2890
2891      Vectorization.  This pass transforms loops to operate on vector
2892      types instead of scalar types.  Data parallelism across loop
2893      iterations is exploited to group data elements from consecutive
2894      iterations into a vector and operate on them in parallel.
2895      Depending on available target support the loop is conceptually
2896      unrolled by a factor `VF' (vectorization factor), which is the
2897      number of elements operated upon in parallel in each iteration,
2898      and the `VF' copies of each scalar operation are fused to form a
2899      vector operation.  Additional loop transformations such as peeling
2900      and versioning may take place to align the number of iterations,
2901      and to align the memory accesses in the loop.  The pass is
2902      implemented in `tree-vectorizer.c' (the main driver and general
2903      utilities), `tree-vect-analyze.c' and `tree-vect-tranform.c'.
2904      Analysis of data references is in `tree-data-ref.c'.
2905
2906    * Tree level if-conversion for vectorizer
2907
2908      This pass applies if-conversion to simple loops to help vectorizer.
2909      We identify if convertable loops, if-convert statements and merge
2910      basic blocks in one big block.  The idea is to present loop in such
2911      form so that vectorizer can have one to one mapping between
2912      statements and available vector operations.  This patch
2913      re-introduces COND_EXPR at GIMPLE level.  This pass is located in
2914      `tree-if-conv.c'.
2915
2916    * Conditional constant propagation
2917
2918      This pass relaxes a lattice of values in order to identify those
2919      that must be constant even in the presence of conditional branches.
2920      The pass is located in `tree-ssa-ccp.c' and is described by
2921      `pass_ccp'.
2922
2923    * Folding builtin functions
2924
2925      This pass simplifies builtin functions, as applicable, with
2926      constant arguments or with inferrable string lengths.  It is
2927      located in `tree-ssa-ccp.c' and is described by
2928      `pass_fold_builtins'.
2929
2930    * Split critical edges
2931
2932      This pass identifies critical edges and inserts empty basic blocks
2933      such that the edge is no longer critical.  The pass is located in
2934      `tree-cfg.c' and is described by `pass_split_crit_edges'.
2935
2936    * Partial redundancy elimination
2937
2938      This pass answers the question "given a hypothetical temporary
2939      variable, what expressions could we eliminate?"  It is located in
2940      `tree-ssa-pre.c' and is described by `pass_pre'.
2941
2942    * Control dependence dead code elimination
2943
2944      This pass is a stronger form of dead code elimination that can
2945      eliminate unnecessary control flow statements.   It is located in
2946      `tree-ssa-dce.c' and is described by `pass_cd_dce'.
2947
2948    * Tail call elimination
2949
2950      This pass identifies function calls that may be rewritten into
2951      jumps.  No code transformation is actually applied here, but the
2952      data and control flow problem is solved.  The code transformation
2953      requires target support, and so is delayed until RTL.  In the
2954      meantime `CALL_EXPR_TAILCALL' is set indicating the possibility.
2955      The pass is located in `tree-tailcall.c' and is described by
2956      `pass_tail_calls'.  The RTL transformation is handled by
2957      `fixup_tail_calls' in `calls.c'.
2958
2959    * Warn for function return without value
2960
2961      For non-void functions, this pass locates return statements that do
2962      not specify a value and issues a warning.  Such a statement may
2963      have been injected by falling off the end of the function.  This
2964      pass is run last so that we have as much time as possible to prove
2965      that the statement is not reachable.  It is located in
2966      `tree-cfg.c' and is described by `pass_warn_function_return'.
2967
2968    * Mudflap statement annotation
2969
2970      If mudflap is enabled, we rewrite some memory accesses with code to
2971      validate that the memory access is correct.  In particular,
2972      expressions involving pointer dereferences (`INDIRECT_REF',
2973      `ARRAY_REF', etc.) are replaced by code that checks the selected
2974      address range against the mudflap runtime's database of valid
2975      regions.  This check includes an inline lookup into a
2976      direct-mapped cache, based on shift/mask operations of the pointer
2977      value, with a fallback function call into the runtime.  The pass
2978      is located in `tree-mudflap.c' and is described by
2979      `pass_mudflap_2'.
2980
2981    * Leave static single assignment form
2982
2983      This pass rewrites the function such that it is in normal form.  At
2984      the same time, we eliminate as many single-use temporaries as
2985      possible, so the intermediate language is no longer GIMPLE, but
2986      GENERIC.  The pass is located in `tree-ssa.c' and is described by
2987      `pass_del_ssa'.
2988
2989 \1f
2990 File: gccint.info,  Node: RTL passes,  Prev: Tree-SSA passes,  Up: Passes
2991
2992 7.5 RTL passes
2993 ==============
2994
2995 The following briefly describes the rtl generation and optimization
2996 passes that are run after tree optimization.
2997
2998    * RTL generation
2999
3000      The source files for RTL generation include `stmt.c', `calls.c',
3001      `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and
3002      `emit-rtl.c'.  Also, the file `insn-emit.c', generated from the
3003      machine description by the program `genemit', is used in this
3004      pass.  The header file `expr.h' is used for communication within
3005      this pass.
3006
3007      The header files `insn-flags.h' and `insn-codes.h', generated from
3008      the machine description by the programs `genflags' and `gencodes',
3009      tell this pass which standard names are available for use and
3010      which patterns correspond to them.
3011
3012    * Generate exception handling landing pads
3013
3014      This pass generates the glue that handles communication between the
3015      exception handling library routines and the exception handlers
3016      within the function.  Entry points in the function that are
3017      invoked by the exception handling library are called "landing
3018      pads".  The code for this pass is located within `except.c'.
3019
3020    * Cleanup control flow graph
3021
3022      This pass removes unreachable code, simplifies jumps to next,
3023      jumps to jump, jumps across jumps, etc.  The pass is run multiple
3024      times.  For historical reasons, it is occasionally referred to as
3025      the "jump optimization pass".  The bulk of the code for this pass
3026      is in `cfgcleanup.c', and there are support routines in `cfgrtl.c'
3027      and `jump.c'.
3028
3029    * Common subexpression elimination
3030
3031      This pass removes redundant computation within basic blocks, and
3032      optimizes addressing modes based on cost.  The pass is run twice.
3033      The source is located in `cse.c'.
3034
3035    * Global common subexpression elimination.
3036
3037      This pass performs two different types of GCSE  depending on
3038      whether you are optimizing for size or not (LCM based GCSE tends
3039      to increase code size for a gain in speed, while Morel-Renvoise
3040      based GCSE does not).  When optimizing for size, GCSE is done
3041      using Morel-Renvoise Partial Redundancy Elimination, with the
3042      exception that it does not try to move invariants out of
3043      loops--that is left to  the loop optimization pass.  If MR PRE
3044      GCSE is done, code hoisting (aka unification) is also done, as
3045      well as load motion.  If you are optimizing for speed, LCM (lazy
3046      code motion) based GCSE is done.  LCM is based on the work of
3047      Knoop, Ruthing, and Steffen.  LCM based GCSE also does loop
3048      invariant code motion.  We also perform load and store motion when
3049      optimizing for speed.  Regardless of which type of GCSE is used,
3050      the GCSE pass also performs global constant and  copy propagation.
3051      The source file for this pass is `gcse.c', and the LCM routines
3052      are in `lcm.c'.
3053
3054    * Loop optimization
3055
3056      This pass moves constant expressions out of loops, and optionally
3057      does strength-reduction as well.  The pass is located in `loop.c'.
3058      Loop dependency analysis routines are contained in `dependence.c'.
3059      This pass is seriously out-of-date and is supposed to be replaced
3060      by a new one described below in near future.
3061
3062      A second loop optimization pass takes care of basic block level
3063      optimizations--unrolling, peeling and unswitching loops.  The
3064      source files are `cfgloopanal.c' and `cfgloopmanip.c' containing
3065      generic loop analysis and manipulation code, `loop-init.c' with
3066      initialization and finalization code, `loop-unswitch.c' for loop
3067      unswitching and `loop-unroll.c' for loop unrolling and peeling.
3068      It also contains a separate loop invariant motion pass implemented
3069      in `loop-invariant.c'.
3070
3071    * Jump bypassing
3072
3073      This pass is an aggressive form of GCSE that transforms the control
3074      flow graph of a function by propagating constants into conditional
3075      branch instructions.  The source file for this pass is `gcse.c'.
3076
3077    * If conversion
3078
3079      This pass attempts to replace conditional branches and surrounding
3080      assignments with arithmetic, boolean value producing comparison
3081      instructions, and conditional move instructions.  In the very last
3082      invocation after reload, it will generate predicated instructions
3083      when supported by the target.  The pass is located in `ifcvt.c'.
3084
3085    * Web construction
3086
3087      This pass splits independent uses of each pseudo-register.  This
3088      can improve effect of the other transformation, such as CSE or
3089      register allocation.  Its source files are `web.c'.
3090
3091    * Life analysis
3092
3093      This pass computes which pseudo-registers are live at each point in
3094      the program, and makes the first instruction that uses a value
3095      point at the instruction that computed the value.  It then deletes
3096      computations whose results are never used, and combines memory
3097      references with add or subtract instructions to make autoincrement
3098      or autodecrement addressing.  The pass is located in `flow.c'.
3099
3100    * Instruction combination
3101
3102      This pass attempts to combine groups of two or three instructions
3103      that are related by data flow into single instructions.  It
3104      combines the RTL expressions for the instructions by substitution,
3105      simplifies the result using algebra, and then attempts to match
3106      the result against the machine description.  The pass is located
3107      in `combine.c'.
3108
3109    * Register movement
3110
3111      This pass looks for cases where matching constraints would force an
3112      instruction to need a reload, and this reload would be a
3113      register-to-register move.  It then attempts to change the
3114      registers used by the instruction to avoid the move instruction.
3115      The pass is located in `regmove.c'.
3116
3117    * Optimize mode switching
3118
3119      This pass looks for instructions that require the processor to be
3120      in a specific "mode" and minimizes the number of mode changes
3121      required to satisfy all users.  What these modes are, and what
3122      they apply to are completely target-specific.  The source is
3123      located in `lcm.c'.
3124
3125    * Modulo scheduling
3126
3127      This pass looks at innermost loops and reorders their instructions
3128      by overlapping different iterations.  Modulo scheduling is
3129      performed immediately before instruction scheduling.  The pass is
3130      located in (`modulo-sched.c').
3131
3132    * Instruction scheduling
3133
3134      This pass looks for instructions whose output will not be
3135      available by the time that it is used in subsequent instructions.
3136      Memory loads and floating point instructions often have this
3137      behavior on RISC machines.  It re-orders instructions within a
3138      basic block to try to separate the definition and use of items
3139      that otherwise would cause pipeline stalls.  This pass is
3140      performed twice, before and after register allocation.  The pass
3141      is located in `haifa-sched.c', `sched-deps.c', `sched-ebb.c',
3142      `sched-rgn.c' and `sched-vis.c'.
3143
3144    * Register allocation
3145
3146      These passes make sure that all occurrences of pseudo registers are
3147      eliminated, either by allocating them to a hard register, replacing
3148      them by an equivalent expression (e.g. a constant) or by placing
3149      them on the stack.  This is done in several subpasses:
3150
3151         * Register class preferencing.  The RTL code is scanned to find
3152           out which register class is best for each pseudo register.
3153           The source file is `regclass.c'.
3154
3155         * Local register allocation.  This pass allocates hard
3156           registers to pseudo registers that are used only within one
3157           basic block.  Because the basic block is linear, it can use
3158           fast and powerful techniques to do a decent job.  The source
3159           is located in `local-alloc.c'.
3160
3161         * Global register allocation.  This pass allocates hard
3162           registers for the remaining pseudo registers (those whose
3163           life spans are not contained in one basic block).  The pass
3164           is located in `global.c'.
3165
3166         * Reloading.  This pass renumbers pseudo registers with the
3167           hardware registers numbers they were allocated.  Pseudo
3168           registers that did not get hard registers are replaced with
3169           stack slots.  Then it finds instructions that are invalid
3170           because a value has failed to end up in a register, or has
3171           ended up in a register of the wrong kind.  It fixes up these
3172           instructions by reloading the problematical values
3173           temporarily into registers.  Additional instructions are
3174           generated to do the copying.
3175
3176           The reload pass also optionally eliminates the frame pointer
3177           and inserts instructions to save and restore call-clobbered
3178           registers around calls.
3179
3180           Source files are `reload.c' and `reload1.c', plus the header
3181           `reload.h' used for communication between them.
3182
3183    * Basic block reordering
3184
3185      This pass implements profile guided code positioning.  If profile
3186      information is not available, various types of static analysis are
3187      performed to make the predictions normally coming from the profile
3188      feedback (IE execution frequency, branch probability, etc).  It is
3189      implemented in the file `bb-reorder.c', and the various prediction
3190      routines are in `predict.c'.
3191
3192    * Variable tracking
3193
3194      This pass computes where the variables are stored at each position
3195      in code and generates notes describing the variable locations to
3196      RTL code.  The location lists are then generated according to these
3197      notes to debug information if the debugging information format
3198      supports location lists.
3199
3200    * Delayed branch scheduling
3201
3202      This optional pass attempts to find instructions that can go into
3203      the delay slots of other instructions, usually jumps and calls.
3204      The source file name is `reorg.c'.
3205
3206    * Branch shortening
3207
3208      On many RISC machines, branch instructions have a limited range.
3209      Thus, longer sequences of instructions must be used for long
3210      branches.  In this pass, the compiler figures out what how far
3211      each instruction will be from each other instruction, and
3212      therefore whether the usual instructions, or the longer sequences,
3213      must be used for each branch.
3214
3215    * Register-to-stack conversion
3216
3217      Conversion from usage of some hard registers to usage of a register
3218      stack may be done at this point.  Currently, this is supported only
3219      for the floating-point registers of the Intel 80387 coprocessor.
3220      The source file name is `reg-stack.c'.
3221
3222    * Final
3223
3224      This pass outputs the assembler code for the function.  The source
3225      files are `final.c' plus `insn-output.c'; the latter is generated
3226      automatically from the machine description by the tool `genoutput'.
3227      The header file `conditions.h' is used for communication between
3228      these files.  If mudflap is enabled, the queue of deferred
3229      declarations and any addressed constants (e.g., string literals)
3230      is processed by `mudflap_finish_file' into a synthetic constructor
3231      function containing calls into the mudflap runtime.
3232
3233    * Debugging information output
3234
3235      This is run after final because it must output the stack slot
3236      offsets for pseudo registers that did not get hard registers.
3237      Source files are `dbxout.c' for DBX symbol table format,
3238      `sdbout.c' for SDB symbol table format, `dwarfout.c' for DWARF
3239      symbol table format, files `dwarf2out.c' and `dwarf2asm.c' for
3240      DWARF2 symbol table format, and `vmsdbgout.c' for VMS debug symbol
3241      table format.
3242
3243
3244 \1f
3245 File: gccint.info,  Node: Trees,  Next: RTL,  Prev: Passes,  Up: Top
3246
3247 8 Trees: The intermediate representation used by the C and C++ front ends
3248 *************************************************************************
3249
3250 This chapter documents the internal representation used by GCC to
3251 represent C and C++ source programs.  When presented with a C or C++
3252 source program, GCC parses the program, performs semantic analysis
3253 (including the generation of error messages), and then produces the
3254 internal representation described here.  This representation contains a
3255 complete representation for the entire translation unit provided as
3256 input to the front end.  This representation is then typically processed
3257 by a code-generator in order to produce machine code, but could also be
3258 used in the creation of source browsers, intelligent editors, automatic
3259 documentation generators, interpreters, and any other programs needing
3260 the ability to process C or C++ code.
3261
3262  This chapter explains the internal representation.  In particular, it
3263 documents the internal representation for C and C++ source constructs,
3264 and the macros, functions, and variables that can be used to access
3265 these constructs.  The C++ representation is largely a superset of the
3266 representation used in the C front end.  There is only one construct
3267 used in C that does not appear in the C++ front end and that is the GNU
3268 "nested function" extension.  Many of the macros documented here do not
3269 apply in C because the corresponding language constructs do not appear
3270 in C.
3271
3272  If you are developing a "back end", be it is a code-generator or some
3273 other tool, that uses this representation, you may occasionally find
3274 that you need to ask questions not easily answered by the functions and
3275 macros available here.  If that situation occurs, it is quite likely
3276 that GCC already supports the functionality you desire, but that the
3277 interface is simply not documented here.  In that case, you should ask
3278 the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting
3279 the functionality you require.  Similarly, if you find yourself writing
3280 functions that do not deal directly with your back end, but instead
3281 might be useful to other people using the GCC front end, you should
3282 submit your patches for inclusion in GCC.
3283
3284 * Menu:
3285
3286 * Deficiencies::        Topics net yet covered in this document.
3287 * Tree overview::       All about `tree's.
3288 * Types::               Fundamental and aggregate types.
3289 * Scopes::              Namespaces and classes.
3290 * Functions::           Overloading, function bodies, and linkage.
3291 * Declarations::        Type declarations and variables.
3292 * Attributes::          Declaration and type attributes.
3293 * Expression trees::    From `typeid' to `throw'.
3294
3295 \1f
3296 File: gccint.info,  Node: Deficiencies,  Next: Tree overview,  Up: Trees
3297
3298 8.1 Deficiencies
3299 ================
3300
3301 There are many places in which this document is incomplet and incorrekt.
3302 It is, as of yet, only _preliminary_ documentation.
3303
3304 \1f
3305 File: gccint.info,  Node: Tree overview,  Next: Types,  Prev: Deficiencies,  Up: Trees
3306
3307 8.2 Overview
3308 ============
3309
3310 The central data structure used by the internal representation is the
3311 `tree'.  These nodes, while all of the C type `tree', are of many
3312 varieties.  A `tree' is a pointer type, but the object to which it
3313 points may be of a variety of types.  From this point forward, we will
3314 refer to trees in ordinary type, rather than in `this font', except
3315 when talking about the actual C type `tree'.
3316
3317  You can tell what kind of node a particular tree is by using the
3318 `TREE_CODE' macro.  Many, many macros take trees as input and return
3319 trees as output.  However, most macros require a certain kind of tree
3320 node as input.  In other words, there is a type-system for trees, but
3321 it is not reflected in the C type-system.
3322
3323  For safety, it is useful to configure GCC with `--enable-checking'.
3324 Although this results in a significant performance penalty (since all
3325 tree types are checked at run-time), and is therefore inappropriate in a
3326 release version, it is extremely helpful during the development process.
3327
3328  Many macros behave as predicates.  Many, although not all, of these
3329 predicates end in `_P'.  Do not rely on the result type of these macros
3330 being of any particular type.  You may, however, rely on the fact that
3331 the type can be compared to `0', so that statements like
3332      if (TEST_P (t) && !TEST_P (y))
3333        x = 1;
3334  and
3335      int i = (TEST_P (t) != 0);
3336  are legal.  Macros that return `int' values now may be changed to
3337 return `tree' values, or other pointers in the future.  Even those that
3338 continue to return `int' may return multiple nonzero codes where
3339 previously they returned only zero and one.  Therefore, you should not
3340 write code like
3341      if (TEST_P (t) == 1)
3342  as this code is not guaranteed to work correctly in the future.
3343
3344  You should not take the address of values returned by the macros or
3345 functions described here.  In particular, no guarantee is given that the
3346 values are lvalues.
3347
3348  In general, the names of macros are all in uppercase, while the names
3349 of functions are entirely in lowercase.  There are rare exceptions to
3350 this rule.  You should assume that any macro or function whose name is
3351 made up entirely of uppercase letters may evaluate its arguments more
3352 than once.  You may assume that a macro or function whose name is made
3353 up entirely of lowercase letters will evaluate its arguments only once.
3354
3355  The `error_mark_node' is a special tree.  Its tree code is
3356 `ERROR_MARK', but since there is only ever one node with that code, the
3357 usual practice is to compare the tree against `error_mark_node'.  (This
3358 test is just a test for pointer equality.)  If an error has occurred
3359 during front-end processing the flag `errorcount' will be set.  If the
3360 front end has encountered code it cannot handle, it will issue a
3361 message to the user and set `sorrycount'.  When these flags are set,
3362 any macro or function which normally returns a tree of a particular
3363 kind may instead return the `error_mark_node'.  Thus, if you intend to
3364 do any processing of erroneous code, you must be prepared to deal with
3365 the `error_mark_node'.
3366
3367  Occasionally, a particular tree slot (like an operand to an expression,
3368 or a particular field in a declaration) will be referred to as
3369 "reserved for the back end".  These slots are used to store RTL when
3370 the tree is converted to RTL for use by the GCC back end.  However, if
3371 that process is not taking place (e.g., if the front end is being hooked
3372 up to an intelligent editor), then those slots may be used by the back
3373 end presently in use.
3374
3375  If you encounter situations that do not match this documentation, such
3376 as tree nodes of types not mentioned here, or macros documented to
3377 return entities of a particular kind that instead return entities of
3378 some different kind, you have found a bug, either in the front end or in
3379 the documentation.  Please report these bugs as you would any other bug.
3380
3381 * Menu:
3382
3383 * Macros and Functions::Macros and functions that can be used with all trees.
3384 * Identifiers::         The names of things.
3385 * Containers::          Lists and vectors.
3386
3387 \1f
3388 File: gccint.info,  Node: Macros and Functions,  Next: Identifiers,  Up: Tree overview
3389
3390 8.2.1 Trees
3391 -----------
3392
3393 This section is not here yet.
3394
3395 \1f
3396 File: gccint.info,  Node: Identifiers,  Next: Containers,  Prev: Macros and Functions,  Up: Tree overview
3397
3398 8.2.2 Identifiers
3399 -----------------
3400
3401 An `IDENTIFIER_NODE' represents a slightly more general concept that
3402 the standard C or C++ concept of identifier.  In particular, an
3403 `IDENTIFIER_NODE' may contain a `$', or other extraordinary characters.
3404
3405  There are never two distinct `IDENTIFIER_NODE's representing the same
3406 identifier.  Therefore, you may use pointer equality to compare
3407 `IDENTIFIER_NODE's, rather than using a routine like `strcmp'.
3408
3409  You can use the following macros to access identifiers:
3410 `IDENTIFIER_POINTER'
3411      The string represented by the identifier, represented as a
3412      `char*'.  This string is always `NUL'-terminated, and contains no
3413      embedded `NUL' characters.
3414
3415 `IDENTIFIER_LENGTH'
3416      The length of the string returned by `IDENTIFIER_POINTER', not
3417      including the trailing `NUL'.  This value of `IDENTIFIER_LENGTH
3418      (x)' is always the same as `strlen (IDENTIFIER_POINTER (x))'.
3419
3420 `IDENTIFIER_OPNAME_P'
3421      This predicate holds if the identifier represents the name of an
3422      overloaded operator.  In this case, you should not depend on the
3423      contents of either the `IDENTIFIER_POINTER' or the
3424      `IDENTIFIER_LENGTH'.
3425
3426 `IDENTIFIER_TYPENAME_P'
3427      This predicate holds if the identifier represents the name of a
3428      user-defined conversion operator.  In this case, the `TREE_TYPE' of
3429      the `IDENTIFIER_NODE' holds the type to which the conversion
3430      operator converts.
3431
3432
3433 \1f
3434 File: gccint.info,  Node: Containers,  Prev: Identifiers,  Up: Tree overview
3435
3436 8.2.3 Containers
3437 ----------------
3438
3439 Two common container data structures can be represented directly with
3440 tree nodes.  A `TREE_LIST' is a singly linked list containing two trees
3441 per node.  These are the `TREE_PURPOSE' and `TREE_VALUE' of each node.
3442 (Often, the `TREE_PURPOSE' contains some kind of tag, or additional
3443 information, while the `TREE_VALUE' contains the majority of the
3444 payload.  In other cases, the `TREE_PURPOSE' is simply `NULL_TREE',
3445 while in still others both the `TREE_PURPOSE' and `TREE_VALUE' are of
3446 equal stature.)  Given one `TREE_LIST' node, the next node is found by
3447 following the `TREE_CHAIN'.  If the `TREE_CHAIN' is `NULL_TREE', then
3448 you have reached the end of the list.
3449
3450  A `TREE_VEC' is a simple vector.  The `TREE_VEC_LENGTH' is an integer
3451 (not a tree) giving the number of nodes in the vector.  The nodes
3452 themselves are accessed using the `TREE_VEC_ELT' macro, which takes two
3453 arguments.  The first is the `TREE_VEC' in question; the second is an
3454 integer indicating which element in the vector is desired.  The
3455 elements are indexed from zero.
3456
3457 \1f
3458 File: gccint.info,  Node: Types,  Next: Scopes,  Prev: Tree overview,  Up: Trees
3459
3460 8.3 Types
3461 =========
3462
3463 All types have corresponding tree nodes.  However, you should not assume
3464 that there is exactly one tree node corresponding to each type.  There
3465 are often several nodes each of which correspond to the same type.
3466
3467  For the most part, different kinds of types have different tree codes.
3468 (For example, pointer types use a `POINTER_TYPE' code while arrays use
3469 an `ARRAY_TYPE' code.)  However, pointers to member functions use the
3470 `RECORD_TYPE' code.  Therefore, when writing a `switch' statement that
3471 depends on the code associated with a particular type, you should take
3472 care to handle pointers to member functions under the `RECORD_TYPE'
3473 case label.
3474
3475  In C++, an array type is not qualified; rather the type of the array
3476 elements is qualified.  This situation is reflected in the intermediate
3477 representation.  The macros described here will always examine the
3478 qualification of the underlying element type when applied to an array
3479 type.  (If the element type is itself an array, then the recursion
3480 continues until a non-array type is found, and the qualification of this
3481 type is examined.)  So, for example, `CP_TYPE_CONST_P' will hold of the
3482 type `const int ()[7]', denoting an array of seven `int's.
3483
3484  The following functions and macros deal with cv-qualification of types:
3485 `CP_TYPE_QUALS'
3486      This macro returns the set of type qualifiers applied to this type.
3487      This value is `TYPE_UNQUALIFIED' if no qualifiers have been
3488      applied.  The `TYPE_QUAL_CONST' bit is set if the type is
3489      `const'-qualified.  The `TYPE_QUAL_VOLATILE' bit is set if the
3490      type is `volatile'-qualified.  The `TYPE_QUAL_RESTRICT' bit is set
3491      if the type is `restrict'-qualified.
3492
3493 `CP_TYPE_CONST_P'
3494      This macro holds if the type is `const'-qualified.
3495
3496 `CP_TYPE_VOLATILE_P'
3497      This macro holds if the type is `volatile'-qualified.
3498
3499 `CP_TYPE_RESTRICT_P'
3500      This macro holds if the type is `restrict'-qualified.
3501
3502 `CP_TYPE_CONST_NON_VOLATILE_P'
3503      This predicate holds for a type that is `const'-qualified, but
3504      _not_ `volatile'-qualified; other cv-qualifiers are ignored as
3505      well: only the `const'-ness is tested.
3506
3507 `TYPE_MAIN_VARIANT'
3508      This macro returns the unqualified version of a type.  It may be
3509      applied to an unqualified type, but it is not always the identity
3510      function in that case.
3511
3512  A few other macros and functions are usable with all types:
3513 `TYPE_SIZE'
3514      The number of bits required to represent the type, represented as
3515      an `INTEGER_CST'.  For an incomplete type, `TYPE_SIZE' will be
3516      `NULL_TREE'.
3517
3518 `TYPE_ALIGN'
3519      The alignment of the type, in bits, represented as an `int'.
3520
3521 `TYPE_NAME'
3522      This macro returns a declaration (in the form of a `TYPE_DECL') for
3523      the type.  (Note this macro does _not_ return a `IDENTIFIER_NODE',
3524      as you might expect, given its name!)  You can look at the
3525      `DECL_NAME' of the `TYPE_DECL' to obtain the actual name of the
3526      type.  The `TYPE_NAME' will be `NULL_TREE' for a type that is not
3527      a built-in type, the result of a typedef, or a named class type.
3528
3529 `CP_INTEGRAL_TYPE'
3530      This predicate holds if the type is an integral type.  Notice that
3531      in C++, enumerations are _not_ integral types.
3532
3533 `ARITHMETIC_TYPE_P'
3534      This predicate holds if the type is an integral type (in the C++
3535      sense) or a floating point type.
3536
3537 `CLASS_TYPE_P'
3538      This predicate holds for a class-type.
3539
3540 `TYPE_BUILT_IN'
3541      This predicate holds for a built-in type.
3542
3543 `TYPE_PTRMEM_P'
3544      This predicate holds if the type is a pointer to data member.
3545
3546 `TYPE_PTR_P'
3547      This predicate holds if the type is a pointer type, and the
3548      pointee is not a data member.
3549
3550 `TYPE_PTRFN_P'
3551      This predicate holds for a pointer to function type.
3552
3553 `TYPE_PTROB_P'
3554      This predicate holds for a pointer to object type.  Note however
3555      that it does not hold for the generic pointer to object type `void
3556      *'.  You may use `TYPE_PTROBV_P' to test for a pointer to object
3557      type as well as `void *'.
3558
3559 `same_type_p'
3560      This predicate takes two types as input, and holds if they are the
3561      same type.  For example, if one type is a `typedef' for the other,
3562      or both are `typedef's for the same type.  This predicate also
3563      holds if the two trees given as input are simply copies of one
3564      another; i.e., there is no difference between them at the source
3565      level, but, for whatever reason, a duplicate has been made in the
3566      representation.  You should never use `==' (pointer equality) to
3567      compare types; always use `same_type_p' instead.
3568
3569  Detailed below are the various kinds of types, and the macros that can
3570 be used to access them.  Although other kinds of types are used
3571 elsewhere in G++, the types described here are the only ones that you
3572 will encounter while examining the intermediate representation.
3573
3574 `VOID_TYPE'
3575      Used to represent the `void' type.
3576
3577 `INTEGER_TYPE'
3578      Used to represent the various integral types, including `char',
3579      `short', `int', `long', and `long long'.  This code is not used
3580      for enumeration types, nor for the `bool' type.  Note that GCC's
3581      `CHAR_TYPE' node is _not_ used to represent `char'.  The
3582      `TYPE_PRECISION' is the number of bits used in the representation,
3583      represented as an `unsigned int'.  (Note that in the general case
3584      this is not the same value as `TYPE_SIZE'; suppose that there were
3585      a 24-bit integer type, but that alignment requirements for the ABI
3586      required 32-bit alignment.  Then, `TYPE_SIZE' would be an
3587      `INTEGER_CST' for 32, while `TYPE_PRECISION' would be 24.)  The
3588      integer type is unsigned if `TYPE_UNSIGNED' holds; otherwise, it
3589      is signed.
3590
3591      The `TYPE_MIN_VALUE' is an `INTEGER_CST' for the smallest integer
3592      that may be represented by this type.  Similarly, the
3593      `TYPE_MAX_VALUE' is an `INTEGER_CST' for the largest integer that
3594      may be represented by this type.
3595
3596 `REAL_TYPE'
3597      Used to represent the `float', `double', and `long double' types.
3598      The number of bits in the floating-point representation is given
3599      by `TYPE_PRECISION', as in the `INTEGER_TYPE' case.
3600
3601 `COMPLEX_TYPE'
3602      Used to represent GCC built-in `__complex__' data types.  The
3603      `TREE_TYPE' is the type of the real and imaginary parts.
3604
3605 `ENUMERAL_TYPE'
3606      Used to represent an enumeration type.  The `TYPE_PRECISION' gives
3607      (as an `int'), the number of bits used to represent the type.  If
3608      there are no negative enumeration constants, `TYPE_UNSIGNED' will
3609      hold.  The minimum and maximum enumeration constants may be
3610      obtained with `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE', respectively;
3611      each of these macros returns an `INTEGER_CST'.
3612
3613      The actual enumeration constants themselves may be obtained by
3614      looking at the `TYPE_VALUES'.  This macro will return a
3615      `TREE_LIST', containing the constants.  The `TREE_PURPOSE' of each
3616      node will be an `IDENTIFIER_NODE' giving the name of the constant;
3617      the `TREE_VALUE' will be an `INTEGER_CST' giving the value
3618      assigned to that constant.  These constants will appear in the
3619      order in which they were declared.  The `TREE_TYPE' of each of
3620      these constants will be the type of enumeration type itself.
3621
3622 `BOOLEAN_TYPE'
3623      Used to represent the `bool' type.
3624
3625 `POINTER_TYPE'
3626      Used to represent pointer types, and pointer to data member types.
3627      The `TREE_TYPE' gives the type to which this type points.  If the
3628      type is a pointer to data member type, then `TYPE_PTRMEM_P' will
3629      hold.  For a pointer to data member type of the form `T X::*',
3630      `TYPE_PTRMEM_CLASS_TYPE' will be the type `X', while
3631      `TYPE_PTRMEM_POINTED_TO_TYPE' will be the type `T'.
3632
3633 `REFERENCE_TYPE'
3634      Used to represent reference types.  The `TREE_TYPE' gives the type
3635      to which this type refers.
3636
3637 `FUNCTION_TYPE'
3638      Used to represent the type of non-member functions and of static
3639      member functions.  The `TREE_TYPE' gives the return type of the
3640      function.  The `TYPE_ARG_TYPES' are a `TREE_LIST' of the argument
3641      types.  The `TREE_VALUE' of each node in this list is the type of
3642      the corresponding argument; the `TREE_PURPOSE' is an expression
3643      for the default argument value, if any.  If the last node in the
3644      list is `void_list_node' (a `TREE_LIST' node whose `TREE_VALUE' is
3645      the `void_type_node'), then functions of this type do not take
3646      variable arguments.  Otherwise, they do take a variable number of
3647      arguments.
3648
3649      Note that in C (but not in C++) a function declared like `void f()'
3650      is an unprototyped function taking a variable number of arguments;
3651      the `TYPE_ARG_TYPES' of such a function will be `NULL'.
3652
3653 `METHOD_TYPE'
3654      Used to represent the type of a non-static member function.  Like a
3655      `FUNCTION_TYPE', the return type is given by the `TREE_TYPE'.  The
3656      type of `*this', i.e., the class of which functions of this type
3657      are a member, is given by the `TYPE_METHOD_BASETYPE'.  The
3658      `TYPE_ARG_TYPES' is the parameter list, as for a `FUNCTION_TYPE',
3659      and includes the `this' argument.
3660
3661 `ARRAY_TYPE'
3662      Used to represent array types.  The `TREE_TYPE' gives the type of
3663      the elements in the array.  If the array-bound is present in the
3664      type, the `TYPE_DOMAIN' is an `INTEGER_TYPE' whose
3665      `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE' will be the lower and upper
3666      bounds of the array, respectively.  The `TYPE_MIN_VALUE' will
3667      always be an `INTEGER_CST' for zero, while the `TYPE_MAX_VALUE'
3668      will be one less than the number of elements in the array, i.e.,
3669      the highest value which may be used to index an element in the
3670      array.
3671
3672 `RECORD_TYPE'
3673      Used to represent `struct' and `class' types, as well as pointers
3674      to member functions and similar constructs in other languages.
3675      `TYPE_FIELDS' contains the items contained in this type, each of
3676      which can be a `FIELD_DECL', `VAR_DECL', `CONST_DECL', or
3677      `TYPE_DECL'.  You may not make any assumptions about the ordering
3678      of the fields in the type or whether one or more of them overlap.
3679      If `TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
3680      type.  In that case, the `TYPE_PTRMEMFUNC_FN_TYPE' is a
3681      `POINTER_TYPE' pointing to a `METHOD_TYPE'.  The `METHOD_TYPE' is
3682      the type of a function pointed to by the pointer-to-member
3683      function.  If `TYPE_PTRMEMFUNC_P' does not hold, this type is a
3684      class type.  For more information, see *note Classes::.
3685
3686 `UNION_TYPE'
3687      Used to represent `union' types.  Similar to `RECORD_TYPE' except
3688      that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position
3689      zero.
3690
3691 `QUAL_UNION_TYPE'
3692      Used to represent part of a variant record in Ada.  Similar to
3693      `UNION_TYPE' except that each `FIELD_DECL' has a `DECL_QUALIFIER'
3694      field, which contains a boolean expression that indicates whether
3695      the field is present in the object.  The type will only have one
3696      field, so each field's `DECL_QUALIFIER' is only evaluated if none
3697      of the expressions in the previous fields in `TYPE_FIELDS' are
3698      nonzero.  Normally these expressions will reference a field in the
3699      outer object using a `PLACEHOLDER_EXPR'.
3700
3701 `UNKNOWN_TYPE'
3702      This node is used to represent a type the knowledge of which is
3703      insufficient for a sound processing.
3704
3705 `OFFSET_TYPE'
3706      This node is used to represent a pointer-to-data member.  For a
3707      data member `X::m' the `TYPE_OFFSET_BASETYPE' is `X' and the
3708      `TREE_TYPE' is the type of `m'.
3709
3710 `TYPENAME_TYPE'
3711      Used to represent a construct of the form `typename T::A'.  The
3712      `TYPE_CONTEXT' is `T'; the `TYPE_NAME' is an `IDENTIFIER_NODE' for
3713      `A'.  If the type is specified via a template-id, then
3714      `TYPENAME_TYPE_FULLNAME' yields a `TEMPLATE_ID_EXPR'.  The
3715      `TREE_TYPE' is non-`NULL' if the node is implicitly generated in
3716      support for the implicit typename extension; in which case the
3717      `TREE_TYPE' is a type node for the base-class.
3718
3719 `TYPEOF_TYPE'
3720      Used to represent the `__typeof__' extension.  The `TYPE_FIELDS'
3721      is the expression the type of which is being represented.
3722
3723  There are variables whose values represent some of the basic types.
3724 These include:
3725 `void_type_node'
3726      A node for `void'.
3727
3728 `integer_type_node'
3729      A node for `int'.
3730
3731 `unsigned_type_node.'
3732      A node for `unsigned int'.
3733
3734 `char_type_node.'
3735      A node for `char'.
3736  It may sometimes be useful to compare one of these variables with a
3737 type in hand, using `same_type_p'.
3738
3739 \1f
3740 File: gccint.info,  Node: Scopes,  Next: Functions,  Prev: Types,  Up: Trees
3741
3742 8.4 Scopes
3743 ==========
3744
3745 The root of the entire intermediate representation is the variable
3746 `global_namespace'.  This is the namespace specified with `::' in C++
3747 source code.  All other namespaces, types, variables, functions, and so
3748 forth can be found starting with this namespace.
3749
3750  Besides namespaces, the other high-level scoping construct in C++ is
3751 the class.  (Throughout this manual the term "class" is used to mean the
3752 types referred to in the ANSI/ISO C++ Standard as classes; these include
3753 types defined with the `class', `struct', and `union' keywords.)
3754
3755 * Menu:
3756
3757 * Namespaces::          Member functions, types, etc.
3758 * Classes::             Members, bases, friends, etc.
3759
3760 \1f
3761 File: gccint.info,  Node: Namespaces,  Next: Classes,  Up: Scopes
3762
3763 8.4.1 Namespaces
3764 ----------------
3765
3766 A namespace is represented by a `NAMESPACE_DECL' node.
3767
3768  However, except for the fact that it is distinguished as the root of
3769 the representation, the global namespace is no different from any other
3770 namespace.  Thus, in what follows, we describe namespaces generally,
3771 rather than the global namespace in particular.
3772
3773  The following macros and functions can be used on a `NAMESPACE_DECL':
3774
3775 `DECL_NAME'
3776      This macro is used to obtain the `IDENTIFIER_NODE' corresponding to
3777      the unqualified name of the name of the namespace (*note
3778      Identifiers::).  The name of the global namespace is `::', even
3779      though in C++ the global namespace is unnamed.  However, you
3780      should use comparison with `global_namespace', rather than
3781      `DECL_NAME' to determine whether or not a namespace is the global
3782      one.  An unnamed namespace will have a `DECL_NAME' equal to
3783      `anonymous_namespace_name'.  Within a single translation unit, all
3784      unnamed namespaces will have the same name.
3785
3786 `DECL_CONTEXT'
3787      This macro returns the enclosing namespace.  The `DECL_CONTEXT' for
3788      the `global_namespace' is `NULL_TREE'.
3789
3790 `DECL_NAMESPACE_ALIAS'
3791      If this declaration is for a namespace alias, then
3792      `DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
3793      alias.
3794
3795      Do not attempt to use `cp_namespace_decls' for a namespace which is
3796      an alias.  Instead, follow `DECL_NAMESPACE_ALIAS' links until you
3797      reach an ordinary, non-alias, namespace, and call
3798      `cp_namespace_decls' there.
3799
3800 `DECL_NAMESPACE_STD_P'
3801      This predicate holds if the namespace is the special `::std'
3802      namespace.
3803
3804 `cp_namespace_decls'
3805      This function will return the declarations contained in the
3806      namespace, including types, overloaded functions, other
3807      namespaces, and so forth.  If there are no declarations, this
3808      function will return `NULL_TREE'.  The declarations are connected
3809      through their `TREE_CHAIN' fields.
3810
3811      Although most entries on this list will be declarations,
3812      `TREE_LIST' nodes may also appear.  In this case, the `TREE_VALUE'
3813      will be an `OVERLOAD'.  The value of the `TREE_PURPOSE' is
3814      unspecified; back ends should ignore this value.  As with the
3815      other kinds of declarations returned by `cp_namespace_decls', the
3816      `TREE_CHAIN' will point to the next declaration in this list.
3817
3818      For more information on the kinds of declarations that can occur
3819      on this list, *Note Declarations::.  Some declarations will not
3820      appear on this list.  In particular, no `FIELD_DECL',
3821      `LABEL_DECL', or `PARM_DECL' nodes will appear here.
3822
3823      This function cannot be used with namespaces that have
3824      `DECL_NAMESPACE_ALIAS' set.
3825
3826
3827 \1f
3828 File: gccint.info,  Node: Classes,  Prev: Namespaces,  Up: Scopes
3829
3830 8.4.2 Classes
3831 -------------
3832
3833 A class type is represented by either a `RECORD_TYPE' or a
3834 `UNION_TYPE'.  A class declared with the `union' tag is represented by
3835 a `UNION_TYPE', while classes declared with either the `struct' or the
3836 `class' tag are represented by `RECORD_TYPE's.  You can use the
3837 `CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
3838 type is a `class' as opposed to a `struct'.  This macro will be true
3839 only for classes declared with the `class' tag.
3840
3841  Almost all non-function members are available on the `TYPE_FIELDS'
3842 list.  Given one member, the next can be found by following the
3843 `TREE_CHAIN'.  You should not depend in any way on the order in which
3844 fields appear on this list.  All nodes on this list will be `DECL'
3845 nodes.  A `FIELD_DECL' is used to represent a non-static data member, a
3846 `VAR_DECL' is used to represent a static data member, and a `TYPE_DECL'
3847 is used to represent a type.  Note that the `CONST_DECL' for an
3848 enumeration constant will appear on this list, if the enumeration type
3849 was declared in the class.  (Of course, the `TYPE_DECL' for the
3850 enumeration type will appear here as well.)  There are no entries for
3851 base classes on this list.  In particular, there is no `FIELD_DECL' for
3852 the "base-class portion" of an object.
3853
3854  The `TYPE_VFIELD' is a compiler-generated field used to point to
3855 virtual function tables.  It may or may not appear on the `TYPE_FIELDS'
3856 list.  However, back ends should handle the `TYPE_VFIELD' just like all
3857 the entries on the `TYPE_FIELDS' list.
3858
3859  The function members are available on the `TYPE_METHODS' list.  Again,
3860 subsequent members are found by following the `TREE_CHAIN' field.  If a
3861 function is overloaded, each of the overloaded functions appears; no
3862 `OVERLOAD' nodes appear on the `TYPE_METHODS' list.  Implicitly
3863 declared functions (including default constructors, copy constructors,
3864 assignment operators, and destructors) will appear on this list as well.
3865
3866  Every class has an associated "binfo", which can be obtained with
3867 `TYPE_BINFO'.  Binfos are used to represent base-classes.  The binfo
3868 given by `TYPE_BINFO' is the degenerate case, whereby every class is
3869 considered to be its own base-class.  The base binfos for a particular
3870 binfo are held in a vector, whose length is obtained with
3871 `BINFO_N_BASE_BINFOS'.  The base binfos themselves are obtained with
3872 `BINFO_BASE_BINFO' and `BINFO_BASE_ITERATE'.  To add a new binfo, use
3873 `BINFO_BASE_APPEND'.  The vector of base binfos can be obtained with
3874 `BINFO_BASE_BINFOS', but normally you do not need to use that.  The
3875 class type associated with a binfo is given by `BINFO_TYPE'.  It is not
3876 always the case that `BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
3877 and qualified types.  Neither is it the case that `TYPE_BINFO
3878 (BINFO_TYPE (y))' is the same binfo as `y'.  The reason is that if `y'
3879 is a binfo representing a base-class `B' of a derived class `D', then
3880 `BINFO_TYPE (y)' will be `B', and `TYPE_BINFO (BINFO_TYPE (y))' will be
3881 `B' as its own base-class, rather than as a base-class of `D'.
3882
3883  The access to a base type can be found with `BINFO_BASE_ACCESS'.  This
3884 will produce `access_public_node', `access_private_node' or
3885 `access_protected_node'.  If bases are always public,
3886 `BINFO_BASE_ACCESSES' may be `NULL'.
3887
3888  `BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
3889 virtually or not.  The other flags, `BINFO_MARKED_P' and `BINFO_FLAG_1'
3890 to `BINFO_FLAG_6' can be used for language specific use.
3891
3892  The following macros can be used on a tree node representing a
3893 class-type.
3894
3895 `LOCAL_CLASS_P'
3896      This predicate holds if the class is local class _i.e._ declared
3897      inside a function body.
3898
3899 `TYPE_POLYMORPHIC_P'
3900      This predicate holds if the class has at least one virtual function
3901      (declared or inherited).
3902
3903 `TYPE_HAS_DEFAULT_CONSTRUCTOR'
3904      This predicate holds whenever its argument represents a class-type
3905      with default constructor.
3906
3907 `CLASSTYPE_HAS_MUTABLE'
3908 `TYPE_HAS_MUTABLE_P'
3909      These predicates hold for a class-type having a mutable data
3910      member.
3911
3912 `CLASSTYPE_NON_POD_P'
3913      This predicate holds only for class-types that are not PODs.
3914
3915 `TYPE_HAS_NEW_OPERATOR'
3916      This predicate holds for a class-type that defines `operator new'.
3917
3918 `TYPE_HAS_ARRAY_NEW_OPERATOR'
3919      This predicate holds for a class-type for which `operator new[]'
3920      is defined.
3921
3922 `TYPE_OVERLOADS_CALL_EXPR'
3923      This predicate holds for class-type for which the function call
3924      `operator()' is overloaded.
3925
3926 `TYPE_OVERLOADS_ARRAY_REF'
3927      This predicate holds for a class-type that overloads `operator[]'
3928
3929 `TYPE_OVERLOADS_ARROW'
3930      This predicate holds for a class-type for which `operator->' is
3931      overloaded.
3932
3933
3934 \1f
3935 File: gccint.info,  Node: Declarations,  Next: Attributes,  Prev: Functions,  Up: Trees
3936
3937 8.5 Declarations
3938 ================
3939
3940 This section covers the various kinds of declarations that appear in the
3941 internal representation, except for declarations of functions
3942 (represented by `FUNCTION_DECL' nodes), which are described in *Note
3943 Functions::.
3944
3945  Some macros can be used with any kind of declaration.  These include:
3946 `DECL_NAME'
3947      This macro returns an `IDENTIFIER_NODE' giving the name of the
3948      entity.
3949
3950 `TREE_TYPE'
3951      This macro returns the type of the entity declared.
3952
3953 `TREE_FILENAME'
3954      This macro returns the name of the file in which the entity was
3955      declared, as a `char*'.  For an entity declared implicitly by the
3956      compiler (like `__builtin_memcpy'), this will be the string
3957      `"<internal>"'.
3958
3959 `TREE_LINENO'
3960      This macro returns the line number at which the entity was
3961      declared, as an `int'.
3962
3963 `DECL_ARTIFICIAL'
3964      This predicate holds if the declaration was implicitly generated
3965      by the compiler.  For example, this predicate will hold of an
3966      implicitly declared member function, or of the `TYPE_DECL'
3967      implicitly generated for a class type.  Recall that in C++ code
3968      like:
3969           struct S {};
3970      is roughly equivalent to C code like:
3971           struct S {};
3972           typedef struct S S;
3973      The implicitly generated `typedef' declaration is represented by a
3974      `TYPE_DECL' for which `DECL_ARTIFICIAL' holds.
3975
3976 `DECL_NAMESPACE_SCOPE_P'
3977      This predicate holds if the entity was declared at a namespace
3978      scope.
3979
3980 `DECL_CLASS_SCOPE_P'
3981      This predicate holds if the entity was declared at a class scope.
3982
3983 `DECL_FUNCTION_SCOPE_P'
3984      This predicate holds if the entity was declared inside a function
3985      body.
3986
3987
3988  The various kinds of declarations include:
3989 `LABEL_DECL'
3990      These nodes are used to represent labels in function bodies.  For
3991      more information, see *Note Functions::.  These nodes only appear
3992      in block scopes.
3993
3994 `CONST_DECL'
3995      These nodes are used to represent enumeration constants.  The
3996      value of the constant is given by `DECL_INITIAL' which will be an
3997      `INTEGER_CST' with the same type as the `TREE_TYPE' of the
3998      `CONST_DECL', i.e., an `ENUMERAL_TYPE'.
3999
4000 `RESULT_DECL'
4001      These nodes represent the value returned by a function.  When a
4002      value is assigned to a `RESULT_DECL', that indicates that the
4003      value should be returned, via bitwise copy, by the function.  You
4004      can use `DECL_SIZE' and `DECL_ALIGN' on a `RESULT_DECL', just as
4005      with a `VAR_DECL'.
4006
4007 `TYPE_DECL'
4008      These nodes represent `typedef' declarations.  The `TREE_TYPE' is
4009      the type declared to have the name given by `DECL_NAME'.  In some
4010      cases, there is no associated name.
4011
4012 `VAR_DECL'
4013      These nodes represent variables with namespace or block scope, as
4014      well as static data members.  The `DECL_SIZE' and `DECL_ALIGN' are
4015      analogous to `TYPE_SIZE' and `TYPE_ALIGN'.  For a declaration, you
4016      should always use the `DECL_SIZE' and `DECL_ALIGN' rather than the
4017      `TYPE_SIZE' and `TYPE_ALIGN' given by the `TREE_TYPE', since
4018      special attributes may have been applied to the variable to give
4019      it a particular size and alignment.  You may use the predicates
4020      `DECL_THIS_STATIC' or `DECL_THIS_EXTERN' to test whether the
4021      storage class specifiers `static' or `extern' were used to declare
4022      a variable.
4023
4024      If this variable is initialized (but does not require a
4025      constructor), the `DECL_INITIAL' will be an expression for the
4026      initializer.  The initializer should be evaluated, and a bitwise
4027      copy into the variable performed.  If the `DECL_INITIAL' is the
4028      `error_mark_node', there is an initializer, but it is given by an
4029      explicit statement later in the code; no bitwise copy is required.
4030
4031      GCC provides an extension that allows either automatic variables,
4032      or global variables, to be placed in particular registers.  This
4033      extension is being used for a particular `VAR_DECL' if
4034      `DECL_REGISTER' holds for the `VAR_DECL', and if
4035      `DECL_ASSEMBLER_NAME' is not equal to `DECL_NAME'.  In that case,
4036      `DECL_ASSEMBLER_NAME' is the name of the register into which the
4037      variable will be placed.
4038
4039 `PARM_DECL'
4040      Used to represent a parameter to a function.  Treat these nodes
4041      similarly to `VAR_DECL' nodes.  These nodes only appear in the
4042      `DECL_ARGUMENTS' for a `FUNCTION_DECL'.
4043
4044      The `DECL_ARG_TYPE' for a `PARM_DECL' is the type that will
4045      actually be used when a value is passed to this function.  It may
4046      be a wider type than the `TREE_TYPE' of the parameter; for
4047      example, the ordinary type might be `short' while the
4048      `DECL_ARG_TYPE' is `int'.
4049
4050 `FIELD_DECL'
4051      These nodes represent non-static data members.  The `DECL_SIZE' and
4052      `DECL_ALIGN' behave as for `VAR_DECL' nodes.  The
4053      `DECL_FIELD_BITPOS' gives the first bit used for this field, as an
4054      `INTEGER_CST'.  These values are indexed from zero, where zero
4055      indicates the first bit in the object.
4056
4057      If `DECL_C_BIT_FIELD' holds, this field is a bit-field.
4058
4059 `NAMESPACE_DECL'
4060      *Note Namespaces::.
4061
4062 `TEMPLATE_DECL'
4063      These nodes are used to represent class, function, and variable
4064      (static data member) templates.  The
4065      `DECL_TEMPLATE_SPECIALIZATIONS' are a `TREE_LIST'.  The
4066      `TREE_VALUE' of each node in the list is a `TEMPLATE_DECL's or
4067      `FUNCTION_DECL's representing specializations (including
4068      instantiations) of this template.  Back ends can safely ignore
4069      `TEMPLATE_DECL's, but should examine `FUNCTION_DECL' nodes on the
4070      specializations list just as they would ordinary `FUNCTION_DECL'
4071      nodes.
4072
4073      For a class template, the `DECL_TEMPLATE_INSTANTIATIONS' list
4074      contains the instantiations.  The `TREE_VALUE' of each node is an
4075      instantiation of the class.  The `DECL_TEMPLATE_SPECIALIZATIONS'
4076      contains partial specializations of the class.
4077
4078 `USING_DECL'
4079      Back ends can safely ignore these nodes.
4080
4081
4082 \1f
4083 File: gccint.info,  Node: Functions,  Next: Declarations,  Prev: Scopes,  Up: Trees
4084
4085 8.6 Functions
4086 =============
4087
4088 A function is represented by a `FUNCTION_DECL' node.  A set of
4089 overloaded functions is sometimes represented by a `OVERLOAD' node.
4090
4091  An `OVERLOAD' node is not a declaration, so none of the `DECL_' macros
4092 should be used on an `OVERLOAD'.  An `OVERLOAD' node is similar to a
4093 `TREE_LIST'.  Use `OVL_CURRENT' to get the function associated with an
4094 `OVERLOAD' node; use `OVL_NEXT' to get the next `OVERLOAD' node in the
4095 list of overloaded functions.  The macros `OVL_CURRENT' and `OVL_NEXT'
4096 are actually polymorphic; you can use them to work with `FUNCTION_DECL'
4097 nodes as well as with overloads.  In the case of a `FUNCTION_DECL',
4098 `OVL_CURRENT' will always return the function itself, and `OVL_NEXT'
4099 will always be `NULL_TREE'.
4100
4101  To determine the scope of a function, you can use the `DECL_CONTEXT'
4102 macro.  This macro will return the class (either a `RECORD_TYPE' or a
4103 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
4104 is a member.  For a virtual function, this macro returns the class in
4105 which the function was actually defined, not the base class in which
4106 the virtual declaration occurred.
4107
4108  If a friend function is defined in a class scope, the
4109 `DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
4110 it was defined.  For example, in
4111      class C { friend void f() {} };
4112  the `DECL_CONTEXT' for `f' will be the `global_namespace', but the
4113 `DECL_FRIEND_CONTEXT' will be the `RECORD_TYPE' for `C'.
4114
4115  In C, the `DECL_CONTEXT' for a function maybe another function.  This
4116 representation indicates that the GNU nested function extension is in
4117 use.  For details on the semantics of nested functions, see the GCC
4118 Manual.  The nested function can refer to local variables in its
4119 containing function.  Such references are not explicitly marked in the
4120 tree structure; back ends must look at the `DECL_CONTEXT' for the
4121 referenced `VAR_DECL'.  If the `DECL_CONTEXT' for the referenced
4122 `VAR_DECL' is not the same as the function currently being processed,
4123 and neither `DECL_EXTERNAL' nor `DECL_STATIC' hold, then the reference
4124 is to a local variable in a containing function, and the back end must
4125 take appropriate action.
4126
4127 * Menu:
4128
4129 * Function Basics::     Function names, linkage, and so forth.
4130 * Function Bodies::     The statements that make up a function body.
4131
4132 \1f
4133 File: gccint.info,  Node: Function Basics,  Next: Function Bodies,  Up: Functions
4134
4135 8.6.1 Function Basics
4136 ---------------------
4137
4138 The following macros and functions can be used on a `FUNCTION_DECL':
4139 `DECL_MAIN_P'
4140      This predicate holds for a function that is the program entry point
4141      `::code'.
4142
4143 `DECL_NAME'
4144      This macro returns the unqualified name of the function, as an
4145      `IDENTIFIER_NODE'.  For an instantiation of a function template,
4146      the `DECL_NAME' is the unqualified name of the template, not
4147      something like `f<int>'.  The value of `DECL_NAME' is undefined
4148      when used on a constructor, destructor, overloaded operator, or
4149      type-conversion operator, or any function that is implicitly
4150      generated by the compiler.  See below for macros that can be used
4151      to distinguish these cases.
4152
4153 `DECL_ASSEMBLER_NAME'
4154      This macro returns the mangled name of the function, also an
4155      `IDENTIFIER_NODE'.  This name does not contain leading underscores
4156      on systems that prefix all identifiers with underscores.  The
4157      mangled name is computed in the same way on all platforms; if
4158      special processing is required to deal with the object file format
4159      used on a particular platform, it is the responsibility of the
4160      back end to perform those modifications.  (Of course, the back end
4161      should not modify `DECL_ASSEMBLER_NAME' itself.)
4162
4163      Using `DECL_ASSEMBLER_NAME' will cause additional memory to be
4164      allocated (for the mangled name of the entity) so it should be used
4165      only when emitting assembly code.  It should not be used within the
4166      optimizers to determine whether or not two declarations are the
4167      same, even though some of the existing optimizers do use it in
4168      that way.  These uses will be removed over time.
4169
4170 `DECL_EXTERNAL'
4171      This predicate holds if the function is undefined.
4172
4173 `TREE_PUBLIC'
4174      This predicate holds if the function has external linkage.
4175
4176 `DECL_LOCAL_FUNCTION_P'
4177      This predicate holds if the function was declared at block scope,
4178      even though it has a global scope.
4179
4180 `DECL_ANTICIPATED'
4181      This predicate holds if the function is a built-in function but its
4182      prototype is not yet explicitly declared.
4183
4184 `DECL_EXTERN_C_FUNCTION_P'
4185      This predicate holds if the function is declared as an ``extern
4186      "C"'' function.
4187
4188 `DECL_LINKONCE_P'
4189      This macro holds if multiple copies of this function may be
4190      emitted in various translation units.  It is the responsibility of
4191      the linker to merge the various copies.  Template instantiations
4192      are the most common example of functions for which
4193      `DECL_LINKONCE_P' holds; G++ instantiates needed templates in all
4194      translation units which require them, and then relies on the
4195      linker to remove duplicate instantiations.
4196
4197      FIXME: This macro is not yet implemented.
4198
4199 `DECL_FUNCTION_MEMBER_P'
4200      This macro holds if the function is a member of a class, rather
4201      than a member of a namespace.
4202
4203 `DECL_STATIC_FUNCTION_P'
4204      This predicate holds if the function a static member function.
4205
4206 `DECL_NONSTATIC_MEMBER_FUNCTION_P'
4207      This macro holds for a non-static member function.
4208
4209 `DECL_CONST_MEMFUNC_P'
4210      This predicate holds for a `const'-member function.
4211
4212 `DECL_VOLATILE_MEMFUNC_P'
4213      This predicate holds for a `volatile'-member function.
4214
4215 `DECL_CONSTRUCTOR_P'
4216      This macro holds if the function is a constructor.
4217
4218 `DECL_NONCONVERTING_P'
4219      This predicate holds if the constructor is a non-converting
4220      constructor.
4221
4222 `DECL_COMPLETE_CONSTRUCTOR_P'
4223      This predicate holds for a function which is a constructor for an
4224      object of a complete type.
4225
4226 `DECL_BASE_CONSTRUCTOR_P'
4227      This predicate holds for a function which is a constructor for a
4228      base class sub-object.
4229
4230 `DECL_COPY_CONSTRUCTOR_P'
4231      This predicate holds for a function which is a copy-constructor.
4232
4233 `DECL_DESTRUCTOR_P'
4234      This macro holds if the function is a destructor.
4235
4236 `DECL_COMPLETE_DESTRUCTOR_P'
4237      This predicate holds if the function is the destructor for an
4238      object a complete type.
4239
4240 `DECL_OVERLOADED_OPERATOR_P'
4241      This macro holds if the function is an overloaded operator.
4242
4243 `DECL_CONV_FN_P'
4244      This macro holds if the function is a type-conversion operator.
4245
4246 `DECL_GLOBAL_CTOR_P'
4247      This predicate holds if the function is a file-scope initialization
4248      function.
4249
4250 `DECL_GLOBAL_DTOR_P'
4251      This predicate holds if the function is a file-scope finalization
4252      function.
4253
4254 `DECL_THUNK_P'
4255      This predicate holds if the function is a thunk.
4256
4257      These functions represent stub code that adjusts the `this' pointer
4258      and then jumps to another function.  When the jumped-to function
4259      returns, control is transferred directly to the caller, without
4260      returning to the thunk.  The first parameter to the thunk is
4261      always the `this' pointer; the thunk should add `THUNK_DELTA' to
4262      this value.  (The `THUNK_DELTA' is an `int', not an `INTEGER_CST'.)
4263
4264      Then, if `THUNK_VCALL_OFFSET' (an `INTEGER_CST') is nonzero the
4265      adjusted `this' pointer must be adjusted again.  The complete
4266      calculation is given by the following pseudo-code:
4267
4268           this += THUNK_DELTA
4269           if (THUNK_VCALL_OFFSET)
4270             this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
4271
4272      Finally, the thunk should jump to the location given by
4273      `DECL_INITIAL'; this will always be an expression for the address
4274      of a function.
4275
4276 `DECL_NON_THUNK_FUNCTION_P'
4277      This predicate holds if the function is _not_ a thunk function.
4278
4279 `GLOBAL_INIT_PRIORITY'
4280      If either `DECL_GLOBAL_CTOR_P' or `DECL_GLOBAL_DTOR_P' holds, then
4281      this gives the initialization priority for the function.  The
4282      linker will arrange that all functions for which
4283      `DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
4284      before `main' is called.  When the program exits, all functions for
4285      which `DECL_GLOBAL_DTOR_P' holds are run in the reverse order.
4286
4287 `DECL_ARTIFICIAL'
4288      This macro holds if the function was implicitly generated by the
4289      compiler, rather than explicitly declared.  In addition to
4290      implicitly generated class member functions, this macro holds for
4291      the special functions created to implement static initialization
4292      and destruction, to compute run-time type information, and so
4293      forth.
4294
4295 `DECL_ARGUMENTS'
4296      This macro returns the `PARM_DECL' for the first argument to the
4297      function.  Subsequent `PARM_DECL' nodes can be obtained by
4298      following the `TREE_CHAIN' links.
4299
4300 `DECL_RESULT'
4301      This macro returns the `RESULT_DECL' for the function.
4302
4303 `TREE_TYPE'
4304      This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the
4305      function.
4306
4307 `TYPE_RAISES_EXCEPTIONS'
4308      This macro returns the list of exceptions that a (member-)function
4309      can raise.  The returned list, if non `NULL', is comprised of nodes
4310      whose `TREE_VALUE' represents a type.
4311
4312 `TYPE_NOTHROW_P'
4313      This predicate holds when the exception-specification of its
4314      arguments if of the form ``()''.
4315
4316 `DECL_ARRAY_DELETE_OPERATOR_P'
4317      This predicate holds if the function an overloaded `operator
4318      delete[]'.
4319
4320
4321 \1f
4322 File: gccint.info,  Node: Function Bodies,  Prev: Function Basics,  Up: Functions
4323
4324 8.6.2 Function Bodies
4325 ---------------------
4326
4327 A function that has a definition in the current translation unit will
4328 have a non-`NULL' `DECL_INITIAL'.  However, back ends should not make
4329 use of the particular value given by `DECL_INITIAL'.
4330
4331  The `DECL_SAVED_TREE' macro will give the complete body of the
4332 function.
4333
4334 8.6.2.1 Statements
4335 ..................
4336
4337 There are tree nodes corresponding to all of the source-level statement
4338 constructs, used within the C and C++ frontends.  These are enumerated
4339 here, together with a list of the various macros that can be used to
4340 obtain information about them.  There are a few macros that can be used
4341 with all statements:
4342
4343 `STMT_IS_FULL_EXPR_P'
4344      In C++, statements normally constitute "full expressions";
4345      temporaries created during a statement are destroyed when the
4346      statement is complete.  However, G++ sometimes represents
4347      expressions by statements; these statements will not have
4348      `STMT_IS_FULL_EXPR_P' set.  Temporaries created during such
4349      statements should be destroyed when the innermost enclosing
4350      statement with `STMT_IS_FULL_EXPR_P' set is exited.
4351
4352
4353  Here is the list of the various statement nodes, and the macros used to
4354 access them.  This documentation describes the use of these nodes in
4355 non-template functions (including instantiations of template functions).
4356 In template functions, the same nodes are used, but sometimes in
4357 slightly different ways.
4358
4359  Many of the statements have substatements.  For example, a `while'
4360 loop will have a body, which is itself a statement.  If the substatement
4361 is `NULL_TREE', it is considered equivalent to a statement consisting
4362 of a single `;', i.e., an expression statement in which the expression
4363 has been omitted.  A substatement may in fact be a list of statements,
4364 connected via their `TREE_CHAIN's.  So, you should always process the
4365 statement tree by looping over substatements, like this:
4366      void process_stmt (stmt)
4367           tree stmt;
4368      {
4369        while (stmt)
4370          {
4371            switch (TREE_CODE (stmt))
4372              {
4373              case IF_STMT:
4374                process_stmt (THEN_CLAUSE (stmt));
4375                /* More processing here.  */
4376                break;
4377
4378              ...
4379              }
4380
4381            stmt = TREE_CHAIN (stmt);
4382          }
4383      }
4384  In other words, while the `then' clause of an `if' statement in C++
4385 can be only one statement (although that one statement may be a
4386 compound statement), the intermediate representation will sometimes use
4387 several statements chained together.
4388
4389 `ASM_EXPR'
4390      Used to represent an inline assembly statement.  For an inline
4391      assembly statement like:
4392           asm ("mov x, y");
4393      The `ASM_STRING' macro will return a `STRING_CST' node for `"mov
4394      x, y"'.  If the original statement made use of the
4395      extended-assembly syntax, then `ASM_OUTPUTS', `ASM_INPUTS', and
4396      `ASM_CLOBBERS' will be the outputs, inputs, and clobbers for the
4397      statement, represented as `STRING_CST' nodes.  The
4398      extended-assembly syntax looks like:
4399           asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
4400      The first string is the `ASM_STRING', containing the instruction
4401      template.  The next two strings are the output and inputs,
4402      respectively; this statement has no clobbers.  As this example
4403      indicates, "plain" assembly statements are merely a special case
4404      of extended assembly statements; they have no cv-qualifiers,
4405      outputs, inputs, or clobbers.  All of the strings will be
4406      `NUL'-terminated, and will contain no embedded `NUL'-characters.
4407
4408      If the assembly statement is declared `volatile', or if the
4409      statement was not an extended assembly statement, and is therefore
4410      implicitly volatile, then the predicate `ASM_VOLATILE_P' will hold
4411      of the `ASM_EXPR'.
4412
4413 `BREAK_STMT'
4414      Used to represent a `break' statement.  There are no additional
4415      fields.
4416
4417 `CASE_LABEL_EXPR'
4418      Use to represent a `case' label, range of `case' labels, or a
4419      `default' label.  If `CASE_LOW' is `NULL_TREE', then this is a
4420      `default' label.  Otherwise, if `CASE_HIGH' is `NULL_TREE', then
4421      this is an ordinary `case' label.  In this case, `CASE_LOW' is an
4422      expression giving the value of the label.  Both `CASE_LOW' and
4423      `CASE_HIGH' are `INTEGER_CST' nodes.  These values will have the
4424      same type as the condition expression in the switch statement.
4425
4426      Otherwise, if both `CASE_LOW' and `CASE_HIGH' are defined, the
4427      statement is a range of case labels.  Such statements originate
4428      with the extension that allows users to write things of the form:
4429           case 2 ... 5:
4430      The first value will be `CASE_LOW', while the second will be
4431      `CASE_HIGH'.
4432
4433 `CLEANUP_STMT'
4434      Used to represent an action that should take place upon exit from
4435      the enclosing scope.  Typically, these actions are calls to
4436      destructors for local objects, but back ends cannot rely on this
4437      fact.  If these nodes are in fact representing such destructors,
4438      `CLEANUP_DECL' will be the `VAR_DECL' destroyed.  Otherwise,
4439      `CLEANUP_DECL' will be `NULL_TREE'.  In any case, the
4440      `CLEANUP_EXPR' is the expression to execute.  The cleanups
4441      executed on exit from a scope should be run in the reverse order
4442      of the order in which the associated `CLEANUP_STMT's were
4443      encountered.
4444
4445 `CONTINUE_STMT'
4446      Used to represent a `continue' statement.  There are no additional
4447      fields.
4448
4449 `CTOR_STMT'
4450      Used to mark the beginning (if `CTOR_BEGIN_P' holds) or end (if
4451      `CTOR_END_P' holds of the main body of a constructor.  See also
4452      `SUBOBJECT' for more information on how to use these nodes.
4453
4454 `DECL_STMT'
4455      Used to represent a local declaration.  The `DECL_STMT_DECL' macro
4456      can be used to obtain the entity declared.  This declaration may
4457      be a `LABEL_DECL', indicating that the label declared is a local
4458      label.  (As an extension, GCC allows the declaration of labels
4459      with scope.)  In C, this declaration may be a `FUNCTION_DECL',
4460      indicating the use of the GCC nested function extension.  For more
4461      information, *note Functions::.
4462
4463 `DO_STMT'
4464      Used to represent a `do' loop.  The body of the loop is given by
4465      `DO_BODY' while the termination condition for the loop is given by
4466      `DO_COND'.  The condition for a `do'-statement is always an
4467      expression.
4468
4469 `EMPTY_CLASS_EXPR'
4470      Used to represent a temporary object of a class with no data whose
4471      address is never taken.  (All such objects are interchangeable.)
4472      The `TREE_TYPE' represents the type of the object.
4473
4474 `EXPR_STMT'
4475      Used to represent an expression statement.  Use `EXPR_STMT_EXPR' to
4476      obtain the expression.
4477
4478 `FOR_STMT'
4479      Used to represent a `for' statement.  The `FOR_INIT_STMT' is the
4480      initialization statement for the loop.  The `FOR_COND' is the
4481      termination condition.  The `FOR_EXPR' is the expression executed
4482      right before the `FOR_COND' on each loop iteration; often, this
4483      expression increments a counter.  The body of the loop is given by
4484      `FOR_BODY'.  Note that `FOR_INIT_STMT' and `FOR_BODY' return
4485      statements, while `FOR_COND' and `FOR_EXPR' return expressions.
4486
4487 `GOTO_EXPR'
4488      Used to represent a `goto' statement.  The `GOTO_DESTINATION' will
4489      usually be a `LABEL_DECL'.  However, if the "computed goto"
4490      extension has been used, the `GOTO_DESTINATION' will be an
4491      arbitrary expression indicating the destination.  This expression
4492      will always have pointer type.
4493
4494 `HANDLER'
4495      Used to represent a C++ `catch' block.  The `HANDLER_TYPE' is the
4496      type of exception that will be caught by this handler; it is equal
4497      (by pointer equality) to `NULL' if this handler is for all types.
4498      `HANDLER_PARMS' is the `DECL_STMT' for the catch parameter, and
4499      `HANDLER_BODY' is the code for the block itself.
4500
4501 `IF_STMT'
4502      Used to represent an `if' statement.  The `IF_COND' is the
4503      expression.
4504
4505      If the condition is a `TREE_LIST', then the `TREE_PURPOSE' is a
4506      statement (usually a `DECL_STMT').  Each time the condition is
4507      evaluated, the statement should be executed.  Then, the
4508      `TREE_VALUE' should be used as the conditional expression itself.
4509      This representation is used to handle C++ code like this:
4510
4511           if (int i = 7) ...
4512
4513      where there is a new local variable (or variables) declared within
4514      the condition.
4515
4516      The `THEN_CLAUSE' represents the statement given by the `then'
4517      condition, while the `ELSE_CLAUSE' represents the statement given
4518      by the `else' condition.
4519
4520 `LABEL_EXPR'
4521      Used to represent a label.  The `LABEL_DECL' declared by this
4522      statement can be obtained with the `LABEL_EXPR_LABEL' macro.  The
4523      `IDENTIFIER_NODE' giving the name of the label can be obtained from
4524      the `LABEL_DECL' with `DECL_NAME'.
4525
4526 `RETURN_INIT'
4527      If the function uses the G++ "named return value" extension,
4528      meaning that the function has been defined like:
4529           S f(int) return s {...}
4530      then there will be a `RETURN_INIT'.  There is never a named
4531      returned value for a constructor.  The first argument to the
4532      `RETURN_INIT' is the name of the object returned; the second
4533      argument is the initializer for the object.  The object is
4534      initialized when the `RETURN_INIT' is encountered.  The object
4535      referred to is the actual object returned; this extension is a
4536      manual way of doing the "return-value optimization".  Therefore,
4537      the object must actually be constructed in the place where the
4538      object will be returned.
4539
4540 `RETURN_STMT'
4541      Used to represent a `return' statement.  The `RETURN_EXPR' is the
4542      expression returned; it will be `NULL_TREE' if the statement was
4543      just
4544           return;
4545
4546 `SUBOBJECT'
4547      In a constructor, these nodes are used to mark the point at which a
4548      subobject of `this' is fully constructed.  If, after this point, an
4549      exception is thrown before a `CTOR_STMT' with `CTOR_END_P' set is
4550      encountered, the `SUBOBJECT_CLEANUP' must be executed.  The
4551      cleanups must be executed in the reverse order in which they
4552      appear.
4553
4554 `SWITCH_STMT'
4555      Used to represent a `switch' statement.  The `SWITCH_STMT_COND' is
4556      the expression on which the switch is occurring.  See the
4557      documentation for an `IF_STMT' for more information on the
4558      representation used for the condition.  The `SWITCH_STMT_BODY' is
4559      the body of the switch statement.   The `SWITCH_STMT_TYPE' is the
4560      original type of switch expression as given in the source, before
4561      any compiler conversions.
4562
4563 `TRY_BLOCK'
4564      Used to represent a `try' block.  The body of the try block is
4565      given by `TRY_STMTS'.  Each of the catch blocks is a `HANDLER'
4566      node.  The first handler is given by `TRY_HANDLERS'.  Subsequent
4567      handlers are obtained by following the `TREE_CHAIN' link from one
4568      handler to the next.  The body of the handler is given by
4569      `HANDLER_BODY'.
4570
4571      If `CLEANUP_P' holds of the `TRY_BLOCK', then the `TRY_HANDLERS'
4572      will not be a `HANDLER' node.  Instead, it will be an expression
4573      that should be executed if an exception is thrown in the try
4574      block.  It must rethrow the exception after executing that code.
4575      And, if an exception is thrown while the expression is executing,
4576      `terminate' must be called.
4577
4578 `USING_STMT'
4579      Used to represent a `using' directive.  The namespace is given by
4580      `USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL.  This node
4581      is needed inside template functions, to implement using directives
4582      during instantiation.
4583
4584 `WHILE_STMT'
4585      Used to represent a `while' loop.  The `WHILE_COND' is the
4586      termination condition for the loop.  See the documentation for an
4587      `IF_STMT' for more information on the representation used for the
4588      condition.
4589
4590      The `WHILE_BODY' is the body of the loop.
4591
4592
4593 \1f
4594 File: gccint.info,  Node: Attributes,  Next: Expression trees,  Prev: Declarations,  Up: Trees
4595
4596 8.7 Attributes in trees
4597 =======================
4598
4599 Attributes, as specified using the `__attribute__' keyword, are
4600 represented internally as a `TREE_LIST'.  The `TREE_PURPOSE' is the
4601 name of the attribute, as an `IDENTIFIER_NODE'.  The `TREE_VALUE' is a
4602 `TREE_LIST' of the arguments of the attribute, if any, or `NULL_TREE'
4603 if there are no arguments; the arguments are stored as the `TREE_VALUE'
4604 of successive entries in the list, and may be identifiers or
4605 expressions.  The `TREE_CHAIN' of the attribute is the next attribute
4606 in a list of attributes applying to the same declaration or type, or
4607 `NULL_TREE' if there are no further attributes in the list.
4608
4609  Attributes may be attached to declarations and to types; these
4610 attributes may be accessed with the following macros.  All attributes
4611 are stored in this way, and many also cause other changes to the
4612 declaration or type or to other internal compiler data structures.
4613
4614  -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
4615      This macro returns the attributes on the declaration DECL.
4616
4617  -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
4618      This macro returns the attributes on the type TYPE.
4619
4620 \1f
4621 File: gccint.info,  Node: Expression trees,  Prev: Attributes,  Up: Trees
4622
4623 8.8 Expressions
4624 ===============
4625
4626 The internal representation for expressions is for the most part quite
4627 straightforward.  However, there are a few facts that one must bear in
4628 mind.  In particular, the expression "tree" is actually a directed
4629 acyclic graph.  (For example there may be many references to the integer
4630 constant zero throughout the source program; many of these will be
4631 represented by the same expression node.)  You should not rely on
4632 certain kinds of node being shared, nor should rely on certain kinds of
4633 nodes being unshared.
4634
4635  The following macros can be used with all expression nodes:
4636
4637 `TREE_TYPE'
4638      Returns the type of the expression.  This value may not be
4639      precisely the same type that would be given the expression in the
4640      original program.
4641
4642  In what follows, some nodes that one might expect to always have type
4643 `bool' are documented to have either integral or boolean type.  At some
4644 point in the future, the C front end may also make use of this same
4645 intermediate representation, and at this point these nodes will
4646 certainly have integral type.  The previous sentence is not meant to
4647 imply that the C++ front end does not or will not give these nodes
4648 integral type.
4649
4650  Below, we list the various kinds of expression nodes.  Except where
4651 noted otherwise, the operands to an expression are accessed using the
4652 `TREE_OPERAND' macro.  For example, to access the first operand to a
4653 binary plus expression `expr', use:
4654
4655      TREE_OPERAND (expr, 0)
4656  As this example indicates, the operands are zero-indexed.
4657
4658  The table below begins with constants, moves on to unary expressions,
4659 then proceeds to binary expressions, and concludes with various other
4660 kinds of expressions:
4661
4662 `INTEGER_CST'
4663      These nodes represent integer constants.  Note that the type of
4664      these constants is obtained with `TREE_TYPE'; they are not always
4665      of type `int'.  In particular, `char' constants are represented
4666      with `INTEGER_CST' nodes.  The value of the integer constant `e' is
4667      given by
4668           ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT)
4669           + TREE_INST_CST_LOW (e))
4670      HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms.
4671      Both `TREE_INT_CST_HIGH' and `TREE_INT_CST_LOW' return a
4672      `HOST_WIDE_INT'.  The value of an `INTEGER_CST' is interpreted as
4673      a signed or unsigned quantity depending on the type of the
4674      constant.  In general, the expression given above will overflow,
4675      so it should not be used to calculate the value of the constant.
4676
4677      The variable `integer_zero_node' is an integer constant with value
4678      zero.  Similarly, `integer_one_node' is an integer constant with
4679      value one.  The `size_zero_node' and `size_one_node' variables are
4680      analogous, but have type `size_t' rather than `int'.
4681
4682      The function `tree_int_cst_lt' is a predicate which holds if its
4683      first argument is less than its second.  Both constants are
4684      assumed to have the same signedness (i.e., either both should be
4685      signed or both should be unsigned.)  The full width of the
4686      constant is used when doing the comparison; the usual rules about
4687      promotions and conversions are ignored.  Similarly,
4688      `tree_int_cst_equal' holds if the two constants are equal.  The
4689      `tree_int_cst_sgn' function returns the sign of a constant.  The
4690      value is `1', `0', or `-1' according on whether the constant is
4691      greater than, equal to, or less than zero.  Again, the signedness
4692      of the constant's type is taken into account; an unsigned constant
4693      is never less than zero, no matter what its bit-pattern.
4694
4695 `REAL_CST'
4696      FIXME: Talk about how to obtain representations of this constant,
4697      do comparisons, and so forth.
4698
4699 `COMPLEX_CST'
4700      These nodes are used to represent complex number constants, that
4701      is a `__complex__' whose parts are constant nodes.  The
4702      `TREE_REALPART' and `TREE_IMAGPART' return the real and the
4703      imaginary parts respectively.
4704
4705 `VECTOR_CST'
4706      These nodes are used to represent vector constants, whose parts are
4707      constant nodes.  Each individual constant node is either an
4708      integer or a double constant node.  The first operand is a
4709      `TREE_LIST' of the constant nodes and is accessed through
4710      `TREE_VECTOR_CST_ELTS'.
4711
4712 `STRING_CST'
4713      These nodes represent string-constants.  The `TREE_STRING_LENGTH'
4714      returns the length of the string, as an `int'.  The
4715      `TREE_STRING_POINTER' is a `char*' containing the string itself.
4716      The string may not be `NUL'-terminated, and it may contain
4717      embedded `NUL' characters.  Therefore, the `TREE_STRING_LENGTH'
4718      includes the trailing `NUL' if it is present.
4719
4720      For wide string constants, the `TREE_STRING_LENGTH' is the number
4721      of bytes in the string, and the `TREE_STRING_POINTER' points to an
4722      array of the bytes of the string, as represented on the target
4723      system (that is, as integers in the target endianness).  Wide and
4724      non-wide string constants are distinguished only by the `TREE_TYPE'
4725      of the `STRING_CST'.
4726
4727      FIXME: The formats of string constants are not well-defined when
4728      the target system bytes are not the same width as host system
4729      bytes.
4730
4731 `PTRMEM_CST'
4732      These nodes are used to represent pointer-to-member constants.  The
4733      `PTRMEM_CST_CLASS' is the class type (either a `RECORD_TYPE' or
4734      `UNION_TYPE' within which the pointer points), and the
4735      `PTRMEM_CST_MEMBER' is the declaration for the pointed to object.
4736      Note that the `DECL_CONTEXT' for the `PTRMEM_CST_MEMBER' is in
4737      general different from the `PTRMEM_CST_CLASS'.  For example, given:
4738           struct B { int i; };
4739           struct D : public B {};
4740           int D::*dp = &D::i;
4741      The `PTRMEM_CST_CLASS' for `&D::i' is `D', even though the
4742      `DECL_CONTEXT' for the `PTRMEM_CST_MEMBER' is `B', since `B::i' is
4743      a member of `B', not `D'.
4744
4745 `VAR_DECL'
4746      These nodes represent variables, including static data members.
4747      For more information, *note Declarations::.
4748
4749 `NEGATE_EXPR'
4750      These nodes represent unary negation of the single operand, for
4751      both integer and floating-point types.  The type of negation can be
4752      determined by looking at the type of the expression.
4753
4754      The behavior of this operation on signed arithmetic overflow is
4755      controlled by the `flag_wrapv' and `flag_trapv' variables.
4756
4757 `ABS_EXPR'
4758      These nodes represent the absolute value of the single operand, for
4759      both integer and floating-point types.  This is typically used to
4760      implement the `abs', `labs' and `llabs' builtins for integer
4761      types, and the `fabs', `fabsf' and `fabsl' builtins for floating
4762      point types.  The type of abs operation can be determined by
4763      looking at the type of the expression.
4764
4765      This node is not used for complex types.  To represent the modulus
4766      or complex abs of a complex value, use the `BUILT_IN_CABS',
4767      `BUILT_IN_CABSF' or `BUILT_IN_CABSL' builtins, as used to
4768      implement the C99 `cabs', `cabsf' and `cabsl' built-in functions.
4769
4770 `BIT_NOT_EXPR'
4771      These nodes represent bitwise complement, and will always have
4772      integral type.  The only operand is the value to be complemented.
4773
4774 `TRUTH_NOT_EXPR'
4775      These nodes represent logical negation, and will always have
4776      integral (or boolean) type.  The operand is the value being
4777      negated.  The type of the operand and that of the result are
4778      always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
4779
4780 `PREDECREMENT_EXPR'
4781 `PREINCREMENT_EXPR'
4782 `POSTDECREMENT_EXPR'
4783 `POSTINCREMENT_EXPR'
4784      These nodes represent increment and decrement expressions.  The
4785      value of the single operand is computed, and the operand
4786      incremented or decremented.  In the case of `PREDECREMENT_EXPR' and
4787      `PREINCREMENT_EXPR', the value of the expression is the value
4788      resulting after the increment or decrement; in the case of
4789      `POSTDECREMENT_EXPR' and `POSTINCREMENT_EXPR' is the value before
4790      the increment or decrement occurs.  The type of the operand, like
4791      that of the result, will be either integral, boolean, or
4792      floating-point.
4793
4794 `ADDR_EXPR'
4795      These nodes are used to represent the address of an object.  (These
4796      expressions will always have pointer or reference type.)  The
4797      operand may be another expression, or it may be a declaration.
4798
4799      As an extension, GCC allows users to take the address of a label.
4800      In this case, the operand of the `ADDR_EXPR' will be a
4801      `LABEL_DECL'.  The type of such an expression is `void*'.
4802
4803      If the object addressed is not an lvalue, a temporary is created,
4804      and the address of the temporary is used.
4805
4806 `INDIRECT_REF'
4807      These nodes are used to represent the object pointed to by a
4808      pointer.  The operand is the pointer being dereferenced; it will
4809      always have pointer or reference type.
4810
4811 `FIX_TRUNC_EXPR'
4812      These nodes represent conversion of a floating-point value to an
4813      integer.  The single operand will have a floating-point type,
4814      while the the complete expression will have an integral (or
4815      boolean) type.  The operand is rounded towards zero.
4816
4817 `FLOAT_EXPR'
4818      These nodes represent conversion of an integral (or boolean) value
4819      to a floating-point value.  The single operand will have integral
4820      type, while the complete expression will have a floating-point
4821      type.
4822
4823      FIXME: How is the operand supposed to be rounded?  Is this
4824      dependent on `-mieee'?
4825
4826 `COMPLEX_EXPR'
4827      These nodes are used to represent complex numbers constructed from
4828      two expressions of the same (integer or real) type.  The first
4829      operand is the real part and the second operand is the imaginary
4830      part.
4831
4832 `CONJ_EXPR'
4833      These nodes represent the conjugate of their operand.
4834
4835 `REALPART_EXPR'
4836 `IMAGPART_EXPR'
4837      These nodes represent respectively the real and the imaginary parts
4838      of complex numbers (their sole argument).
4839
4840 `NON_LVALUE_EXPR'
4841      These nodes indicate that their one and only operand is not an
4842      lvalue.  A back end can treat these identically to the single
4843      operand.
4844
4845 `NOP_EXPR'
4846      These nodes are used to represent conversions that do not require
4847      any code-generation.  For example, conversion of a `char*' to an
4848      `int*' does not require any code be generated; such a conversion is
4849      represented by a `NOP_EXPR'.  The single operand is the expression
4850      to be converted.  The conversion from a pointer to a reference is
4851      also represented with a `NOP_EXPR'.
4852
4853 `CONVERT_EXPR'
4854      These nodes are similar to `NOP_EXPR's, but are used in those
4855      situations where code may need to be generated.  For example, if an
4856      `int*' is converted to an `int' code may need to be generated on
4857      some platforms.  These nodes are never used for C++-specific
4858      conversions, like conversions between pointers to different
4859      classes in an inheritance hierarchy.  Any adjustments that need to
4860      be made in such cases are always indicated explicitly.  Similarly,
4861      a user-defined conversion is never represented by a
4862      `CONVERT_EXPR'; instead, the function calls are made explicit.
4863
4864 `THROW_EXPR'
4865      These nodes represent `throw' expressions.  The single operand is
4866      an expression for the code that should be executed to throw the
4867      exception.  However, there is one implicit action not represented
4868      in that expression; namely the call to `__throw'.  This function
4869      takes no arguments.  If `setjmp'/`longjmp' exceptions are used, the
4870      function `__sjthrow' is called instead.  The normal GCC back end
4871      uses the function `emit_throw' to generate this code; you can
4872      examine this function to see what needs to be done.
4873
4874 `LSHIFT_EXPR'
4875 `RSHIFT_EXPR'
4876      These nodes represent left and right shifts, respectively.  The
4877      first operand is the value to shift; it will always be of integral
4878      type.  The second operand is an expression for the number of bits
4879      by which to shift.  Right shift should be treated as arithmetic,
4880      i.e., the high-order bits should be zero-filled when the
4881      expression has unsigned type and filled with the sign bit when the
4882      expression has signed type.  Note that the result is undefined if
4883      the second operand is larger than or equal to the first operand's
4884      type size.
4885
4886 `BIT_IOR_EXPR'
4887 `BIT_XOR_EXPR'
4888 `BIT_AND_EXPR'
4889      These nodes represent bitwise inclusive or, bitwise exclusive or,
4890      and bitwise and, respectively.  Both operands will always have
4891      integral type.
4892
4893 `TRUTH_ANDIF_EXPR'
4894 `TRUTH_ORIF_EXPR'
4895      These nodes represent logical and and logical or, respectively.
4896      These operators are not strict; i.e., the second operand is
4897      evaluated only if the value of the expression is not determined by
4898      evaluation of the first operand.  The type of the operands and
4899      that of the result are always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
4900
4901 `TRUTH_AND_EXPR'
4902 `TRUTH_OR_EXPR'
4903 `TRUTH_XOR_EXPR'
4904      These nodes represent logical and, logical or, and logical
4905      exclusive or.  They are strict; both arguments are always
4906      evaluated.  There are no corresponding operators in C or C++, but
4907      the front end will sometimes generate these expressions anyhow, if
4908      it can tell that strictness does not matter.  The type of the
4909      operands and that of the result are always of `BOOLEAN_TYPE' or
4910      `INTEGER_TYPE'.
4911
4912 `PLUS_EXPR'
4913 `MINUS_EXPR'
4914 `MULT_EXPR'
4915      These nodes represent various binary arithmetic operations.
4916      Respectively, these operations are addition, subtraction (of the
4917      second operand from the first) and multiplication.  Their operands
4918      may have either integral or floating type, but there will never be
4919      case in which one operand is of floating type and the other is of
4920      integral type.
4921
4922      The behavior of these operations on signed arithmetic overflow is
4923      controlled by the `flag_wrapv' and `flag_trapv' variables.
4924
4925 `RDIV_EXPR'
4926      This node represents a floating point division operation.
4927
4928 `TRUNC_DIV_EXPR'
4929 `FLOOR_DIV_EXPR'
4930 `CEIL_DIV_EXPR'
4931 `ROUND_DIV_EXPR'
4932      These nodes represent integer division operations that return an
4933      integer result.  `TRUNC_DIV_EXPR' rounds towards zero,
4934      `FLOOR_DIV_EXPR' rounds towards negative infinity, `CEIL_DIV_EXPR'
4935      rounds towards positive infinity and `ROUND_DIV_EXPR' rounds to
4936      the closest integer.  Integer division in C and C++ is truncating,
4937      i.e. `TRUNC_DIV_EXPR'.
4938
4939      The behavior of these operations on signed arithmetic overflow,
4940      when dividing the minimum signed integer by minus one, is
4941      controlled by the `flag_wrapv' and `flag_trapv' variables.
4942
4943 `TRUNC_MOD_EXPR'
4944 `FLOOR_MOD_EXPR'
4945 `CEIL_MOD_EXPR'
4946 `ROUND_MOD_EXPR'
4947      These nodes represent the integer remainder or modulus operation.
4948      The integer modulus of two operands `a' and `b' is defined as `a -
4949      (a/b)*b' where the division calculated using the corresponding
4950      division operator.  Hence for `TRUNC_MOD_EXPR' this definition
4951      assumes division using truncation towards zero, i.e.
4952      `TRUNC_DIV_EXPR'.  Integer remainder in C and C++ uses truncating
4953      division, i.e. `TRUNC_MOD_EXPR'.
4954
4955 `EXACT_DIV_EXPR'
4956      The `EXACT_DIV_EXPR' code is used to represent integer divisions
4957      where the numerator is known to be an exact multiple of the
4958      denominator.  This allows the backend to choose between the faster
4959      of `TRUNC_DIV_EXPR', `CEIL_DIV_EXPR' and `FLOOR_DIV_EXPR' for the
4960      current target.
4961
4962 `ARRAY_REF'
4963      These nodes represent array accesses.  The first operand is the
4964      array; the second is the index.  To calculate the address of the
4965      memory accessed, you must scale the index by the size of the type
4966      of the array elements.  The type of these expressions must be the
4967      type of a component of the array.  The third and fourth operands
4968      are used after gimplification to represent the lower bound and
4969      component size but should not be used directly; call
4970      `array_ref_low_bound' and `array_ref_element_size' instead.
4971
4972 `ARRAY_RANGE_REF'
4973      These nodes represent access to a range (or "slice") of an array.
4974      The operands are the same as that for `ARRAY_REF' and have the same
4975      meanings.  The type of these expressions must be an array whose
4976      component type is the same as that of the first operand.  The
4977      range of that array type determines the amount of data these
4978      expressions access.
4979
4980 `LT_EXPR'
4981 `LE_EXPR'
4982 `GT_EXPR'
4983 `GE_EXPR'
4984 `EQ_EXPR'
4985 `NE_EXPR'
4986      These nodes represent the less than, less than or equal to, greater
4987      than, greater than or equal to, equal, and not equal comparison
4988      operators.  The first and second operand with either be both of
4989      integral type or both of floating type.  The result type of these
4990      expressions will always be of integral or boolean type.  These
4991      operations return the result type's zero value for false, and the
4992      result type's one value for true.
4993
4994      For floating point comparisons, if we honor IEEE NaNs and either
4995      operand is NaN, then `NE_EXPR' always returns true and the
4996      remaining operators always return false.  On some targets,
4997      comparisons against an IEEE NaN, other than equality and
4998      inequality, may generate a floating point exception.
4999
5000 `ORDERED_EXPR'
5001 `UNORDERED_EXPR'
5002      These nodes represent non-trapping ordered and unordered comparison
5003      operators.  These operations take two floating point operands and
5004      determine whether they are ordered or unordered relative to each
5005      other.  If either operand is an IEEE NaN, their comparison is
5006      defined to be unordered, otherwise the comparison is defined to be
5007      ordered.  The result type of these expressions will always be of
5008      integral or boolean type.  These operations return the result
5009      type's zero value for false, and the result type's one value for
5010      true.
5011
5012 `UNLT_EXPR'
5013 `UNLE_EXPR'
5014 `UNGT_EXPR'
5015 `UNGE_EXPR'
5016 `UNEQ_EXPR'
5017 `LTGT_EXPR'
5018      These nodes represent the unordered comparison operators.  These
5019      operations take two floating point operands and determine whether
5020      the operands are unordered or are less than, less than or equal to,
5021      greater than, greater than or equal to, or equal respectively.  For
5022      example, `UNLT_EXPR' returns true if either operand is an IEEE NaN
5023      or the first operand is less than the second.  With the possible
5024      exception of `LTGT_EXPR', all of these operations are guaranteed
5025      not to generate a floating point exception.  The result type of
5026      these expressions will always be of integral or boolean type.
5027      These operations return the result type's zero value for false,
5028      and the result type's one value for true.
5029
5030 `MODIFY_EXPR'
5031      These nodes represent assignment.  The left-hand side is the first
5032      operand; the right-hand side is the second operand.  The left-hand
5033      side will be a `VAR_DECL', `INDIRECT_REF', `COMPONENT_REF', or
5034      other lvalue.
5035
5036      These nodes are used to represent not only assignment with `=' but
5037      also compound assignments (like `+='), by reduction to `='
5038      assignment.  In other words, the representation for `i += 3' looks
5039      just like that for `i = i + 3'.
5040
5041 `INIT_EXPR'
5042      These nodes are just like `MODIFY_EXPR', but are used only when a
5043      variable is initialized, rather than assigned to subsequently.
5044
5045 `COMPONENT_REF'
5046      These nodes represent non-static data member accesses.  The first
5047      operand is the object (rather than a pointer to it); the second
5048      operand is the `FIELD_DECL' for the data member.  The third
5049      operand represents the byte offset of the field, but should not be
5050      used directly; call `component_ref_field_offset' instead.
5051
5052 `COMPOUND_EXPR'
5053      These nodes represent comma-expressions.  The first operand is an
5054      expression whose value is computed and thrown away prior to the
5055      evaluation of the second operand.  The value of the entire
5056      expression is the value of the second operand.
5057
5058 `COND_EXPR'
5059      These nodes represent `?:' expressions.  The first operand is of
5060      boolean or integral type.  If it evaluates to a nonzero value, the
5061      second operand should be evaluated, and returned as the value of
5062      the expression.  Otherwise, the third operand is evaluated, and
5063      returned as the value of the expression.
5064
5065      The second operand must have the same type as the entire
5066      expression, unless it unconditionally throws an exception or calls
5067      a noreturn function, in which case it should have void type.  The
5068      same constraints apply to the third operand.  This allows array
5069      bounds checks to be represented conveniently as `(i >= 0 && i <
5070      10) ? i : abort()'.
5071
5072      As a GNU extension, the C language front-ends allow the second
5073      operand of the `?:' operator may be omitted in the source.  For
5074      example, `x ? : 3' is equivalent to `x ? x : 3', assuming that `x'
5075      is an expression without side-effects.  In the tree
5076      representation, however, the second operand is always present,
5077      possibly protected by `SAVE_EXPR' if the first argument does cause
5078      side-effects.
5079
5080 `CALL_EXPR'
5081      These nodes are used to represent calls to functions, including
5082      non-static member functions.  The first operand is a pointer to the
5083      function to call; it is always an expression whose type is a
5084      `POINTER_TYPE'.  The second argument is a `TREE_LIST'.  The
5085      arguments to the call appear left-to-right in the list.  The
5086      `TREE_VALUE' of each list node contains the expression
5087      corresponding to that argument.  (The value of `TREE_PURPOSE' for
5088      these nodes is unspecified, and should be ignored.)  For non-static
5089      member functions, there will be an operand corresponding to the
5090      `this' pointer.  There will always be expressions corresponding to
5091      all of the arguments, even if the function is declared with default
5092      arguments and some arguments are not explicitly provided at the
5093      call sites.
5094
5095 `STMT_EXPR'
5096      These nodes are used to represent GCC's statement-expression
5097      extension.  The statement-expression extension allows code like
5098      this:
5099           int f() { return ({ int j; j = 3; j + 7; }); }
5100      In other words, an sequence of statements may occur where a single
5101      expression would normally appear.  The `STMT_EXPR' node represents
5102      such an expression.  The `STMT_EXPR_STMT' gives the statement
5103      contained in the expression.  The value of the expression is the
5104      value of the last sub-statement in the body.  More precisely, the
5105      value is the value computed by the last statement nested inside
5106      `BIND_EXPR', `TRY_FINALLY_EXPR', or `TRY_CATCH_EXPR'.  For
5107      example, in:
5108           ({ 3; })
5109      the value is `3' while in:
5110           ({ if (x) { 3; } })
5111      there is no value.  If the `STMT_EXPR' does not yield a value,
5112      it's type will be `void'.
5113
5114 `BIND_EXPR'
5115      These nodes represent local blocks.  The first operand is a list of
5116      variables, connected via their `TREE_CHAIN' field.  These will
5117      never require cleanups.  The scope of these variables is just the
5118      body of the `BIND_EXPR'.  The body of the `BIND_EXPR' is the
5119      second operand.
5120
5121 `LOOP_EXPR'
5122      These nodes represent "infinite" loops.  The `LOOP_EXPR_BODY'
5123      represents the body of the loop.  It should be executed forever,
5124      unless an `EXIT_EXPR' is encountered.
5125
5126 `EXIT_EXPR'
5127      These nodes represent conditional exits from the nearest enclosing
5128      `LOOP_EXPR'.  The single operand is the condition; if it is
5129      nonzero, then the loop should be exited.  An `EXIT_EXPR' will only
5130      appear within a `LOOP_EXPR'.
5131
5132 `CLEANUP_POINT_EXPR'
5133      These nodes represent full-expressions.  The single operand is an
5134      expression to evaluate.  Any destructor calls engendered by the
5135      creation of temporaries during the evaluation of that expression
5136      should be performed immediately after the expression is evaluated.
5137
5138 `CONSTRUCTOR'
5139      These nodes represent the brace-enclosed initializers for a
5140      structure or array.  The first operand is reserved for use by the
5141      back end.  The second operand is a `TREE_LIST'.  If the
5142      `TREE_TYPE' of the `CONSTRUCTOR' is a `RECORD_TYPE' or
5143      `UNION_TYPE', then the `TREE_PURPOSE' of each node in the
5144      `TREE_LIST' will be a `FIELD_DECL' and the `TREE_VALUE' of each
5145      node will be the expression used to initialize that field.
5146
5147      If the `TREE_TYPE' of the `CONSTRUCTOR' is an `ARRAY_TYPE', then
5148      the `TREE_PURPOSE' of each element in the `TREE_LIST' will be an
5149      `INTEGER_CST' or a `RANGE_EXPR' of two `INTEGER_CST's.  A single
5150      `INTEGER_CST' indicates which element of the array (indexed from
5151      zero) is being assigned to.  A `RANGE_EXPR' indicates an inclusive
5152      range of elements to initialize.  In both cases the `TREE_VALUE'
5153      is the corresponding initializer.  It is re-evaluated for each
5154      element of a `RANGE_EXPR'.  If the `TREE_PURPOSE' is `NULL_TREE',
5155      then the initializer is for the next available array element.
5156
5157      In the front end, you should not depend on the fields appearing in
5158      any particular order.  However, in the middle end, fields must
5159      appear in declaration order.  You should not assume that all
5160      fields will be represented.  Unrepresented fields will be set to
5161      zero.
5162
5163 `COMPOUND_LITERAL_EXPR'
5164      These nodes represent ISO C99 compound literals.  The
5165      `COMPOUND_LITERAL_EXPR_DECL_STMT' is a `DECL_STMT' containing an
5166      anonymous `VAR_DECL' for the unnamed object represented by the
5167      compound literal; the `DECL_INITIAL' of that `VAR_DECL' is a
5168      `CONSTRUCTOR' representing the brace-enclosed list of initializers
5169      in the compound literal.  That anonymous `VAR_DECL' can also be
5170      accessed directly by the `COMPOUND_LITERAL_EXPR_DECL' macro.
5171
5172 `SAVE_EXPR'
5173      A `SAVE_EXPR' represents an expression (possibly involving
5174      side-effects) that is used more than once.  The side-effects should
5175      occur only the first time the expression is evaluated.  Subsequent
5176      uses should just reuse the computed value.  The first operand to
5177      the `SAVE_EXPR' is the expression to evaluate.  The side-effects
5178      should be executed where the `SAVE_EXPR' is first encountered in a
5179      depth-first preorder traversal of the expression tree.
5180
5181 `TARGET_EXPR'
5182      A `TARGET_EXPR' represents a temporary object.  The first operand
5183      is a `VAR_DECL' for the temporary variable.  The second operand is
5184      the initializer for the temporary.  The initializer is evaluated
5185      and, if non-void, copied (bitwise) into the temporary.  If the
5186      initializer is void, that means that it will perform the
5187      initialization itself.
5188
5189      Often, a `TARGET_EXPR' occurs on the right-hand side of an
5190      assignment, or as the second operand to a comma-expression which is
5191      itself the right-hand side of an assignment, etc.  In this case,
5192      we say that the `TARGET_EXPR' is "normal"; otherwise, we say it is
5193      "orphaned".  For a normal `TARGET_EXPR' the temporary variable
5194      should be treated as an alias for the left-hand side of the
5195      assignment, rather than as a new temporary variable.
5196
5197      The third operand to the `TARGET_EXPR', if present, is a
5198      cleanup-expression (i.e., destructor call) for the temporary.  If
5199      this expression is orphaned, then this expression must be executed
5200      when the statement containing this expression is complete.  These
5201      cleanups must always be executed in the order opposite to that in
5202      which they were encountered.  Note that if a temporary is created
5203      on one branch of a conditional operator (i.e., in the second or
5204      third operand to a `COND_EXPR'), the cleanup must be run only if
5205      that branch is actually executed.
5206
5207      See `STMT_IS_FULL_EXPR_P' for more information about running these
5208      cleanups.
5209
5210 `AGGR_INIT_EXPR'
5211      An `AGGR_INIT_EXPR' represents the initialization as the return
5212      value of a function call, or as the result of a constructor.  An
5213      `AGGR_INIT_EXPR' will only appear as a full-expression, or as the
5214      second operand of a `TARGET_EXPR'.  The first operand to the
5215      `AGGR_INIT_EXPR' is the address of a function to call, just as in
5216      a `CALL_EXPR'.  The second operand are the arguments to pass that
5217      function, as a `TREE_LIST', again in a manner similar to that of a
5218      `CALL_EXPR'.
5219
5220      If `AGGR_INIT_VIA_CTOR_P' holds of the `AGGR_INIT_EXPR', then the
5221      initialization is via a constructor call.  The address of the third
5222      operand of the `AGGR_INIT_EXPR', which is always a `VAR_DECL', is
5223      taken, and this value replaces the first argument in the argument
5224      list.
5225
5226      In either case, the expression is void.
5227
5228 `VA_ARG_EXPR'
5229      This node is used to implement support for the C/C++ variable
5230      argument-list mechanism.  It represents expressions like `va_arg
5231      (ap, type)'.  Its `TREE_TYPE' yields the tree representation for
5232      `type' and its sole argument yields the representation for `ap'.
5233
5234
5235 \1f
5236 File: gccint.info,  Node: Tree SSA,  Next: Machine Desc,  Prev: Control Flow,  Up: Top
5237
5238 9 Analysis and Optimization of GIMPLE Trees
5239 *******************************************
5240
5241 GCC uses three main intermediate languages to represent the program
5242 during compilation: GENERIC, GIMPLE and RTL.  GENERIC is a
5243 language-independent representation generated by each front end.  It is
5244 used to serve as an interface between the parser and optimizer.
5245 GENERIC is a common representation that is able to represent programs
5246 written in all the languages supported by GCC.
5247
5248  GIMPLE and RTL are used to optimize the program.  GIMPLE is used for
5249 target and language independent optimizations (e.g., inlining, constant
5250 propagation, tail call elimination, redundancy elimination, etc).  Much
5251 like GENERIC, GIMPLE is a language independent, tree based
5252 representation.  However, it differs from GENERIC in that the GIMPLE
5253 grammar is more restrictive: expressions contain no more than 3
5254 operands (except function calls), it has no control flow structures and
5255 expressions with side-effects are only allowed on the right hand side
5256 of assignments.  See the chapter describing GENERIC and GIMPLE for more
5257 details.
5258
5259  This chapter describes the data structures and functions used in the
5260 GIMPLE optimizers (also known as "tree optimizers" or "middle end").
5261 In particular, it focuses on all the macros, data structures, functions
5262 and programming constructs needed to implement optimization passes for
5263 GIMPLE.
5264
5265 * Menu:
5266
5267 * GENERIC::             A high-level language-independent representation.
5268 * GIMPLE::              A lower-level factored tree representation.
5269 * Annotations::         Attributes for statements and variables.
5270 * Statement Operands::  Variables referenced by GIMPLE statements.
5271 * SSA::                 Static Single Assignment representation.
5272 * Alias analysis::      Representing aliased loads and stores.
5273
5274 \1f
5275 File: gccint.info,  Node: GENERIC,  Next: GIMPLE,  Up: Tree SSA
5276
5277 9.1 GENERIC
5278 ===========
5279
5280 The purpose of GENERIC is simply to provide a language-independent way
5281 of representing an entire function in trees.  To this end, it was
5282 necessary to add a few new tree codes to the back end, but most
5283 everything was already there.  If you can express it with the codes in
5284 `gcc/tree.def', it's GENERIC.
5285
5286  Early on, there was a great deal of debate about how to think about
5287 statements in a tree IL.  In GENERIC, a statement is defined as any
5288 expression whose value, if any, is ignored.  A statement will always
5289 have `TREE_SIDE_EFFECTS' set (or it will be discarded), but a
5290 non-statement expression may also have side effects.  A `CALL_EXPR',
5291 for instance.
5292
5293  It would be possible for some local optimizations to work on the
5294 GENERIC form of a function; indeed, the adapted tree inliner works fine
5295 on GENERIC, but the current compiler performs inlining after lowering
5296 to GIMPLE (a restricted form described in the next section).  Indeed,
5297 currently the frontends perform this lowering before handing off to
5298 `tree_rest_of_compilation', but this seems inelegant.
5299
5300  If necessary, a front end can use some language-dependent tree codes
5301 in its GENERIC representation, so long as it provides a hook for
5302 converting them to GIMPLE and doesn't expect them to work with any
5303 (hypothetical) optimizers that run before the conversion to GIMPLE.
5304 The intermediate representation used while parsing C and C++ looks very
5305 little like GENERIC, but the C and C++ gimplifier hooks are perfectly
5306 happy to take it as input and spit out GIMPLE.
5307
5308 \1f
5309 File: gccint.info,  Node: GIMPLE,  Next: Annotations,  Prev: GENERIC,  Up: Tree SSA
5310
5311 9.2 GIMPLE
5312 ==========
5313
5314 GIMPLE is a simplified subset of GENERIC for use in optimization.  The
5315 particular subset chosen (and the name) was heavily influenced by the
5316 SIMPLE IL used by the McCAT compiler project at McGill University
5317 (`http://www-acaps.cs.mcgill.ca/info/McCAT/McCAT.html'), though we have
5318 made some different choices.  For one thing, SIMPLE doesn't support
5319 `goto'; a production compiler can't afford that kind of restriction.
5320
5321  GIMPLE retains much of the structure of the parse trees: lexical
5322 scopes are represented as containers, rather than markers.  However,
5323 expressions are broken down into a 3-address form, using temporary
5324 variables to hold intermediate values.  Also, control structures are
5325 lowered to gotos.
5326
5327  In GIMPLE no container node is ever used for its value; if a
5328 `COND_EXPR' or `BIND_EXPR' has a value, it is stored into a temporary
5329 within the controlled blocks, and that temporary is used in place of
5330 the container.
5331
5332  The compiler pass which lowers GENERIC to GIMPLE is referred to as the
5333 `gimplifier'.  The gimplifier works recursively, replacing complex
5334 statements with sequences of simple statements.
5335
5336 * Menu:
5337
5338 * Interfaces::
5339 * Temporaries::
5340 * GIMPLE Expressions::
5341 * Statements::
5342 * GIMPLE Example::
5343 * Rough GIMPLE Grammar::
5344
5345 \1f
5346 File: gccint.info,  Node: Interfaces,  Next: Temporaries,  Up: GIMPLE
5347
5348 9.2.1 Interfaces
5349 ----------------
5350
5351 The tree representation of a function is stored in `DECL_SAVED_TREE'.
5352 It is lowered to GIMPLE by a call to `gimplify_function_tree'.
5353
5354  If a front end wants to include language-specific tree codes in the
5355 tree representation which it provides to the back end, it must provide a
5356 definition of `LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
5357 front end trees to GIMPLE.  Usually such a hook will involve much of
5358 the same code for expanding front end trees to RTL.  This function can
5359 return fully lowered GIMPLE, or it can return GENERIC trees and let the
5360 main gimplifier lower them the rest of the way; this is often simpler.
5361
5362  The C and C++ front ends currently convert directly from front end
5363 trees to GIMPLE, and hand that off to the back end rather than first
5364 converting to GENERIC.  Their gimplifier hooks know about all the
5365 `_STMT' nodes and how to convert them to GENERIC forms.  There was some
5366 work done on a genericization pass which would run first, but the
5367 existence of `STMT_EXPR' meant that in order to convert all of the C
5368 statements into GENERIC equivalents would involve walking the entire
5369 tree anyway, so it was simpler to lower all the way.  This might change
5370 in the future if someone writes an optimization pass which would work
5371 better with higher-level trees, but currently the optimizers all expect
5372 GIMPLE.
5373
5374  A front end which wants to use the tree optimizers (and already has
5375 some sort of whole-function tree representation) only needs to provide
5376 a definition of `LANG_HOOKS_GIMPLIFY_EXPR', call
5377 `gimplify_function_tree' to lower to GIMPLE, and then hand off to
5378 `tree_rest_of_compilation' to compile and output the function.
5379
5380  You can tell the compiler to dump a C-like representation of the GIMPLE
5381 form with the flag `-fdump-tree-gimple'.
5382
5383 \1f
5384 File: gccint.info,  Node: Temporaries,  Next: GIMPLE Expressions,  Prev: Interfaces,  Up: GIMPLE
5385
5386 9.2.2 Temporaries
5387 -----------------
5388
5389 When gimplification encounters a subexpression which is too complex, it
5390 creates a new temporary variable to hold the value of the subexpression,
5391 and adds a new statement to initialize it before the current statement.
5392 These special temporaries are known as `expression temporaries', and are
5393 allocated using `get_formal_tmp_var'.  The compiler tries to always
5394 evaluate identical expressions into the same temporary, to simplify
5395 elimination of redundant calculations.
5396
5397  We can only use expression temporaries when we know that it will not be
5398 reevaluated before its value is used, and that it will not be otherwise
5399 modified(1).  Other temporaries can be allocated using
5400 `get_initialized_tmp_var' or `create_tmp_var'.
5401
5402  Currently, an expression like `a = b + 5' is not reduced any further.
5403 We tried converting it to something like
5404        T1 = b + 5;
5405        a = T1;
5406  but this bloated the representation for minimal benefit.  However, a
5407 variable which must live in memory cannot appear in an expression; its
5408 value is explicitly loaded into a temporary first.  Similarly, storing
5409 the value of an expression to a memory variable goes through a
5410 temporary.
5411
5412  ---------- Footnotes ----------
5413
5414  (1) These restrictions are derived from those in Morgan 4.8.
5415
5416 \1f
5417 File: gccint.info,  Node: GIMPLE Expressions,  Next: Statements,  Prev: Temporaries,  Up: GIMPLE
5418
5419 9.2.3 Expressions
5420 -----------------
5421
5422 In general, expressions in GIMPLE consist of an operation and the
5423 appropriate number of simple operands; these operands must either be a
5424 GIMPLE rvalue (`is_gimple_val'), i.e. a constant or a register
5425 variable.  More complex operands are factored out into temporaries, so
5426 that
5427        a = b + c + d
5428  becomes
5429        T1 = b + c;
5430        a = T1 + d;
5431
5432  The same rule holds for arguments to a `CALL_EXPR'.
5433
5434  The target of an assignment is usually a variable, but can also be an
5435 `INDIRECT_REF' or a compound lvalue as described below.
5436
5437 * Menu:
5438
5439 * Compound Expressions::
5440 * Compound Lvalues::
5441 * Conditional Expressions::
5442 * Logical Operators::
5443
5444 \1f
5445 File: gccint.info,  Node: Compound Expressions,  Next: Compound Lvalues,  Up: GIMPLE Expressions
5446
5447 9.2.3.1 Compound Expressions
5448 ............................
5449
5450 The left-hand side of a C comma expression is simply moved into a
5451 separate statement.
5452
5453 \1f
5454 File: gccint.info,  Node: Compound Lvalues,  Next: Conditional Expressions,  Prev: Compound Expressions,  Up: GIMPLE Expressions
5455
5456 9.2.3.2 Compound Lvalues
5457 ........................
5458
5459 Currently compound lvalues involving array and structure field
5460 references are not broken down; an expression like `a.b[2] = 42' is not
5461 reduced any further (though complex array subscripts are).  This
5462 restriction is a workaround for limitations in later optimizers; if we
5463 were to convert this to
5464
5465        T1 = &a.b;
5466        T1[2] = 42;
5467
5468  alias analysis would not remember that the reference to `T1[2]' came
5469 by way of `a.b', so it would think that the assignment could alias
5470 another member of `a'; this broke `struct-alias-1.c'.  Future optimizer
5471 improvements may make this limitation unnecessary.
5472
5473 \1f
5474 File: gccint.info,  Node: Conditional Expressions,  Next: Logical Operators,  Prev: Compound Lvalues,  Up: GIMPLE Expressions
5475
5476 9.2.3.3 Conditional Expressions
5477 ...............................
5478
5479 A C `?:' expression is converted into an `if' statement with each
5480 branch assigning to the same temporary.  So,
5481
5482        a = b ? c : d;
5483  becomes
5484        if (b)
5485          T1 = c;
5486        else
5487          T1 = d;
5488        a = T1;
5489
5490  Tree level if-conversion pass re-introduces `?:' expression, if
5491 appropriate.  It is used to vectorize loops with conditions using
5492 vector conditional operations.
5493
5494  Note that in GIMPLE, `if' statements are also represented using
5495 `COND_EXPR', as described below.
5496
5497 \1f
5498 File: gccint.info,  Node: Logical Operators,  Prev: Conditional Expressions,  Up: GIMPLE Expressions
5499
5500 9.2.3.4 Logical Operators
5501 .........................
5502
5503 Except when they appear in the condition operand of a `COND_EXPR',
5504 logical `and' and `or' operators are simplified as follows: `a = b &&
5505 c' becomes
5506
5507        T1 = (bool)b;
5508        if (T1)
5509          T1 = (bool)c;
5510        a = T1;
5511
5512  Note that `T1' in this example cannot be an expression temporary,
5513 because it has two different assignments.
5514
5515 \1f
5516 File: gccint.info,  Node: Statements,  Next: GIMPLE Example,  Prev: GIMPLE Expressions,  Up: GIMPLE
5517
5518 9.2.4 Statements
5519 ----------------
5520
5521 Most statements will be assignment statements, represented by
5522 `MODIFY_EXPR'.  A `CALL_EXPR' whose value is ignored can also be a
5523 statement.  No other C expressions can appear at statement level; a
5524 reference to a volatile object is converted into a `MODIFY_EXPR'.  In
5525 GIMPLE form, type of `MODIFY_EXPR' is not meaningful.  Instead, use type
5526 of LHS or RHS.
5527
5528  There are also several varieties of complex statements.
5529
5530 * Menu:
5531
5532 * Blocks::
5533 * Statement Sequences::
5534 * Empty Statements::
5535 * Loops::
5536 * Selection Statements::
5537 * Jumps::
5538 * Cleanups::
5539 * GIMPLE Exception Handling::
5540
5541 \1f
5542 File: gccint.info,  Node: Blocks,  Next: Statement Sequences,  Up: Statements
5543
5544 9.2.4.1 Blocks
5545 ..............
5546
5547 Block scopes and the variables they declare in GENERIC and GIMPLE are
5548 expressed using the `BIND_EXPR' code, which in previous versions of GCC
5549 was primarily used for the C statement-expression extension.
5550
5551  Variables in a block are collected into `BIND_EXPR_VARS' in
5552 declaration order.  Any runtime initialization is moved out of
5553 `DECL_INITIAL' and into a statement in the controlled block.  When
5554 gimplifying from C or C++, this initialization replaces the `DECL_STMT'.
5555
5556  Variable-length arrays (VLAs) complicate this process, as their size
5557 often refers to variables initialized earlier in the block.  To handle
5558 this, we currently split the block at that point, and move the VLA into
5559 a new, inner `BIND_EXPR'.  This strategy may change in the future.
5560
5561  `DECL_SAVED_TREE' for a GIMPLE function will always be a `BIND_EXPR'
5562 which contains declarations for the temporary variables used in the
5563 function.
5564
5565  A C++ program will usually contain more `BIND_EXPR's than there are
5566 syntactic blocks in the source code, since several C++ constructs have
5567 implicit scopes associated with them.  On the other hand, although the
5568 C++ front end uses pseudo-scopes to handle cleanups for objects with
5569 destructors, these don't translate into the GIMPLE form; multiple
5570 declarations at the same level use the same `BIND_EXPR'.
5571
5572 \1f
5573 File: gccint.info,  Node: Statement Sequences,  Next: Empty Statements,  Prev: Blocks,  Up: Statements
5574
5575 9.2.4.2 Statement Sequences
5576 ...........................
5577
5578 Multiple statements at the same nesting level are collected into a
5579 `STATEMENT_LIST'.  Statement lists are modified and traversed using the
5580 interface in `tree-iterator.h'.
5581
5582 \1f
5583 File: gccint.info,  Node: Empty Statements,  Next: Loops,  Prev: Statement Sequences,  Up: Statements
5584
5585 9.2.4.3 Empty Statements
5586 ........................
5587
5588 Whenever possible, statements with no effect are discarded.  But if they
5589 are nested within another construct which cannot be discarded for some
5590 reason, they are instead replaced with an empty statement, generated by
5591 `build_empty_stmt'.  Initially, all empty statements were shared, after
5592 the pattern of the Java front end, but this caused a lot of trouble in
5593 practice.
5594
5595  An empty statement is represented as `(void)0'.
5596
5597 \1f
5598 File: gccint.info,  Node: Loops,  Next: Selection Statements,  Prev: Empty Statements,  Up: Statements
5599
5600 9.2.4.4 Loops
5601 .............
5602
5603 At one time loops were expressed in GIMPLE using `LOOP_EXPR', but now
5604 they are lowered to explicit gotos.
5605
5606 \1f
5607 File: gccint.info,  Node: Selection Statements,  Next: Jumps,  Prev: Loops,  Up: Statements
5608
5609 9.2.4.5 Selection Statements
5610 ............................
5611
5612 A simple selection statement, such as the C `if' statement, is
5613 expressed in GIMPLE using a void `COND_EXPR'.  If only one branch is
5614 used, the other is filled with an empty statement.
5615
5616  Normally, the condition expression is reduced to a simple comparison.
5617 If it is a shortcut (`&&' or `||') expression, however, we try to break
5618 up the `if' into multiple `if's so that the implied shortcut is taken
5619 directly, much like the transformation done by `do_jump' in the RTL
5620 expander.
5621
5622  A `SWITCH_EXPR' in GIMPLE contains the condition and a `TREE_VEC' of
5623 `CASE_LABEL_EXPR's describing the case values and corresponding
5624 `LABEL_DECL's to jump to.  The body of the `switch' is moved after the
5625 `SWITCH_EXPR'.
5626
5627 \1f
5628 File: gccint.info,  Node: Jumps,  Next: Cleanups,  Prev: Selection Statements,  Up: Statements
5629
5630 9.2.4.6 Jumps
5631 .............
5632
5633 Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'.
5634
5635  The operand of a `GOTO_EXPR' must be either a label or a variable
5636 containing the address to jump to.
5637
5638  The operand of a `RETURN_EXPR' is either `NULL_TREE' or a
5639 `MODIFY_EXPR' which sets the return value.  It would be nice to move
5640 the `MODIFY_EXPR' into a separate statement, but the special return
5641 semantics in `expand_return' make that difficult.  It may still happen
5642 in the future, perhaps by moving most of that logic into
5643 `expand_assignment'.
5644
5645 \1f
5646 File: gccint.info,  Node: Cleanups,  Next: GIMPLE Exception Handling,  Prev: Jumps,  Up: Statements
5647
5648 9.2.4.7 Cleanups
5649 ................
5650
5651 Destructors for local C++ objects and similar dynamic cleanups are
5652 represented in GIMPLE by a `TRY_FINALLY_EXPR'.  When the controlled
5653 block exits, the cleanup is run.
5654
5655  `TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
5656 to appear on every edge out of the controlled block; this reduces the
5657 freedom to move code across these edges.  Therefore, the EH lowering
5658 pass which runs before most of the optimization passes eliminates these
5659 expressions by explicitly adding the cleanup to each edge.
5660
5661 \1f
5662 File: gccint.info,  Node: GIMPLE Exception Handling,  Prev: Cleanups,  Up: Statements
5663
5664 9.2.4.8 Exception Handling
5665 ..........................
5666
5667 Other exception handling constructs are represented using
5668 `TRY_CATCH_EXPR'.  The handler operand of a `TRY_CATCH_EXPR' can be a
5669 normal statement to be executed if the controlled block throws an
5670 exception, or it can have one of two special forms:
5671
5672   1. A `CATCH_EXPR' executes its handler if the thrown exception
5673      matches one of the allowed types.  Multiple handlers can be
5674      expressed by a sequence of `CATCH_EXPR' statements.
5675
5676   2. An `EH_FILTER_EXPR' executes its handler if the thrown   exception
5677      does not match one of the allowed types.
5678
5679  Currently throwing an exception is not directly represented in GIMPLE,
5680 since it is implemented by calling a function.  At some point in the
5681 future we will want to add some way to express that the call will throw
5682 an exception of a known type.
5683
5684  Just before running the optimizers, the compiler lowers the high-level
5685 EH constructs above into a set of `goto's, magic labels, and EH
5686 regions.  Continuing to unwind at the end of a cleanup is represented
5687 with a `RESX_EXPR'.
5688
5689 \1f
5690 File: gccint.info,  Node: GIMPLE Example,  Next: Rough GIMPLE Grammar,  Prev: Statements,  Up: GIMPLE
5691
5692 9.2.5 GIMPLE Example
5693 --------------------
5694
5695      struct A { A(); ~A(); };
5696
5697      int i;
5698      int g();
5699      void f()
5700      {
5701        A a;
5702        int j = (--i, i ? 0 : 1);
5703
5704        for (int x = 42; x > 0; --x)
5705          {
5706            i += g()*4 + 32;
5707          }
5708      }
5709
5710  becomes
5711
5712      void f()
5713      {
5714        int i.0;
5715        int T.1;
5716        int iftmp.2;
5717        int T.3;
5718        int T.4;
5719        int T.5;
5720        int T.6;
5721
5722        {
5723          struct A a;
5724          int j;
5725
5726          __comp_ctor (&a);
5727          try
5728            {
5729              i.0 = i;
5730              T.1 = i.0 - 1;
5731              i = T.1;
5732              i.0 = i;
5733              if (i.0 == 0)
5734                iftmp.2 = 1;
5735              else
5736                iftmp.2 = 0;
5737              j = iftmp.2;
5738              {
5739                int x;
5740
5741                x = 42;
5742                goto test;
5743                loop:;
5744
5745                T.3 = g ();
5746                T.4 = T.3 * 4;
5747                i.0 = i;
5748                T.5 = T.4 + i.0;
5749                T.6 = T.5 + 32;
5750                i = T.6;
5751                x = x - 1;
5752
5753                test:;
5754                if (x > 0)
5755                  goto loop;
5756                else
5757                  goto break_;
5758                break_:;
5759              }
5760            }
5761          finally
5762            {
5763              __comp_dtor (&a);
5764            }
5765        }
5766      }
5767
5768 \1f
5769 File: gccint.info,  Node: Rough GIMPLE Grammar,  Prev: GIMPLE Example,  Up: GIMPLE
5770
5771 9.2.6 Rough GIMPLE Grammar
5772 --------------------------
5773
5774         function     : FUNCTION_DECL
5775                              DECL_SAVED_TREE -> compound-stmt
5776
5777         compound-stmt: STATEMENT_LIST
5778                              members -> stmt
5779
5780         stmt         : block
5781                      | if-stmt
5782                      | switch-stmt
5783                      | goto-stmt
5784                      | return-stmt
5785                      | resx-stmt
5786                      | label-stmt
5787                      | try-stmt
5788                      | modify-stmt
5789                      | call-stmt
5790
5791         block        : BIND_EXPR
5792                              BIND_EXPR_VARS -> chain of DECLs
5793                              BIND_EXPR_BLOCK -> BLOCK
5794                              BIND_EXPR_BODY -> compound-stmt
5795
5796         if-stmt      : COND_EXPR
5797                              op0 -> condition
5798                              op1 -> compound-stmt
5799                              op2 -> compound-stmt
5800
5801         switch-stmt  : SWITCH_EXPR
5802                              op0 -> val
5803                              op1 -> NULL
5804                              op2 -> TREE_VEC of CASE_LABEL_EXPRs
5805                                  The CASE_LABEL_EXPRs are sorted by CASE_LOW,
5806                                  and default is last.
5807
5808         goto-stmt    : GOTO_EXPR
5809                              op0 -> LABEL_DECL | val
5810
5811         return-stmt  : RETURN_EXPR
5812                              op0 -> return-value
5813
5814         return-value : NULL
5815                      | RESULT_DECL
5816                      | MODIFY_EXPR
5817                              op0 -> RESULT_DECL
5818                              op1 -> lhs
5819
5820         resx-stmt    : RESX_EXPR
5821
5822         label-stmt   : LABEL_EXPR
5823                              op0 -> LABEL_DECL
5824
5825         try-stmt     : TRY_CATCH_EXPR
5826                              op0 -> compound-stmt
5827                              op1 -> handler
5828                      | TRY_FINALLY_EXPR
5829                              op0 -> compound-stmt
5830                              op1 -> compound-stmt
5831
5832         handler      : catch-seq
5833                      | EH_FILTER_EXPR
5834                      | compound-stmt
5835
5836         catch-seq    : STATEMENT_LIST
5837                              members -> CATCH_EXPR
5838
5839         modify-stmt  : MODIFY_EXPR
5840                              op0 -> lhs
5841                              op1 -> rhs
5842
5843         call-stmt    : CALL_EXPR
5844                              op0 -> val | OBJ_TYPE_REF
5845                              op1 -> call-arg-list
5846
5847         call-arg-list: TREE_LIST
5848                              members -> lhs | CONST
5849
5850         addr-expr-arg: ID
5851                      | compref
5852
5853         addressable  : addr-expr-arg
5854                      | indirectref
5855
5856         with-size-arg: addressable
5857                      | call-stmt
5858
5859         indirectref  : INDIRECT_REF
5860                              op0 -> val
5861
5862         lhs          : addressable
5863                      | bitfieldref
5864                      | WITH_SIZE_EXPR
5865                              op0 -> with-size-arg
5866                              op1 -> val
5867
5868         min-lval     : ID
5869                      | indirectref
5870
5871         bitfieldref  : BIT_FIELD_REF
5872                              op0 -> inner-compref
5873                              op1 -> CONST
5874                              op2 -> var
5875
5876         compref      : inner-compref
5877                      | REALPART_EXPR
5878                              op0 -> inner-compref
5879                      | IMAGPART_EXPR
5880                              op0 -> inner-compref
5881
5882         inner-compref: min-lval
5883                      | COMPONENT_REF
5884                              op0 -> inner-compref
5885                              op1 -> FIELD_DECL
5886                              op2 -> val
5887                      | ARRAY_REF
5888                              op0 -> inner-compref
5889                              op1 -> val
5890                              op2 -> val
5891                              op3 -> val
5892                      | ARRAY_RANGE_REF
5893                              op0 -> inner-compref
5894                              op1 -> val
5895                              op2 -> val
5896                              op3 -> val
5897                      | VIEW_CONVERT_EXPR
5898                              op0 -> inner-compref
5899
5900         condition    : val
5901                      | RELOP
5902                              op0 -> val
5903                              op1 -> val
5904
5905         val          : ID
5906                      | CONST
5907
5908         rhs          : lhs
5909                      | CONST
5910                      | call-stmt
5911                      | ADDR_EXPR
5912                              op0 -> addr-expr-arg
5913                      | UNOP
5914                              op0 -> val
5915                      | BINOP
5916                              op0 -> val
5917                              op1 -> val
5918                      | RELOP
5919                              op0 -> val
5920                              op1 -> val
5921
5922 \1f
5923 File: gccint.info,  Node: Annotations,  Next: Statement Operands,  Prev: GIMPLE,  Up: Tree SSA
5924
5925 9.3 Annotations
5926 ===============
5927
5928 The optimizers need to associate attributes with statements and
5929 variables during the optimization process.  For instance, we need to
5930 know what basic block a statement belongs to or whether a variable has
5931 aliases.  All these attributes are stored in data structures called
5932 annotations which are then linked to the field `ann' in `struct
5933 tree_common'.
5934
5935  Presently, we define annotations for statements (`stmt_ann_t'),
5936 variables (`var_ann_t') and SSA names (`ssa_name_ann_t').  Annotations
5937 are defined and documented in `tree-flow.h'.
5938
5939 \1f
5940 File: gccint.info,  Node: Statement Operands,  Next: SSA,  Prev: Annotations,  Up: Tree SSA
5941
5942 9.4 Statement Operands
5943 ======================
5944
5945 Almost every GIMPLE statement will contain a reference to a variable or
5946 memory location.  Since statements come in different shapes and sizes,
5947 their operands are going to be located at various spots inside the
5948 statement's tree.  To facilitate access to the statement's operands,
5949 they are organized into arrays associated inside each statement's
5950 annotation.  Each element in an operand array is a pointer to a
5951 `VAR_DECL', `PARM_DECL' or `SSA_NAME' tree node.  This provides a very
5952 convenient way of examining and replacing operands.
5953
5954  Data flow analysis and optimization is done on all tree nodes
5955 representing variables.  Any node for which `SSA_VAR_P' returns nonzero
5956 is considered when scanning statement operands.  However, not all
5957 `SSA_VAR_P' variables are processed in the same way.  For the purposes
5958 of optimization, we need to distinguish between references to local
5959 scalar variables and references to globals, statics, structures,
5960 arrays, aliased variables, etc.  The reason is simple, the compiler can
5961 gather complete data flow information for a local scalar.  On the other
5962 hand, a global variable may be modified by a function call, it may not
5963 be possible to keep track of all the elements of an array or the fields
5964 of a structure, etc.
5965
5966  The operand scanner gathers two kinds of operands: "real" and
5967 "virtual".  An operand for which `is_gimple_reg' returns true is
5968 considered real, otherwise it is a virtual operand.  We also
5969 distinguish between uses and definitions.  An operand is used if its
5970 value is loaded by the statement (e.g., the operand at the RHS of an
5971 assignment).  If the statement assigns a new value to the operand, the
5972 operand is considered a definition (e.g., the operand at the LHS of an
5973 assignment).
5974
5975  Virtual and real operands also have very different data flow
5976 properties.  Real operands are unambiguous references to the full
5977 object that they represent.  For instance, given
5978
5979      {
5980        int a, b;
5981        a = b
5982      }
5983
5984  Since `a' and `b' are non-aliased locals, the statement `a = b' will
5985 have one real definition and one real use because variable `b' is
5986 completely modified with the contents of variable `a'.  Real definition
5987 are also known as "killing definitions".  Similarly, the use of `a'
5988 reads all its bits.
5989
5990  In contrast, virtual operands are used with variables that can have a
5991 partial or ambiguous reference.  This includes structures, arrays,
5992 globals, and aliased variables.  In these cases, we have two types of
5993 definitions.  For globals, structures, and arrays, we can determine from
5994 a statement whether a variable of these types has a killing definition.
5995 If the variable does, then the statement is marked as having a "must
5996 definition" of that variable.  However, if a statement is only defining
5997 a part of the variable (i.e. a field in a structure), or if we know
5998 that a statement might define the variable but we cannot say for sure,
5999 then we mark that statement as having a "may definition".  For
6000 instance, given
6001
6002      {
6003        int a, b, *p;
6004
6005        if (...)
6006          p = &a;
6007        else
6008          p = &b;
6009        *p = 5;
6010        return *p;
6011      }
6012
6013  The assignment `*p = 5' may be a definition of `a' or `b'.  If we
6014 cannot determine statically where `p' is pointing to at the time of the
6015 store operation, we create virtual definitions to mark that statement
6016 as a potential definition site for `a' and `b'.  Memory loads are
6017 similarly marked with virtual use operands.  Virtual operands are shown
6018 in tree dumps right before the statement that contains them.  To
6019 request a tree dump with virtual operands, use the `-vops' option to
6020 `-fdump-tree':
6021
6022      {
6023        int a, b, *p;
6024
6025        if (...)
6026          p = &a;
6027        else
6028          p = &b;
6029        # a = V_MAY_DEF <a>
6030        # b = V_MAY_DEF <b>
6031        *p = 5;
6032
6033        # VUSE <a>
6034        # VUSE <b>
6035        return *p;
6036      }
6037
6038  Notice that `V_MAY_DEF' operands have two copies of the referenced
6039 variable.  This indicates that this is not a killing definition of that
6040 variable.  In this case we refer to it as a "may definition" or
6041 "aliased store".  The presence of the second copy of the variable in
6042 the `V_MAY_DEF' operand will become important when the function is
6043 converted into SSA form.  This will be used to link all the non-killing
6044 definitions to prevent optimizations from making incorrect assumptions
6045 about them.
6046
6047  Operands are collected by `tree-ssa-operands.c'.  They are stored
6048 inside each statement's annotation and can be accessed with `DEF_OPS',
6049 `USE_OPS', `V_MAY_DEF_OPS', `V_MUST_DEF_OPS' and `VUSE_OPS'.  The
6050 following are all the accessor macros available to access USE operands.
6051 To access all the other operand arrays, just change the name
6052 accordingly.  Note that this interface to the operands is deprecated,
6053 and is slated for removal in a future version of gcc.  The preferred
6054 interface is the operand iterator interface.  Unless you need to
6055 discover the number of operands of a given type on a statement, you are
6056 strongly urged not to use this interface.
6057
6058  -- Macro: USE_OPS (ANN)
6059      Returns the array of operands used by the statement with annotation
6060      ANN.
6061
6062  -- Macro: STMT_USE_OPS (STMT)
6063      Alternate version of USE_OPS that takes the statement STMT as
6064      input.
6065
6066  -- Macro: NUM_USES (OPS)
6067      Return the number of USE operands in array OPS.
6068
6069  -- Macro: USE_OP_PTR (OPS, I)
6070      Return a pointer to the Ith operand in array OPS.
6071
6072  -- Macro: USE_OP (OPS, I)
6073      Return the Ith operand in array OPS.
6074
6075  The following function shows how to print all the operands of a given
6076 statement:
6077
6078      void
6079      print_ops (tree stmt)
6080      {
6081        vuse_optype vuses;
6082        v_may_def_optype v_may_defs;
6083        v_must_def_optype v_must_defs;
6084        def_optype defs;
6085        use_optype uses;
6086        stmt_ann_t ann;
6087        size_t i;
6088
6089        get_stmt_operands (stmt);
6090        ann = stmt_ann (stmt);
6091
6092        defs = DEF_OPS (ann);
6093        for (i = 0; i < NUM_DEFS (defs); i++)
6094          print_generic_expr (stderr, DEF_OP (defs, i), 0);
6095
6096        uses = USE_OPS (ann);
6097        for (i = 0; i < NUM_USES (uses); i++)
6098          print_generic_expr (stderr, USE_OP (uses, i), 0);
6099
6100        v_may_defs = V_MAY_DEF_OPS (ann);
6101        for (i = 0; i < NUM_V_MAY_DEFS (v_may_defs); i++)
6102          {
6103            print_generic_expr (stderr, V_MAY_DEF_OP (v_may_defs, i), 0);
6104            print_generic_expr (stderr, V_MAY_DEF_RESULT (v_may_defs, i), 0);
6105          }
6106
6107        v_must_defs = V_MUST_DEF_OPS (ann);
6108        for (i = 0; i < NUM_V_MUST_DEFS (v_must_defs); i++)
6109          print_generic_expr (stderr, V_MUST_DEF_OP (v_must_defs, i), 0);
6110
6111        vuses = VUSE_OPS (ann);
6112        for (i = 0; i < NUM_VUSES (vuses); i++)
6113          print_generic_expr (stderr, VUSE_OP (vuses, i), 0);
6114      }
6115
6116  To collect the operands, you first need to call `get_stmt_operands'.
6117 Since that is a potentially expensive operation, statements are only
6118 scanned if they have been marked modified by a call to `modify_stmt'.
6119 So, if your pass replaces operands in a statement, make sure to call
6120 `modify_stmt'.
6121
6122 9.4.1 Operand Iterators
6123 -----------------------
6124
6125 There is an alternative to iterating over the operands in a statement.
6126 It is especially useful when you wish to perform the same operation on
6127 more than one type of operand.  The previous example could be rewritten
6128 as follows:
6129
6130      void
6131      print_ops (tree stmt)
6132      {
6133        ssa_op_iter;
6134        tree var;
6135
6136        get_stmt_operands (stmt);
6137        FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
6138          print_generic_expr (stderr, var, 0);
6139      }
6140
6141   1. Determine whether you are need to see the operand pointers, or
6142      just the     trees, and choose the appropriate macro:
6143
6144           Need            Macro:
6145           ----            -------
6146           use_operand_p   FOR_EACH_SSA_USE_OPERAND
6147           def_operand_p   FOR_EACH_SSA_DEF_OPERAND
6148           tree            FOR_EACH_SSA_TREE_OPERAND
6149
6150   2. You need to declare a variable of the type you are interested
6151      in, and an ssa_op_iter structure which serves as the loop
6152      controlling variable.
6153
6154   3. Determine which operands you wish to use, and specify the flags of
6155         those you are interested in.  They are documented in
6156      `tree-ssa-operands.h':
6157
6158           #define SSA_OP_USE              0x01    /* Real USE operands.  */
6159           #define SSA_OP_DEF              0x02    /* Real DEF operands.  */
6160           #define SSA_OP_VUSE             0x04    /* VUSE operands.  */
6161           #define SSA_OP_VMAYUSE          0x08    /* USE portion of V_MAY_DEFS.  */
6162           #define SSA_OP_VMAYDEF          0x10    /* DEF portion of V_MAY_DEFS.  */
6163           #define SSA_OP_VMUSTDEF         0x20    /* V_MUST_DEF definitions.  */
6164
6165           /* These are commonly grouped operand flags.  */
6166           #define SSA_OP_VIRTUAL_USES     (SSA_OP_VUSE | SSA_OP_VMAYUSE)
6167           #define SSA_OP_VIRTUAL_DEFS     (SSA_OP_VMAYDEF | SSA_OP_VMUSTDEF)
6168           #define SSA_OP_ALL_USES         (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
6169           #define SSA_OP_ALL_DEFS         (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
6170           #define SSA_OP_ALL_OPERANDS     (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
6171
6172  So if you want to look at the use pointers for all the `USE' and
6173 `VUSE' operands, you would do something like:
6174
6175        use_operand_p use_p;
6176        ssa_op_iter iter;
6177
6178        FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
6179          {
6180            process_use_ptr (use_p);
6181          }
6182
6183  The `_TREE_' macro is basically the same as the `USE' and `DEF'
6184 macros, only with the use or def dereferenced via `USE_FROM_PTR
6185 (use_p)' and `DEF_FROM_PTR (def_p)'.  Since we aren't using operand
6186 pointers, use and defs flags can be mixed.
6187
6188        tree var;
6189        ssa_op_iter iter;
6190
6191        FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE | SSA_OP_VMUSTDEF)
6192          {
6193             print_generic_expr (stderr, var, TDF_SLIM);
6194          }
6195
6196  `V_MAY_DEF's are broken into two flags, one for the `DEF' portion
6197 (`SSA_OP_VMAYDEF') and one for the USE portion (`SSA_OP_VMAYUSE').  If
6198 all you want to look at are the `V_MAY_DEF's together, there is a
6199 fourth iterator macro for this, which returns both a def_operand_p and
6200 a use_operand_p for each `V_MAY_DEF' in the statement.  Note that you
6201 don't need any flags for this one.
6202
6203        use_operand_p use_p;
6204        def_operand_p def_p;
6205        ssa_op_iter iter;
6206
6207        FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
6208          {
6209            my_code;
6210          }
6211
6212  `V_MUST_DEF's are broken into two flags, one for the `DEF' portion
6213 (`SSA_OP_VMUSTDEF') and one for the kill portion
6214 (`SSA_OP_VMUSTDEFKILL').  If all you want to look at are the
6215 `V_MUST_DEF's together, there is a fourth iterator macro for this,
6216 which returns both a def_operand_p and a use_operand_p for each
6217 `V_MUST_DEF' in the statement.  Note that you don't need any flags for
6218 this one.
6219
6220        use_operand_p kill_p;
6221        def_operand_p def_p;
6222        ssa_op_iter iter;
6223
6224        FOR_EACH_SSA_MUSTDEF_OPERAND (def_p, kill_p, stmt, iter)
6225          {
6226            my_code;
6227          }
6228
6229  There are many examples in the code as well, as well as the
6230 documentation in `tree-ssa-operands.h'.
6231
6232 \1f
6233 File: gccint.info,  Node: SSA,  Next: Alias analysis,  Prev: Statement Operands,  Up: Tree SSA
6234
6235 9.5 Static Single Assignment
6236 ============================
6237
6238 Most of the tree optimizers rely on the data flow information provided
6239 by the Static Single Assignment (SSA) form.  We implement the SSA form
6240 as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
6241 Zadeck.  Efficiently Computing Static Single Assignment Form and the
6242 Control Dependence Graph.  ACM Transactions on Programming Languages
6243 and Systems, 13(4):451-490, October 1991'.
6244
6245  The SSA form is based on the premise that program variables are
6246 assigned in exactly one location in the program.  Multiple assignments
6247 to the same variable create new versions of that variable.  Naturally,
6248 actual programs are seldom in SSA form initially because variables tend
6249 to be assigned multiple times.  The compiler modifies the program
6250 representation so that every time a variable is assigned in the code, a
6251 new version of the variable is created.  Different versions of the same
6252 variable are distinguished by subscripting the variable name with its
6253 version number.  Variables used in the right-hand side of expressions
6254 are renamed so that their version number matches that of the most
6255 recent assignment.
6256
6257  We represent variable versions using `SSA_NAME' nodes.  The renaming
6258 process in `tree-ssa.c' wraps every real and virtual operand with an
6259 `SSA_NAME' node which contains the version number and the statement
6260 that created the `SSA_NAME'.  Only definitions and virtual definitions
6261 may create new `SSA_NAME' nodes.
6262
6263  Sometimes, flow of control makes it impossible to determine what is the
6264 most recent version of a variable.  In these cases, the compiler
6265 inserts an artificial definition for that variable called "PHI
6266 function" or "PHI node".  This new definition merges all the incoming
6267 versions of the variable to create a new name for it.  For instance,
6268
6269      if (...)
6270        a_1 = 5;
6271      else if (...)
6272        a_2 = 2;
6273      else
6274        a_3 = 13;
6275
6276      # a_4 = PHI <a_1, a_2, a_3>
6277      return a_4;
6278
6279  Since it is not possible to determine which of the three branches will
6280 be taken at runtime, we don't know which of `a_1', `a_2' or `a_3' to
6281 use at the return statement.  So, the SSA renamer creates a new version
6282 `a_4' which is assigned the result of "merging" `a_1', `a_2' and `a_3'.
6283 Hence, PHI nodes mean "one of these operands.  I don't know which".
6284
6285  The following macros can be used to examine PHI nodes
6286
6287  -- Macro: PHI_RESULT (PHI)
6288      Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
6289
6290  -- Macro: PHI_NUM_ARGS (PHI)
6291      Returns the number of arguments in PHI.  This number is exactly
6292      the number of incoming edges to the basic block holding PHI.
6293
6294  -- Macro: PHI_ARG_ELT (PHI, I)
6295      Returns a tuple representing the Ith argument of PHI.  Each
6296      element of this tuple contains an `SSA_NAME' VAR and the incoming
6297      edge through which VAR flows.
6298
6299  -- Macro: PHI_ARG_EDGE (PHI, I)
6300      Returns the incoming edge for the Ith argument of PHI.
6301
6302  -- Macro: PHI_ARG_DEF (PHI, I)
6303      Returns the `SSA_NAME' for the Ith argument of PHI.
6304
6305 9.5.1 Preserving the SSA form
6306 -----------------------------
6307
6308 Some optimization passes make changes to the function that invalidate
6309 the SSA property.  This can happen when a pass has added new variables
6310 or changed the program so that variables that were previously aliased
6311 aren't anymore.
6312
6313  Whenever something like this happens, the affected variables must be
6314 renamed into SSA form again.  To do this, you should mark the new
6315 variables in the global bitmap `vars_to_rename'.  Once your pass has
6316 finished, the pass manager will invoke the SSA renamer to put the
6317 program into SSA once more.
6318
6319 9.5.2 Examining `SSA_NAME' nodes
6320 --------------------------------
6321
6322 The following macros can be used to examine `SSA_NAME' nodes
6323
6324  -- Macro: SSA_NAME_DEF_STMT (VAR)
6325      Returns the statement S that creates the `SSA_NAME' VAR.  If S is
6326      an empty statement (i.e., `IS_EMPTY_STMT (S)' returns `true'), it
6327      means that the first reference to this variable is a USE or a VUSE.
6328
6329  -- Macro: SSA_NAME_VERSION (VAR)
6330      Returns the version number of the `SSA_NAME' object VAR.
6331
6332 9.5.3 Walking use-def chains
6333 ----------------------------
6334
6335  -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA)
6336      Walks use-def chains starting at the `SSA_NAME' node VAR.  Calls
6337      function FN at each reaching definition found.  Function FN takes
6338      three arguments: VAR, its defining statement (DEF_STMT) and a
6339      generic pointer to whatever state information that FN may want to
6340      maintain (DATA).  Function FN is able to stop the walk by
6341      returning `true', otherwise in order to continue the walk, FN
6342      should return `false'.
6343
6344      Note, that if DEF_STMT is a `PHI' node, the semantics are slightly
6345      different.  For each argument ARG of the PHI node, this function
6346      will:
6347
6348        1. Walk the use-def chains for ARG.
6349
6350        2. Call `FN (ARG, PHI, DATA)'.
6351
6352      Note how the first argument to FN is no longer the original
6353      variable VAR, but the PHI argument currently being examined.  If
6354      FN wants to get at VAR, it should call `PHI_RESULT' (PHI).
6355
6356 9.5.4 Walking the dominator tree
6357 --------------------------------
6358
6359  -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB)
6360      This function walks the dominator tree for the current CFG calling
6361      a set of callback functions defined in STRUCT DOM_WALK_DATA in
6362      `domwalk.h'.  The call back functions you need to define give you
6363      hooks to execute custom code at various points during traversal:
6364
6365        1. Once to initialize any local data needed while processing
6366            BB and its children.  This local data is pushed into an
6367            internal stack which is automatically pushed and popped as
6368           the       walker traverses the dominator tree.
6369
6370        2. Once before traversing all the statements in the BB.
6371
6372        3. Once for every statement inside BB.
6373
6374        4. Once after traversing all the statements and before recursing
6375                into BB's dominator children.
6376
6377        5. It then recurses into all the dominator children of BB.
6378
6379        6. After recursing into all the dominator children of BB it
6380           can, optionally, traverse every statement in BB again
6381           (i.e., repeating steps 2 and 3).
6382
6383        7. Once after walking the statements in BB and BB's
6384           dominator children.  At this stage, the block local data stack
6385                is popped.
6386
6387 \1f
6388 File: gccint.info,  Node: Alias analysis,  Prev: SSA,  Up: Tree SSA
6389
6390 9.6 Alias analysis
6391 ==================
6392
6393 Alias analysis proceeds in 3 main phases:
6394
6395   1. Points-to and escape analysis.
6396
6397      This phase walks the use-def chains in the SSA web looking for
6398      three things:
6399
6400
6401
6402
6403         * Assignments of the form `P_i = &VAR'
6404
6405         * Assignments of the form P_i = malloc()
6406
6407         * Pointers and ADDR_EXPR that escape the current function.
6408
6409      The concept of `escaping' is the same one used in the Java world.
6410      When a pointer or an ADDR_EXPR escapes, it means that it has been
6411      exposed outside of the current function.  So, assignment to global
6412      variables, function arguments and returning a pointer are all
6413      escape sites.
6414
6415      This is where we are currently limited.  Since not everything is
6416      renamed into SSA, we lose track of escape properties when a
6417      pointer is stashed inside a field in a structure, for instance.
6418      In those cases, we are assuming that the pointer does escape.
6419
6420      We use escape analysis to determine whether a variable is
6421      call-clobbered.  Simply put, if an ADDR_EXPR escapes, then the
6422      variable is call-clobbered.  If a pointer P_i escapes, then all
6423      the variables pointed-to by P_i (and its memory tag) also escape.
6424
6425   2. Compute flow-sensitive aliases
6426
6427      We have two classes of memory tags.  Memory tags associated with
6428      the pointed-to data type of the pointers in the program.  These
6429      tags are called "type memory tag" (TMT).  The other class are
6430      those associated with SSA_NAMEs, called "name memory tag" (NMT).
6431      The basic idea is that when adding operands for an INDIRECT_REF
6432      *P_i, we will first check whether P_i has a name tag, if it does
6433      we use it, because that will have more precise aliasing
6434      information.  Otherwise, we use the standard type tag.
6435
6436      In this phase, we go through all the pointers we found in
6437      points-to analysis and create alias sets for the name memory tags
6438      associated with each pointer P_i.  If P_i escapes, we mark
6439      call-clobbered the variables it points to and its tag.
6440
6441   3. Compute flow-insensitive aliases
6442
6443      This pass will compare the alias set of every type memory tag and
6444      every addressable variable found in the program.  Given a type
6445      memory tag TMT and an addressable variable V.  If the alias sets
6446      of TMT and V conflict (as computed by may_alias_p), then V is
6447      marked as an alias tag and added to the alias set of TMT.
6448
6449  For instance, consider the following function:
6450
6451      foo (int i)
6452      {
6453        int *p, *q, a, b;
6454
6455        if (i > 10)
6456          p = &a;
6457        else
6458          q = &b;
6459
6460        *p = 3;
6461        *q = 5;
6462        a = b + 2;
6463        return *p;
6464      }
6465
6466  After aliasing analysis has finished, the type memory tag for pointer
6467 `p' will have two aliases, namely variables `a' and `b'.  Every time
6468 pointer `p' is dereferenced, we want to mark the operation as a
6469 potential reference to `a' and `b'.
6470
6471      foo (int i)
6472      {
6473        int *p, a, b;
6474
6475        if (i_2 > 10)
6476          p_4 = &a;
6477        else
6478          p_6 = &b;
6479        # p_1 = PHI <p_4(1), p_6(2)>;
6480
6481        # a_7 = V_MAY_DEF <a_3>;
6482        # b_8 = V_MAY_DEF <b_5>;
6483        *p_1 = 3;
6484
6485        # a_9 = V_MAY_DEF <a_7>
6486        # VUSE <b_8>
6487        a_9 = b_8 + 2;
6488
6489        # VUSE <a_9>;
6490        # VUSE <b_8>;
6491        return *p_1;
6492      }
6493
6494  In certain cases, the list of may aliases for a pointer may grow too
6495 large.  This may cause an explosion in the number of virtual operands
6496 inserted in the code.  Resulting in increased memory consumption and
6497 compilation time.
6498
6499  When the number of virtual operands needed to represent aliased loads
6500 and stores grows too large (configurable with `--param
6501 max-aliased-vops'), alias sets are grouped to avoid severe compile-time
6502 slow downs and memory consumption.  The alias grouping heuristic
6503 proceeds as follows:
6504
6505   1. Sort the list of pointers in decreasing number of contributed
6506      virtual operands.
6507
6508   2. Take the first pointer from the list and reverse the role of the
6509      memory tag and its aliases.  Usually, whenever an aliased variable
6510      Vi is found to alias with a memory tag T, we add Vi to the
6511      may-aliases set for T.  Meaning that after alias analysis, we will
6512      have:
6513
6514           may-aliases(T) = { V1, V2, V3, ..., Vn }
6515
6516      This means that every statement that references T, will get `n'
6517      virtual operands for each of the Vi tags.  But, when alias
6518      grouping is enabled, we make T an alias tag and add it to the
6519      alias set of all the Vi variables:
6520
6521           may-aliases(V1) = { T }
6522           may-aliases(V2) = { T }
6523           ...
6524           may-aliases(Vn) = { T }
6525
6526      This has two effects: (a) statements referencing T will only get a
6527      single virtual operand, and, (b) all the variables Vi will now
6528      appear to alias each other.  So, we lose alias precision to
6529      improve compile time.  But, in theory, a program with such a high
6530      level of aliasing should not be very optimizable in the first
6531      place.
6532
6533   3. Since variables may be in the alias set of more than one memory
6534      tag, the grouping done in step (2) needs to be extended to all the
6535      memory tags that have a non-empty intersection with the
6536      may-aliases set of tag T.  For instance, if we originally had
6537      these may-aliases sets:
6538
6539           may-aliases(T) = { V1, V2, V3 }
6540           may-aliases(R) = { V2, V4 }
6541
6542      In step (2) we would have reverted the aliases for T as:
6543
6544           may-aliases(V1) = { T }
6545           may-aliases(V2) = { T }
6546           may-aliases(V3) = { T }
6547
6548      But note that now V2 is no longer aliased with R.  We could add R
6549      to may-aliases(V2), but we are in the process of grouping aliases
6550      to reduce virtual operands so what we do is add V4 to the grouping
6551      to obtain:
6552
6553           may-aliases(V1) = { T }
6554           may-aliases(V2) = { T }
6555           may-aliases(V3) = { T }
6556           may-aliases(V4) = { T }
6557
6558   4. If the total number of virtual operands due to aliasing is still
6559      above the threshold set by max-alias-vops, go back to (2).
6560
6561 \1f
6562 File: gccint.info,  Node: RTL,  Next: Control Flow,  Prev: Trees,  Up: Top
6563
6564 10 RTL Representation
6565 *********************
6566
6567 Most of the work of the compiler is done on an intermediate
6568 representation called register transfer language.  In this language,
6569 the instructions to be output are described, pretty much one by one, in
6570 an algebraic form that describes what the instruction does.
6571
6572  RTL is inspired by Lisp lists.  It has both an internal form, made up
6573 of structures that point at other structures, and a textual form that
6574 is used in the machine description and in printed debugging dumps.  The
6575 textual form uses nested parentheses to indicate the pointers in the
6576 internal form.
6577
6578 * Menu:
6579
6580 * RTL Objects::       Expressions vs vectors vs strings vs integers.
6581 * RTL Classes::       Categories of RTL expression objects, and their structure.
6582 * Accessors::         Macros to access expression operands or vector elts.
6583 * Special Accessors:: Macros to access specific annotations on RTL.
6584 * Flags::             Other flags in an RTL expression.
6585 * Machine Modes::     Describing the size and format of a datum.
6586 * Constants::         Expressions with constant values.
6587 * Regs and Memory::   Expressions representing register contents or memory.
6588 * Arithmetic::        Expressions representing arithmetic on other expressions.
6589 * Comparisons::       Expressions representing comparison of expressions.
6590 * Bit-Fields::        Expressions representing bit-fields in memory or reg.
6591 * Vector Operations:: Expressions involving vector datatypes.
6592 * Conversions::       Extending, truncating, floating or fixing.
6593 * RTL Declarations::  Declaring volatility, constancy, etc.
6594 * Side Effects::      Expressions for storing in registers, etc.
6595 * Incdec::            Embedded side-effects for autoincrement addressing.
6596 * Assembler::         Representing `asm' with operands.
6597 * Insns::             Expression types for entire insns.
6598 * Calls::             RTL representation of function call insns.
6599 * Sharing::           Some expressions are unique; others *must* be copied.
6600 * Reading RTL::       Reading textual RTL from a file.
6601
6602 \1f
6603 File: gccint.info,  Node: RTL Objects,  Next: RTL Classes,  Up: RTL
6604
6605 10.1 RTL Object Types
6606 =====================
6607
6608 RTL uses five kinds of objects: expressions, integers, wide integers,
6609 strings and vectors.  Expressions are the most important ones.  An RTL
6610 expression ("RTX", for short) is a C structure, but it is usually
6611 referred to with a pointer; a type that is given the typedef name `rtx'.
6612
6613  An integer is simply an `int'; their written form uses decimal digits.
6614 A wide integer is an integral object whose type is `HOST_WIDE_INT';
6615 their written form uses decimal digits.
6616
6617  A string is a sequence of characters.  In core it is represented as a
6618 `char *' in usual C fashion, and it is written in C syntax as well.
6619 However, strings in RTL may never be null.  If you write an empty
6620 string in a machine description, it is represented in core as a null
6621 pointer rather than as a pointer to a null character.  In certain
6622 contexts, these null pointers instead of strings are valid.  Within RTL
6623 code, strings are most commonly found inside `symbol_ref' expressions,
6624 but they appear in other contexts in the RTL expressions that make up
6625 machine descriptions.
6626
6627  In a machine description, strings are normally written with double
6628 quotes, as you would in C.  However, strings in machine descriptions may
6629 extend over many lines, which is invalid C, and adjacent string
6630 constants are not concatenated as they are in C.  Any string constant
6631 may be surrounded with a single set of parentheses.  Sometimes this
6632 makes the machine description easier to read.
6633
6634  There is also a special syntax for strings, which can be useful when C
6635 code is embedded in a machine description.  Wherever a string can
6636 appear, it is also valid to write a C-style brace block.  The entire
6637 brace block, including the outermost pair of braces, is considered to be
6638 the string constant.  Double quote characters inside the braces are not
6639 special.  Therefore, if you write string constants in the C code, you
6640 need not escape each quote character with a backslash.
6641
6642  A vector contains an arbitrary number of pointers to expressions.  The
6643 number of elements in the vector is explicitly present in the vector.
6644 The written form of a vector consists of square brackets (`[...]')
6645 surrounding the elements, in sequence and with whitespace separating
6646 them.  Vectors of length zero are not created; null pointers are used
6647 instead.
6648
6649  Expressions are classified by "expression codes" (also called RTX
6650 codes).  The expression code is a name defined in `rtl.def', which is
6651 also (in uppercase) a C enumeration constant.  The possible expression
6652 codes and their meanings are machine-independent.  The code of an RTX
6653 can be extracted with the macro `GET_CODE (X)' and altered with
6654 `PUT_CODE (X, NEWCODE)'.
6655
6656  The expression code determines how many operands the expression
6657 contains, and what kinds of objects they are.  In RTL, unlike Lisp, you
6658 cannot tell by looking at an operand what kind of object it is.
6659 Instead, you must know from its context--from the expression code of
6660 the containing expression.  For example, in an expression of code
6661 `subreg', the first operand is to be regarded as an expression and the
6662 second operand as an integer.  In an expression of code `plus', there
6663 are two operands, both of which are to be regarded as expressions.  In
6664 a `symbol_ref' expression, there is one operand, which is to be
6665 regarded as a string.
6666
6667  Expressions are written as parentheses containing the name of the
6668 expression type, its flags and machine mode if any, and then the
6669 operands of the expression (separated by spaces).
6670
6671  Expression code names in the `md' file are written in lowercase, but
6672 when they appear in C code they are written in uppercase.  In this
6673 manual, they are shown as follows: `const_int'.
6674
6675  In a few contexts a null pointer is valid where an expression is
6676 normally wanted.  The written form of this is `(nil)'.
6677
6678 \1f
6679 File: gccint.info,  Node: RTL Classes,  Next: Accessors,  Prev: RTL Objects,  Up: RTL
6680
6681 10.2 RTL Classes and Formats
6682 ============================
6683
6684 The various expression codes are divided into several "classes", which
6685 are represented by single characters.  You can determine the class of
6686 an RTX code with the macro `GET_RTX_CLASS (CODE)'.  Currently,
6687 `rtx.def' defines these classes:
6688
6689 `RTX_OBJ'
6690      An RTX code that represents an actual object, such as a register
6691      (`REG') or a memory location (`MEM', `SYMBOL_REF').  `LO_SUM') is
6692      also included; instead, `SUBREG' and `STRICT_LOW_PART' are not in
6693      this class, but in class `x'.
6694
6695 `RTX_CONST_OBJ'
6696      An RTX code that represents a constant object.  `HIGH' is also
6697      included in this class.
6698
6699 `RTX_COMPARE'
6700      An RTX code for a non-symmetric comparison, such as `GEU' or `LT'.
6701
6702 `RTX_COMM_COMPARE'
6703      An RTX code for a symmetric (commutative) comparison, such as `EQ'
6704      or `ORDERED'.
6705
6706 `RTX_UNARY'
6707      An RTX code for a unary arithmetic operation, such as `NEG',
6708      `NOT', or `ABS'.  This category also includes value extension
6709      (sign or zero) and conversions between integer and floating point.
6710
6711 `RTX_COMM_ARITH'
6712      An RTX code for a commutative binary operation, such as `PLUS' or
6713      `AND'.  `NE' and `EQ' are comparisons, so they have class `<'.
6714
6715 `RTX_BIN_ARITH'
6716      An RTX code for a non-commutative binary operation, such as
6717      `MINUS', `DIV', or `ASHIFTRT'.
6718
6719 `RTX_BITFIELD_OPS'
6720      An RTX code for a bit-field operation.  Currently only
6721      `ZERO_EXTRACT' and `SIGN_EXTRACT'.  These have three inputs and
6722      are lvalues (so they can be used for insertion as well).  *Note
6723      Bit-Fields::.
6724
6725 `RTX_TERNARY'
6726      An RTX code for other three input operations.  Currently only
6727      `IF_THEN_ELSE' and `VEC_MERGE'.
6728
6729 `RTX_INSN'
6730      An RTX code for an entire instruction:  `INSN', `JUMP_INSN', and
6731      `CALL_INSN'.  *Note Insns::.
6732
6733 `RTX_MATCH'
6734      An RTX code for something that matches in insns, such as
6735      `MATCH_DUP'.  These only occur in machine descriptions.
6736
6737 `RTX_AUTOINC'
6738      An RTX code for an auto-increment addressing mode, such as
6739      `POST_INC'.
6740
6741 `RTX_EXTRA'
6742      All other RTX codes.  This category includes the remaining codes
6743      used only in machine descriptions (`DEFINE_*', etc.).  It also
6744      includes all the codes describing side effects (`SET', `USE',
6745      `CLOBBER', etc.) and the non-insns that may appear on an insn
6746      chain, such as `NOTE', `BARRIER', and `CODE_LABEL'.  `SUBREG' is
6747      also part of this class.
6748
6749  For each expression code, `rtl.def' specifies the number of contained
6750 objects and their kinds using a sequence of characters called the
6751 "format" of the expression code.  For example, the format of `subreg'
6752 is `ei'.
6753
6754  These are the most commonly used format characters:
6755
6756 `e'
6757      An expression (actually a pointer to an expression).
6758
6759 `i'
6760      An integer.
6761
6762 `w'
6763      A wide integer.
6764
6765 `s'
6766      A string.
6767
6768 `E'
6769      A vector of expressions.
6770
6771  A few other format characters are used occasionally:
6772
6773 `u'
6774      `u' is equivalent to `e' except that it is printed differently in
6775      debugging dumps.  It is used for pointers to insns.
6776
6777 `n'
6778      `n' is equivalent to `i' except that it is printed differently in
6779      debugging dumps.  It is used for the line number or code number of
6780      a `note' insn.
6781
6782 `S'
6783      `S' indicates a string which is optional.  In the RTL objects in
6784      core, `S' is equivalent to `s', but when the object is read, from
6785      an `md' file, the string value of this operand may be omitted.  An
6786      omitted string is taken to be the null string.
6787
6788 `V'
6789      `V' indicates a vector which is optional.  In the RTL objects in
6790      core, `V' is equivalent to `E', but when the object is read from
6791      an `md' file, the vector value of this operand may be omitted.  An
6792      omitted vector is effectively the same as a vector of no elements.
6793
6794 `B'
6795      `B' indicates a pointer to basic block structure.
6796
6797 `0'
6798      `0' means a slot whose contents do not fit any normal category.
6799      `0' slots are not printed at all in dumps, and are often used in
6800      special ways by small parts of the compiler.
6801
6802  There are macros to get the number of operands and the format of an
6803 expression code:
6804
6805 `GET_RTX_LENGTH (CODE)'
6806      Number of operands of an RTX of code CODE.
6807
6808 `GET_RTX_FORMAT (CODE)'
6809      The format of an RTX of code CODE, as a C string.
6810
6811  Some classes of RTX codes always have the same format.  For example, it
6812 is safe to assume that all comparison operations have format `ee'.
6813
6814 `1'
6815      All codes of this class have format `e'.
6816
6817 `<'
6818 `c'
6819 `2'
6820      All codes of these classes have format `ee'.
6821
6822 `b'
6823 `3'
6824      All codes of these classes have format `eee'.
6825
6826 `i'
6827      All codes of this class have formats that begin with `iuueiee'.
6828      *Note Insns::.  Note that not all RTL objects linked onto an insn
6829      chain are of class `i'.
6830
6831 `o'
6832 `m'
6833 `x'
6834      You can make no assumptions about the format of these codes.
6835
6836 \1f
6837 File: gccint.info,  Node: Accessors,  Next: Special Accessors,  Prev: RTL Classes,  Up: RTL
6838
6839 10.3 Access to Operands
6840 =======================
6841
6842 Operands of expressions are accessed using the macros `XEXP', `XINT',
6843 `XWINT' and `XSTR'.  Each of these macros takes two arguments: an
6844 expression-pointer (RTX) and an operand number (counting from zero).
6845 Thus,
6846
6847      XEXP (X, 2)
6848
6849 accesses operand 2 of expression X, as an expression.
6850
6851      XINT (X, 2)
6852
6853 accesses the same operand as an integer.  `XSTR', used in the same
6854 fashion, would access it as a string.
6855
6856  Any operand can be accessed as an integer, as an expression or as a
6857 string.  You must choose the correct method of access for the kind of
6858 value actually stored in the operand.  You would do this based on the
6859 expression code of the containing expression.  That is also how you
6860 would know how many operands there are.
6861
6862  For example, if X is a `subreg' expression, you know that it has two
6863 operands which can be correctly accessed as `XEXP (X, 0)' and `XINT (X,
6864 1)'.  If you did `XINT (X, 0)', you would get the address of the
6865 expression operand but cast as an integer; that might occasionally be
6866 useful, but it would be cleaner to write `(int) XEXP (X, 0)'.  `XEXP
6867 (X, 1)' would also compile without error, and would return the second,
6868 integer operand cast as an expression pointer, which would probably
6869 result in a crash when accessed.  Nothing stops you from writing `XEXP
6870 (X, 28)' either, but this will access memory past the end of the
6871 expression with unpredictable results.
6872
6873  Access to operands which are vectors is more complicated.  You can use
6874 the macro `XVEC' to get the vector-pointer itself, or the macros
6875 `XVECEXP' and `XVECLEN' to access the elements and length of a vector.
6876
6877 `XVEC (EXP, IDX)'
6878      Access the vector-pointer which is operand number IDX in EXP.
6879
6880 `XVECLEN (EXP, IDX)'
6881      Access the length (number of elements) in the vector which is in
6882      operand number IDX in EXP.  This value is an `int'.
6883
6884 `XVECEXP (EXP, IDX, ELTNUM)'
6885      Access element number ELTNUM in the vector which is in operand
6886      number IDX in EXP.  This value is an RTX.
6887
6888      It is up to you to make sure that ELTNUM is not negative and is
6889      less than `XVECLEN (EXP, IDX)'.
6890
6891  All the macros defined in this section expand into lvalues and
6892 therefore can be used to assign the operands, lengths and vector
6893 elements as well as to access them.
6894
6895 \1f
6896 File: gccint.info,  Node: Special Accessors,  Next: Flags,  Prev: Accessors,  Up: RTL
6897
6898 10.4 Access to Special Operands
6899 ===============================
6900
6901 Some RTL nodes have special annotations associated with them.
6902
6903 `MEM'
6904
6905     `MEM_ALIAS_SET (X)'
6906           If 0, X is not in any alias set, and may alias anything.
6907           Otherwise, X can only alias `MEM's in a conflicting alias
6908           set.  This value is set in a language-dependent manner in the
6909           front-end, and should not be altered in the back-end.  In
6910           some front-ends, these numbers may correspond in some way to
6911           types, or other language-level entities, but they need not,
6912           and the back-end makes no such assumptions.  These set
6913           numbers are tested with `alias_sets_conflict_p'.
6914
6915     `MEM_EXPR (X)'
6916           If this register is known to hold the value of some user-level
6917           declaration, this is that tree node.  It may also be a
6918           `COMPONENT_REF', in which case this is some field reference,
6919           and `TREE_OPERAND (X, 0)' contains the declaration, or
6920           another `COMPONENT_REF', or null if there is no compile-time
6921           object associated with the reference.
6922
6923     `MEM_OFFSET (X)'
6924           The offset from the start of `MEM_EXPR' as a `CONST_INT' rtx.
6925
6926     `MEM_SIZE (X)'
6927           The size in bytes of the memory reference as a `CONST_INT'
6928           rtx.  This is mostly relevant for `BLKmode' references as
6929           otherwise the size is implied by the mode.
6930
6931     `MEM_ALIGN (X)'
6932           The known alignment in bits of the memory reference.
6933
6934 `REG'
6935
6936     `ORIGINAL_REGNO (X)'
6937           This field holds the number the register "originally" had;
6938           for a pseudo register turned into a hard reg this will hold
6939           the old pseudo register number.
6940
6941     `REG_EXPR (X)'
6942           If this register is known to hold the value of some user-level
6943           declaration, this is that tree node.
6944
6945     `REG_OFFSET (X)'
6946           If this register is known to hold the value of some user-level
6947           declaration, this is the offset into that logical storage.
6948
6949 `SYMBOL_REF'
6950
6951     `SYMBOL_REF_DECL (X)'
6952           If the `symbol_ref' X was created for a `VAR_DECL' or a
6953           `FUNCTION_DECL', that tree is recorded here.  If this value is
6954           null, then X was created by back end code generation routines,
6955           and there is no associated front end symbol table entry.
6956
6957           `SYMBOL_REF_DECL' may also point to a tree of class `'c'',
6958           that is, some sort of constant.  In this case, the
6959           `symbol_ref' is an entry in the per-file constant pool;
6960           again, there is no associated front end symbol table entry.
6961
6962     `SYMBOL_REF_FLAGS (X)'
6963           In a `symbol_ref', this is used to communicate various
6964           predicates about the symbol.  Some of these are common enough
6965           to be computed by common code, some are specific to the
6966           target.  The common bits are:
6967
6968          `SYMBOL_FLAG_FUNCTION'
6969                Set if the symbol refers to a function.
6970
6971          `SYMBOL_FLAG_LOCAL'
6972                Set if the symbol is local to this "module".  See
6973                `TARGET_BINDS_LOCAL_P'.
6974
6975          `SYMBOL_FLAG_EXTERNAL'
6976                Set if this symbol is not defined in this translation
6977                unit.  Note that this is not the inverse of
6978                `SYMBOL_FLAG_LOCAL'.
6979
6980          `SYMBOL_FLAG_SMALL'
6981                Set if the symbol is located in the small data section.
6982                See `TARGET_IN_SMALL_DATA_P'.
6983
6984          `SYMBOL_REF_TLS_MODEL (X)'
6985                This is a multi-bit field accessor that returns the
6986                `tls_model' to be used for a thread-local storage
6987                symbol.  It returns zero for non-thread-local symbols.
6988
6989           Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for
6990           the target's use.
6991
6992 \1f
6993 File: gccint.info,  Node: Flags,  Next: Machine Modes,  Prev: Special Accessors,  Up: RTL
6994
6995 10.5 Flags in an RTL Expression
6996 ===============================
6997
6998 RTL expressions contain several flags (one-bit bit-fields) that are
6999 used in certain types of expression.  Most often they are accessed with
7000 the following macros, which expand into lvalues.
7001
7002 `CONSTANT_POOL_ADDRESS_P (X)'
7003      Nonzero in a `symbol_ref' if it refers to part of the current
7004      function's constant pool.  For most targets these addresses are in
7005      a `.rodata' section entirely separate from the function, but for
7006      some targets the addresses are close to the beginning of the
7007      function.  In either case GCC assumes these addresses can be
7008      addressed directly, perhaps with the help of base registers.
7009      Stored in the `unchanging' field and printed as `/u'.
7010
7011 `CONST_OR_PURE_CALL_P (X)'
7012      In a `call_insn', `note', or an `expr_list' for notes, indicates
7013      that the insn represents a call to a const or pure function.
7014      Stored in the `unchanging' field and printed as `/u'.
7015
7016 `INSN_ANNULLED_BRANCH_P (X)'
7017      In a `jump_insn', `call_insn', or `insn' indicates that the branch
7018      is an annulling one.  See the discussion under `sequence' below.
7019      Stored in the `unchanging' field and printed as `/u'.
7020
7021 `INSN_DELETED_P (X)'
7022      In an `insn', `call_insn', `jump_insn', `code_label', `barrier',
7023      or `note', nonzero if the insn has been deleted.  Stored in the
7024      `volatil' field and printed as `/v'.
7025
7026 `INSN_FROM_TARGET_P (X)'
7027      In an `insn' or `jump_insn' or `call_insn' in a delay slot of a
7028      branch, indicates that the insn is from the target of the branch.
7029      If the branch insn has `INSN_ANNULLED_BRANCH_P' set, this insn
7030      will only be executed if the branch is taken.  For annulled
7031      branches with `INSN_FROM_TARGET_P' clear, the insn will be
7032      executed only if the branch is not taken.  When
7033      `INSN_ANNULLED_BRANCH_P' is not set, this insn will always be
7034      executed.  Stored in the `in_struct' field and printed as `/s'.
7035
7036 `LABEL_OUTSIDE_LOOP_P (X)'
7037      In `label_ref' expressions, nonzero if this is a reference to a
7038      label that is outside the innermost loop containing the reference
7039      to the label.  Stored in the `in_struct' field and printed as `/s'.
7040
7041 `LABEL_PRESERVE_P (X)'
7042      In a `code_label' or `note', indicates that the label is
7043      referenced by code or data not visible to the RTL of a given
7044      function.  Labels referenced by a non-local goto will have this
7045      bit set.  Stored in the `in_struct' field and printed as `/s'.
7046
7047 `LABEL_REF_NONLOCAL_P (X)'
7048      In `label_ref' and `reg_label' expressions, nonzero if this is a
7049      reference to a non-local label.  Stored in the `volatil' field and
7050      printed as `/v'.
7051
7052 `MEM_IN_STRUCT_P (X)'
7053      In `mem' expressions, nonzero for reference to an entire structure,
7054      union or array, or to a component of one.  Zero for references to a
7055      scalar variable or through a pointer to a scalar.  If both this
7056      flag and `MEM_SCALAR_P' are clear, then we don't know whether this
7057      `mem' is in a structure or not.  Both flags should never be
7058      simultaneously set.  Stored in the `in_struct' field and printed
7059      as `/s'.
7060
7061 `MEM_KEEP_ALIAS_SET_P (X)'
7062      In `mem' expressions, 1 if we should keep the alias set for this
7063      mem unchanged when we access a component.  Set to 1, for example,
7064      when we are already in a non-addressable component of an aggregate.
7065      Stored in the `jump' field and printed as `/j'.
7066
7067 `MEM_SCALAR_P (X)'
7068      In `mem' expressions, nonzero for reference to a scalar known not
7069      to be a member of a structure, union, or array.  Zero for such
7070      references and for indirections through pointers, even pointers
7071      pointing to scalar types.  If both this flag and `MEM_IN_STRUCT_P'
7072      are clear, then we don't know whether this `mem' is in a structure
7073      or not.  Both flags should never be simultaneously set.  Stored in
7074      the `frame_related' field and printed as `/f'.
7075
7076 `MEM_VOLATILE_P (X)'
7077      In `mem', `asm_operands', and `asm_input' expressions, nonzero for
7078      volatile memory references.  Stored in the `volatil' field and
7079      printed as `/v'.
7080
7081 `MEM_NOTRAP_P (X)'
7082      In `mem', nonzero for memory references that will not trap.
7083      Stored in the `call' field and printed as `/c'.
7084
7085 `REG_FUNCTION_VALUE_P (X)'
7086      Nonzero in a `reg' if it is the place in which this function's
7087      value is going to be returned.  (This happens only in a hard
7088      register.)  Stored in the `integrated' field and printed as `/i'.
7089
7090 `REG_POINTER (X)'
7091      Nonzero in a `reg' if the register holds a pointer.  Stored in the
7092      `frame_related' field and printed as `/f'.
7093
7094 `REG_USERVAR_P (X)'
7095      In a `reg', nonzero if it corresponds to a variable present in the
7096      user's source code.  Zero for temporaries generated internally by
7097      the compiler.  Stored in the `volatil' field and printed as `/v'.
7098
7099      The same hard register may be used also for collecting the values
7100      of functions called by this one, but `REG_FUNCTION_VALUE_P' is zero
7101      in this kind of use.
7102
7103 `RTX_FRAME_RELATED_P (X)'
7104      Nonzero in an `insn', `call_insn', `jump_insn', `barrier', or
7105      `set' which is part of a function prologue and sets the stack
7106      pointer, sets the frame pointer, or saves a register.  This flag
7107      should also be set on an instruction that sets up a temporary
7108      register to use in place of the frame pointer.  Stored in the
7109      `frame_related' field and printed as `/f'.
7110
7111      In particular, on RISC targets where there are limits on the sizes
7112      of immediate constants, it is sometimes impossible to reach the
7113      register save area directly from the stack pointer.  In that case,
7114      a temporary register is used that is near enough to the register
7115      save area, and the Canonical Frame Address, i.e., DWARF2's logical
7116      frame pointer, register must (temporarily) be changed to be this
7117      temporary register.  So, the instruction that sets this temporary
7118      register must be marked as `RTX_FRAME_RELATED_P'.
7119
7120      If the marked instruction is overly complex (defined in terms of
7121      what `dwarf2out_frame_debug_expr' can handle), you will also have
7122      to create a `REG_FRAME_RELATED_EXPR' note and attach it to the
7123      instruction.  This note should contain a simple expression of the
7124      computation performed by this instruction, i.e., one that
7125      `dwarf2out_frame_debug_expr' can handle.
7126
7127      This flag is required for exception handling support on targets
7128      with RTL prologues.
7129
7130      `code_label', `insn_list', `const', or `note' if it resulted from
7131      an in-line function call.  Stored in the `integrated' field and
7132      printed as `/i'.
7133
7134 `MEM_READONLY_P (X)'
7135      Nonzero in a `mem', if the memory is statically allocated and
7136      read-only.
7137
7138      Read-only in this context means never modified during the lifetime
7139      of the program, not necessarily in ROM or in write-disabled pages.
7140      A common example of the later is a shared library's global offset
7141      table.  This table is initialized by the runtime loader, so the
7142      memory is technically writable, but after control is transfered
7143      from the runtime loader to the application, this memory will never
7144      be subsequently modified.
7145
7146      Stored in the `unchanging' field and printed as `/u'.
7147
7148 `SCHED_GROUP_P (X)'
7149      During instruction scheduling, in an `insn', `call_insn' or
7150      `jump_insn', indicates that the previous insn must be scheduled
7151      together with this insn.  This is used to ensure that certain
7152      groups of instructions will not be split up by the instruction
7153      scheduling pass, for example, `use' insns before a `call_insn' may
7154      not be separated from the `call_insn'.  Stored in the `in_struct'
7155      field and printed as `/s'.
7156
7157 `SET_IS_RETURN_P (X)'
7158      For a `set', nonzero if it is for a return.  Stored in the `jump'
7159      field and printed as `/j'.
7160
7161 `SIBLING_CALL_P (X)'
7162      For a `call_insn', nonzero if the insn is a sibling call.  Stored
7163      in the `jump' field and printed as `/j'.
7164
7165 `STRING_POOL_ADDRESS_P (X)'
7166      For a `symbol_ref' expression, nonzero if it addresses this
7167      function's string constant pool.  Stored in the `frame_related'
7168      field and printed as `/f'.
7169
7170 `SUBREG_PROMOTED_UNSIGNED_P (X)'
7171      Returns a value greater then zero for a `subreg' that has
7172      `SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
7173      kept zero-extended, zero if it is kept sign-extended, and less
7174      then zero if it is extended some other way via the `ptr_extend'
7175      instruction.  Stored in the `unchanging' field and `volatil'
7176      field, printed as `/u' and `/v'.  This macro may only be used to
7177      get the value it may not be used to change the value.  Use
7178      `SUBREG_PROMOTED_UNSIGNED_SET' to change the value.
7179
7180 `SUBREG_PROMOTED_UNSIGNED_SET (X)'
7181      Set the `unchanging' and `volatil' fields in a `subreg' to reflect
7182      zero, sign, or other extension.  If `volatil' is zero, then
7183      `unchanging' as nonzero means zero extension and as zero means
7184      sign extension.  If `volatil' is nonzero then some other type of
7185      extension was done via the `ptr_extend' instruction.
7186
7187 `SUBREG_PROMOTED_VAR_P (X)'
7188      Nonzero in a `subreg' if it was made when accessing an object that
7189      was promoted to a wider mode in accord with the `PROMOTED_MODE'
7190      machine description macro (*note Storage Layout::).  In this case,
7191      the mode of the `subreg' is the declared mode of the object and
7192      the mode of `SUBREG_REG' is the mode of the register that holds
7193      the object.  Promoted variables are always either sign- or
7194      zero-extended to the wider mode on every assignment.  Stored in
7195      the `in_struct' field and printed as `/s'.
7196
7197 `SYMBOL_REF_USED (X)'
7198      In a `symbol_ref', indicates that X has been used.  This is
7199      normally only used to ensure that X is only declared external
7200      once.  Stored in the `used' field.
7201
7202 `SYMBOL_REF_WEAK (X)'
7203      In a `symbol_ref', indicates that X has been declared weak.
7204      Stored in the `integrated' field and printed as `/i'.
7205
7206 `SYMBOL_REF_FLAG (X)'
7207      In a `symbol_ref', this is used as a flag for machine-specific
7208      purposes.  Stored in the `volatil' field and printed as `/v'.
7209
7210      Most uses of `SYMBOL_REF_FLAG' are historic and may be subsumed by
7211      `SYMBOL_REF_FLAGS'.  Certainly use of `SYMBOL_REF_FLAGS' is
7212      mandatory if the target requires more than one bit of storage.
7213
7214  These are the fields to which the above macros refer:
7215
7216 `call'
7217      In a `mem', 1 means that the memory reference will not trap.
7218
7219      In an RTL dump, this flag is represented as `/c'.
7220
7221 `frame_related'
7222      In an `insn' or `set' expression, 1 means that it is part of a
7223      function prologue and sets the stack pointer, sets the frame
7224      pointer, saves a register, or sets up a temporary register to use
7225      in place of the frame pointer.
7226
7227      In `reg' expressions, 1 means that the register holds a pointer.
7228
7229      In `symbol_ref' expressions, 1 means that the reference addresses
7230      this function's string constant pool.
7231
7232      In `mem' expressions, 1 means that the reference is to a scalar.
7233
7234      In an RTL dump, this flag is represented as `/f'.
7235
7236 `in_struct'
7237      In `mem' expressions, it is 1 if the memory datum referred to is
7238      all or part of a structure or array; 0 if it is (or might be) a
7239      scalar variable.  A reference through a C pointer has 0 because
7240      the pointer might point to a scalar variable.  This information
7241      allows the compiler to determine something about possible cases of
7242      aliasing.
7243
7244      In `reg' expressions, it is 1 if the register has its entire life
7245      contained within the test expression of some loop.
7246
7247      In `subreg' expressions, 1 means that the `subreg' is accessing an
7248      object that has had its mode promoted from a wider mode.
7249
7250      In `label_ref' expressions, 1 means that the referenced label is
7251      outside the innermost loop containing the insn in which the
7252      `label_ref' was found.
7253
7254      In `code_label' expressions, it is 1 if the label may never be
7255      deleted.  This is used for labels which are the target of
7256      non-local gotos.  Such a label that would have been deleted is
7257      replaced with a `note' of type `NOTE_INSN_DELETED_LABEL'.
7258
7259      In an `insn' during dead-code elimination, 1 means that the insn is
7260      dead code.
7261
7262      In an `insn' or `jump_insn' during reorg for an insn in the delay
7263      slot of a branch, 1 means that this insn is from the target of the
7264      branch.
7265
7266      In an `insn' during instruction scheduling, 1 means that this insn
7267      must be scheduled as part of a group together with the previous
7268      insn.
7269
7270      In an RTL dump, this flag is represented as `/s'.
7271
7272 `integrated'
7273      In an `insn', `insn_list', or `const', 1 means the RTL was
7274      produced by procedure integration.
7275
7276      In `reg' expressions, 1 means the register contains the value to
7277      be returned by the current function.  On machines that pass
7278      parameters in registers, the same register number may be used for
7279      parameters as well, but this flag is not set on such uses.
7280
7281      In `symbol_ref' expressions, 1 means the referenced symbol is weak.
7282
7283      In an RTL dump, this flag is represented as `/i'.
7284
7285 `jump'
7286      In a `mem' expression, 1 means we should keep the alias set for
7287      this mem unchanged when we access a component.
7288
7289      In a `set', 1 means it is for a return.
7290
7291      In a `call_insn', 1 means it is a sibling call.
7292
7293      In an RTL dump, this flag is represented as `/j'.
7294
7295 `unchanging'
7296      In `reg' and `mem' expressions, 1 means that the value of the
7297      expression never changes.
7298
7299      In `subreg' expressions, it is 1 if the `subreg' references an
7300      unsigned object whose mode has been promoted to a wider mode.
7301
7302      In an `insn' or `jump_insn' in the delay slot of a branch
7303      instruction, 1 means an annulling branch should be used.
7304
7305      In a `symbol_ref' expression, 1 means that this symbol addresses
7306      something in the per-function constant pool.
7307
7308      In a `call_insn', `note', or an `expr_list' of notes, 1 means that
7309      this instruction is a call to a const or pure function.
7310
7311      In an RTL dump, this flag is represented as `/u'.
7312
7313 `used'
7314      This flag is used directly (without an access macro) at the end of
7315      RTL generation for a function, to count the number of times an
7316      expression appears in insns.  Expressions that appear more than
7317      once are copied, according to the rules for shared structure
7318      (*note Sharing::).
7319
7320      For a `reg', it is used directly (without an access macro) by the
7321      leaf register renumbering code to ensure that each register is only
7322      renumbered once.
7323
7324      In a `symbol_ref', it indicates that an external declaration for
7325      the symbol has already been written.
7326
7327 `volatil'
7328      In a `mem', `asm_operands', or `asm_input' expression, it is 1 if
7329      the memory reference is volatile.  Volatile memory references may
7330      not be deleted, reordered or combined.
7331
7332      In a `symbol_ref' expression, it is used for machine-specific
7333      purposes.
7334
7335      In a `reg' expression, it is 1 if the value is a user-level
7336      variable.  0 indicates an internal compiler temporary.
7337
7338      In an `insn', 1 means the insn has been deleted.
7339
7340      In `label_ref' and `reg_label' expressions, 1 means a reference to
7341      a non-local label.
7342
7343      In an RTL dump, this flag is represented as `/v'.
7344
7345 \1f
7346 File: gccint.info,  Node: Machine Modes,  Next: Constants,  Prev: Flags,  Up: RTL
7347
7348 10.6 Machine Modes
7349 ==================
7350
7351 A machine mode describes a size of data object and the representation
7352 used for it.  In the C code, machine modes are represented by an
7353 enumeration type, `enum machine_mode', defined in `machmode.def'.  Each
7354 RTL expression has room for a machine mode and so do certain kinds of
7355 tree expressions (declarations and types, to be precise).
7356
7357  In debugging dumps and machine descriptions, the machine mode of an RTL
7358 expression is written after the expression code with a colon to separate
7359 them.  The letters `mode' which appear at the end of each machine mode
7360 name are omitted.  For example, `(reg:SI 38)' is a `reg' expression
7361 with machine mode `SImode'.  If the mode is `VOIDmode', it is not
7362 written at all.
7363
7364  Here is a table of machine modes.  The term "byte" below refers to an
7365 object of `BITS_PER_UNIT' bits (*note Storage Layout::).
7366
7367 `BImode'
7368      "Bit" mode represents a single bit, for predicate registers.
7369
7370 `QImode'
7371      "Quarter-Integer" mode represents a single byte treated as an
7372      integer.
7373
7374 `HImode'
7375      "Half-Integer" mode represents a two-byte integer.
7376
7377 `PSImode'
7378      "Partial Single Integer" mode represents an integer which occupies
7379      four bytes but which doesn't really use all four.  On some
7380      machines, this is the right mode to use for pointers.
7381
7382 `SImode'
7383      "Single Integer" mode represents a four-byte integer.
7384
7385 `PDImode'
7386      "Partial Double Integer" mode represents an integer which occupies
7387      eight bytes but which doesn't really use all eight.  On some
7388      machines, this is the right mode to use for certain pointers.
7389
7390 `DImode'
7391      "Double Integer" mode represents an eight-byte integer.
7392
7393 `TImode'
7394      "Tetra Integer" (?) mode represents a sixteen-byte integer.
7395
7396 `OImode'
7397      "Octa Integer" (?) mode represents a thirty-two-byte integer.
7398
7399 `QFmode'
7400      "Quarter-Floating" mode represents a quarter-precision (single
7401      byte) floating point number.
7402
7403 `HFmode'
7404      "Half-Floating" mode represents a half-precision (two byte)
7405      floating point number.
7406
7407 `TQFmode'
7408      "Three-Quarter-Floating" (?) mode represents a
7409      three-quarter-precision (three byte) floating point number.
7410
7411 `SFmode'
7412      "Single Floating" mode represents a four byte floating point
7413      number.  In the common case, of a processor with IEEE arithmetic
7414      and 8-bit bytes, this is a single-precision IEEE floating point
7415      number; it can also be used for double-precision (on processors
7416      with 16-bit bytes) and single-precision VAX and IBM types.
7417
7418 `DFmode'
7419      "Double Floating" mode represents an eight byte floating point
7420      number.  In the common case, of a processor with IEEE arithmetic
7421      and 8-bit bytes, this is a double-precision IEEE floating point
7422      number.
7423
7424 `XFmode'
7425      "Extended Floating" mode represents an IEEE extended floating point
7426      number.  This mode only has 80 meaningful bits (ten bytes).  Some
7427      processors require such numbers to be padded to twelve bytes,
7428      others to sixteen; this mode is used for either.
7429
7430 `TFmode'
7431      "Tetra Floating" mode represents a sixteen byte floating point
7432      number all 128 of whose bits are meaningful.  One common use is the
7433      IEEE quad-precision format.
7434
7435 `CCmode'
7436      "Condition Code" mode represents the value of a condition code,
7437      which is a machine-specific set of bits used to represent the
7438      result of a comparison operation.  Other machine-specific modes
7439      may also be used for the condition code.  These modes are not used
7440      on machines that use `cc0' (see *note Condition Code::).
7441
7442 `BLKmode'
7443      "Block" mode represents values that are aggregates to which none of
7444      the other modes apply.  In RTL, only memory references can have
7445      this mode, and only if they appear in string-move or vector
7446      instructions.  On machines which have no such instructions,
7447      `BLKmode' will not appear in RTL.
7448
7449 `VOIDmode'
7450      Void mode means the absence of a mode or an unspecified mode.  For
7451      example, RTL expressions of code `const_int' have mode `VOIDmode'
7452      because they can be taken to have whatever mode the context
7453      requires.  In debugging dumps of RTL, `VOIDmode' is expressed by
7454      the absence of any mode.
7455
7456 `QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
7457      These modes stand for a complex number represented as a pair of
7458      floating point values.  The floating point values are in `QFmode',
7459      `HFmode', `SFmode', `DFmode', `XFmode', and `TFmode', respectively.
7460
7461 `CQImode, CHImode, CSImode, CDImode, CTImode, COImode'
7462      These modes stand for a complex number represented as a pair of
7463      integer values.  The integer values are in `QImode', `HImode',
7464      `SImode', `DImode', `TImode', and `OImode', respectively.
7465
7466  The machine description defines `Pmode' as a C macro which expands
7467 into the machine mode used for addresses.  Normally this is the mode
7468 whose size is `BITS_PER_WORD', `SImode' on 32-bit machines.
7469
7470  The only modes which a machine description must support are `QImode',
7471 and the modes corresponding to `BITS_PER_WORD', `FLOAT_TYPE_SIZE' and
7472 `DOUBLE_TYPE_SIZE'.  The compiler will attempt to use `DImode' for
7473 8-byte structures and unions, but this can be prevented by overriding
7474 the definition of `MAX_FIXED_MODE_SIZE'.  Alternatively, you can have
7475 the compiler use `TImode' for 16-byte structures and unions.  Likewise,
7476 you can arrange for the C type `short int' to avoid using `HImode'.
7477
7478  Very few explicit references to machine modes remain in the compiler
7479 and these few references will soon be removed.  Instead, the machine
7480 modes are divided into mode classes.  These are represented by the
7481 enumeration type `enum mode_class' defined in `machmode.h'.  The
7482 possible mode classes are:
7483
7484 `MODE_INT'
7485      Integer modes.  By default these are `BImode', `QImode', `HImode',
7486      `SImode', `DImode', `TImode', and `OImode'.
7487
7488 `MODE_PARTIAL_INT'
7489      The "partial integer" modes, `PQImode', `PHImode', `PSImode' and
7490      `PDImode'.
7491
7492 `MODE_FLOAT'
7493      Floating point modes.  By default these are `QFmode', `HFmode',
7494      `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'.
7495
7496 `MODE_COMPLEX_INT'
7497      Complex integer modes.  (These are not currently implemented).
7498
7499 `MODE_COMPLEX_FLOAT'
7500      Complex floating point modes.  By default these are `QCmode',
7501      `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'.
7502
7503 `MODE_FUNCTION'
7504      Algol or Pascal function variables including a static chain.
7505      (These are not currently implemented).
7506
7507 `MODE_CC'
7508      Modes representing condition code values.  These are `CCmode' plus
7509      any modes listed in the `EXTRA_CC_MODES' macro.  *Note Jump
7510      Patterns::, also see *Note Condition Code::.
7511
7512 `MODE_RANDOM'
7513      This is a catchall mode class for modes which don't fit into the
7514      above classes.  Currently `VOIDmode' and `BLKmode' are in
7515      `MODE_RANDOM'.
7516
7517  Here are some C macros that relate to machine modes:
7518
7519 `GET_MODE (X)'
7520      Returns the machine mode of the RTX X.
7521
7522 `PUT_MODE (X, NEWMODE)'
7523      Alters the machine mode of the RTX X to be NEWMODE.
7524
7525 `NUM_MACHINE_MODES'
7526      Stands for the number of machine modes available on the target
7527      machine.  This is one greater than the largest numeric value of any
7528      machine mode.
7529
7530 `GET_MODE_NAME (M)'
7531      Returns the name of mode M as a string.
7532
7533 `GET_MODE_CLASS (M)'
7534      Returns the mode class of mode M.
7535
7536 `GET_MODE_WIDER_MODE (M)'
7537      Returns the next wider natural mode.  For example, the expression
7538      `GET_MODE_WIDER_MODE (QImode)' returns `HImode'.
7539
7540 `GET_MODE_SIZE (M)'
7541      Returns the size in bytes of a datum of mode M.
7542
7543 `GET_MODE_BITSIZE (M)'
7544      Returns the size in bits of a datum of mode M.
7545
7546 `GET_MODE_MASK (M)'
7547      Returns a bitmask containing 1 for all bits in a word that fit
7548      within mode M.  This macro can only be used for modes whose
7549      bitsize is less than or equal to `HOST_BITS_PER_INT'.
7550
7551 `GET_MODE_ALIGNMENT (M)'
7552      Return the required alignment, in bits, for an object of mode M.
7553
7554 `GET_MODE_UNIT_SIZE (M)'
7555      Returns the size in bytes of the subunits of a datum of mode M.
7556      This is the same as `GET_MODE_SIZE' except in the case of complex
7557      modes.  For them, the unit size is the size of the real or
7558      imaginary part.
7559
7560 `GET_MODE_NUNITS (M)'
7561      Returns the number of units contained in a mode, i.e.,
7562      `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'.
7563
7564 `GET_CLASS_NARROWEST_MODE (C)'
7565      Returns the narrowest mode in mode class C.
7566
7567  The global variables `byte_mode' and `word_mode' contain modes whose
7568 classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or
7569 `BITS_PER_WORD', respectively.  On 32-bit machines, these are `QImode'
7570 and `SImode', respectively.
7571
7572 \1f
7573 File: gccint.info,  Node: Constants,  Next: Regs and Memory,  Prev: Machine Modes,  Up: RTL
7574
7575 10.7 Constant Expression Types
7576 ==============================
7577
7578 The simplest RTL expressions are those that represent constant values.
7579
7580 `(const_int I)'
7581      This type of expression represents the integer value I.  I is
7582      customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)',
7583      which is equivalent to `XWINT (EXP, 0)'.
7584
7585      Constants generated for modes with fewer bits than `HOST_WIDE_INT'
7586      must be sign extended to full width (e.g., with `gen_int_mode').
7587
7588      There is only one expression object for the integer value zero; it
7589      is the value of the variable `const0_rtx'.  Likewise, the only
7590      expression for integer value one is found in `const1_rtx', the only
7591      expression for integer value two is found in `const2_rtx', and the
7592      only expression for integer value negative one is found in
7593      `constm1_rtx'.  Any attempt to create an expression of code
7594      `const_int' and value zero, one, two or negative one will return
7595      `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as
7596      appropriate.
7597
7598      Similarly, there is only one object for the integer whose value is
7599      `STORE_FLAG_VALUE'.  It is found in `const_true_rtx'.  If
7600      `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will
7601      point to the same object.  If `STORE_FLAG_VALUE' is -1,
7602      `const_true_rtx' and `constm1_rtx' will point to the same object.
7603
7604 `(const_double:M ADDR I0 I1 ...)'
7605      Represents either a floating-point constant of mode M or an
7606      integer constant too large to fit into `HOST_BITS_PER_WIDE_INT'
7607      bits but small enough to fit within twice that number of bits (GCC
7608      does not provide a mechanism to represent even larger constants).
7609      In the latter case, M will be `VOIDmode'.
7610
7611 `(const_vector:M [X0 X1 ...])'
7612      Represents a vector constant.  The square brackets stand for the
7613      vector containing the constant elements.  X0, X1 and so on are the
7614      `const_int' or `const_double' elements.
7615
7616      The number of units in a `const_vector' is obtained with the macro
7617      `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'.
7618
7619      Individual elements in a vector constant are accessed with the
7620      macro `CONST_VECTOR_ELT' as in `CONST_VECTOR_ELT (V, N)' where V
7621      is the vector constant and N is the element desired.
7622
7623      ADDR is used to contain the `mem' expression that corresponds to
7624      the location in memory that at which the constant can be found.  If
7625      it has not been allocated a memory location, but is on the chain
7626      of all `const_double' expressions in this compilation (maintained
7627      using an undisplayed field), ADDR contains `const0_rtx'.  If it is
7628      not on the chain, ADDR contains `cc0_rtx'.  ADDR is customarily
7629      accessed with the macro `CONST_DOUBLE_MEM' and the chain field via
7630      `CONST_DOUBLE_CHAIN'.
7631
7632      If M is `VOIDmode', the bits of the value are stored in I0 and I1.
7633      I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and
7634      I1 with `CONST_DOUBLE_HIGH'.
7635
7636      If the constant is floating point (regardless of its precision),
7637      then the number of integers used to store the value depends on the
7638      size of `REAL_VALUE_TYPE' (*note Floating Point::).  The integers
7639      represent a floating point number, but not precisely in the target
7640      machine's or host machine's floating point format.  To convert
7641      them to the precise bit pattern used by the target machine, use
7642      the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
7643      Output::).
7644
7645      The macro `CONST0_RTX (MODE)' refers to an expression with value 0
7646      in mode MODE.  If mode MODE is of mode class `MODE_INT', it
7647      returns `const0_rtx'.  If mode MODE is of mode class `MODE_FLOAT',
7648      it returns a `CONST_DOUBLE' expression in mode MODE.  Otherwise,
7649      it returns a `CONST_VECTOR' expression in mode MODE.  Similarly,
7650      the macro `CONST1_RTX (MODE)' refers to an expression with value 1
7651      in mode MODE and similarly for `CONST2_RTX'.  The `CONST1_RTX' and
7652      `CONST2_RTX' macros are undefined for vector modes.
7653
7654 `(const_string STR)'
7655      Represents a constant string with value STR.  Currently this is
7656      used only for insn attributes (*note Insn Attributes::) since
7657      constant strings in C are placed in memory.
7658
7659 `(symbol_ref:MODE SYMBOL)'
7660      Represents the value of an assembler label for data.  SYMBOL is a
7661      string that describes the name of the assembler label.  If it
7662      starts with a `*', the label is the rest of SYMBOL not including
7663      the `*'.  Otherwise, the label is SYMBOL, usually prefixed with
7664      `_'.
7665
7666      The `symbol_ref' contains a mode, which is usually `Pmode'.
7667      Usually that is the only mode for which a symbol is directly valid.
7668
7669 `(label_ref LABEL)'
7670      Represents the value of an assembler label for code.  It contains
7671      one operand, an expression, which must be a `code_label' or a
7672      `note' of type `NOTE_INSN_DELETED_LABEL' that appears in the
7673      instruction sequence to identify the place where the label should
7674      go.
7675
7676      The reason for using a distinct expression type for code label
7677      references is so that jump optimization can distinguish them.
7678
7679 `(const:M EXP)'
7680      Represents a constant that is the result of an assembly-time
7681      arithmetic computation.  The operand, EXP, is an expression that
7682      contains only constants (`const_int', `symbol_ref' and `label_ref'
7683      expressions) combined with `plus' and `minus'.  However, not all
7684      combinations are valid, since the assembler cannot do arbitrary
7685      arithmetic on relocatable symbols.
7686
7687      M should be `Pmode'.
7688
7689 `(high:M EXP)'
7690      Represents the high-order bits of EXP, usually a `symbol_ref'.
7691      The number of bits is machine-dependent and is normally the number
7692      of bits specified in an instruction that initializes the high
7693      order bits of a register.  It is used with `lo_sum' to represent
7694      the typical two-instruction sequence used in RISC machines to
7695      reference a global memory location.
7696
7697      M should be `Pmode'.
7698
7699 \1f
7700 File: gccint.info,  Node: Regs and Memory,  Next: Arithmetic,  Prev: Constants,  Up: RTL
7701
7702 10.8 Registers and Memory
7703 =========================
7704
7705 Here are the RTL expression types for describing access to machine
7706 registers and to main memory.
7707
7708 `(reg:M N)'
7709      For small values of the integer N (those that are less than
7710      `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
7711      register number N: a "hard register".  For larger values of N, it
7712      stands for a temporary value or "pseudo register".  The compiler's
7713      strategy is to generate code assuming an unlimited number of such
7714      pseudo registers, and later convert them into hard registers or
7715      into memory references.
7716
7717      M is the machine mode of the reference.  It is necessary because
7718      machines can generally refer to each register in more than one
7719      mode.  For example, a register may contain a full word but there
7720      may be instructions to refer to it as a half word or as a single
7721      byte, as well as instructions to refer to it as a floating point
7722      number of various precisions.
7723
7724      Even for a register that the machine can access in only one mode,
7725      the mode must always be specified.
7726
7727      The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
7728      description, since the number of hard registers on the machine is
7729      an invariant characteristic of the machine.  Note, however, that
7730      not all of the machine registers must be general registers.  All
7731      the machine registers that can be used for storage of data are
7732      given hard register numbers, even those that can be used only in
7733      certain instructions or can hold only certain types of data.
7734
7735      A hard register may be accessed in various modes throughout one
7736      function, but each pseudo register is given a natural mode and is
7737      accessed only in that mode.  When it is necessary to describe an
7738      access to a pseudo register using a nonnatural mode, a `subreg'
7739      expression is used.
7740
7741      A `reg' expression with a machine mode that specifies more than
7742      one word of data may actually stand for several consecutive
7743      registers.  If in addition the register number specifies a
7744      hardware register, then it actually represents several consecutive
7745      hardware registers starting with the specified one.
7746
7747      Each pseudo register number used in a function's RTL code is
7748      represented by a unique `reg' expression.
7749
7750      Some pseudo register numbers, those within the range of
7751      `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear
7752      during the RTL generation phase and are eliminated before the
7753      optimization phases.  These represent locations in the stack frame
7754      that cannot be determined until RTL generation for the function
7755      has been completed.  The following virtual register numbers are
7756      defined:
7757
7758     `VIRTUAL_INCOMING_ARGS_REGNUM'
7759           This points to the first word of the incoming arguments
7760           passed on the stack.  Normally these arguments are placed
7761           there by the caller, but the callee may have pushed some
7762           arguments that were previously passed in registers.
7763
7764           When RTL generation is complete, this virtual register is
7765           replaced by the sum of the register given by
7766           `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'.
7767
7768     `VIRTUAL_STACK_VARS_REGNUM'
7769           If `FRAME_GROWS_DOWNWARD' is defined, this points to
7770           immediately above the first variable on the stack.
7771           Otherwise, it points to the first variable on the stack.
7772
7773           `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
7774           register given by `FRAME_POINTER_REGNUM' and the value
7775           `STARTING_FRAME_OFFSET'.
7776
7777     `VIRTUAL_STACK_DYNAMIC_REGNUM'
7778           This points to the location of dynamically allocated memory
7779           on the stack immediately after the stack pointer has been
7780           adjusted by the amount of memory desired.
7781
7782           This virtual register is replaced by the sum of the register
7783           given by `STACK_POINTER_REGNUM' and the value
7784           `STACK_DYNAMIC_OFFSET'.
7785
7786     `VIRTUAL_OUTGOING_ARGS_REGNUM'
7787           This points to the location in the stack at which outgoing
7788           arguments should be written when the stack is pre-pushed
7789           (arguments pushed using push insns should always use
7790           `STACK_POINTER_REGNUM').
7791
7792           This virtual register is replaced by the sum of the register
7793           given by `STACK_POINTER_REGNUM' and the value
7794           `STACK_POINTER_OFFSET'.
7795
7796 `(subreg:M REG BYTENUM)'
7797      `subreg' expressions are used to refer to a register in a machine
7798      mode other than its natural one, or to refer to one register of a
7799      multi-part `reg' that actually refers to several registers.
7800
7801      Each pseudo-register has a natural mode.  If it is necessary to
7802      operate on it in a different mode--for example, to perform a
7803      fullword move instruction on a pseudo-register that contains a
7804      single byte--the pseudo-register must be enclosed in a `subreg'.
7805      In such a case, BYTENUM is zero.
7806
7807      Usually M is at least as narrow as the mode of REG, in which case
7808      it is restricting consideration to only the bits of REG that are
7809      in M.
7810
7811      Sometimes M is wider than the mode of REG.  These `subreg'
7812      expressions are often called "paradoxical".  They are used in
7813      cases where we want to refer to an object in a wider mode but do
7814      not care what value the additional bits have.  The reload pass
7815      ensures that paradoxical references are only made to hard
7816      registers.
7817
7818      The other use of `subreg' is to extract the individual registers of
7819      a multi-register value.  Machine modes such as `DImode' and
7820      `TImode' can indicate values longer than a word, values which
7821      usually require two or more consecutive registers.  To access one
7822      of the registers, use a `subreg' with mode `SImode' and a BYTENUM
7823      offset that says which register.
7824
7825      Storing in a non-paradoxical `subreg' has undefined results for
7826      bits belonging to the same word as the `subreg'.  This laxity makes
7827      it easier to generate efficient code for such instructions.  To
7828      represent an instruction that preserves all the bits outside of
7829      those in the `subreg', use `strict_low_part' around the `subreg'.
7830
7831      The compilation parameter `WORDS_BIG_ENDIAN', if set to 1, says
7832      that byte number zero is part of the most significant word;
7833      otherwise, it is part of the least significant word.
7834
7835      The compilation parameter `BYTES_BIG_ENDIAN', if set to 1, says
7836      that byte number zero is the most significant byte within a word;
7837      otherwise, it is the least significant byte within a word.
7838
7839      On a few targets, `FLOAT_WORDS_BIG_ENDIAN' disagrees with
7840      `WORDS_BIG_ENDIAN'.  However, most parts of the compiler treat
7841      floating point values as if they had the same endianness as
7842      integer values.  This works because they handle them solely as a
7843      collection of integer values, with no particular numerical value.
7844      Only real.c and the runtime libraries care about
7845      `FLOAT_WORDS_BIG_ENDIAN'.
7846
7847      Between the combiner pass and the reload pass, it is possible to
7848      have a paradoxical `subreg' which contains a `mem' instead of a
7849      `reg' as its first operand.  After the reload pass, it is also
7850      possible to have a non-paradoxical `subreg' which contains a
7851      `mem'; this usually occurs when the `mem' is a stack slot which
7852      replaced a pseudo register.
7853
7854      Note that it is not valid to access a `DFmode' value in `SFmode'
7855      using a `subreg'.  On some machines the most significant part of a
7856      `DFmode' value does not have the same format as a single-precision
7857      floating value.
7858
7859      It is also not valid to access a single word of a multi-word value
7860      in a hard register when less registers can hold the value than
7861      would be expected from its size.  For example, some 32-bit
7862      machines have floating-point registers that can hold an entire
7863      `DFmode' value.  If register 10 were such a register `(subreg:SI
7864      (reg:DF 10) 4)' would be invalid because there is no way to
7865      convert that reference to a single machine register.  The reload
7866      pass prevents `subreg' expressions such as these from being formed.
7867
7868      The first operand of a `subreg' expression is customarily accessed
7869      with the `SUBREG_REG' macro and the second operand is customarily
7870      accessed with the `SUBREG_BYTE' macro.
7871
7872 `(scratch:M)'
7873      This represents a scratch register that will be required for the
7874      execution of a single instruction and not used subsequently.  It is
7875      converted into a `reg' by either the local register allocator or
7876      the reload pass.
7877
7878      `scratch' is usually present inside a `clobber' operation (*note
7879      Side Effects::).
7880
7881 `(cc0)'
7882      This refers to the machine's condition code register.  It has no
7883      operands and may not have a machine mode.  There are two ways to
7884      use it:
7885
7886         * To stand for a complete set of condition code flags.  This is
7887           best on most machines, where each comparison sets the entire
7888           series of flags.
7889
7890           With this technique, `(cc0)' may be validly used in only two
7891           contexts: as the destination of an assignment (in test and
7892           compare instructions) and in comparison operators comparing
7893           against zero (`const_int' with value zero; that is to say,
7894           `const0_rtx').
7895
7896         * To stand for a single flag that is the result of a single
7897           condition.  This is useful on machines that have only a
7898           single flag bit, and in which comparison instructions must
7899           specify the condition to test.
7900
7901           With this technique, `(cc0)' may be validly used in only two
7902           contexts: as the destination of an assignment (in test and
7903           compare instructions) where the source is a comparison
7904           operator, and as the first operand of `if_then_else' (in a
7905           conditional branch).
7906
7907      There is only one expression object of code `cc0'; it is the value
7908      of the variable `cc0_rtx'.  Any attempt to create an expression of
7909      code `cc0' will return `cc0_rtx'.
7910
7911      Instructions can set the condition code implicitly.  On many
7912      machines, nearly all instructions set the condition code based on
7913      the value that they compute or store.  It is not necessary to
7914      record these actions explicitly in the RTL because the machine
7915      description includes a prescription for recognizing the
7916      instructions that do so (by means of the macro
7917      `NOTICE_UPDATE_CC').  *Note Condition Code::.  Only instructions
7918      whose sole purpose is to set the condition code, and instructions
7919      that use the condition code, need mention `(cc0)'.
7920
7921      On some machines, the condition code register is given a register
7922      number and a `reg' is used instead of `(cc0)'.  This is usually the
7923      preferable approach if only a small subset of instructions modify
7924      the condition code.  Other machines store condition codes in
7925      general registers; in such cases a pseudo register should be used.
7926
7927      Some machines, such as the SPARC and RS/6000, have two sets of
7928      arithmetic instructions, one that sets and one that does not set
7929      the condition code.  This is best handled by normally generating
7930      the instruction that does not set the condition code, and making a
7931      pattern that both performs the arithmetic and sets the condition
7932      code register (which would not be `(cc0)' in this case).  For
7933      examples, search for `addcc' and `andcc' in `sparc.md'.
7934
7935 `(pc)'
7936      This represents the machine's program counter.  It has no operands
7937      and may not have a machine mode.  `(pc)' may be validly used only
7938      in certain specific contexts in jump instructions.
7939
7940      There is only one expression object of code `pc'; it is the value
7941      of the variable `pc_rtx'.  Any attempt to create an expression of
7942      code `pc' will return `pc_rtx'.
7943
7944      All instructions that do not jump alter the program counter
7945      implicitly by incrementing it, but there is no need to mention
7946      this in the RTL.
7947
7948 `(mem:M ADDR ALIAS)'
7949      This RTX represents a reference to main memory at an address
7950      represented by the expression ADDR.  M specifies how large a unit
7951      of memory is accessed.  ALIAS specifies an alias set for the
7952      reference.  In general two items are in different alias sets if
7953      they cannot reference the same memory address.
7954
7955      The construct `(mem:BLK (scratch))' is considered to alias all
7956      other memories.  Thus it may be used as a memory barrier in
7957      epilogue stack deallocation patterns.
7958
7959 `(addressof:M REG)'
7960      This RTX represents a request for the address of register REG.
7961      Its mode is always `Pmode'.  If there are any `addressof'
7962      expressions left in the function after CSE, REG is forced into the
7963      stack and the `addressof' expression is replaced with a `plus'
7964      expression for the address of its stack slot.
7965
7966 \1f
7967 File: gccint.info,  Node: Arithmetic,  Next: Comparisons,  Prev: Regs and Memory,  Up: RTL
7968
7969 10.9 RTL Expressions for Arithmetic
7970 ===================================
7971
7972 Unless otherwise specified, all the operands of arithmetic expressions
7973 must be valid for mode M.  An operand is valid for mode M if it has
7974 mode M, or if it is a `const_int' or `const_double' and M is a mode of
7975 class `MODE_INT'.
7976
7977  For commutative binary operations, constants should be placed in the
7978 second operand.
7979
7980 `(plus:M X Y)'
7981 `(ss_plus:M X Y)'
7982 `(us_plus:M X Y)'
7983      These three expressions all represent the sum of the values
7984      represented by X and Y carried out in machine mode M.  They differ
7985      in their behavior on overflow of integer modes.  `plus' wraps
7986      round modulo the width of M; `ss_plus' saturates at the maximum
7987      signed value representable in M; `us_plus' saturates at the
7988      maximum unsigned value.
7989
7990 `(lo_sum:M X Y)'
7991      This expression represents the sum of X and the low-order bits of
7992      Y.  It is used with `high' (*note Constants::) to represent the
7993      typical two-instruction sequence used in RISC machines to
7994      reference a global memory location.
7995
7996      The number of low order bits is machine-dependent but is normally
7997      the number of bits in a `Pmode' item minus the number of bits set
7998      by `high'.
7999
8000      M should be `Pmode'.
8001
8002 `(minus:M X Y)'
8003 `(ss_minus:M X Y)'
8004 `(us_minus:M X Y)'
8005      These three expressions represent the result of subtracting Y from
8006      X, carried out in mode M.  Behavior on overflow is the same as for
8007      the three variants of `plus' (see above).
8008
8009 `(compare:M X Y)'
8010      Represents the result of subtracting Y from X for purposes of
8011      comparison.  The result is computed without overflow, as if with
8012      infinite precision.
8013
8014      Of course, machines can't really subtract with infinite precision.
8015      However, they can pretend to do so when only the sign of the
8016      result will be used, which is the case when the result is stored
8017      in the condition code.  And that is the _only_ way this kind of
8018      expression may validly be used: as a value to be stored in the
8019      condition codes, either `(cc0)' or a register.  *Note
8020      Comparisons::.
8021
8022      The mode M is not related to the modes of X and Y, but instead is
8023      the mode of the condition code value.  If `(cc0)' is used, it is
8024      `VOIDmode'.  Otherwise it is some mode in class `MODE_CC', often
8025      `CCmode'.  *Note Condition Code::.  If M is `VOIDmode' or
8026      `CCmode', the operation returns sufficient information (in an
8027      unspecified format) so that any comparison operator can be applied
8028      to the result of the `COMPARE' operation.  For other modes in
8029      class `MODE_CC', the operation only returns a subset of this
8030      information.
8031
8032      Normally, X and Y must have the same mode.  Otherwise, `compare'
8033      is valid only if the mode of X is in class `MODE_INT' and Y is a
8034      `const_int' or `const_double' with mode `VOIDmode'.  The mode of X
8035      determines what mode the comparison is to be done in; thus it must
8036      not be `VOIDmode'.
8037
8038      If one of the operands is a constant, it should be placed in the
8039      second operand and the comparison code adjusted as appropriate.
8040
8041      A `compare' specifying two `VOIDmode' constants is not valid since
8042      there is no way to know in what mode the comparison is to be
8043      performed; the comparison must either be folded during the
8044      compilation or the first operand must be loaded into a register
8045      while its mode is still known.
8046
8047 `(neg:M X)'
8048      Represents the negation (subtraction from zero) of the value
8049      represented by X, carried out in mode M.
8050
8051 `(mult:M X Y)'
8052      Represents the signed product of the values represented by X and Y
8053      carried out in machine mode M.
8054
8055      Some machines support a multiplication that generates a product
8056      wider than the operands.  Write the pattern for this as
8057
8058           (mult:M (sign_extend:M X) (sign_extend:M Y))
8059
8060      where M is wider than the modes of X and Y, which need not be the
8061      same.
8062
8063      For unsigned widening multiplication, use the same idiom, but with
8064      `zero_extend' instead of `sign_extend'.
8065
8066 `(div:M X Y)'
8067      Represents the quotient in signed division of X by Y, carried out
8068      in machine mode M.  If M is a floating point mode, it represents
8069      the exact quotient; otherwise, the integerized quotient.
8070
8071      Some machines have division instructions in which the operands and
8072      quotient widths are not all the same; you should represent such
8073      instructions using `truncate' and `sign_extend' as in,
8074
8075           (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
8076
8077 `(udiv:M X Y)'
8078      Like `div' but represents unsigned division.
8079
8080 `(mod:M X Y)'
8081 `(umod:M X Y)'
8082      Like `div' and `udiv' but represent the remainder instead of the
8083      quotient.
8084
8085 `(smin:M X Y)'
8086 `(smax:M X Y)'
8087      Represents the smaller (for `smin') or larger (for `smax') of X
8088      and Y, interpreted as signed values in mode M.  When used with
8089      floating point, if both operands are zeros, or if either operand
8090      is `NaN', then it is unspecified which of the two operands is
8091      returned as the result.
8092
8093 `(umin:M X Y)'
8094 `(umax:M X Y)'
8095      Like `smin' and `smax', but the values are interpreted as unsigned
8096      integers.
8097
8098 `(not:M X)'
8099      Represents the bitwise complement of the value represented by X,
8100      carried out in mode M, which must be a fixed-point machine mode.
8101
8102 `(and:M X Y)'
8103      Represents the bitwise logical-and of the values represented by X
8104      and Y, carried out in machine mode M, which must be a fixed-point
8105      machine mode.
8106
8107 `(ior:M X Y)'
8108      Represents the bitwise inclusive-or of the values represented by X
8109      and Y, carried out in machine mode M, which must be a fixed-point
8110      mode.
8111
8112 `(xor:M X Y)'
8113      Represents the bitwise exclusive-or of the values represented by X
8114      and Y, carried out in machine mode M, which must be a fixed-point
8115      mode.
8116
8117 `(ashift:M X C)'
8118      Represents the result of arithmetically shifting X left by C
8119      places.  X have mode M, a fixed-point machine mode.  C be a
8120      fixed-point mode or be a constant with mode `VOIDmode'; which mode
8121      is determined by the mode called for in the machine description
8122      entry for the left-shift instruction.  For example, on the VAX,
8123      the mode of C is `QImode' regardless of M.
8124
8125 `(lshiftrt:M X C)'
8126 `(ashiftrt:M X C)'
8127      Like `ashift' but for right shift.  Unlike the case for left shift,
8128      these two operations are distinct.
8129
8130 `(rotate:M X C)'
8131 `(rotatert:M X C)'
8132      Similar but represent left and right rotate.  If C is a constant,
8133      use `rotate'.
8134
8135 `(abs:M X)'
8136      Represents the absolute value of X, computed in mode M.
8137
8138 `(sqrt:M X)'
8139      Represents the square root of X, computed in mode M.  Most often M
8140      will be a floating point mode.
8141
8142 `(ffs:M X)'
8143      Represents one plus the index of the least significant 1-bit in X,
8144      represented as an integer of mode M.  (The value is zero if X is
8145      zero.)  The mode of X need not be M; depending on the target
8146      machine, various mode combinations may be valid.
8147
8148 `(clz:M X)'
8149      Represents the number of leading 0-bits in X, represented as an
8150      integer of mode M, starting at the most significant bit position.
8151      If X is zero, the value is determined by
8152      `CLZ_DEFINED_VALUE_AT_ZERO'.  Note that this is one of the few
8153      expressions that is not invariant under widening.  The mode of X
8154      will usually be an integer mode.
8155
8156 `(ctz:M X)'
8157      Represents the number of trailing 0-bits in X, represented as an
8158      integer of mode M, starting at the least significant bit position.
8159      If X is zero, the value is determined by
8160      `CTZ_DEFINED_VALUE_AT_ZERO'.  Except for this case, `ctz(x)' is
8161      equivalent to `ffs(X) - 1'.  The mode of X will usually be an
8162      integer mode.
8163
8164 `(popcount:M X)'
8165      Represents the number of 1-bits in X, represented as an integer of
8166      mode M.  The mode of X will usually be an integer mode.
8167
8168 `(parity:M X)'
8169      Represents the number of 1-bits modulo 2 in X, represented as an
8170      integer of mode M.  The mode of X will usually be an integer mode.
8171
8172 \1f
8173 File: gccint.info,  Node: Comparisons,  Next: Bit-Fields,  Prev: Arithmetic,  Up: RTL
8174
8175 10.10 Comparison Operations
8176 ===========================
8177
8178 Comparison operators test a relation on two operands and are considered
8179 to represent a machine-dependent nonzero value described by, but not
8180 necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::) if the relation
8181 holds, or zero if it does not, for comparison operators whose results
8182 have a `MODE_INT' mode, `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
8183 relation holds, or zero if it does not, for comparison operators that
8184 return floating-point values, and a vector of either
8185 `VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
8186 zeros if it does not, for comparison operators that return vector
8187 results.  The mode of the comparison operation is independent of the
8188 mode of the data being compared.  If the comparison operation is being
8189 tested (e.g., the first operand of an `if_then_else'), the mode must be
8190 `VOIDmode'.
8191
8192  There are two ways that comparison operations may be used.  The
8193 comparison operators may be used to compare the condition codes `(cc0)'
8194 against zero, as in `(eq (cc0) (const_int 0))'.  Such a construct
8195 actually refers to the result of the preceding instruction in which the
8196 condition codes were set.  The instruction setting the condition code
8197 must be adjacent to the instruction using the condition code; only
8198 `note' insns may separate them.
8199
8200  Alternatively, a comparison operation may directly compare two data
8201 objects.  The mode of the comparison is determined by the operands; they
8202 must both be valid for a common machine mode.  A comparison with both
8203 operands constant would be invalid as the machine mode could not be
8204 deduced from it, but such a comparison should never exist in RTL due to
8205 constant folding.
8206
8207  In the example above, if `(cc0)' were last set to `(compare X Y)', the
8208 comparison operation is identical to `(eq X Y)'.  Usually only one style
8209 of comparisons is supported on a particular machine, but the combine
8210 pass will try to merge the operations to produce the `eq' shown in case
8211 it exists in the context of the particular insn involved.
8212
8213  Inequality comparisons come in two flavors, signed and unsigned.  Thus,
8214 there are distinct expression codes `gt' and `gtu' for signed and
8215 unsigned greater-than.  These can produce different results for the same
8216 pair of integer values: for example, 1 is signed greater-than -1 but not
8217 unsigned greater-than, because -1 when regarded as unsigned is actually
8218 `0xffffffff' which is greater than 1.
8219
8220  The signed comparisons are also used for floating point values.
8221 Floating point comparisons are distinguished by the machine modes of
8222 the operands.
8223
8224 `(eq:M X Y)'
8225      `STORE_FLAG_VALUE' if the values represented by X and Y are equal,
8226      otherwise 0.
8227
8228 `(ne:M X Y)'
8229      `STORE_FLAG_VALUE' if the values represented by X and Y are not
8230      equal, otherwise 0.
8231
8232 `(gt:M X Y)'
8233      `STORE_FLAG_VALUE' if the X is greater than Y.  If they are
8234      fixed-point, the comparison is done in a signed sense.
8235
8236 `(gtu:M X Y)'
8237      Like `gt' but does unsigned comparison, on fixed-point numbers
8238      only.
8239
8240 `(lt:M X Y)'
8241 `(ltu:M X Y)'
8242      Like `gt' and `gtu' but test for "less than".
8243
8244 `(ge:M X Y)'
8245 `(geu:M X Y)'
8246      Like `gt' and `gtu' but test for "greater than or equal".
8247
8248 `(le:M X Y)'
8249 `(leu:M X Y)'
8250      Like `gt' and `gtu' but test for "less than or equal".
8251
8252 `(if_then_else COND THEN ELSE)'
8253      This is not a comparison operation but is listed here because it is
8254      always used in conjunction with a comparison operation.  To be
8255      precise, COND is a comparison expression.  This expression
8256      represents a choice, according to COND, between the value
8257      represented by THEN and the one represented by ELSE.
8258
8259      On most machines, `if_then_else' expressions are valid only to
8260      express conditional jumps.
8261
8262 `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
8263      Similar to `if_then_else', but more general.  Each of TEST1,
8264      TEST2, ... is performed in turn.  The result of this expression is
8265      the VALUE corresponding to the first nonzero test, or DEFAULT if
8266      none of the tests are nonzero expressions.
8267
8268      This is currently not valid for instruction patterns and is
8269      supported only for insn attributes.  *Note Insn Attributes::.
8270
8271 \1f
8272 File: gccint.info,  Node: Bit-Fields,  Next: Vector Operations,  Prev: Comparisons,  Up: RTL
8273
8274 10.11 Bit-Fields
8275 ================
8276
8277 Special expression codes exist to represent bit-field instructions.
8278
8279 `(sign_extract:M LOC SIZE POS)'
8280      This represents a reference to a sign-extended bit-field contained
8281      or starting in LOC (a memory or register reference).  The bit-field
8282      is SIZE bits wide and starts at bit POS.  The compilation option
8283      `BITS_BIG_ENDIAN' says which end of the memory unit POS counts
8284      from.
8285
8286      If LOC is in memory, its mode must be a single-byte integer mode.
8287      If LOC is in a register, the mode to use is specified by the
8288      operand of the `insv' or `extv' pattern (*note Standard Names::)
8289      and is usually a full-word integer mode, which is the default if
8290      none is specified.
8291
8292      The mode of POS is machine-specific and is also specified in the
8293      `insv' or `extv' pattern.
8294
8295      The mode M is the same as the mode that would be used for LOC if
8296      it were a register.
8297
8298      A `sign_extract' can not appear as an lvalue, or part thereof, in
8299      RTL.
8300
8301 `(zero_extract:M LOC SIZE POS)'
8302      Like `sign_extract' but refers to an unsigned or zero-extended
8303      bit-field.  The same sequence of bits are extracted, but they are
8304      filled to an entire word with zeros instead of by sign-extension.
8305
8306      Unlike `sign_extract', this type of expressions can be lvalues in
8307      RTL; they may appear on the left side of an assignment, indicating
8308      insertion of a value into the specified bit-field.
8309
8310 \1f
8311 File: gccint.info,  Node: Vector Operations,  Next: Conversions,  Prev: Bit-Fields,  Up: RTL
8312
8313 10.12 Vector Operations
8314 =======================
8315
8316 All normal RTL expressions can be used with vector modes; they are
8317 interpreted as operating on each part of the vector independently.
8318 Additionally, there are a few new expressions to describe specific
8319 vector operations.
8320
8321 `(vec_merge:M VEC1 VEC2 ITEMS)'
8322      This describes a merge operation between two vectors.  The result
8323      is a vector of mode M; its elements are selected from either VEC1
8324      or VEC2.  Which elements are selected is described by ITEMS, which
8325      is a bit mask represented by a `const_int'; a zero bit indicates
8326      the corresponding element in the result vector is taken from VEC2
8327      while a set bit indicates it is taken from VEC1.
8328
8329 `(vec_select:M VEC1 SELECTION)'
8330      This describes an operation that selects parts of a vector.  VEC1
8331      is the source vector, SELECTION is a `parallel' that contains a
8332      `const_int' for each of the subparts of the result vector, giving
8333      the number of the source subpart that should be stored into it.
8334
8335 `(vec_concat:M VEC1 VEC2)'
8336      Describes a vector concat operation.  The result is a
8337      concatenation of the vectors VEC1 and VEC2; its length is the sum
8338      of the lengths of the two inputs.
8339
8340 `(vec_duplicate:M VEC)'
8341      This operation converts a small vector into a larger one by
8342      duplicating the input values.  The output vector mode must have
8343      the same submodes as the input vector mode, and the number of
8344      output parts must be an integer multiple of the number of input
8345      parts.
8346
8347
8348 \1f
8349 File: gccint.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Vector Operations,  Up: RTL
8350
8351 10.13 Conversions
8352 =================
8353
8354 All conversions between machine modes must be represented by explicit
8355 conversion operations.  For example, an expression which is the sum of
8356 a byte and a full word cannot be written as `(plus:SI (reg:QI 34)
8357 (reg:SI 80))' because the `plus' operation requires two operands of the
8358 same machine mode.  Therefore, the byte-sized operand is enclosed in a
8359 conversion operation, as in
8360
8361      (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
8362
8363  The conversion operation is not a mere placeholder, because there may
8364 be more than one way of converting from a given starting mode to the
8365 desired final mode.  The conversion operation code says how to do it.
8366
8367  For all conversion operations, X must not be `VOIDmode' because the
8368 mode in which to do the conversion would not be known.  The conversion
8369 must either be done at compile-time or X must be placed into a register.
8370
8371 `(sign_extend:M X)'
8372      Represents the result of sign-extending the value X to machine
8373      mode M.  M must be a fixed-point mode and X a fixed-point value of
8374      a mode narrower than M.
8375
8376 `(zero_extend:M X)'
8377      Represents the result of zero-extending the value X to machine
8378      mode M.  M must be a fixed-point mode and X a fixed-point value of
8379      a mode narrower than M.
8380
8381 `(float_extend:M X)'
8382      Represents the result of extending the value X to machine mode M.
8383      M must be a floating point mode and X a floating point value of a
8384      mode narrower than M.
8385
8386 `(truncate:M X)'
8387      Represents the result of truncating the value X to machine mode M.
8388      M must be a fixed-point mode and X a fixed-point value of a mode
8389      wider than M.
8390
8391 `(ss_truncate:M X)'
8392      Represents the result of truncating the value X to machine mode M,
8393      using signed saturation in the case of overflow.  Both M and the
8394      mode of X must be fixed-point modes.
8395
8396 `(us_truncate:M X)'
8397      Represents the result of truncating the value X to machine mode M,
8398      using unsigned saturation in the case of overflow.  Both M and the
8399      mode of X must be fixed-point modes.
8400
8401 `(float_truncate:M X)'
8402      Represents the result of truncating the value X to machine mode M.
8403      M must be a floating point mode and X a floating point value of a
8404      mode wider than M.
8405
8406 `(float:M X)'
8407      Represents the result of converting fixed point value X, regarded
8408      as signed, to floating point mode M.
8409
8410 `(unsigned_float:M X)'
8411      Represents the result of converting fixed point value X, regarded
8412      as unsigned, to floating point mode M.
8413
8414 `(fix:M X)'
8415      When M is a fixed point mode, represents the result of converting
8416      floating point value X to mode M, regarded as signed.  How
8417      rounding is done is not specified, so this operation may be used
8418      validly in compiling C code only for integer-valued operands.
8419
8420 `(unsigned_fix:M X)'
8421      Represents the result of converting floating point value X to
8422      fixed point mode M, regarded as unsigned.  How rounding is done is
8423      not specified.
8424
8425 `(fix:M X)'
8426      When M is a floating point mode, represents the result of
8427      converting floating point value X (valid for mode M) to an
8428      integer, still represented in floating point mode M, by rounding
8429      towards zero.
8430
8431 \1f
8432 File: gccint.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL
8433
8434 10.14 Declarations
8435 ==================
8436
8437 Declaration expression codes do not represent arithmetic operations but
8438 rather state assertions about their operands.
8439
8440 `(strict_low_part (subreg:M (reg:N R) 0))'
8441      This expression code is used in only one context: as the
8442      destination operand of a `set' expression.  In addition, the
8443      operand of this expression must be a non-paradoxical `subreg'
8444      expression.
8445
8446      The presence of `strict_low_part' says that the part of the
8447      register which is meaningful in mode N, but is not part of mode M,
8448      is not to be altered.  Normally, an assignment to such a subreg is
8449      allowed to have undefined effects on the rest of the register when
8450      M is less than a word.
8451
8452 \1f
8453 File: gccint.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
8454
8455 10.15 Side Effect Expressions
8456 =============================
8457
8458 The expression codes described so far represent values, not actions.
8459 But machine instructions never produce values; they are meaningful only
8460 for their side effects on the state of the machine.  Special expression
8461 codes are used to represent side effects.
8462
8463  The body of an instruction is always one of these side effect codes;
8464 the codes described above, which represent values, appear only as the
8465 operands of these.
8466
8467 `(set LVAL X)'
8468      Represents the action of storing the value of X into the place
8469      represented by LVAL.  LVAL must be an expression representing a
8470      place that can be stored in: `reg' (or `subreg', `strict_low_part'
8471      or `zero_extract'), `mem', `pc', `parallel', or `cc0'.
8472
8473      If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then
8474      X must be valid for that mode.
8475
8476      If LVAL is a `reg' whose machine mode is less than the full width
8477      of the register, then it means that the part of the register
8478      specified by the machine mode is given the specified value and the
8479      rest of the register receives an undefined value.  Likewise, if
8480      LVAL is a `subreg' whose machine mode is narrower than the mode of
8481      the register, the rest of the register can be changed in an
8482      undefined way.
8483
8484      If LVAL is a `strict_low_part' of a subreg, then the part of the
8485      register specified by the machine mode of the `subreg' is given
8486      the value X and the rest of the register is not changed.
8487
8488      If LVAL is a `zero_extract', then the referenced part of the
8489      bit-field (a memory or register reference) specified by the
8490      `zero_extract' is given the value X and the rest of the bit-field
8491      is not changed.  Note that `sign_extract' can not appear in LVAL.
8492
8493      If LVAL is `(cc0)', it has no machine mode, and X may be either a
8494      `compare' expression or a value that may have any mode.  The
8495      latter case represents a "test" instruction.  The expression `(set
8496      (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare (reg:M N)
8497      (const_int 0)))'.  Use the former expression to save space during
8498      the compilation.
8499
8500      If LVAL is a `parallel', it is used to represent the case of a
8501      function returning a structure in multiple registers.  Each element
8502      of the `parallel' is an `expr_list' whose first operand is a `reg'
8503      and whose second operand is a `const_int' representing the offset
8504      (in bytes) into the structure at which the data in that register
8505      corresponds.  The first element may be null to indicate that the
8506      structure is also passed partly in memory.
8507
8508      If LVAL is `(pc)', we have a jump instruction, and the
8509      possibilities for X are very limited.  It may be a `label_ref'
8510      expression (unconditional jump).  It may be an `if_then_else'
8511      (conditional jump), in which case either the second or the third
8512      operand must be `(pc)' (for the case which does not jump) and the
8513      other of the two must be a `label_ref' (for the case which does
8514      jump).  X may also be a `mem' or `(plus:SI (pc) Y)', where Y may
8515      be a `reg' or a `mem'; these unusual patterns are used to
8516      represent jumps through branch tables.
8517
8518      If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not
8519      be `VOIDmode' and the mode of X must be valid for the mode of LVAL.
8520
8521      LVAL is customarily accessed with the `SET_DEST' macro and X with
8522      the `SET_SRC' macro.
8523
8524 `(return)'
8525      As the sole expression in a pattern, represents a return from the
8526      current function, on machines where this can be done with one
8527      instruction, such as VAXen.  On machines where a multi-instruction
8528      "epilogue" must be executed in order to return from the function,
8529      returning is done by jumping to a label which precedes the
8530      epilogue, and the `return' expression code is never used.
8531
8532      Inside an `if_then_else' expression, represents the value to be
8533      placed in `pc' to return to the caller.
8534
8535      Note that an insn pattern of `(return)' is logically equivalent to
8536      `(set (pc) (return))', but the latter form is never used.
8537
8538 `(call FUNCTION NARGS)'
8539      Represents a function call.  FUNCTION is a `mem' expression whose
8540      address is the address of the function to be called.  NARGS is an
8541      expression which can be used for two purposes: on some machines it
8542      represents the number of bytes of stack argument; on others, it
8543      represents the number of argument registers.
8544
8545      Each machine has a standard machine mode which FUNCTION must have.
8546      The machine description defines macro `FUNCTION_MODE' to expand
8547      into the requisite mode name.  The purpose of this mode is to
8548      specify what kind of addressing is allowed, on machines where the
8549      allowed kinds of addressing depend on the machine mode being
8550      addressed.
8551
8552 `(clobber X)'
8553      Represents the storing or possible storing of an unpredictable,
8554      undescribed value into X, which must be a `reg', `scratch',
8555      `parallel' or `mem' expression.
8556
8557      One place this is used is in string instructions that store
8558      standard values into particular hard registers.  It may not be
8559      worth the trouble to describe the values that are stored, but it
8560      is essential to inform the compiler that the registers will be
8561      altered, lest it attempt to keep data in them across the string
8562      instruction.
8563
8564      If X is `(mem:BLK (const_int 0))' or `(mem:BLK (scratch))', it
8565      means that all memory locations must be presumed clobbered.  If X
8566      is a `parallel', it has the same meaning as a `parallel' in a
8567      `set' expression.
8568
8569      Note that the machine description classifies certain hard
8570      registers as "call-clobbered".  All function call instructions are
8571      assumed by default to clobber these registers, so there is no need
8572      to use `clobber' expressions to indicate this fact.  Also, each
8573      function call is assumed to have the potential to alter any memory
8574      location, unless the function is declared `const'.
8575
8576      If the last group of expressions in a `parallel' are each a
8577      `clobber' expression whose arguments are `reg' or `match_scratch'
8578      (*note RTL Template::) expressions, the combiner phase can add the
8579      appropriate `clobber' expressions to an insn it has constructed
8580      when doing so will cause a pattern to be matched.
8581
8582      This feature can be used, for example, on a machine that whose
8583      multiply and add instructions don't use an MQ register but which
8584      has an add-accumulate instruction that does clobber the MQ
8585      register.  Similarly, a combined instruction might require a
8586      temporary register while the constituent instructions might not.
8587
8588      When a `clobber' expression for a register appears inside a
8589      `parallel' with other side effects, the register allocator
8590      guarantees that the register is unoccupied both before and after
8591      that insn.  However, the reload phase may allocate a register used
8592      for one of the inputs unless the `&' constraint is specified for
8593      the selected alternative (*note Modifiers::).  You can clobber
8594      either a specific hard register, a pseudo register, or a `scratch'
8595      expression; in the latter two cases, GCC will allocate a hard
8596      register that is available there for use as a temporary.
8597
8598      For instructions that require a temporary register, you should use
8599      `scratch' instead of a pseudo-register because this will allow the
8600      combiner phase to add the `clobber' when required.  You do this by
8601      coding (`clobber' (`match_scratch' ...)).  If you do clobber a
8602      pseudo register, use one which appears nowhere else--generate a
8603      new one each time.  Otherwise, you may confuse CSE.
8604
8605      There is one other known use for clobbering a pseudo register in a
8606      `parallel': when one of the input operands of the insn is also
8607      clobbered by the insn.  In this case, using the same pseudo
8608      register in the clobber and elsewhere in the insn produces the
8609      expected results.
8610
8611 `(use X)'
8612      Represents the use of the value of X.  It indicates that the value
8613      in X at this point in the program is needed, even though it may
8614      not be apparent why this is so.  Therefore, the compiler will not
8615      attempt to delete previous instructions whose only effect is to
8616      store a value in X.  X must be a `reg' expression.
8617
8618      In some situations, it may be tempting to add a `use' of a
8619      register in a `parallel' to describe a situation where the value
8620      of a special register will modify the behavior of the instruction.
8621      An hypothetical example might be a pattern for an addition that can
8622      either wrap around or use saturating addition depending on the
8623      value of a special control register:
8624
8625           (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
8626                                                  (reg:SI 4)] 0))
8627                      (use (reg:SI 1))])
8628
8629      This will not work, several of the optimizers only look at
8630      expressions locally; it is very likely that if you have multiple
8631      insns with identical inputs to the `unspec', they will be
8632      optimized away even if register 1 changes in between.
8633
8634      This means that `use' can _only_ be used to describe that the
8635      register is live.  You should think twice before adding `use'
8636      statements, more often you will want to use `unspec' instead.  The
8637      `use' RTX is most commonly useful to describe that a fixed
8638      register is implicitly used in an insn.  It is also safe to use in
8639      patterns where the compiler knows for other reasons that the result
8640      of the whole pattern is variable, such as `movmemM' or `call'
8641      patterns.
8642
8643      During the reload phase, an insn that has a `use' as pattern can
8644      carry a reg_equal note.  These `use' insns will be deleted before
8645      the reload phase exits.
8646
8647      During the delayed branch scheduling phase, X may be an insn.
8648      This indicates that X previously was located at this place in the
8649      code and its data dependencies need to be taken into account.
8650      These `use' insns will be deleted before the delayed branch
8651      scheduling phase exits.
8652
8653 `(parallel [X0 X1 ...])'
8654      Represents several side effects performed in parallel.  The square
8655      brackets stand for a vector; the operand of `parallel' is a vector
8656      of expressions.  X0, X1 and so on are individual side effect
8657      expressions--expressions of code `set', `call', `return',
8658      `clobber' or `use'.
8659
8660      "In parallel" means that first all the values used in the
8661      individual side-effects are computed, and second all the actual
8662      side-effects are performed.  For example,
8663
8664           (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
8665                      (set (mem:SI (reg:SI 1)) (reg:SI 1))])
8666
8667      says unambiguously that the values of hard register 1 and the
8668      memory location addressed by it are interchanged.  In both places
8669      where `(reg:SI 1)' appears as a memory address it refers to the
8670      value in register 1 _before_ the execution of the insn.
8671
8672      It follows that it is _incorrect_ to use `parallel' and expect the
8673      result of one `set' to be available for the next one.  For
8674      example, people sometimes attempt to represent a jump-if-zero
8675      instruction this way:
8676
8677           (parallel [(set (cc0) (reg:SI 34))
8678                      (set (pc) (if_then_else
8679                                   (eq (cc0) (const_int 0))
8680                                   (label_ref ...)
8681                                   (pc)))])
8682
8683      But this is incorrect, because it says that the jump condition
8684      depends on the condition code value _before_ this instruction, not
8685      on the new value that is set by this instruction.
8686
8687      Peephole optimization, which takes place together with final
8688      assembly code output, can produce insns whose patterns consist of
8689      a `parallel' whose elements are the operands needed to output the
8690      resulting assembler code--often `reg', `mem' or constant
8691      expressions.  This would not be well-formed RTL at any other stage
8692      in compilation, but it is ok then because no further optimization
8693      remains to be done.  However, the definition of the macro
8694      `NOTICE_UPDATE_CC', if any, must deal with such insns if you
8695      define any peephole optimizations.
8696
8697 `(cond_exec [COND EXPR])'
8698      Represents a conditionally executed expression.  The EXPR is
8699      executed only if the COND is nonzero.  The COND expression must
8700      not have side-effects, but the EXPR may very well have
8701      side-effects.
8702
8703 `(sequence [INSNS ...])'
8704      Represents a sequence of insns.  Each of the INSNS that appears in
8705      the vector is suitable for appearing in the chain of insns, so it
8706      must be an `insn', `jump_insn', `call_insn', `code_label',
8707      `barrier' or `note'.
8708
8709      A `sequence' RTX is never placed in an actual insn during RTL
8710      generation.  It represents the sequence of insns that result from a
8711      `define_expand' _before_ those insns are passed to `emit_insn' to
8712      insert them in the chain of insns.  When actually inserted, the
8713      individual sub-insns are separated out and the `sequence' is
8714      forgotten.
8715
8716      After delay-slot scheduling is completed, an insn and all the
8717      insns that reside in its delay slots are grouped together into a
8718      `sequence'.  The insn requiring the delay slot is the first insn
8719      in the vector; subsequent insns are to be placed in the delay slot.
8720
8721      `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
8722      indicate that a branch insn should be used that will conditionally
8723      annul the effect of the insns in the delay slots.  In such a case,
8724      `INSN_FROM_TARGET_P' indicates that the insn is from the target of
8725      the branch and should be executed only if the branch is taken;
8726      otherwise the insn should be executed only if the branch is not
8727      taken.  *Note Delay Slots::.
8728
8729  These expression codes appear in place of a side effect, as the body of
8730 an insn, though strictly speaking they do not always describe side
8731 effects as such:
8732
8733 `(asm_input S)'
8734      Represents literal assembler code as described by the string S.
8735
8736 `(unspec [OPERANDS ...] INDEX)'
8737 `(unspec_volatile [OPERANDS ...] INDEX)'
8738      Represents a machine-specific operation on OPERANDS.  INDEX
8739      selects between multiple machine-specific operations.
8740      `unspec_volatile' is used for volatile operations and operations
8741      that may trap; `unspec' is used for other operations.
8742
8743      These codes may appear inside a `pattern' of an insn, inside a
8744      `parallel', or inside an expression.
8745
8746 `(addr_vec:M [LR0 LR1 ...])'
8747      Represents a table of jump addresses.  The vector elements LR0,
8748      etc., are `label_ref' expressions.  The mode M specifies how much
8749      space is given to each address; normally M would be `Pmode'.
8750
8751 `(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
8752      Represents a table of jump addresses expressed as offsets from
8753      BASE.  The vector elements LR0, etc., are `label_ref' expressions
8754      and so is BASE.  The mode M specifies how much space is given to
8755      each address-difference.  MIN and MAX are set up by branch
8756      shortening and hold a label with a minimum and a maximum address,
8757      respectively.  FLAGS indicates the relative position of BASE, MIN
8758      and MAX to the containing insn and of MIN and MAX to BASE.  See
8759      rtl.def for details.
8760
8761 `(prefetch:M ADDR RW LOCALITY)'
8762      Represents prefetch of memory at address ADDR.  Operand RW is 1 if
8763      the prefetch is for data to be written, 0 otherwise; targets that
8764      do not support write prefetches should treat this as a normal
8765      prefetch.  Operand LOCALITY specifies the amount of temporal
8766      locality; 0 if there is none or 1, 2, or 3 for increasing levels
8767      of temporal locality; targets that do not support locality hints
8768      should ignore this.
8769
8770      This insn is used to minimize cache-miss latency by moving data
8771      into a cache before it is accessed.  It should use only
8772      non-faulting data prefetch instructions.
8773
8774 \1f
8775 File: gccint.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL
8776
8777 10.16 Embedded Side-Effects on Addresses
8778 ========================================
8779
8780 Six special side-effect expression codes appear as memory addresses.
8781
8782 `(pre_dec:M X)'
8783      Represents the side effect of decrementing X by a standard amount
8784      and represents also the value that X has after being decremented.
8785      X must be a `reg' or `mem', but most machines allow only a `reg'.
8786      M must be the machine mode for pointers on the machine in use.
8787      The amount X is decremented by is the length in bytes of the
8788      machine mode of the containing memory reference of which this
8789      expression serves as the address.  Here is an example of its use:
8790
8791           (mem:DF (pre_dec:SI (reg:SI 39)))
8792
8793      This says to decrement pseudo register 39 by the length of a
8794      `DFmode' value and use the result to address a `DFmode' value.
8795
8796 `(pre_inc:M X)'
8797      Similar, but specifies incrementing X instead of decrementing it.
8798
8799 `(post_dec:M X)'
8800      Represents the same side effect as `pre_dec' but a different
8801      value.  The value represented here is the value X has before being
8802      decremented.
8803
8804 `(post_inc:M X)'
8805      Similar, but specifies incrementing X instead of decrementing it.
8806
8807 `(post_modify:M X Y)'
8808      Represents the side effect of setting X to Y and represents X
8809      before X is modified.  X must be a `reg' or `mem', but most
8810      machines allow only a `reg'.  M must be the machine mode for
8811      pointers on the machine in use.
8812
8813      The expression Y must be one of three forms:
8814           `(plus:M X Z)', `(minus:M X Z)', or `(plus:M X I)',
8815      where Z is an index register and I is a constant.
8816
8817      Here is an example of its use:
8818
8819           (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
8820                                                     (reg:SI 48))))
8821
8822      This says to modify pseudo register 42 by adding the contents of
8823      pseudo register 48 to it, after the use of what ever 42 points to.
8824
8825 `(pre_modify:M X EXPR)'
8826      Similar except side effects happen before the use.
8827
8828  These embedded side effect expressions must be used with care.
8829 Instruction patterns may not use them.  Until the `flow' pass of the
8830 compiler, they may occur only to represent pushes onto the stack.  The
8831 `flow' pass finds cases where registers are incremented or decremented
8832 in one instruction and used as an address shortly before or after;
8833 these cases are then transformed to use pre- or post-increment or
8834 -decrement.
8835
8836  If a register used as the operand of these expressions is used in
8837 another address in an insn, the original value of the register is used.
8838 Uses of the register outside of an address are not permitted within the
8839 same insn as a use in an embedded side effect expression because such
8840 insns behave differently on different machines and hence must be treated
8841 as ambiguous and disallowed.
8842
8843  An instruction that can be represented with an embedded side effect
8844 could also be represented using `parallel' containing an additional
8845 `set' to describe how the address register is altered.  This is not
8846 done because machines that allow these operations at all typically
8847 allow them wherever a memory address is called for.  Describing them as
8848 additional parallel stores would require doubling the number of entries
8849 in the machine description.
8850
8851 \1f
8852 File: gccint.info,  Node: Assembler,  Next: Insns,  Prev: Incdec,  Up: RTL
8853
8854 10.17 Assembler Instructions as Expressions
8855 ===========================================
8856
8857 The RTX code `asm_operands' represents a value produced by a
8858 user-specified assembler instruction.  It is used to represent an `asm'
8859 statement with arguments.  An `asm' statement with a single output
8860 operand, like this:
8861
8862      asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
8863
8864 is represented using a single `asm_operands' RTX which represents the
8865 value that is stored in `outputvar':
8866
8867      (set RTX-FOR-OUTPUTVAR
8868           (asm_operands "foo %1,%2,%0" "a" 0
8869                         [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
8870                         [(asm_input:M1 "g")
8871                          (asm_input:M2 "di")]))
8872
8873 Here the operands of the `asm_operands' RTX are the assembler template
8874 string, the output-operand's constraint, the index-number of the output
8875 operand among the output operands specified, a vector of input operand
8876 RTX's, and a vector of input-operand modes and constraints.  The mode
8877 M1 is the mode of the sum `x+y'; M2 is that of `*z'.
8878
8879  When an `asm' statement has multiple output values, its insn has
8880 several such `set' RTX's inside of a `parallel'.  Each `set' contains a
8881 `asm_operands'; all of these share the same assembler template and
8882 vectors, but each contains the constraint for the respective output
8883 operand.  They are also distinguished by the output-operand index
8884 number, which is 0, 1, ... for successive output operands.
8885
8886 \1f
8887 File: gccint.info,  Node: Insns,  Next: Calls,  Prev: Assembler,  Up: RTL
8888
8889 10.18 Insns
8890 ===========
8891
8892 The RTL representation of the code for a function is a doubly-linked
8893 chain of objects called "insns".  Insns are expressions with special
8894 codes that are used for no other purpose.  Some insns are actual
8895 instructions; others represent dispatch tables for `switch' statements;
8896 others represent labels to jump to or various sorts of declarative
8897 information.
8898
8899  In addition to its own specific data, each insn must have a unique
8900 id-number that distinguishes it from all other insns in the current
8901 function (after delayed branch scheduling, copies of an insn with the
8902 same id-number may be present in multiple places in a function, but
8903 these copies will always be identical and will only appear inside a
8904 `sequence'), and chain pointers to the preceding and following insns.
8905 These three fields occupy the same position in every insn, independent
8906 of the expression code of the insn.  They could be accessed with `XEXP'
8907 and `XINT', but instead three special macros are always used:
8908
8909 `INSN_UID (I)'
8910      Accesses the unique id of insn I.
8911
8912 `PREV_INSN (I)'
8913      Accesses the chain pointer to the insn preceding I.  If I is the
8914      first insn, this is a null pointer.
8915
8916 `NEXT_INSN (I)'
8917      Accesses the chain pointer to the insn following I.  If I is the
8918      last insn, this is a null pointer.
8919
8920  The first insn in the chain is obtained by calling `get_insns'; the
8921 last insn is the result of calling `get_last_insn'.  Within the chain
8922 delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must
8923 always correspond: if INSN is not the first insn,
8924
8925      NEXT_INSN (PREV_INSN (INSN)) == INSN
8926
8927 is always true and if INSN is not the last insn,
8928
8929      PREV_INSN (NEXT_INSN (INSN)) == INSN
8930
8931 is always true.
8932
8933  After delay slot scheduling, some of the insns in the chain might be
8934 `sequence' expressions, which contain a vector of insns.  The value of
8935 `NEXT_INSN' in all but the last of these insns is the next insn in the
8936 vector; the value of `NEXT_INSN' of the last insn in the vector is the
8937 same as the value of `NEXT_INSN' for the `sequence' in which it is
8938 contained.  Similar rules apply for `PREV_INSN'.
8939
8940  This means that the above invariants are not necessarily true for insns
8941 inside `sequence' expressions.  Specifically, if INSN is the first insn
8942 in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn containing
8943 the `sequence' expression, as is the value of `PREV_INSN (NEXT_INSN
8944 (INSN))' if INSN is the last insn in the `sequence' expression.  You
8945 can use these expressions to find the containing `sequence' expression.
8946
8947  Every insn has one of the following six expression codes:
8948
8949 `insn'
8950      The expression code `insn' is used for instructions that do not
8951      jump and do not do function calls.  `sequence' expressions are
8952      always contained in insns with code `insn' even if one of those
8953      insns should jump or do function calls.
8954
8955      Insns with code `insn' have four additional fields beyond the three
8956      mandatory ones listed above.  These four are described in a table
8957      below.
8958
8959 `jump_insn'
8960      The expression code `jump_insn' is used for instructions that may
8961      jump (or, more generally, may contain `label_ref' expressions).  If
8962      there is an instruction to return from the current function, it is
8963      recorded as a `jump_insn'.
8964
8965      `jump_insn' insns have the same extra fields as `insn' insns,
8966      accessed in the same way and in addition contain a field
8967      `JUMP_LABEL' which is defined once jump optimization has completed.
8968
8969      For simple conditional and unconditional jumps, this field contains
8970      the `code_label' to which this insn will (possibly conditionally)
8971      branch.  In a more complex jump, `JUMP_LABEL' records one of the
8972      labels that the insn refers to; the only way to find the others is
8973      to scan the entire body of the insn.  In an `addr_vec',
8974      `JUMP_LABEL' is `NULL_RTX'.
8975
8976      Return insns count as jumps, but since they do not refer to any
8977      labels, their `JUMP_LABEL' is `NULL_RTX'.
8978
8979 `call_insn'
8980      The expression code `call_insn' is used for instructions that may
8981      do function calls.  It is important to distinguish these
8982      instructions because they imply that certain registers and memory
8983      locations may be altered unpredictably.
8984
8985      `call_insn' insns have the same extra fields as `insn' insns,
8986      accessed in the same way and in addition contain a field
8987      `CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
8988      `expr_list' expressions) containing `use' and `clobber'
8989      expressions that denote hard registers and `MEM's used or
8990      clobbered by the called function.
8991
8992      A `MEM' generally points to a stack slots in which arguments passed
8993      to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
8994      Register Arguments.) are stored.  If the argument is caller-copied
8995      (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
8996      will be mentioned in `CLOBBER' and `USE' entries; if it's
8997      callee-copied, only a `USE' will appear, and the `MEM' may point
8998      to addresses that are not stack slots.  These `MEM's are used only
8999      in libcalls, because, unlike regular function calls, `CONST_CALL's
9000      (which libcalls generally are, *note CONST_CALL_P: Flags.) aren't
9001      assumed to read and write all memory, so flow would consider the
9002      stores dead and remove them.  Note that, since a libcall must
9003      never return values in memory (*note RETURN_IN_MEMORY: Aggregate
9004      Return.), there will never be a `CLOBBER' for a memory address
9005      holding a return value.
9006
9007      `CLOBBER'ed registers in this list augment registers specified in
9008      `CALL_USED_REGISTERS' (*note Register Basics::).
9009
9010 `code_label'
9011      A `code_label' insn represents a label that a jump insn can jump
9012      to.  It contains two special fields of data in addition to the
9013      three standard ones.  `CODE_LABEL_NUMBER' is used to hold the
9014      "label number", a number that identifies this label uniquely among
9015      all the labels in the compilation (not just in the current
9016      function).  Ultimately, the label is represented in the assembler
9017      output as an assembler label, usually of the form `LN' where N is
9018      the label number.
9019
9020      When a `code_label' appears in an RTL expression, it normally
9021      appears within a `label_ref' which represents the address of the
9022      label, as a number.
9023
9024      Besides as a `code_label', a label can also be represented as a
9025      `note' of type `NOTE_INSN_DELETED_LABEL'.
9026
9027      The field `LABEL_NUSES' is only defined once the jump optimization
9028      phase is completed.  It contains the number of times this label is
9029      referenced in the current function.
9030
9031      The field `LABEL_KIND' differentiates four different types of
9032      labels: `LABEL_NORMAL', `LABEL_STATIC_ENTRY',
9033      `LABEL_GLOBAL_ENTRY', and `LABEL_WEAK_ENTRY'.  The only labels
9034      that do not have type `LABEL_NORMAL' are "alternate entry points"
9035      to the current function.  These may be static (visible only in the
9036      containing translation unit), global (exposed to all translation
9037      units), or weak (global, but can be overridden by another symbol
9038      with the same name).
9039
9040      Much of the compiler treats all four kinds of label identically.
9041      Some of it needs to know whether or not a label is an alternate
9042      entry point; for this purpose, the macro `LABEL_ALT_ENTRY_P' is
9043      provided.  It is equivalent to testing whether `LABEL_KIND (label)
9044      == LABEL_NORMAL'.  The only place that cares about the distinction
9045      between static, global, and weak alternate entry points, besides
9046      the front-end code that creates them, is the function
9047      `output_alternate_entry_point', in `final.c'.
9048
9049      To set the kind of a label, use the `SET_LABEL_KIND' macro.
9050
9051 `barrier'
9052      Barriers are placed in the instruction stream when control cannot
9053      flow past them.  They are placed after unconditional jump
9054      instructions to indicate that the jumps are unconditional and
9055      after calls to `volatile' functions, which do not return (e.g.,
9056      `exit').  They contain no information beyond the three standard
9057      fields.
9058
9059 `note'
9060      `note' insns are used to represent additional debugging and
9061      declarative information.  They contain two nonstandard fields, an
9062      integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
9063      string accessed with `NOTE_SOURCE_FILE'.
9064
9065      If `NOTE_LINE_NUMBER' is positive, the note represents the
9066      position of a source line and `NOTE_SOURCE_FILE' is the source
9067      file name that the line came from.  These notes control generation
9068      of line number data in the assembler output.
9069
9070      Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
9071      code with one of the following values (and `NOTE_SOURCE_FILE' must
9072      contain a null pointer):
9073
9074     `NOTE_INSN_DELETED'
9075           Such a note is completely ignorable.  Some passes of the
9076           compiler delete insns by altering them into notes of this
9077           kind.
9078
9079     `NOTE_INSN_DELETED_LABEL'
9080           This marks what used to be a `code_label', but was not used
9081           for other purposes than taking its address and was
9082           transformed to mark that no code jumps to it.
9083
9084     `NOTE_INSN_BLOCK_BEG'
9085     `NOTE_INSN_BLOCK_END'
9086           These types of notes indicate the position of the beginning
9087           and end of a level of scoping of variable names.  They
9088           control the output of debugging information.
9089
9090     `NOTE_INSN_EH_REGION_BEG'
9091     `NOTE_INSN_EH_REGION_END'
9092           These types of notes indicate the position of the beginning
9093           and end of a level of scoping for exception handling.
9094           `NOTE_BLOCK_NUMBER' identifies which `CODE_LABEL' or `note'
9095           of type `NOTE_INSN_DELETED_LABEL' is associated with the
9096           given region.
9097
9098     `NOTE_INSN_LOOP_BEG'
9099     `NOTE_INSN_LOOP_END'
9100           These types of notes indicate the position of the beginning
9101           and end of a `while' or `for' loop.  They enable the loop
9102           optimizer to find loops quickly.
9103
9104     `NOTE_INSN_LOOP_CONT'
9105           Appears at the place in a loop that `continue' statements
9106           jump to.
9107
9108     `NOTE_INSN_LOOP_VTOP'
9109           This note indicates the place in a loop where the exit test
9110           begins for those loops in which the exit test has been
9111           duplicated.  This position becomes another virtual start of
9112           the loop when considering loop invariants.
9113
9114     `NOTE_INSN_FUNCTION_END'
9115           Appears at the start of the function body, after the function
9116           prologue.
9117
9118     `NOTE_INSN_FUNCTION_END'
9119           Appears near the end of the function body, just before the
9120           label that `return' statements jump to (on machine where a
9121           single instruction does not suffice for returning).  This
9122           note may be deleted by jump optimization.
9123
9124     `NOTE_INSN_SETJMP'
9125           Appears following each call to `setjmp' or a related function.
9126
9127      These codes are printed symbolically when they appear in debugging
9128      dumps.
9129
9130  The machine mode of an insn is normally `VOIDmode', but some phases
9131 use the mode for various purposes.
9132
9133  The common subexpression elimination pass sets the mode of an insn to
9134 `QImode' when it is the first insn in a block that has already been
9135 processed.
9136
9137  The second Haifa scheduling pass, for targets that can multiple issue,
9138 sets the mode of an insn to `TImode' when it is believed that the
9139 instruction begins an issue group.  That is, when the instruction
9140 cannot issue simultaneously with the previous.  This may be relied on
9141 by later passes, in particular machine-dependent reorg.
9142
9143  Here is a table of the extra fields of `insn', `jump_insn' and
9144 `call_insn' insns:
9145
9146 `PATTERN (I)'
9147      An expression for the side effect performed by this insn.  This
9148      must be one of the following codes: `set', `call', `use',
9149      `clobber', `return', `asm_input', `asm_output', `addr_vec',
9150      `addr_diff_vec', `trap_if', `unspec', `unspec_volatile',
9151      `parallel', `cond_exec', or `sequence'.  If it is a `parallel',
9152      each element of the `parallel' must be one these codes, except that
9153      `parallel' expressions cannot be nested and `addr_vec' and
9154      `addr_diff_vec' are not permitted inside a `parallel' expression.
9155
9156 `INSN_CODE (I)'
9157      An integer that says which pattern in the machine description
9158      matches this insn, or -1 if the matching has not yet been
9159      attempted.
9160
9161      Such matching is never attempted and this field remains -1 on an
9162      insn whose pattern consists of a single `use', `clobber',
9163      `asm_input', `addr_vec' or `addr_diff_vec' expression.
9164
9165      Matching is also never attempted on insns that result from an `asm'
9166      statement.  These contain at least one `asm_operands' expression.
9167      The function `asm_noperands' returns a non-negative value for such
9168      insns.
9169
9170      In the debugging output, this field is printed as a number
9171      followed by a symbolic representation that locates the pattern in
9172      the `md' file as some small positive or negative offset from a
9173      named pattern.
9174
9175 `LOG_LINKS (I)'
9176      A list (chain of `insn_list' expressions) giving information about
9177      dependencies between instructions within a basic block.  Neither a
9178      jump nor a label may come between the related insns.
9179
9180 `REG_NOTES (I)'
9181      A list (chain of `expr_list' and `insn_list' expressions) giving
9182      miscellaneous information about the insn.  It is often information
9183      pertaining to the registers used in this insn.
9184
9185  The `LOG_LINKS' field of an insn is a chain of `insn_list'
9186 expressions.  Each of these has two operands: the first is an insn, and
9187 the second is another `insn_list' expression (the next one in the
9188 chain).  The last `insn_list' in the chain has a null pointer as second
9189 operand.  The significant thing about the chain is which insns appear
9190 in it (as first operands of `insn_list' expressions).  Their order is
9191 not significant.
9192
9193  This list is originally set up by the flow analysis pass; it is a null
9194 pointer until then.  Flow only adds links for those data dependencies
9195 which can be used for instruction combination.  For each insn, the flow
9196 analysis pass adds a link to insns which store into registers values
9197 that are used for the first time in this insn.  The instruction
9198 scheduling pass adds extra links so that every dependence will be
9199 represented.  Links represent data dependencies, antidependencies and
9200 output dependencies; the machine mode of the link distinguishes these
9201 three types: antidependencies have mode `REG_DEP_ANTI', output
9202 dependencies have mode `REG_DEP_OUTPUT', and data dependencies have
9203 mode `VOIDmode'.
9204
9205  The `REG_NOTES' field of an insn is a chain similar to the `LOG_LINKS'
9206 field but it includes `expr_list' expressions in addition to
9207 `insn_list' expressions.  There are several kinds of register notes,
9208 which are distinguished by the machine mode, which in a register note
9209 is really understood as being an `enum reg_note'.  The first operand OP
9210 of the note is data whose meaning depends on the kind of note.
9211
9212  The macro `REG_NOTE_KIND (X)' returns the kind of register note.  Its
9213 counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
9214 register note type of X to be NEWKIND.
9215
9216  Register notes are of three classes: They may say something about an
9217 input to an insn, they may say something about an output of an insn, or
9218 they may create a linkage between two insns.  There are also a set of
9219 values that are only used in `LOG_LINKS'.
9220
9221  These register notes annotate inputs to an insn:
9222
9223 `REG_DEAD'
9224      The value in OP dies in this insn; that is to say, altering the
9225      value immediately after this insn would not affect the future
9226      behavior of the program.
9227
9228      It does not follow that the register OP has no useful value after
9229      this insn since OP is not necessarily modified by this insn.
9230      Rather, no subsequent instruction uses the contents of OP.
9231
9232 `REG_UNUSED'
9233      The register OP being set by this insn will not be used in a
9234      subsequent insn.  This differs from a `REG_DEAD' note, which
9235      indicates that the value in an input will not be used subsequently.
9236      These two notes are independent; both may be present for the same
9237      register.
9238
9239 `REG_INC'
9240      The register OP is incremented (or decremented; at this level
9241      there is no distinction) by an embedded side effect inside this
9242      insn.  This means it appears in a `post_inc', `pre_inc',
9243      `post_dec' or `pre_dec' expression.
9244
9245 `REG_NONNEG'
9246      The register OP is known to have a nonnegative value when this
9247      insn is reached.  This is used so that decrement and branch until
9248      zero instructions, such as the m68k dbra, can be matched.
9249
9250      The `REG_NONNEG' note is added to insns only if the machine
9251      description has a `decrement_and_branch_until_zero' pattern.
9252
9253 `REG_NO_CONFLICT'
9254      This insn does not cause a conflict between OP and the item being
9255      set by this insn even though it might appear that it does.  In
9256      other words, if the destination register and OP could otherwise be
9257      assigned the same register, this insn does not prevent that
9258      assignment.
9259
9260      Insns with this note are usually part of a block that begins with a
9261      `clobber' insn specifying a multi-word pseudo register (which will
9262      be the output of the block), a group of insns that each set one
9263      word of the value and have the `REG_NO_CONFLICT' note attached,
9264      and a final insn that copies the output to itself with an attached
9265      `REG_EQUAL' note giving the expression being computed.  This block
9266      is encapsulated with `REG_LIBCALL' and `REG_RETVAL' notes on the
9267      first and last insns, respectively.
9268
9269 `REG_LABEL'
9270      This insn uses OP, a `code_label' or a `note' of type
9271      `NOTE_INSN_DELETED_LABEL', but is not a `jump_insn', or it is a
9272      `jump_insn' that required the label to be held in a register.  The
9273      presence of this note allows jump optimization to be aware that OP
9274      is, in fact, being used, and flow optimization to build an
9275      accurate flow graph.
9276
9277 `REG_CROSSING_JUMP'
9278      This insn is an branching instruction (either an unconditional
9279      jump or an indirect jump) which crosses between hot and cold
9280      sections, which could potentially be very far apart in the
9281      executable.  The presence of this note indicates to other
9282      optimizations that this this branching instruction should not be
9283      "collapsed" into a simpler branching construct.  It is used when
9284      the optimization to partition basic blocks into hot and cold
9285      sections is turned on.
9286
9287  The following notes describe attributes of outputs of an insn:
9288
9289 `REG_EQUIV'
9290 `REG_EQUAL'
9291      This note is only valid on an insn that sets only one register and
9292      indicates that that register will be equal to OP at run time; the
9293      scope of this equivalence differs between the two types of notes.
9294      The value which the insn explicitly copies into the register may
9295      look different from OP, but they will be equal at run time.  If the
9296      output of the single `set' is a `strict_low_part' expression, the
9297      note refers to the register that is contained in `SUBREG_REG' of
9298      the `subreg' expression.
9299
9300      For `REG_EQUIV', the register is equivalent to OP throughout the
9301      entire function, and could validly be replaced in all its
9302      occurrences by OP.  ("Validly" here refers to the data flow of the
9303      program; simple replacement may make some insns invalid.)  For
9304      example, when a constant is loaded into a register that is never
9305      assigned any other value, this kind of note is used.
9306
9307      When a parameter is copied into a pseudo-register at entry to a
9308      function, a note of this kind records that the register is
9309      equivalent to the stack slot where the parameter was passed.
9310      Although in this case the register may be set by other insns, it
9311      is still valid to replace the register by the stack slot
9312      throughout the function.
9313
9314      A `REG_EQUIV' note is also used on an instruction which copies a
9315      register parameter into a pseudo-register at entry to a function,
9316      if there is a stack slot where that parameter could be stored.
9317      Although other insns may set the pseudo-register, it is valid for
9318      the compiler to replace the pseudo-register by stack slot
9319      throughout the function, provided the compiler ensures that the
9320      stack slot is properly initialized by making the replacement in
9321      the initial copy instruction as well.  This is used on machines
9322      for which the calling convention allocates stack space for
9323      register parameters.  See `REG_PARM_STACK_SPACE' in *Note Stack
9324      Arguments::.
9325
9326      In the case of `REG_EQUAL', the register that is set by this insn
9327      will be equal to OP at run time at the end of this insn but not
9328      necessarily elsewhere in the function.  In this case, OP is
9329      typically an arithmetic expression.  For example, when a sequence
9330      of insns such as a library call is used to perform an arithmetic
9331      operation, this kind of note is attached to the insn that produces
9332      or copies the final value.
9333
9334      These two notes are used in different ways by the compiler passes.
9335      `REG_EQUAL' is used by passes prior to register allocation (such as
9336      common subexpression elimination and loop optimization) to tell
9337      them how to think of that value.  `REG_EQUIV' notes are used by
9338      register allocation to indicate that there is an available
9339      substitute expression (either a constant or a `mem' expression for
9340      the location of a parameter on the stack) that may be used in
9341      place of a register if insufficient registers are available.
9342
9343      Except for stack homes for parameters, which are indicated by a
9344      `REG_EQUIV' note and are not useful to the early optimization
9345      passes and pseudo registers that are equivalent to a memory
9346      location throughout their entire life, which is not detected until
9347      later in the compilation, all equivalences are initially indicated
9348      by an attached `REG_EQUAL' note.  In the early stages of register
9349      allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note
9350      if OP is a constant and the insn represents the only set of its
9351      destination register.
9352
9353      Thus, compiler passes prior to register allocation need only check
9354      for `REG_EQUAL' notes and passes subsequent to register allocation
9355      need only check for `REG_EQUIV' notes.
9356
9357  These notes describe linkages between insns.  They occur in pairs: one
9358 insn has one of a pair of notes that points to a second insn, which has
9359 the inverse note pointing back to the first insn.
9360
9361 `REG_RETVAL'
9362      This insn copies the value of a multi-insn sequence (for example, a
9363      library call), and OP is the first insn of the sequence (for a
9364      library call, the first insn that was generated to set up the
9365      arguments for the library call).
9366
9367      Loop optimization uses this note to treat such a sequence as a
9368      single operation for code motion purposes and flow analysis uses
9369      this note to delete such sequences whose results are dead.
9370
9371      A `REG_EQUAL' note will also usually be attached to this insn to
9372      provide the expression being computed by the sequence.
9373
9374      These notes will be deleted after reload, since they are no longer
9375      accurate or useful.
9376
9377 `REG_LIBCALL'
9378      This is the inverse of `REG_RETVAL': it is placed on the first
9379      insn of a multi-insn sequence, and it points to the last one.
9380
9381      These notes are deleted after reload, since they are no longer
9382      useful or accurate.
9383
9384 `REG_CC_SETTER'
9385 `REG_CC_USER'
9386      On machines that use `cc0', the insns which set and use `cc0' set
9387      and use `cc0' are adjacent.  However, when branch delay slot
9388      filling is done, this may no longer be true.  In this case a
9389      `REG_CC_USER' note will be placed on the insn setting `cc0' to
9390      point to the insn using `cc0' and a `REG_CC_SETTER' note will be
9391      placed on the insn using `cc0' to point to the insn setting `cc0'.
9392
9393  These values are only used in the `LOG_LINKS' field, and indicate the
9394 type of dependency that each link represents.  Links which indicate a
9395 data dependence (a read after write dependence) do not use any code,
9396 they simply have mode `VOIDmode', and are printed without any
9397 descriptive text.
9398
9399 `REG_DEP_ANTI'
9400      This indicates an anti dependence (a write after read dependence).
9401
9402 `REG_DEP_OUTPUT'
9403      This indicates an output dependence (a write after write
9404      dependence).
9405
9406  These notes describe information gathered from gcov profile data.  They
9407 are stored in the `REG_NOTES' field of an insn as an `expr_list'.
9408
9409 `REG_BR_PROB'
9410      This is used to specify the ratio of branches to non-branches of a
9411      branch insn according to the profile data.  The value is stored as
9412      a value between 0 and REG_BR_PROB_BASE; larger values indicate a
9413      higher probability that the branch will be taken.
9414
9415 `REG_BR_PRED'
9416      These notes are found in JUMP insns after delayed branch scheduling
9417      has taken place.  They indicate both the direction and the
9418      likelihood of the JUMP.  The format is a bitmask of ATTR_FLAG_*
9419      values.
9420
9421 `REG_FRAME_RELATED_EXPR'
9422      This is used on an RTX_FRAME_RELATED_P insn wherein the attached
9423      expression is used in place of the actual insn pattern.  This is
9424      done in cases where the pattern is either complex or misleading.
9425
9426  For convenience, the machine mode in an `insn_list' or `expr_list' is
9427 printed using these symbolic codes in debugging dumps.
9428
9429  The only difference between the expression codes `insn_list' and
9430 `expr_list' is that the first operand of an `insn_list' is assumed to
9431 be an insn and is printed in debugging dumps as the insn's unique id;
9432 the first operand of an `expr_list' is printed in the ordinary way as
9433 an expression.
9434
9435 \1f
9436 File: gccint.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
9437
9438 10.19 RTL Representation of Function-Call Insns
9439 ===============================================
9440
9441 Insns that call subroutines have the RTL expression code `call_insn'.
9442 These insns must satisfy special rules, and their bodies must use a
9443 special RTL expression code, `call'.
9444
9445  A `call' expression has two operands, as follows:
9446
9447      (call (mem:FM ADDR) NBYTES)
9448
9449 Here NBYTES is an operand that represents the number of bytes of
9450 argument data being passed to the subroutine, FM is a machine mode
9451 (which must equal as the definition of the `FUNCTION_MODE' macro in the
9452 machine description) and ADDR represents the address of the subroutine.
9453
9454  For a subroutine that returns no value, the `call' expression as shown
9455 above is the entire body of the insn, except that the insn might also
9456 contain `use' or `clobber' expressions.
9457
9458  For a subroutine that returns a value whose mode is not `BLKmode', the
9459 value is returned in a hard register.  If this register's number is R,
9460 then the body of the call insn looks like this:
9461
9462      (set (reg:M R)
9463           (call (mem:FM ADDR) NBYTES))
9464
9465 This RTL expression makes it clear (to the optimizer passes) that the
9466 appropriate register receives a useful value in this insn.
9467
9468  When a subroutine returns a `BLKmode' value, it is handled by passing
9469 to the subroutine the address of a place to store the value.  So the
9470 call insn itself does not "return" any value, and it has the same RTL
9471 form as a call that returns nothing.
9472
9473  On some machines, the call instruction itself clobbers some register,
9474 for example to contain the return address.  `call_insn' insns on these
9475 machines should have a body which is a `parallel' that contains both
9476 the `call' expression and `clobber' expressions that indicate which
9477 registers are destroyed.  Similarly, if the call instruction requires
9478 some register other than the stack pointer that is not explicitly
9479 mentioned in its RTL, a `use' subexpression should mention that
9480 register.
9481
9482  Functions that are called are assumed to modify all registers listed in
9483 the configuration macro `CALL_USED_REGISTERS' (*note Register Basics::)
9484 and, with the exception of `const' functions and library calls, to
9485 modify all of memory.
9486
9487  Insns containing just `use' expressions directly precede the
9488 `call_insn' insn to indicate which registers contain inputs to the
9489 function.  Similarly, if registers other than those in
9490 `CALL_USED_REGISTERS' are clobbered by the called function, insns
9491 containing a single `clobber' follow immediately after the call to
9492 indicate which registers.
9493
9494 \1f
9495 File: gccint.info,  Node: Sharing,  Next: Reading RTL,  Prev: Calls,  Up: RTL
9496
9497 10.20 Structure Sharing Assumptions
9498 ===================================
9499
9500 The compiler assumes that certain kinds of RTL expressions are unique;
9501 there do not exist two distinct objects representing the same value.
9502 In other cases, it makes an opposite assumption: that no RTL expression
9503 object of a certain kind appears in more than one place in the
9504 containing structure.
9505
9506  These assumptions refer to a single function; except for the RTL
9507 objects that describe global variables and external functions, and a
9508 few standard objects such as small integer constants, no RTL objects
9509 are common to two functions.
9510
9511    * Each pseudo-register has only a single `reg' object to represent
9512      it, and therefore only a single machine mode.
9513
9514    * For any symbolic label, there is only one `symbol_ref' object
9515      referring to it.
9516
9517    * All `const_int' expressions with equal values are shared.
9518
9519    * There is only one `pc' expression.
9520
9521    * There is only one `cc0' expression.
9522
9523    * There is only one `const_double' expression with value 0 for each
9524      floating point mode.  Likewise for values 1 and 2.
9525
9526    * There is only one `const_vector' expression with value 0 for each
9527      vector mode, be it an integer or a double constant vector.
9528
9529    * No `label_ref' or `scratch' appears in more than one place in the
9530      RTL structure; in other words, it is safe to do a tree-walk of all
9531      the insns in the function and assume that each time a `label_ref'
9532      or `scratch' is seen it is distinct from all others that are seen.
9533
9534    * Only one `mem' object is normally created for each static variable
9535      or stack slot, so these objects are frequently shared in all the
9536      places they appear.  However, separate but equal objects for these
9537      variables are occasionally made.
9538
9539    * When a single `asm' statement has multiple output operands, a
9540      distinct `asm_operands' expression is made for each output operand.
9541      However, these all share the vector which contains the sequence of
9542      input operands.  This sharing is used later on to test whether two
9543      `asm_operands' expressions come from the same statement, so all
9544      optimizations must carefully preserve the sharing if they copy the
9545      vector at all.
9546
9547    * No RTL object appears in more than one place in the RTL structure
9548      except as described above.  Many passes of the compiler rely on
9549      this by assuming that they can modify RTL objects in place without
9550      unwanted side-effects on other insns.
9551
9552    * During initial RTL generation, shared structure is freely
9553      introduced.  After all the RTL for a function has been generated,
9554      all shared structure is copied by `unshare_all_rtl' in
9555      `emit-rtl.c', after which the above rules are guaranteed to be
9556      followed.
9557
9558    * During the combiner pass, shared structure within an insn can exist
9559      temporarily.  However, the shared structure is copied before the
9560      combiner is finished with the insn.  This is done by calling
9561      `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'.
9562
9563 \1f
9564 File: gccint.info,  Node: Reading RTL,  Prev: Sharing,  Up: RTL
9565
9566 10.21 Reading RTL
9567 =================
9568
9569 To read an RTL object from a file, call `read_rtx'.  It takes one
9570 argument, a stdio stream, and returns a single RTL object.  This routine
9571 is defined in `read-rtl.c'.  It is not available in the compiler
9572 itself, only the various programs that generate the compiler back end
9573 from the machine description.
9574
9575  People frequently have the idea of using RTL stored as text in a file
9576 as an interface between a language front end and the bulk of GCC.  This
9577 idea is not feasible.
9578
9579  GCC was designed to use RTL internally only.  Correct RTL for a given
9580 program is very dependent on the particular target machine.  And the RTL
9581 does not contain all the information about the program.
9582
9583  The proper way to interface GCC to a new language front end is with
9584 the "tree" data structure, described in the files `tree.h' and
9585 `tree.def'.  The documentation for this structure (*note Trees::) is
9586 incomplete.
9587
9588 \1f
9589 File: gccint.info,  Node: Control Flow,  Next: Tree SSA,  Prev: RTL,  Up: Top
9590
9591 11 Control Flow Graph
9592 *********************
9593
9594 A control flow graph (CFG) is a data structure built on top of the
9595 intermediate code representation (the RTL or `tree' instruction stream)
9596 abstracting the control flow behavior of a function that is being
9597 compiled.  The CFG is a directed graph where the vertices represent
9598 basic blocks and edges represent possible transfer of control flow from
9599 one basic block to another.  The data structures used to represent the
9600 control flow graph are defined in `basic-block.h'.
9601
9602 * Menu:
9603
9604 * Basic Blocks::           The definition and representation of basic blocks.
9605 * Edges::                  Types of edges and their representation.
9606 * Profile information::    Representation of frequencies and probabilities.
9607 * Maintaining the CFG::    Keeping the control flow graph and up to date.
9608 * Liveness information::   Using and maintaining liveness information.
9609
9610 \1f
9611 File: gccint.info,  Node: Basic Blocks,  Next: Edges,  Up: Control Flow
9612
9613 11.1 Basic Blocks
9614 =================
9615
9616 A basic block is a straight-line sequence of code with only one entry
9617 point and only one exit.  In GCC, basic blocks are represented using
9618 the `basic_block' data type.
9619
9620  Two pointer members of the `basic_block' structure are the pointers
9621 `next_bb' and `prev_bb'.  These are used to keep doubly linked chain of
9622 basic blocks in the same order as the underlying instruction stream.
9623 The chain of basic blocks is updated transparently by the provided API
9624 for manipulating the CFG.  The macro `FOR_EACH_BB' can be used to visit
9625 all the basic blocks in lexicographical order.  Dominator traversals
9626 are also possible using `walk_dominator_tree'.  Given two basic blocks
9627 A and B, block A dominates block B if A is _always_ executed before B.
9628
9629  The `BASIC_BLOCK' array contains all basic blocks in an unspecified
9630 order.  Each `basic_block' structure has a field that holds a unique
9631 integer identifier `index' that is the index of the block in the
9632 `BASIC_BLOCK' array.  The total number of basic blocks in the function
9633 is `n_basic_blocks'.  Both the basic block indices and the total number
9634 of basic blocks may vary during the compilation process, as passes
9635 reorder, create, duplicate, and destroy basic blocks.  The index for
9636 any block should never be greater than `last_basic_block'.
9637
9638  Special basic blocks represent possible entry and exit points of a
9639 function.  These blocks are called `ENTRY_BLOCK_PTR' and
9640 `EXIT_BLOCK_PTR'.  These blocks do not contain any code, and are not
9641 elements of the `BASIC_BLOCK' array.  Therefore they have been assigned
9642 unique, negative index numbers.
9643
9644  Each `basic_block' also contains pointers to the first instruction
9645 (the "head") and the last instruction (the "tail") or "end" of the
9646 instruction stream contained in a basic block.  In fact, since the
9647 `basic_block' data type is used to represent blocks in both major
9648 intermediate representations of GCC (`tree' and RTL), there are
9649 pointers to the head and end of a basic block for both representations.
9650
9651  For RTL, these pointers are `rtx head, end'.  In the RTL function
9652 representation, the head pointer always points either to a
9653 `NOTE_INSN_BASIC_BLOCK' or to a `CODE_LABEL', if present.  In the RTL
9654 representation of a function, the instruction stream contains not only
9655 the "real" instructions, but also "notes".  Any function that moves or
9656 duplicates the basic blocks needs to take care of updating of these
9657 notes.  Many of these notes expect that the instruction stream consists
9658 of linear regions, making such updates difficult.   The
9659 `NOTE_INSN_BASIC_BLOCK' note is the only kind of note that may appear
9660 in the instruction stream contained in a basic block.  The instruction
9661 stream of a basic block always follows a `NOTE_INSN_BASIC_BLOCK',  but
9662 zero or more `CODE_LABEL' nodes can precede the block note.   A basic
9663 block ends by control flow instruction or last instruction before
9664 following `CODE_LABEL' or `NOTE_INSN_BASIC_BLOCK'.  A `CODE_LABEL'
9665 cannot appear in the instruction stream of a basic block.
9666
9667  In addition to notes, the jump table vectors are also represented as
9668 "pseudo-instructions" inside the insn stream.  These vectors never
9669 appear in the basic block and should always be placed just after the
9670 table jump instructions referencing them.  After removing the
9671 table-jump it is often difficult to eliminate the code computing the
9672 address and referencing the vector, so cleaning up these vectors is
9673 postponed until after liveness analysis.   Thus the jump table vectors
9674 may appear in the insn stream unreferenced and without any purpose.
9675 Before any edge is made "fall-thru", the existence of such construct in
9676 the way needs to be checked by calling `can_fallthru' function.
9677
9678  For the `tree' representation, the head and end of the basic block are
9679 being pointed to by the `stmt_list' field, but this special `tree'
9680 should never be referenced directly.  Instead, at the tree level
9681 abstract containers and iterators are used to access statements and
9682 expressions in basic blocks.  These iterators are called "block
9683 statement iterators" (BSIs).  Grep for `^bsi' in the various `tree-*'
9684 files.  The following snippet will pretty-print all the statements of
9685 the program in the GIMPLE representation.
9686
9687      FOR_EACH_BB (bb)
9688        {
9689           block_stmt_iterator si;
9690
9691           for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
9692             {
9693                tree stmt = bsi_stmt (si);
9694                print_generic_stmt (stderr, stmt, 0);
9695             }
9696        }
9697
9698 \1f
9699 File: gccint.info,  Node: Edges,  Next: Profile information,  Prev: Basic Blocks,  Up: Control Flow
9700
9701 11.2 Edges
9702 ==========
9703
9704 Edges represent possible control flow transfers from the end of some
9705 basic block A to the head of another basic block B.  We say that A is a
9706 predecessor of B, and B is a successor of A.  Edges are represented in
9707 GCC with the `edge' data type.  Each `edge' acts as a link between two
9708 basic blocks: the `src' member of an edge points to the predecessor
9709 basic block of the `dest' basic block.  The members `preds' and `succs'
9710 of the `basic_block' data type point to type-safe vectors of edges to
9711 the predecessors and successors of the block.
9712
9713  When walking the edges in an edge vector, "edge iterators" should be
9714 used.  Edge iterators are constructed using the `edge_iterator' data
9715 structure and several methods are available to operate on them:
9716
9717 `ei_start'
9718      This function initializes an `edge_iterator' that points to the
9719      first edge in a vector of edges.
9720
9721 `ei_last'
9722      This function initializes an `edge_iterator' that points to the
9723      last edge in a vector of edges.
9724
9725 `ei_end_p'
9726      This predicate is `true' if an `edge_iterator' represents the last
9727      edge in an edge vector.
9728
9729 `ei_one_before_end_p'
9730      This predicate is `true' if an `edge_iterator' represents the
9731      second last edge in an edge vector.
9732
9733 `ei_next'
9734      This function takes a pointer to an `edge_iterator' and makes it
9735      point to the next edge in the sequence.
9736
9737 `ei_prev'
9738      This function takes a pointer to an `edge_iterator' and makes it
9739      point to the previous edge in the sequence.
9740
9741 `ei_edge'
9742      This function returns the `edge' currently pointed to by an
9743      `edge_iterator'.
9744
9745 `ei_safe_safe'
9746      This function returns the `edge' currently pointed to by an
9747      `edge_iterator', but returns `NULL' if the iterator is pointing at
9748      the end of the sequence.  This function has been provided for
9749      existing code makes the assumption that a `NULL' edge indicates
9750      the end of the sequence.
9751
9752
9753  The convenience macro `FOR_EACH_EDGE' can be used to visit all of the
9754 edges in a sequence of predecessor or successor edges.  It must not be
9755 used when an element might be removed during the traversal, otherwise
9756 elements will be missed.  Here is an example of how to use the macro:
9757
9758      edge e;
9759      edge_iterator ei;
9760
9761      FOR_EACH_EDGE (e, ei, bb->succs)
9762        {
9763           if (e->flags & EDGE_FALLTHRU)
9764             break;
9765        }
9766
9767  There are various reasons why control flow may transfer from one block
9768 to another.  One possibility is that some instruction, for example a
9769 `CODE_LABEL', in a linearized instruction stream just always starts a
9770 new basic block.  In this case a "fall-thru" edge links the basic block
9771 to the first following basic block.  But there are several other
9772 reasons why edges may be created.  The `flags' field of the `edge' data
9773 type is used to store information about the type of edge we are dealing
9774 with.  Each edge is of one of the following types:
9775
9776 _jump_
9777      No type flags are set for edges corresponding to jump instructions.
9778      These edges are used for unconditional or conditional jumps and in
9779      RTL also for table jumps.  They are the easiest to manipulate as
9780      they may be freely redirected when the flow graph is not in SSA
9781      form.
9782
9783 _fall-thru_
9784      Fall-thru edges are present in case where the basic block may
9785      continue execution to the following one without branching.  These
9786      edges have the `EDGE_FALLTHRU' flag set.  Unlike other types of
9787      edges, these edges must come into the basic block immediately
9788      following in the instruction stream.  The function
9789      `force_nonfallthru' is available to insert an unconditional jump
9790      in the case that redirection is needed.  Note that this may
9791      require creation of a new basic block.
9792
9793 _exception handling_
9794      Exception handling edges represent possible control transfers from
9795      a trapping instruction to an exception handler.  The definition of
9796      "trapping" varies.  In C++, only function calls can throw, but for
9797      Java, exceptions like division by zero or segmentation fault are
9798      defined and thus each instruction possibly throwing this kind of
9799      exception needs to be handled as control flow instruction.
9800      Exception edges have the `EDGE_ABNORMAL' and `EDGE_EH' flags set.
9801
9802      When updating the instruction stream it is easy to change possibly
9803      trapping instruction to non-trapping, by simply removing the
9804      exception edge.  The opposite conversion is difficult, but should
9805      not happen anyway.  The edges can be eliminated via
9806      `purge_dead_edges' call.
9807
9808      In the RTL representation, the destination of an exception edge is
9809      specified by `REG_EH_REGION' note attached to the insn.  In case
9810      of a trapping call the `EDGE_ABNORMAL_CALL' flag is set too.  In
9811      the `tree' representation, this extra flag is not set.
9812
9813      In the RTL representation, the predicate `may_trap_p' may be used
9814      to check whether instruction still may trap or not.  For the tree
9815      representation, the `tree_could_trap_p' predicate is available,
9816      but this predicate only checks for possible memory traps, as in
9817      dereferencing an invalid pointer location.
9818
9819 _sibling calls_
9820      Sibling calls or tail calls terminate the function in a
9821      non-standard way and thus an edge to the exit must be present.
9822      `EDGE_SIBCALL' and `EDGE_ABNORMAL' are set in such case.  These
9823      edges only exist in the RTL representation.
9824
9825 _computed jumps_
9826      Computed jumps contain edges to all labels in the function
9827      referenced from the code.  All those edges have `EDGE_ABNORMAL'
9828      flag set.  The edges used to represent computed jumps often cause
9829      compile time performance problems, since functions consisting of
9830      many taken labels and many computed jumps may have _very_ dense
9831      flow graphs, so these edges need to be handled with special care.
9832      During the earlier stages of the compilation process, GCC tries to
9833      avoid such dense flow graphs by factoring computed jumps.  For
9834      example, given the following series of jumps,
9835
9836             goto *x;
9837             [ ... ]
9838
9839             goto *x;
9840             [ ... ]
9841
9842             goto *x;
9843             [ ... ]
9844
9845      factoring the computed jumps results in the following code sequence
9846      which has a much simpler flow graph:
9847
9848             goto y;
9849             [ ... ]
9850
9851             goto y;
9852             [ ... ]
9853
9854             goto y;
9855             [ ... ]
9856
9857           y:
9858             goto *x;
9859
9860      However, the classic problem with this transformation is that it
9861      has a runtime cost in there resulting code: An extra jump.
9862      Therefore, the computed jumps are un-factored in the later passes
9863      of the compiler.  Be aware of that when you work on passes in that
9864      area.  There have been numerous examples already where the compile
9865      time for code with unfactored computed jumps caused some serious
9866      headaches.
9867
9868 _nonlocal goto handlers_
9869      GCC allows nested functions to return into caller using a `goto'
9870      to a label passed to as an argument to the callee.  The labels
9871      passed to nested functions contain special code to cleanup after
9872      function call.  Such sections of code are referred to as "nonlocal
9873      goto receivers".  If a function contains such nonlocal goto
9874      receivers, an edge from the call to the label is created with the
9875      `EDGE_ABNORMAL' and `EDGE_ABNORMAL_CALL' flags set.
9876
9877 _function entry points_
9878      By definition, execution of function starts at basic block 0, so
9879      there is always an edge from the `ENTRY_BLOCK_PTR' to basic block
9880      0.  There is no `tree' representation for alternate entry points at
9881      this moment.  In RTL, alternate entry points are specified by
9882      `CODE_LABEL' with `LABEL_ALTERNATE_NAME' defined.  This feature is
9883      currently used for multiple entry point prologues and is limited
9884      to post-reload passes only.  This can be used by back-ends to emit
9885      alternate prologues for functions called from different contexts.
9886      In future full support for multiple entry functions defined by
9887      Fortran 90 needs to be implemented.
9888
9889 _function exits_
9890      In the pre-reload representation a function terminates after the
9891      last instruction in the insn chain and no explicit return
9892      instructions are used.  This corresponds to the fall-thru edge
9893      into exit block.  After reload, optimal RTL epilogues are used
9894      that use explicit (conditional) return instructions that are
9895      represented by edges with no flags set.
9896
9897
9898 \1f
9899 File: gccint.info,  Node: Profile information,  Next: Maintaining the CFG,  Prev: Edges,  Up: Control Flow
9900
9901 11.3 Profile information
9902 ========================
9903
9904 In many cases a compiler must make a choice whether to trade speed in
9905 one part of code for speed in another, or to trade code size for code
9906 speed.  In such cases it is useful to know information about how often
9907 some given block will be executed.  That is the purpose for maintaining
9908 profile within the flow graph.  GCC can handle profile information
9909 obtained through "profile feedback", but it can also  estimate branch
9910 probabilities based on statics and heuristics.
9911
9912  The feedback based profile is produced by compiling the program with
9913 instrumentation, executing it on a train run and reading the numbers of
9914 executions of basic blocks and edges back to the compiler while
9915 re-compiling the program to produce the final executable.  This method
9916 provides very accurate information about where a program spends most of
9917 its time on the train run.  Whether it matches the average run of
9918 course depends on the choice of train data set, but several studies
9919 have shown that the behavior of a program usually changes just
9920 marginally over different data sets.
9921
9922  When profile feedback is not available, the compiler may be asked to
9923 attempt to predict the behavior of each branch in the program using a
9924 set of heuristics (see `predict.def' for details) and compute estimated
9925 frequencies of each basic block by propagating the probabilities over
9926 the graph.
9927
9928  Each `basic_block' contains two integer fields to represent profile
9929 information: `frequency' and `count'.  The `frequency' is an estimation
9930 how often is basic block executed within a function.  It is represented
9931 as an integer scaled in the range from 0 to `BB_FREQ_BASE'.  The most
9932 frequently executed basic block in function is initially set to
9933 `BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
9934 During optimization, the frequency of the most frequent basic block can
9935 both decrease (for instance by loop unrolling) or grow (for instance by
9936 cross-jumping optimization), so scaling sometimes has to be performed
9937 multiple times.
9938
9939  The `count' contains hard-counted numbers of execution measured during
9940 training runs and is nonzero only when profile feedback is available.
9941 This value is represented as the host's widest integer (typically a 64
9942 bit integer) of the special type `gcov_type'.
9943
9944  Most optimization passes can use only the frequency information of a
9945 basic block, but a few passes may want to know hard execution counts.
9946 The frequencies should always match the counts after scaling, however
9947 during updating of the profile information numerical error may
9948 accumulate into quite large errors.
9949
9950  Each edge also contains a branch probability field: an integer in the
9951 range from 0 to `REG_BR_PROB_BASE'.  It represents probability of
9952 passing control from the end of the `src' basic block to the `dest'
9953 basic block, i.e. the probability that control will flow along this
9954 edge.   The `EDGE_FREQUENCY' macro is available to compute how
9955 frequently a given edge is taken.  There is a `count' field for each
9956 edge as well, representing same information as for a basic block.
9957
9958  The basic block frequencies are not represented in the instruction
9959 stream, but in the RTL representation the edge frequencies are
9960 represented for conditional jumps (via the `REG_BR_PROB' macro) since
9961 they are used when instructions are output to the assembly file and the
9962 flow graph is no longer maintained.
9963
9964  The probability that control flow arrives via a given edge to its
9965 destination basic block is called "reverse probability" and is not
9966 directly represented, but it may be easily computed from frequencies of
9967 basic blocks.
9968
9969  Updating profile information is a delicate task that can unfortunately
9970 not be easily integrated with the CFG manipulation API.  Many of the
9971 functions and hooks to modify the CFG, such as
9972 `redirect_edge_and_branch', do not have enough information to easily
9973 update the profile, so updating it is in the majority of cases left up
9974 to the caller.  It is difficult to uncover bugs in the profile updating
9975 code, because they manifest themselves only by producing worse code,
9976 and checking profile consistency is not possible because of numeric
9977 error accumulation.  Hence special attention needs to be given to this
9978 issue in each pass that modifies the CFG.
9979
9980  It is important to point out that `REG_BR_PROB_BASE' and
9981 `BB_FREQ_BASE' are both set low enough to be possible to compute second
9982 power of any frequency or probability in the flow graph, it is not
9983 possible to even square the `count' field, as modern CPUs are fast
9984 enough to execute $2^32$ operations quickly.
9985
9986 \1f
9987 File: gccint.info,  Node: Maintaining the CFG,  Next: Liveness information,  Prev: Profile information,  Up: Control Flow
9988
9989 11.4 Maintaining the CFG
9990 ========================
9991
9992 An important task of each compiler pass is to keep both the control
9993 flow graph and all profile information up-to-date.  Reconstruction of
9994 the control flow graph after each pass is not an option, since it may be
9995 very expensive and lost profile information cannot be reconstructed at
9996 all.
9997
9998  GCC has two major intermediate representations, and both use the
9999 `basic_block' and `edge' data types to represent control flow.  Both
10000 representations share as much of the CFG maintenance code as possible.
10001 For each representation, a set of "hooks" is defined so that each
10002 representation can provide its own implementation of CFG manipulation
10003 routines when necessary.  These hooks are defined in `cfghooks.h'.
10004 There are hooks for almost all common CFG manipulations, including
10005 block splitting and merging, edge redirection and creating and deleting
10006 basic blocks.  These hooks should provide everything you need to
10007 maintain and manipulate the CFG in both the RTL and `tree'
10008 representation.
10009
10010  At the moment, the basic block boundaries are maintained transparently
10011 when modifying instructions, so there rarely is a need to move them
10012 manually (such as in case someone wants to output instruction outside
10013 basic block explicitly).  Often the CFG may be better viewed as
10014 integral part of instruction chain, than structure built on the top of
10015 it.  However, in principle the control flow graph for the `tree'
10016 representation is _not_ an integral part of the representation, in that
10017 a function tree may be expanded without first building a  flow graph
10018 for the `tree' representation at all.  This happens when compiling
10019 without any `tree' optimization enabled.  When the `tree' optimizations
10020 are enabled and the instruction stream is rewritten in SSA form, the
10021 CFG is very tightly coupled with the instruction stream.  In
10022 particular, statement insertion and removal has to be done with care.
10023 In fact, the whole `tree' representation can not be easily used or
10024 maintained without proper maintenance of the CFG simultaneously.
10025
10026  In the RTL representation, each instruction has a `BLOCK_FOR_INSN'
10027 value that represents pointer to the basic block that contains the
10028 instruction.  In the `tree' representation, the function `bb_for_stmt'
10029 returns a pointer to the basic block containing the queried statement.
10030
10031  When changes need to be applied to a function in its `tree'
10032 representation, "block statement iterators" should be used.  These
10033 iterators provide an integrated abstraction of the flow graph and the
10034 instruction stream.  Block statement iterators iterators are
10035 constructed using the `block_stmt_iterator' data structure and several
10036 modifier are available, including the following:
10037
10038 `bsi_start'
10039      This function initializes a `block_stmt_iterator' that points to
10040      the first non-empty statement in a basic block.
10041
10042 `bsi_last'
10043      This function initializes a `block_stmt_iterator' that points to
10044      the last statement in a basic block.
10045
10046 `bsi_end_p'
10047      This predicate is `true' if a `block_stmt_iterator' represents the
10048      end of a basic block.
10049
10050 `bsi_next'
10051      This function takes a `block_stmt_iterator' and makes it point to
10052      its successor.
10053
10054 `bsi_prev'
10055      This function takes a `block_stmt_iterator' and makes it point to
10056      its predecessor.
10057
10058 `bsi_insert_after'
10059      This function inserts a statement after the `block_stmt_iterator'
10060      passed in.  The final parameter determines whether the statement
10061      iterator is updated to point to the newly inserted statement, or
10062      left pointing to the original statement.
10063
10064 `bsi_insert_before'
10065      This function inserts a statement before the `block_stmt_iterator'
10066      passed in.  The final parameter determines whether the statement
10067      iterator is updated to point to the newly inserted statement, or
10068      left pointing to the original  statement.
10069
10070 `bsi_remove'
10071      This function removes the `block_stmt_iterator' passed in and
10072      rechains the remaining statements in a basic block, if any.
10073
10074  In the RTL representation, the macros `BB_HEAD' and `BB_END' may be
10075 used to get the head and end `rtx' of a basic block.  No abstract
10076 iterators are defined for traversing the insn chain, but you can just
10077 use `NEXT_INSN' and `PREV_INSN' instead.  See *Note Insns::.
10078
10079  Usually a code manipulating pass simplifies the instruction stream and
10080 the flow of control, possibly eliminating some edges.  This may for
10081 example happen when a conditional jump is replaced with an
10082 unconditional jump, but also when simplifying possibly trapping
10083 instruction to non-trapping while compiling Java.  Updating of edges is
10084 not transparent and each optimization pass is required to do so
10085 manually.  However only few cases occur in practice.  The pass may call
10086 `purge_dead_edges' on a given basic block to remove superfluous edges,
10087 if any.
10088
10089  Another common scenario is redirection of branch instructions, but
10090 this is best modeled as redirection of edges in the control flow graph
10091 and thus use of `redirect_edge_and_branch' is preferred over more low
10092 level functions, such as `redirect_jump' that operate on RTL chain
10093 only.  The CFG hooks defined in `cfghooks.h' should provide the
10094 complete API required for manipulating and maintaining the CFG.
10095
10096  It is also possible that a pass has to insert control flow instruction
10097 into the middle of a basic block, thus creating an entry point in the
10098 middle of the basic block, which is impossible by definition: The block
10099 must be split to make sure it only has one entry point, i.e. the head
10100 of the basic block.  In the RTL representation, the
10101 `find_sub_basic_blocks' may be used to split existing basic block and
10102 add necessary edges.  The CFG hook `split_block' may be used when an
10103 instruction in the middle of a basic block has to become the target of
10104 a jump or branch instruction.
10105
10106  For a global optimizer, a common operation is to split edges in the
10107 flow graph and insert instructions on them.  In the RTL representation,
10108 this can be easily done using the `insert_insn_on_edge' function that
10109 emits an instruction "on the edge", caching it for a later
10110 `commit_edge_insertions' call that will take care of moving the
10111 inserted instructions off the edge into the instruction stream
10112 contained in a basic block.  This includes the creation of new basic
10113 blocks where needed.  In the `tree' representation, the equivalent
10114 functions are `bsi_insert_on_edge' which inserts a block statement
10115 iterator on an edge, and `bsi_commit_edge_inserts' which flushes the
10116 instruction to actual instruction stream.
10117
10118  While debugging the optimization pass, an `verify_flow_info' function
10119 may be useful to find bugs in the control flow graph updating code.
10120
10121  Note that at present, the representation of control flow in the `tree'
10122 representation is discarded before expanding to RTL.  Long term the CFG
10123 should be maintained and "expanded" to the RTL representation along
10124 with the function `tree' itself.
10125
10126 \1f
10127 File: gccint.info,  Node: Liveness information,  Prev: Maintaining the CFG,  Up: Control Flow
10128
10129 11.5 Liveness information
10130 =========================
10131
10132 Liveness information is useful to determine whether some register is
10133 "live" at given point of program, i.e. that it contains a value that
10134 may be used at a later point in the program.  This information is used,
10135 for instance, during register allocation, as the pseudo registers only
10136 need to be assigned to a unique hard register or to a stack slot if
10137 they are live.  The hard registers and stack slots may be freely reused
10138 for other values when a register is dead.
10139
10140  The liveness information is stored partly in the RTL instruction
10141 stream and partly in the flow graph.  Local information is stored in
10142 the instruction stream: Each instruction may contain `REG_DEAD' notes
10143 representing that the value of a given register is no longer needed, or
10144 `REG_UNUSED' notes representing that the value computed by the
10145 instruction is never used.  The second is useful for instructions
10146 computing multiple values at once.
10147
10148  Global liveness information is stored in the control flow graph.  Each
10149 basic block contains two bitmaps, `global_live_at_start' and
10150 `global_live_at_end' representing liveness of each register at the
10151 entry and exit of the basic block.  The file `flow.c' contains
10152 functions to compute liveness of each register at any given place in
10153 the instruction stream using this information.
10154
10155  Liveness is expensive to compute and thus it is desirable to keep it
10156 up to date during code modifying passes.  This can be easily
10157 accomplished using the `flags' field of a basic block.  Functions
10158 modifying the instruction stream automatically set the `BB_DIRTY' flag
10159 of a modifies basic block, so the pass may simply use`clear_bb_flags'
10160 before doing any modifications and then ask the data flow module to
10161 have liveness updated via the `update_life_info_in_dirty_blocks'
10162 function.
10163
10164  This scheme works reliably as long as no control flow graph
10165 transformations are done.  The task of updating liveness after control
10166 flow graph changes is more difficult as normal iterative data flow
10167 analysis may produce invalid results or get into an infinite cycle when
10168 the initial solution is not below the desired one.  Only simple
10169 transformations, like splitting basic blocks or inserting on edges, are
10170 safe, as functions to implement them already know how to update
10171 liveness information locally.
10172
10173 \1f
10174 File: gccint.info,  Node: Machine Desc,  Next: Target Macros,  Prev: Tree SSA,  Up: Top
10175
10176 12 Machine Descriptions
10177 ***********************
10178
10179 A machine description has two parts: a file of instruction patterns
10180 (`.md' file) and a C header file of macro definitions.
10181
10182  The `.md' file for a target machine contains a pattern for each
10183 instruction that the target machine supports (or at least each
10184 instruction that is worth telling the compiler about).  It may also
10185 contain comments.  A semicolon causes the rest of the line to be a
10186 comment, unless the semicolon is inside a quoted string.
10187
10188  See the next chapter for information on the C header file.
10189
10190 * Menu:
10191
10192 * Overview::            How the machine description is used.
10193 * Patterns::            How to write instruction patterns.
10194 * Example::             An explained example of a `define_insn' pattern.
10195 * RTL Template::        The RTL template defines what insns match a pattern.
10196 * Output Template::     The output template says how to make assembler code
10197                           from such an insn.
10198 * Output Statement::    For more generality, write C code to output
10199                           the assembler code.
10200 * Predicates::          Controlling what kinds of operands can be used
10201                           for an insn.
10202 * Constraints::         Fine-tuning operand selection.
10203 * Standard Names::      Names mark patterns to use for code generation.
10204 * Pattern Ordering::    When the order of patterns makes a difference.
10205 * Dependent Patterns::  Having one pattern may make you need another.
10206 * Jump Patterns::       Special considerations for patterns for jump insns.
10207 * Looping Patterns::    How to define patterns for special looping insns.
10208 * Insn Canonicalizations::Canonicalization of Instructions
10209 * Expander Definitions::Generating a sequence of several RTL insns
10210                           for a standard operation.
10211 * Insn Splitting::      Splitting Instructions into Multiple Instructions.
10212 * Including Patterns::      Including Patterns in Machine Descriptions.
10213 * Peephole Definitions::Defining machine-specific peephole optimizations.
10214 * Insn Attributes::     Specifying the value of attributes for generated insns.
10215 * Conditional Execution::Generating `define_insn' patterns for
10216                            predication.
10217 * Constant Definitions::Defining symbolic constants that can be used in the
10218                         md file.
10219 * Macros::              Using macros to generate patterns from a template.
10220
10221 \1f
10222 File: gccint.info,  Node: Overview,  Next: Patterns,  Up: Machine Desc
10223
10224 12.1 Overview of How the Machine Description is Used
10225 ====================================================
10226
10227 There are three main conversions that happen in the compiler:
10228
10229   1. The front end reads the source code and builds a parse tree.
10230
10231   2. The parse tree is used to generate an RTL insn list based on named
10232      instruction patterns.
10233
10234   3. The insn list is matched against the RTL templates to produce
10235      assembler code.
10236
10237
10238  For the generate pass, only the names of the insns matter, from either
10239 a named `define_insn' or a `define_expand'.  The compiler will choose
10240 the pattern with the right name and apply the operands according to the
10241 documentation later in this chapter, without regard for the RTL
10242 template or operand constraints.  Note that the names the compiler looks
10243 for are hard-coded in the compiler--it will ignore unnamed patterns and
10244 patterns with names it doesn't know about, but if you don't provide a
10245 named pattern it needs, it will abort.
10246
10247  If a `define_insn' is used, the template given is inserted into the
10248 insn list.  If a `define_expand' is used, one of three things happens,
10249 based on the condition logic.  The condition logic may manually create
10250 new insns for the insn list, say via `emit_insn()', and invoke `DONE'.
10251 For certain named patterns, it may invoke `FAIL' to tell the compiler
10252 to use an alternate way of performing that task.  If it invokes neither
10253 `DONE' nor `FAIL', the template given in the pattern is inserted, as if
10254 the `define_expand' were a `define_insn'.
10255
10256  Once the insn list is generated, various optimization passes convert,
10257 replace, and rearrange the insns in the insn list.  This is where the
10258 `define_split' and `define_peephole' patterns get used, for example.
10259
10260  Finally, the insn list's RTL is matched up with the RTL templates in
10261 the `define_insn' patterns, and those patterns are used to emit the
10262 final assembly code.  For this purpose, each named `define_insn' acts
10263 like it's unnamed, since the names are ignored.
10264
10265 \1f
10266 File: gccint.info,  Node: Patterns,  Next: Example,  Prev: Overview,  Up: Machine Desc
10267
10268 12.2 Everything about Instruction Patterns
10269 ==========================================
10270
10271 Each instruction pattern contains an incomplete RTL expression, with
10272 pieces to be filled in later, operand constraints that restrict how the
10273 pieces can be filled in, and an output pattern or C code to generate
10274 the assembler output, all wrapped up in a `define_insn' expression.
10275
10276  A `define_insn' is an RTL expression containing four or five operands:
10277
10278   1. An optional name.  The presence of a name indicate that this
10279      instruction pattern can perform a certain standard job for the
10280      RTL-generation pass of the compiler.  This pass knows certain
10281      names and will use the instruction patterns with those names, if
10282      the names are defined in the machine description.
10283
10284      The absence of a name is indicated by writing an empty string
10285      where the name should go.  Nameless instruction patterns are never
10286      used for generating RTL code, but they may permit several simpler
10287      insns to be combined later on.
10288
10289      Names that are not thus known and used in RTL-generation have no
10290      effect; they are equivalent to no name at all.
10291
10292      For the purpose of debugging the compiler, you may also specify a
10293      name beginning with the `*' character.  Such a name is used only
10294      for identifying the instruction in RTL dumps; it is entirely
10295      equivalent to having a nameless pattern for all other purposes.
10296
10297   2. The "RTL template" (*note RTL Template::) is a vector of incomplete
10298      RTL expressions which show what the instruction should look like.
10299      It is incomplete because it may contain `match_operand',
10300      `match_operator', and `match_dup' expressions that stand for
10301      operands of the instruction.
10302
10303      If the vector has only one element, that element is the template
10304      for the instruction pattern.  If the vector has multiple elements,
10305      then the instruction pattern is a `parallel' expression containing
10306      the elements described.
10307
10308   3. A condition.  This is a string which contains a C expression that
10309      is the final test to decide whether an insn body matches this
10310      pattern.
10311
10312      For a named pattern, the condition (if present) may not depend on
10313      the data in the insn being matched, but only the
10314      target-machine-type flags.  The compiler needs to test these
10315      conditions during initialization in order to learn exactly which
10316      named instructions are available in a particular run.
10317
10318      For nameless patterns, the condition is applied only when matching
10319      an individual insn, and only after the insn has matched the
10320      pattern's recognition template.  The insn's operands may be found
10321      in the vector `operands'.  For an insn where the condition has
10322      once matched, it can't be used to control register allocation, for
10323      example by excluding certain hard registers or hard register
10324      combinations.
10325
10326   4. The "output template": a string that says how to output matching
10327      insns as assembler code.  `%' in this string specifies where to
10328      substitute the value of an operand.  *Note Output Template::.
10329
10330      When simple substitution isn't general enough, you can specify a
10331      piece of C code to compute the output.  *Note Output Statement::.
10332
10333   5. Optionally, a vector containing the values of attributes for insns
10334      matching this pattern.  *Note Insn Attributes::.
10335
10336 \1f
10337 File: gccint.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
10338
10339 12.3 Example of `define_insn'
10340 =============================
10341
10342 Here is an actual example of an instruction pattern, for the
10343 68000/68020.
10344
10345      (define_insn "tstsi"
10346        [(set (cc0)
10347              (match_operand:SI 0 "general_operand" "rm"))]
10348        ""
10349        "*
10350      {
10351        if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
10352          return \"tstl %0\";
10353        return \"cmpl #0,%0\";
10354      }")
10355
10356 This can also be written using braced strings:
10357
10358      (define_insn "tstsi"
10359        [(set (cc0)
10360              (match_operand:SI 0 "general_operand" "rm"))]
10361        ""
10362      {
10363        if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
10364          return "tstl %0";
10365        return "cmpl #0,%0";
10366      })
10367
10368  This is an instruction that sets the condition codes based on the
10369 value of a general operand.  It has no condition, so any insn whose RTL
10370 description has the form shown may be handled according to this
10371 pattern.  The name `tstsi' means "test a `SImode' value" and tells the
10372 RTL generation pass that, when it is necessary to test such a value, an
10373 insn to do so can be constructed using this pattern.
10374
10375  The output control string is a piece of C code which chooses which
10376 output template to return based on the kind of operand and the specific
10377 type of CPU for which code is being generated.
10378
10379  `"rm"' is an operand constraint.  Its meaning is explained below.
10380
10381 \1f
10382 File: gccint.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
10383
10384 12.4 RTL Template
10385 =================
10386
10387 The RTL template is used to define which insns match the particular
10388 pattern and how to find their operands.  For named patterns, the RTL
10389 template also says how to construct an insn from specified operands.
10390
10391  Construction involves substituting specified operands into a copy of
10392 the template.  Matching involves determining the values that serve as
10393 the operands in the insn being matched.  Both of these activities are
10394 controlled by special expression types that direct matching and
10395 substitution of the operands.
10396
10397 `(match_operand:M N PREDICATE CONSTRAINT)'
10398      This expression is a placeholder for operand number N of the insn.
10399      When constructing an insn, operand number N will be substituted
10400      at this point.  When matching an insn, whatever appears at this
10401      position in the insn will be taken as operand number N; but it
10402      must satisfy PREDICATE or this instruction pattern will not match
10403      at all.
10404
10405      Operand numbers must be chosen consecutively counting from zero in
10406      each instruction pattern.  There may be only one `match_operand'
10407      expression in the pattern for each operand number.  Usually
10408      operands are numbered in the order of appearance in `match_operand'
10409      expressions.  In the case of a `define_expand', any operand numbers
10410      used only in `match_dup' expressions have higher values than all
10411      other operand numbers.
10412
10413      PREDICATE is a string that is the name of a function that accepts
10414      two arguments, an expression and a machine mode.  *Note
10415      Predicates::.  During matching, the function will be called with
10416      the putative operand as the expression and M as the mode argument
10417      (if M is not specified, `VOIDmode' will be used, which normally
10418      causes PREDICATE to accept any mode).  If it returns zero, this
10419      instruction pattern fails to match.  PREDICATE may be an empty
10420      string; then it means no test is to be done on the operand, so
10421      anything which occurs in this position is valid.
10422
10423      Most of the time, PREDICATE will reject modes other than M--but
10424      not always.  For example, the predicate `address_operand' uses M
10425      as the mode of memory ref that the address should be valid for.
10426      Many predicates accept `const_int' nodes even though their mode is
10427      `VOIDmode'.
10428
10429      CONSTRAINT controls reloading and the choice of the best register
10430      class to use for a value, as explained later (*note Constraints::).
10431      If the constraint would be an empty string, it can be omitted.
10432
10433      People are often unclear on the difference between the constraint
10434      and the predicate.  The predicate helps decide whether a given
10435      insn matches the pattern.  The constraint plays no role in this
10436      decision; instead, it controls various decisions in the case of an
10437      insn which does match.
10438
10439 `(match_scratch:M N CONSTRAINT)'
10440      This expression is also a placeholder for operand number N and
10441      indicates that operand must be a `scratch' or `reg' expression.
10442
10443      When matching patterns, this is equivalent to
10444
10445           (match_operand:M N "scratch_operand" PRED)
10446
10447      but, when generating RTL, it produces a (`scratch':M) expression.
10448
10449      If the last few expressions in a `parallel' are `clobber'
10450      expressions whose operands are either a hard register or
10451      `match_scratch', the combiner can add or delete them when
10452      necessary.  *Note Side Effects::.
10453
10454 `(match_dup N)'
10455      This expression is also a placeholder for operand number N.  It is
10456      used when the operand needs to appear more than once in the insn.
10457
10458      In construction, `match_dup' acts just like `match_operand': the
10459      operand is substituted into the insn being constructed.  But in
10460      matching, `match_dup' behaves differently.  It assumes that operand
10461      number N has already been determined by a `match_operand'
10462      appearing earlier in the recognition template, and it matches only
10463      an identical-looking expression.
10464
10465      Note that `match_dup' should not be used to tell the compiler that
10466      a particular register is being used for two operands (example:
10467      `add' that adds one register to another; the second register is
10468      both an input operand and the output operand).  Use a matching
10469      constraint (*note Simple Constraints::) for those.  `match_dup' is
10470      for the cases where one operand is used in two places in the
10471      template, such as an instruction that computes both a quotient and
10472      a remainder, where the opcode takes two input operands but the RTL
10473      template has to refer to each of those twice; once for the
10474      quotient pattern and once for the remainder pattern.
10475
10476 `(match_operator:M N PREDICATE [OPERANDS...])'
10477      This pattern is a kind of placeholder for a variable RTL expression
10478      code.
10479
10480      When constructing an insn, it stands for an RTL expression whose
10481      expression code is taken from that of operand N, and whose
10482      operands are constructed from the patterns OPERANDS.
10483
10484      When matching an expression, it matches an expression if the
10485      function PREDICATE returns nonzero on that expression _and_ the
10486      patterns OPERANDS match the operands of the expression.
10487
10488      Suppose that the function `commutative_operator' is defined as
10489      follows, to match any expression whose operator is one of the
10490      commutative arithmetic operators of RTL and whose mode is MODE:
10491
10492           int
10493           commutative_integer_operator (x, mode)
10494                rtx x;
10495                enum machine_mode mode;
10496           {
10497             enum rtx_code code = GET_CODE (x);
10498             if (GET_MODE (x) != mode)
10499               return 0;
10500             return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
10501                     || code == EQ || code == NE);
10502           }
10503
10504      Then the following pattern will match any RTL expression consisting
10505      of a commutative operator applied to two general operands:
10506
10507           (match_operator:SI 3 "commutative_operator"
10508             [(match_operand:SI 1 "general_operand" "g")
10509              (match_operand:SI 2 "general_operand" "g")])
10510
10511      Here the vector `[OPERANDS...]' contains two patterns because the
10512      expressions to be matched all contain two operands.
10513
10514      When this pattern does match, the two operands of the commutative
10515      operator are recorded as operands 1 and 2 of the insn.  (This is
10516      done by the two instances of `match_operand'.)  Operand 3 of the
10517      insn will be the entire commutative expression: use `GET_CODE
10518      (operands[3])' to see which commutative operator was used.
10519
10520      The machine mode M of `match_operator' works like that of
10521      `match_operand': it is passed as the second argument to the
10522      predicate function, and that function is solely responsible for
10523      deciding whether the expression to be matched "has" that mode.
10524
10525      When constructing an insn, argument 3 of the gen-function will
10526      specify the operation (i.e. the expression code) for the
10527      expression to be made.  It should be an RTL expression, whose
10528      expression code is copied into a new expression whose operands are
10529      arguments 1 and 2 of the gen-function.  The subexpressions of
10530      argument 3 are not used; only its expression code matters.
10531
10532      When `match_operator' is used in a pattern for matching an insn,
10533      it usually best if the operand number of the `match_operator' is
10534      higher than that of the actual operands of the insn.  This improves
10535      register allocation because the register allocator often looks at
10536      operands 1 and 2 of insns to see if it can do register tying.
10537
10538      There is no way to specify constraints in `match_operator'.  The
10539      operand of the insn which corresponds to the `match_operator'
10540      never has any constraints because it is never reloaded as a whole.
10541      However, if parts of its OPERANDS are matched by `match_operand'
10542      patterns, those parts may have constraints of their own.
10543
10544 `(match_op_dup:M N[OPERANDS...])'
10545      Like `match_dup', except that it applies to operators instead of
10546      operands.  When constructing an insn, operand number N will be
10547      substituted at this point.  But in matching, `match_op_dup' behaves
10548      differently.  It assumes that operand number N has already been
10549      determined by a `match_operator' appearing earlier in the
10550      recognition template, and it matches only an identical-looking
10551      expression.
10552
10553 `(match_parallel N PREDICATE [SUBPAT...])'
10554      This pattern is a placeholder for an insn that consists of a
10555      `parallel' expression with a variable number of elements.  This
10556      expression should only appear at the top level of an insn pattern.
10557
10558      When constructing an insn, operand number N will be substituted at
10559      this point.  When matching an insn, it matches if the body of the
10560      insn is a `parallel' expression with at least as many elements as
10561      the vector of SUBPAT expressions in the `match_parallel', if each
10562      SUBPAT matches the corresponding element of the `parallel', _and_
10563      the function PREDICATE returns nonzero on the `parallel' that is
10564      the body of the insn.  It is the responsibility of the predicate
10565      to validate elements of the `parallel' beyond those listed in the
10566      `match_parallel'.
10567
10568      A typical use of `match_parallel' is to match load and store
10569      multiple expressions, which can contain a variable number of
10570      elements in a `parallel'.  For example,
10571
10572           (define_insn ""
10573             [(match_parallel 0 "load_multiple_operation"
10574                [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
10575                      (match_operand:SI 2 "memory_operand" "m"))
10576                 (use (reg:SI 179))
10577                 (clobber (reg:SI 179))])]
10578             ""
10579             "loadm 0,0,%1,%2")
10580
10581      This example comes from `a29k.md'.  The function
10582      `load_multiple_operation' is defined in `a29k.c' and checks that
10583      subsequent elements in the `parallel' are the same as the `set' in
10584      the pattern, except that they are referencing subsequent registers
10585      and memory locations.
10586
10587      An insn that matches this pattern might look like:
10588
10589           (parallel
10590            [(set (reg:SI 20) (mem:SI (reg:SI 100)))
10591             (use (reg:SI 179))
10592             (clobber (reg:SI 179))
10593             (set (reg:SI 21)
10594                  (mem:SI (plus:SI (reg:SI 100)
10595                                   (const_int 4))))
10596             (set (reg:SI 22)
10597                  (mem:SI (plus:SI (reg:SI 100)
10598                                   (const_int 8))))])
10599
10600 `(match_par_dup N [SUBPAT...])'
10601      Like `match_op_dup', but for `match_parallel' instead of
10602      `match_operator'.
10603
10604
10605 \1f
10606 File: gccint.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
10607
10608 12.5 Output Templates and Operand Substitution
10609 ==============================================
10610
10611 The "output template" is a string which specifies how to output the
10612 assembler code for an instruction pattern.  Most of the template is a
10613 fixed string which is output literally.  The character `%' is used to
10614 specify where to substitute an operand; it can also be used to identify
10615 places where different variants of the assembler require different
10616 syntax.
10617
10618  In the simplest case, a `%' followed by a digit N says to output
10619 operand N at that point in the string.
10620
10621  `%' followed by a letter and a digit says to output an operand in an
10622 alternate fashion.  Four letters have standard, built-in meanings
10623 described below.  The machine description macro `PRINT_OPERAND' can
10624 define additional letters with nonstandard meanings.
10625
10626  `%cDIGIT' can be used to substitute an operand that is a constant
10627 value without the syntax that normally indicates an immediate operand.
10628
10629  `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
10630 negated before printing.
10631
10632  `%aDIGIT' can be used to substitute an operand as if it were a memory
10633 reference, with the actual operand treated as the address.  This may be
10634 useful when outputting a "load address" instruction, because often the
10635 assembler syntax for such an instruction requires you to write the
10636 operand as if it were a memory reference.
10637
10638  `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
10639
10640  `%=' outputs a number which is unique to each instruction in the
10641 entire compilation.  This is useful for making local labels to be
10642 referred to more than once in a single template that generates multiple
10643 assembler instructions.
10644
10645  `%' followed by a punctuation character specifies a substitution that
10646 does not use an operand.  Only one case is standard: `%%' outputs a `%'
10647 into the assembler code.  Other nonstandard cases can be defined in the
10648 `PRINT_OPERAND' macro.  You must also define which punctuation
10649 characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
10650
10651  The template may generate multiple assembler instructions.  Write the
10652 text for the instructions, with `\;' between them.
10653
10654  When the RTL contains two operands which are required by constraint to
10655 match each other, the output template must refer only to the
10656 lower-numbered operand.  Matching operands are not always identical,
10657 and the rest of the compiler arranges to put the proper RTL expression
10658 for printing into the lower-numbered operand.
10659
10660  One use of nonstandard letters or punctuation following `%' is to
10661 distinguish between different assembler languages for the same machine;
10662 for example, Motorola syntax versus MIT syntax for the 68000.  Motorola
10663 syntax requires periods in most opcode names, while MIT syntax does
10664 not.  For example, the opcode `movel' in MIT syntax is `move.l' in
10665 Motorola syntax.  The same file of patterns is used for both kinds of
10666 output syntax, but the character sequence `%.' is used in each place
10667 where Motorola syntax wants a period.  The `PRINT_OPERAND' macro for
10668 Motorola syntax defines the sequence to output a period; the macro for
10669 MIT syntax defines it to do nothing.
10670
10671  As a special case, a template consisting of the single character `#'
10672 instructs the compiler to first split the insn, and then output the
10673 resulting instructions separately.  This helps eliminate redundancy in
10674 the output templates.   If you have a `define_insn' that needs to emit
10675 multiple assembler instructions, and there is an matching `define_split'
10676 already defined, then you can simply use `#' as the output template
10677 instead of writing an output template that emits the multiple assembler
10678 instructions.
10679
10680  If the macro `ASSEMBLER_DIALECT' is defined, you can use construct of
10681 the form `{option0|option1|option2}' in the templates.  These describe
10682 multiple variants of assembler language syntax.  *Note Instruction
10683 Output::.
10684
10685 \1f
10686 File: gccint.info,  Node: Output Statement,  Next: Predicates,  Prev: Output Template,  Up: Machine Desc
10687
10688 12.6 C Statements for Assembler Output
10689 ======================================
10690
10691 Often a single fixed template string cannot produce correct and
10692 efficient assembler code for all the cases that are recognized by a
10693 single instruction pattern.  For example, the opcodes may depend on the
10694 kinds of operands; or some unfortunate combinations of operands may
10695 require extra machine instructions.
10696
10697  If the output control string starts with a `@', then it is actually a
10698 series of templates, each on a separate line.  (Blank lines and leading
10699 spaces and tabs are ignored.)  The templates correspond to the
10700 pattern's constraint alternatives (*note Multi-Alternative::).  For
10701 example, if a target machine has a two-address add instruction `addr'
10702 to add into a register and another `addm' to add a register to memory,
10703 you might write this pattern:
10704
10705      (define_insn "addsi3"
10706        [(set (match_operand:SI 0 "general_operand" "=r,m")
10707              (plus:SI (match_operand:SI 1 "general_operand" "0,0")
10708                       (match_operand:SI 2 "general_operand" "g,r")))]
10709        ""
10710        "@
10711         addr %2,%0
10712         addm %2,%0")
10713
10714  If the output control string starts with a `*', then it is not an
10715 output template but rather a piece of C program that should compute a
10716 template.  It should execute a `return' statement to return the
10717 template-string you want.  Most such templates use C string literals,
10718 which require doublequote characters to delimit them.  To include these
10719 doublequote characters in the string, prefix each one with `\'.
10720
10721  If the output control string is written as a brace block instead of a
10722 double-quoted string, it is automatically assumed to be C code.  In that
10723 case, it is not necessary to put in a leading asterisk, or to escape the
10724 doublequotes surrounding C string literals.
10725
10726  The operands may be found in the array `operands', whose C data type
10727 is `rtx []'.
10728
10729  It is very common to select different ways of generating assembler code
10730 based on whether an immediate operand is within a certain range.  Be
10731 careful when doing this, because the result of `INTVAL' is an integer
10732 on the host machine.  If the host machine has more bits in an `int'
10733 than the target machine has in the mode in which the constant will be
10734 used, then some of the bits you get from `INTVAL' will be superfluous.
10735 For proper results, you must carefully disregard the values of those
10736 bits.
10737
10738  It is possible to output an assembler instruction and then go on to
10739 output or compute more of them, using the subroutine `output_asm_insn'.
10740 This receives two arguments: a template-string and a vector of
10741 operands.  The vector may be `operands', or it may be another array of
10742 `rtx' that you declare locally and initialize yourself.
10743
10744  When an insn pattern has multiple alternatives in its constraints,
10745 often the appearance of the assembler code is determined mostly by
10746 which alternative was matched.  When this is so, the C code can test
10747 the variable `which_alternative', which is the ordinal number of the
10748 alternative that was actually satisfied (0 for the first, 1 for the
10749 second alternative, etc.).
10750
10751  For example, suppose there are two opcodes for storing zero, `clrreg'
10752 for registers and `clrmem' for memory locations.  Here is how a pattern
10753 could use `which_alternative' to choose between them:
10754
10755      (define_insn ""
10756        [(set (match_operand:SI 0 "general_operand" "=r,m")
10757              (const_int 0))]
10758        ""
10759        {
10760        return (which_alternative == 0
10761                ? "clrreg %0" : "clrmem %0");
10762        })
10763
10764  The example above, where the assembler code to generate was _solely_
10765 determined by the alternative, could also have been specified as
10766 follows, having the output control string start with a `@':
10767
10768      (define_insn ""
10769        [(set (match_operand:SI 0 "general_operand" "=r,m")
10770              (const_int 0))]
10771        ""
10772        "@
10773         clrreg %0
10774         clrmem %0")
10775
10776 \1f
10777 File: gccint.info,  Node: Predicates,  Next: Constraints,  Prev: Output Statement,  Up: Machine Desc
10778
10779 12.7 Predicates
10780 ===============
10781
10782 A predicate determines whether a `match_operand' or `match_operator'
10783 expression matches, and therefore whether the surrounding instruction
10784 pattern will be used for that combination of operands.  GCC has a
10785 number of machine-independent predicates, and you can define
10786 machine-specific predicates as needed.  By convention, predicates used
10787 with `match_operand' have names that end in `_operand', and those used
10788 with `match_operator' have names that end in `_operator'.
10789
10790  All predicates are Boolean functions (in the mathematical sense) of
10791 two arguments: the RTL expression that is being considered at that
10792 position in the instruction pattern, and the machine mode that the
10793 `match_operand' or `match_operator' specifies.  In this section, the
10794 first argument is called OP and the second argument MODE.  Predicates
10795 can be called from C as ordinary two-argument functions; this can be
10796 useful in output templates or other machine-specific code.
10797
10798  Operand predicates can allow operands that are not actually acceptable
10799 to the hardware, as long as the constraints give reload the ability to
10800 fix them up (*note Constraints::).  However, GCC will usually generate
10801 better code if the predicates specify the requirements of the machine
10802 instructions as closely as possible.  Reload cannot fix up operands
10803 that must be constants ("immediate operands"); you must use a predicate
10804 that allows only constants, or else enforce the requirement in the
10805 extra condition.
10806
10807  Most predicates handle their MODE argument in a uniform manner.  If
10808 MODE is `VOIDmode' (unspecified), then OP can have any mode.  If MODE
10809 is anything else, then OP must have the same mode, unless OP is a
10810 `CONST_INT' or integer `CONST_DOUBLE'.  These RTL expressions always
10811 have `VOIDmode', so it would be counterproductive to check that their
10812 mode matches.  Instead, predicates that accept `CONST_INT' and/or
10813 integer `CONST_DOUBLE' check that the value stored in the constant will
10814 fit in the requested mode.
10815
10816  Predicates with this behavior are called "normal".  `genrecog' can
10817 optimize the instruction recognizer based on knowledge of how normal
10818 predicates treat modes.  It can also diagnose certain kinds of common
10819 errors in the use of normal predicates; for instance, it is almost
10820 always an error to use a normal predicate without specifying a mode.
10821
10822  Predicates that do something different with their MODE argument are
10823 called "special".  The generic predicates `address_operand' and
10824 `pmode_register_operand' are special predicates.  `genrecog' does not
10825 do any optimizations or diagnosis when special predicates are used.
10826
10827 * Menu:
10828
10829 * Machine-Independent Predicates::  Predicates available to all back ends.
10830 * Defining Predicates::             How to write machine-specific predicate
10831                                     functions.
10832
10833 \1f
10834 File: gccint.info,  Node: Machine-Independent Predicates,  Next: Defining Predicates,  Up: Predicates
10835
10836 12.7.1 Machine-Independent Predicates
10837 -------------------------------------
10838
10839 These are the generic predicates available to all back ends.  They are
10840 defined in `recog.c'.  The first category of predicates allow only
10841 constant, or "immediate", operands.
10842
10843  -- Function: immediate_operand
10844      This predicate allows any sort of constant that fits in MODE.  It
10845      is an appropriate choice for instructions that take operands that
10846      must be constant.
10847
10848  -- Function: const_int_operand
10849      This predicate allows any `CONST_INT' expression that fits in
10850      MODE.  It is an appropriate choice for an immediate operand that
10851      does not allow a symbol or label.
10852
10853  -- Function: const_double_operand
10854      This predicate accepts any `CONST_DOUBLE' expression that has
10855      exactly MODE.  If MODE is `VOIDmode', it will also accept
10856      `CONST_INT'.  It is intended for immediate floating point
10857      constants.
10858
10859 The second category of predicates allow only some kind of machine
10860 register.
10861
10862  -- Function: register_operand
10863      This predicate allows any `REG' or `SUBREG' expression that is
10864      valid for MODE.  It is often suitable for arithmetic instruction
10865      operands on a RISC machine.
10866
10867  -- Function: pmode_register_operand
10868      This is a slight variant on `register_operand' which works around
10869      a limitation in the machine-description reader.
10870
10871           (match_operand N "pmode_register_operand" CONSTRAINT)
10872
10873      means exactly what
10874
10875           (match_operand:P N "register_operand" CONSTRAINT)
10876
10877      would mean, if the machine-description reader accepted `:P' mode
10878      suffixes.  Unfortunately, it cannot, because `Pmode' is an alias
10879      for some other mode, and might vary with machine-specific options.
10880      *Note Misc::.
10881
10882  -- Function: scratch_operand
10883      This predicate allows hard registers and `SCRATCH' expressions,
10884      but not pseudo-registers.  It is used internally by
10885      `match_scratch'; it should not be used directly.
10886
10887 The third category of predicates allow only some kind of memory
10888 reference.
10889
10890  -- Function: memory_operand
10891      This predicate allows any valid reference to a quantity of mode
10892      MODE in memory, as determined by the weak form of
10893      `GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).
10894
10895  -- Function: address_operand
10896      This predicate is a little unusual; it allows any operand that is a
10897      valid expression for the _address_ of a quantity of mode MODE,
10898      again determined by the weak form of `GO_IF_LEGITIMATE_ADDRESS'.
10899      To first order, if `(mem:MODE (EXP))' is acceptable to
10900      `memory_operand', then EXP is acceptable to `address_operand'.
10901      Note that EXP does not necessarily have the mode MODE.
10902
10903  -- Function: indirect_operand
10904      This is a stricter form of `memory_operand' which allows only
10905      memory references with a `general_operand' as the address
10906      expression.  New uses of this predicate are discouraged, because
10907      `general_operand' is very permissive, so it's hard to tell what an
10908      `indirect_operand' does or does not allow.  If a target has
10909      different requirements for memory operands for different
10910      instructions, it is better to define target-specific predicates
10911      which enforce the hardware's requirements explicitly.
10912
10913  -- Function: push_operand
10914      This predicate allows a memory reference suitable for pushing a
10915      value onto the stack.  This will be a `MEM' which refers to
10916      `stack_pointer_rtx', with a side-effect in its address expression
10917      (*note Incdec::); which one is determined by the `STACK_PUSH_CODE'
10918      macro (*note Frame Layout::).
10919
10920  -- Function: pop_operand
10921      This predicate allows a memory reference suitable for popping a
10922      value off the stack.  Again, this will be a `MEM' referring to
10923      `stack_pointer_rtx', with a side-effect in its address expression.
10924      However, this time `STACK_POP_CODE' is expected.
10925
10926 The fourth category of predicates allow some combination of the above
10927 operands.
10928
10929  -- Function: nonmemory_operand
10930      This predicate allows any immediate or register operand valid for
10931      MODE.
10932
10933  -- Function: nonimmediate_operand
10934      This predicate allows any register or memory operand valid for
10935      MODE.
10936
10937  -- Function: general_operand
10938      This predicate allows any immediate, register, or memory operand
10939      valid for MODE.
10940
10941 Finally, there is one generic operator predicate.
10942
10943  -- Function: comparison_operator
10944      This predicate matches any expression which performs an arithmetic
10945      comparison in MODE; that is, `COMPARISON_P' is true for the
10946      expression code.
10947
10948 \1f
10949 File: gccint.info,  Node: Defining Predicates,  Prev: Machine-Independent Predicates,  Up: Predicates
10950
10951 12.7.2 Defining Machine-Specific Predicates
10952 -------------------------------------------
10953
10954 Many machines have requirements for their operands that cannot be
10955 expressed precisely using the generic predicates.  You can define
10956 additional predicates using `define_predicate' and
10957 `define_special_predicate' expressions.  These expressions have three
10958 operands:
10959
10960    * The name of the predicate, as it will be referred to in
10961      `match_operand' or `match_operator' expressions.
10962
10963    * An RTL expression which evaluates to true if the predicate allows
10964      the operand OP, false if it does not.  This expression can only use
10965      the following RTL codes:
10966
10967     `MATCH_OPERAND'
10968           When written inside a predicate expression, a `MATCH_OPERAND'
10969           expression evaluates to true if the predicate it names would
10970           allow OP.  The operand number and constraint are ignored.
10971           Due to limitations in `genrecog', you can only refer to
10972           generic predicates and predicates that have already been
10973           defined.
10974
10975     `MATCH_CODE'
10976           This expression has one operand, a string constant containing
10977           a comma-separated list of RTX code names (in lower case).  It
10978           evaluates to true if OP has any of the listed codes.
10979
10980     `MATCH_TEST'
10981           This expression has one operand, a string constant containing
10982           a C expression.  The predicate's arguments, OP and MODE, are
10983           available with those names in the C expression.  The
10984           `MATCH_TEST' evaluates to true if the C expression evaluates
10985           to a nonzero value.  `MATCH_TEST' expressions must not have
10986           side effects.
10987
10988     `AND'
10989     `IOR'
10990     `NOT'
10991     `IF_THEN_ELSE'
10992           The basic `MATCH_' expressions can be combined using these
10993           logical operators, which have the semantics of the C operators
10994           `&&', `||', `!', and `? :' respectively.
10995
10996    * An optional block of C code, which should execute `return true' if
10997      the predicate is found to match and `return false' if it does not.
10998      It must not have any side effects.  The predicate arguments, OP
10999      and MODE, are available with those names.
11000
11001      If a code block is present in a predicate definition, then the RTL
11002      expression must evaluate to true _and_ the code block must execute
11003      `return true' for the predicate to allow the operand.  The RTL
11004      expression is evaluated first; do not re-check anything in the
11005      code block that was checked in the RTL expression.
11006
11007  The program `genrecog' scans `define_predicate' and
11008 `define_special_predicate' expressions to determine which RTX codes are
11009 possibly allowed.  You should always make this explicit in the RTL
11010 predicate expression, using `MATCH_OPERAND' and `MATCH_CODE'.
11011
11012  Here is an example of a simple predicate definition, from the IA64
11013 machine description:
11014
11015      ;; True if OP is a `SYMBOL_REF' which refers to the sdata section.
11016      (define_predicate "small_addr_symbolic_operand"
11017        (and (match_code "symbol_ref")
11018             (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
11019
11020 And here is another, showing the use of the C block.
11021
11022      ;; True if OP is a register operand that is (or could be) a GR reg.
11023      (define_predicate "gr_register_operand"
11024        (match_operand 0 "register_operand")
11025      {
11026        unsigned int regno;
11027        if (GET_CODE (op) == SUBREG)
11028          op = SUBREG_REG (op);
11029
11030        regno = REGNO (op);
11031        return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
11032      })
11033
11034  Predicates written with `define_predicate' automatically include a
11035 test that MODE is `VOIDmode', or OP has the same mode as MODE, or OP is
11036 a `CONST_INT' or `CONST_DOUBLE'.  They do _not_ check specifically for
11037 integer `CONST_DOUBLE', nor do they test that the value of either kind
11038 of constant fits in the requested mode.  This is because
11039 target-specific predicates that take constants usually have to do more
11040 stringent value checks anyway.  If you need the exact same treatment of
11041 `CONST_INT' or `CONST_DOUBLE' that the generic predicates provide, use
11042 a `MATCH_OPERAND' subexpression to call `const_int_operand',
11043 `const_double_operand', or `immediate_operand'.
11044
11045  Predicates written with `define_special_predicate' do not get any
11046 automatic mode checks, and are treated as having special mode handling
11047 by `genrecog'.
11048
11049  The program `genpreds' is responsible for generating code to test
11050 predicates.  It also writes a header file containing function
11051 declarations for all machine-specific predicates.  It is not necessary
11052 to declare these predicates in `CPU-protos.h'.
11053
11054 \1f
11055 File: gccint.info,  Node: Constraints,  Next: Standard Names,  Prev: Predicates,  Up: Machine Desc
11056
11057 12.8 Operand Constraints
11058 ========================
11059
11060 Each `match_operand' in an instruction pattern can specify constraints
11061 for the operands allowed.  The constraints allow you to fine-tune
11062 matching within the set of operands allowed by the predicate.
11063
11064  Constraints can say whether an operand may be in a register, and which
11065 kinds of register; whether the operand can be a memory reference, and
11066 which kinds of address; whether the operand may be an immediate
11067 constant, and which possible values it may have.  Constraints can also
11068 require two operands to match.
11069
11070 * Menu:
11071
11072 * Simple Constraints::  Basic use of constraints.
11073 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
11074 * Class Preferences::   Constraints guide which hard register to put things in.
11075 * Modifiers::           More precise control over effects of constraints.
11076 * Machine Constraints:: Existing constraints for some particular machines.
11077
11078 \1f
11079 File: gccint.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
11080
11081 12.8.1 Simple Constraints
11082 -------------------------
11083
11084 The simplest kind of constraint is a string full of letters, each of
11085 which describes one kind of operand that is permitted.  Here are the
11086 letters that are allowed:
11087
11088 whitespace
11089      Whitespace characters are ignored and can be inserted at any
11090      position except the first.  This enables each alternative for
11091      different operands to be visually aligned in the machine
11092      description even if they have different number of constraints and
11093      modifiers.
11094
11095 `m'
11096      A memory operand is allowed, with any kind of address that the
11097      machine supports in general.
11098
11099 `o'
11100      A memory operand is allowed, but only if the address is
11101      "offsettable".  This means that adding a small integer (actually,
11102      the width in bytes of the operand, as determined by its machine
11103      mode) may be added to the address and the result is also a valid
11104      memory address.
11105
11106      For example, an address which is constant is offsettable; so is an
11107      address that is the sum of a register and a constant (as long as a
11108      slightly larger constant is also within the range of
11109      address-offsets supported by the machine); but an autoincrement or
11110      autodecrement address is not offsettable.  More complicated
11111      indirect/indexed addresses may or may not be offsettable depending
11112      on the other addressing modes that the machine supports.
11113
11114      Note that in an output operand which can be matched by another
11115      operand, the constraint letter `o' is valid only when accompanied
11116      by both `<' (if the target machine has predecrement addressing)
11117      and `>' (if the target machine has preincrement addressing).
11118
11119 `V'
11120      A memory operand that is not offsettable.  In other words,
11121      anything that would fit the `m' constraint but not the `o'
11122      constraint.
11123
11124 `<'
11125      A memory operand with autodecrement addressing (either
11126      predecrement or postdecrement) is allowed.
11127
11128 `>'
11129      A memory operand with autoincrement addressing (either
11130      preincrement or postincrement) is allowed.
11131
11132 `r'
11133      A register operand is allowed provided that it is in a general
11134      register.
11135
11136 `i'
11137      An immediate integer operand (one with constant value) is allowed.
11138      This includes symbolic constants whose values will be known only at
11139      assembly time or later.
11140
11141 `n'
11142      An immediate integer operand with a known numeric value is allowed.
11143      Many systems cannot support assembly-time constants for operands
11144      less than a word wide.  Constraints for these operands should use
11145      `n' rather than `i'.
11146
11147 `I', `J', `K', ... `P'
11148      Other letters in the range `I' through `P' may be defined in a
11149      machine-dependent fashion to permit immediate integer operands with
11150      explicit integer values in specified ranges.  For example, on the
11151      68000, `I' is defined to stand for the range of values 1 to 8.
11152      This is the range permitted as a shift count in the shift
11153      instructions.
11154
11155 `E'
11156      An immediate floating operand (expression code `const_double') is
11157      allowed, but only if the target floating point format is the same
11158      as that of the host machine (on which the compiler is running).
11159
11160 `F'
11161      An immediate floating operand (expression code `const_double' or
11162      `const_vector') is allowed.
11163
11164 `G', `H'
11165      `G' and `H' may be defined in a machine-dependent fashion to
11166      permit immediate floating operands in particular ranges of values.
11167
11168 `s'
11169      An immediate integer operand whose value is not an explicit
11170      integer is allowed.
11171
11172      This might appear strange; if an insn allows a constant operand
11173      with a value not known at compile time, it certainly must allow
11174      any known value.  So why use `s' instead of `i'?  Sometimes it
11175      allows better code to be generated.
11176
11177      For example, on the 68000 in a fullword instruction it is possible
11178      to use an immediate operand; but if the immediate value is between
11179      -128 and 127, better code results from loading the value into a
11180      register and using the register.  This is because the load into
11181      the register can be done with a `moveq' instruction.  We arrange
11182      for this to happen by defining the letter `K' to mean "any integer
11183      outside the range -128 to 127", and then specifying `Ks' in the
11184      operand constraints.
11185
11186 `g'
11187      Any register, memory or immediate integer operand is allowed,
11188      except for registers that are not general registers.
11189
11190 `X'
11191      Any operand whatsoever is allowed, even if it does not satisfy
11192      `general_operand'.  This is normally used in the constraint of a
11193      `match_scratch' when certain alternatives will not actually
11194      require a scratch register.
11195
11196 `0', `1', `2', ... `9'
11197      An operand that matches the specified operand number is allowed.
11198      If a digit is used together with letters within the same
11199      alternative, the digit should come last.
11200
11201      This number is allowed to be more than a single digit.  If multiple
11202      digits are encountered consecutively, they are interpreted as a
11203      single decimal integer.  There is scant chance for ambiguity,
11204      since to-date it has never been desirable that `10' be interpreted
11205      as matching either operand 1 _or_ operand 0.  Should this be
11206      desired, one can use multiple alternatives instead.
11207
11208      This is called a "matching constraint" and what it really means is
11209      that the assembler has only a single operand that fills two roles
11210      considered separate in the RTL insn.  For example, an add insn has
11211      two input operands and one output operand in the RTL, but on most
11212      CISC machines an add instruction really has only two operands, one
11213      of them an input-output operand:
11214
11215           addl #35,r12
11216
11217      Matching constraints are used in these circumstances.  More
11218      precisely, the two operands that match must include one input-only
11219      operand and one output-only operand.  Moreover, the digit must be a
11220      smaller number than the number of the operand that uses it in the
11221      constraint.
11222
11223      For operands to match in a particular case usually means that they
11224      are identical-looking RTL expressions.  But in a few special cases
11225      specific kinds of dissimilarity are allowed.  For example, `*x' as
11226      an input operand will match `*x++' as an output operand.  For
11227      proper results in such cases, the output template should always
11228      use the output-operand's number when printing the operand.
11229
11230 `p'
11231      An operand that is a valid memory address is allowed.  This is for
11232      "load address" and "push address" instructions.
11233
11234      `p' in the constraint must be accompanied by `address_operand' as
11235      the predicate in the `match_operand'.  This predicate interprets
11236      the mode specified in the `match_operand' as the mode of the memory
11237      reference for which the address would be valid.
11238
11239 OTHER-LETTERS
11240      Other letters can be defined in machine-dependent fashion to stand
11241      for particular classes of registers or other arbitrary operand
11242      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
11243      for data, address and floating point registers.
11244
11245      The machine description macro `REG_CLASS_FROM_LETTER' has first
11246      cut at the otherwise unused letters.  If it evaluates to `NO_REGS',
11247      then `EXTRA_CONSTRAINT' is evaluated.
11248
11249      A typical use for `EXTRA_CONSTRAINT' would be to distinguish
11250      certain types of memory references that affect other insn operands.
11251
11252  In order to have valid assembler code, each operand must satisfy its
11253 constraint.  But a failure to do so does not prevent the pattern from
11254 applying to an insn.  Instead, it directs the compiler to modify the
11255 code so that the constraint will be satisfied.  Usually this is done by
11256 copying an operand into a register.
11257
11258  Contrast, therefore, the two instruction patterns that follow:
11259
11260      (define_insn ""
11261        [(set (match_operand:SI 0 "general_operand" "=r")
11262              (plus:SI (match_dup 0)
11263                       (match_operand:SI 1 "general_operand" "r")))]
11264        ""
11265        "...")
11266
11267 which has two operands, one of which must appear in two places, and
11268
11269      (define_insn ""
11270        [(set (match_operand:SI 0 "general_operand" "=r")
11271              (plus:SI (match_operand:SI 1 "general_operand" "0")
11272                       (match_operand:SI 2 "general_operand" "r")))]
11273        ""
11274        "...")
11275
11276 which has three operands, two of which are required by a constraint to
11277 be identical.  If we are considering an insn of the form
11278
11279      (insn N PREV NEXT
11280        (set (reg:SI 3)
11281             (plus:SI (reg:SI 6) (reg:SI 109)))
11282        ...)
11283
11284 the first pattern would not apply at all, because this insn does not
11285 contain two identical subexpressions in the right place.  The pattern
11286 would say, "That does not look like an add instruction; try other
11287 patterns".  The second pattern would say, "Yes, that's an add
11288 instruction, but there is something wrong with it".  It would direct
11289 the reload pass of the compiler to generate additional insns to make
11290 the constraint true.  The results might look like this:
11291
11292      (insn N2 PREV N
11293        (set (reg:SI 3) (reg:SI 6))
11294        ...)
11295
11296      (insn N N2 NEXT
11297        (set (reg:SI 3)
11298             (plus:SI (reg:SI 3) (reg:SI 109)))
11299        ...)
11300
11301  It is up to you to make sure that each operand, in each pattern, has
11302 constraints that can handle any RTL expression that could be present for
11303 that operand.  (When multiple alternatives are in use, each pattern
11304 must, for each possible combination of operand expressions, have at
11305 least one alternative which can handle that combination of operands.)
11306 The constraints don't need to _allow_ any possible operand--when this is
11307 the case, they do not constrain--but they must at least point the way to
11308 reloading any possible operand so that it will fit.
11309
11310    * If the constraint accepts whatever operands the predicate permits,
11311      there is no problem: reloading is never necessary for this operand.
11312
11313      For example, an operand whose constraints permit everything except
11314      registers is safe provided its predicate rejects registers.
11315
11316      An operand whose predicate accepts only constant values is safe
11317      provided its constraints include the letter `i'.  If any possible
11318      constant value is accepted, then nothing less than `i' will do; if
11319      the predicate is more selective, then the constraints may also be
11320      more selective.
11321
11322    * Any operand expression can be reloaded by copying it into a
11323      register.  So if an operand's constraints allow some kind of
11324      register, it is certain to be safe.  It need not permit all
11325      classes of registers; the compiler knows how to copy a register
11326      into another register of the proper class in order to make an
11327      instruction valid.
11328
11329    * A nonoffsettable memory reference can be reloaded by copying the
11330      address into a register.  So if the constraint uses the letter
11331      `o', all memory references are taken care of.
11332
11333    * A constant operand can be reloaded by allocating space in memory to
11334      hold it as preinitialized data.  Then the memory reference can be
11335      used in place of the constant.  So if the constraint uses the
11336      letters `o' or `m', constant operands are not a problem.
11337
11338    * If the constraint permits a constant and a pseudo register used in
11339      an insn was not allocated to a hard register and is equivalent to
11340      a constant, the register will be replaced with the constant.  If
11341      the predicate does not permit a constant and the insn is
11342      re-recognized for some reason, the compiler will crash.  Thus the
11343      predicate must always recognize any objects allowed by the
11344      constraint.
11345
11346  If the operand's predicate can recognize registers, but the constraint
11347 does not permit them, it can make the compiler crash.  When this
11348 operand happens to be a register, the reload pass will be stymied,
11349 because it does not know how to copy a register temporarily into memory.
11350
11351  If the predicate accepts a unary operator, the constraint applies to
11352 the operand.  For example, the MIPS processor at ISA level 3 supports an
11353 instruction which adds two registers in `SImode' to produce a `DImode'
11354 result, but only if the registers are correctly sign extended.  This
11355 predicate for the input operands accepts a `sign_extend' of an `SImode'
11356 register.  Write the constraint to indicate the type of register that
11357 is required for the operand of the `sign_extend'.
11358
11359 \1f
11360 File: gccint.info,  Node: Multi-Alternative,  Next: Class Preferences,  Prev: Simple Constraints,  Up: Constraints
11361
11362 12.8.2 Multiple Alternative Constraints
11363 ---------------------------------------
11364
11365 Sometimes a single instruction has multiple alternative sets of possible
11366 operands.  For example, on the 68000, a logical-or instruction can
11367 combine register or an immediate value into memory, or it can combine
11368 any kind of operand into a register; but it cannot combine one memory
11369 location into another.
11370
11371  These constraints are represented as multiple alternatives.  An
11372 alternative can be described by a series of letters for each operand.
11373 The overall constraint for an operand is made from the letters for this
11374 operand from the first alternative, a comma, the letters for this
11375 operand from the second alternative, a comma, and so on until the last
11376 alternative.  Here is how it is done for fullword logical-or on the
11377 68000:
11378
11379      (define_insn "iorsi3"
11380        [(set (match_operand:SI 0 "general_operand" "=m,d")
11381              (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
11382                      (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
11383        ...)
11384
11385  The first alternative has `m' (memory) for operand 0, `0' for operand
11386 1 (meaning it must match operand 0), and `dKs' for operand 2.  The
11387 second alternative has `d' (data register) for operand 0, `0' for
11388 operand 1, and `dmKs' for operand 2.  The `=' and `%' in the
11389 constraints apply to all the alternatives; their meaning is explained
11390 in the next section (*note Class Preferences::).
11391
11392  If all the operands fit any one alternative, the instruction is valid.
11393 Otherwise, for each alternative, the compiler counts how many
11394 instructions must be added to copy the operands so that that
11395 alternative applies.  The alternative requiring the least copying is
11396 chosen.  If two alternatives need the same amount of copying, the one
11397 that comes first is chosen.  These choices can be altered with the `?'
11398 and `!' characters:
11399
11400 `?'
11401      Disparage slightly the alternative that the `?' appears in, as a
11402      choice when no alternative applies exactly.  The compiler regards
11403      this alternative as one unit more costly for each `?' that appears
11404      in it.
11405
11406 `!'
11407      Disparage severely the alternative that the `!' appears in.  This
11408      alternative can still be used if it fits without reloading, but if
11409      reloading is needed, some other alternative will be used.
11410
11411  When an insn pattern has multiple alternatives in its constraints,
11412 often the appearance of the assembler code is determined mostly by which
11413 alternative was matched.  When this is so, the C code for writing the
11414 assembler code can use the variable `which_alternative', which is the
11415 ordinal number of the alternative that was actually satisfied (0 for
11416 the first, 1 for the second alternative, etc.).  *Note Output
11417 Statement::.
11418
11419 \1f
11420 File: gccint.info,  Node: Class Preferences,  Next: Modifiers,  Prev: Multi-Alternative,  Up: Constraints
11421
11422 12.8.3 Register Class Preferences
11423 ---------------------------------
11424
11425 The operand constraints have another function: they enable the compiler
11426 to decide which kind of hardware register a pseudo register is best
11427 allocated to.  The compiler examines the constraints that apply to the
11428 insns that use the pseudo register, looking for the machine-dependent
11429 letters such as `d' and `a' that specify classes of registers.  The
11430 pseudo register is put in whichever class gets the most "votes".  The
11431 constraint letters `g' and `r' also vote: they vote in favor of a
11432 general register.  The machine description says which registers are
11433 considered general.
11434
11435  Of course, on some machines all registers are equivalent, and no
11436 register classes are defined.  Then none of this complexity is relevant.
11437
11438 \1f
11439 File: gccint.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Class Preferences,  Up: Constraints
11440
11441 12.8.4 Constraint Modifier Characters
11442 -------------------------------------
11443
11444 Here are constraint modifier characters.
11445
11446 `='
11447      Means that this operand is write-only for this instruction: the
11448      previous value is discarded and replaced by output data.
11449
11450 `+'
11451      Means that this operand is both read and written by the
11452      instruction.
11453
11454      When the compiler fixes up the operands to satisfy the constraints,
11455      it needs to know which operands are inputs to the instruction and
11456      which are outputs from it.  `=' identifies an output; `+'
11457      identifies an operand that is both input and output; all other
11458      operands are assumed to be input only.
11459
11460      If you specify `=' or `+' in a constraint, you put it in the first
11461      character of the constraint string.
11462
11463 `&'
11464      Means (in a particular alternative) that this operand is an
11465      "earlyclobber" operand, which is modified before the instruction is
11466      finished using the input operands.  Therefore, this operand may
11467      not lie in a register that is used as an input operand or as part
11468      of any memory address.
11469
11470      `&' applies only to the alternative in which it is written.  In
11471      constraints with multiple alternatives, sometimes one alternative
11472      requires `&' while others do not.  See, for example, the `movdf'
11473      insn of the 68000.
11474
11475      An input operand can be tied to an earlyclobber operand if its only
11476      use as an input occurs before the early result is written.  Adding
11477      alternatives of this form often allows GCC to produce better code
11478      when only some of the inputs can be affected by the earlyclobber.
11479      See, for example, the `mulsi3' insn of the ARM.
11480
11481      `&' does not obviate the need to write `='.
11482
11483 `%'
11484      Declares the instruction to be commutative for this operand and the
11485      following operand.  This means that the compiler may interchange
11486      the two operands if that is the cheapest way to make all operands
11487      fit the constraints.  This is often used in patterns for addition
11488      instructions that really have only two operands: the result must
11489      go in one of the arguments.  Here for example, is how the 68000
11490      halfword-add instruction is defined:
11491
11492           (define_insn "addhi3"
11493             [(set (match_operand:HI 0 "general_operand" "=m,r")
11494                (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
11495                         (match_operand:HI 2 "general_operand" "di,g")))]
11496             ...)
11497      GCC can only handle one commutative pair in an asm; if you use
11498      more, the compiler may fail.  Note that you need not use the
11499      modifier if the two alternatives are strictly identical; this
11500      would only waste time in the reload pass.
11501
11502 `#'
11503      Says that all following characters, up to the next comma, are to be
11504      ignored as a constraint.  They are significant only for choosing
11505      register preferences.
11506
11507 `*'
11508      Says that the following character should be ignored when choosing
11509      register preferences.  `*' has no effect on the meaning of the
11510      constraint as a constraint, and no effect on reloading.
11511
11512      Here is an example: the 68000 has an instruction to sign-extend a
11513      halfword in a data register, and can also sign-extend a value by
11514      copying it into an address register.  While either kind of
11515      register is acceptable, the constraints on an address-register
11516      destination are less strict, so it is best if register allocation
11517      makes an address register its goal.  Therefore, `*' is used so
11518      that the `d' constraint letter (for data register) is ignored when
11519      computing register preferences.
11520
11521           (define_insn "extendhisi2"
11522             [(set (match_operand:SI 0 "general_operand" "=*d,a")
11523                   (sign_extend:SI
11524                    (match_operand:HI 1 "general_operand" "0,g")))]
11525             ...)
11526
11527 \1f
11528 File: gccint.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
11529
11530 12.8.5 Constraints for Particular Machines
11531 ------------------------------------------
11532
11533 Whenever possible, you should use the general-purpose constraint letters
11534 in `asm' arguments, since they will convey meaning more readily to
11535 people reading your code.  Failing that, use the constraint letters
11536 that usually have very similar meanings across architectures.  The most
11537 commonly used constraints are `m' and `r' (for memory and
11538 general-purpose registers respectively; *note Simple Constraints::), and
11539 `I', usually the letter indicating the most common immediate-constant
11540 format.
11541
11542  For each machine architecture, the `config/MACHINE/MACHINE.h' file
11543 defines additional constraints.  These constraints are used by the
11544 compiler itself for instruction generation, as well as for `asm'
11545 statements; therefore, some of the constraints are not particularly
11546 interesting for `asm'.  The constraints are defined through these
11547 macros:
11548
11549 `REG_CLASS_FROM_LETTER'
11550      Register class constraints (usually lowercase).
11551
11552 `CONST_OK_FOR_LETTER_P'
11553      Immediate constant constraints, for non-floating point constants of
11554      word size or smaller precision (usually uppercase).
11555
11556 `CONST_DOUBLE_OK_FOR_LETTER_P'
11557      Immediate constant constraints, for all floating point constants
11558      and for constants of greater than word size precision (usually
11559      uppercase).
11560
11561 `EXTRA_CONSTRAINT'
11562      Special cases of registers or memory.  This macro is not required,
11563      and is only defined for some machines.
11564
11565  Inspecting these macro definitions in the compiler source for your
11566 machine is the best way to be certain you have the right constraints.
11567 However, here is a summary of the machine-dependent constraints
11568 available on some particular machines.
11569
11570 _ARM family--`arm.h'_
11571
11572     `f'
11573           Floating-point register
11574
11575     `w'
11576           VFP floating-point register
11577
11578     `F'
11579           One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
11580           4.0, 5.0 or 10.0
11581
11582     `G'
11583           Floating-point constant that would satisfy the constraint `F'
11584           if it were negated
11585
11586     `I'
11587           Integer that is valid as an immediate operand in a data
11588           processing instruction.  That is, an integer in the range 0
11589           to 255 rotated by a multiple of 2
11590
11591     `J'
11592           Integer in the range -4095 to 4095
11593
11594     `K'
11595           Integer that satisfies constraint `I' when inverted (ones
11596           complement)
11597
11598     `L'
11599           Integer that satisfies constraint `I' when negated (twos
11600           complement)
11601
11602     `M'
11603           Integer in the range 0 to 32
11604
11605     `Q'
11606           A memory reference where the exact address is in a single
11607           register (``m'' is preferable for `asm' statements)
11608
11609     `R'
11610           An item in the constant pool
11611
11612     `S'
11613           A symbol in the text segment of the current file
11614
11615 _Uv_
11616      A memory reference suitable for VFP load/store insns (reg+constant
11617      offset)
11618
11619 _Uy_
11620      A memory reference suitable for iWMMXt load/store instructions.
11621
11622 _Uq_
11623      A memory reference suitable for the ARMv4 ldrsb instruction.
11624
11625 _AVR family--`avr.h'_
11626
11627     `l'
11628           Registers from r0 to r15
11629
11630     `a'
11631           Registers from r16 to r23
11632
11633     `d'
11634           Registers from r16 to r31
11635
11636     `w'
11637           Registers from r24 to r31.  These registers can be used in
11638           `adiw' command
11639
11640     `e'
11641           Pointer register (r26-r31)
11642
11643     `b'
11644           Base pointer register (r28-r31)
11645
11646     `q'
11647           Stack pointer register (SPH:SPL)
11648
11649     `t'
11650           Temporary register r0
11651
11652     `x'
11653           Register pair X (r27:r26)
11654
11655     `y'
11656           Register pair Y (r29:r28)
11657
11658     `z'
11659           Register pair Z (r31:r30)
11660
11661     `I'
11662           Constant greater than -1, less than 64
11663
11664     `J'
11665           Constant greater than -64, less than 1
11666
11667     `K'
11668           Constant integer 2
11669
11670     `L'
11671           Constant integer 0
11672
11673     `M'
11674           Constant that fits in 8 bits
11675
11676     `N'
11677           Constant integer -1
11678
11679     `O'
11680           Constant integer 8, 16, or 24
11681
11682     `P'
11683           Constant integer 1
11684
11685     `G'
11686           A floating point constant 0.0
11687
11688 _PowerPC and IBM RS6000--`rs6000.h'_
11689
11690     `b'
11691           Address base register
11692
11693     `f'
11694           Floating point register
11695
11696     `v'
11697           Vector register
11698
11699     `h'
11700           `MQ', `CTR', or `LINK' register
11701
11702     `q'
11703           `MQ' register
11704
11705     `c'
11706           `CTR' register
11707
11708     `l'
11709           `LINK' register
11710
11711     `x'
11712           `CR' register (condition register) number 0
11713
11714     `y'
11715           `CR' register (condition register)
11716
11717     `z'
11718           `FPMEM' stack memory for FPR-GPR transfers
11719
11720     `I'
11721           Signed 16-bit constant
11722
11723     `J'
11724           Unsigned 16-bit constant shifted left 16 bits (use `L'
11725           instead for `SImode' constants)
11726
11727     `K'
11728           Unsigned 16-bit constant
11729
11730     `L'
11731           Signed 16-bit constant shifted left 16 bits
11732
11733     `M'
11734           Constant larger than 31
11735
11736     `N'
11737           Exact power of 2
11738
11739     `O'
11740           Zero
11741
11742     `P'
11743           Constant whose negation is a signed 16-bit constant
11744
11745     `G'
11746           Floating point constant that can be loaded into a register
11747           with one instruction per word
11748
11749     `Q'
11750           Memory operand that is an offset from a register (`m' is
11751           preferable for `asm' statements)
11752
11753     `R'
11754           AIX TOC entry
11755
11756     `S'
11757           Constant suitable as a 64-bit mask operand
11758
11759     `T'
11760           Constant suitable as a 32-bit mask operand
11761
11762     `U'
11763           System V Release 4 small data area reference
11764
11765 _Intel 386--`i386.h'_
11766
11767     `q'
11768           `a', `b', `c', or `d' register for the i386.  For x86-64 it
11769           is equivalent to `r' class (for 8-bit instructions that do
11770           not use upper halves).
11771
11772     `Q'
11773           `a', `b', `c', or `d' register (for 8-bit instructions, that
11774           do use upper halves).
11775
11776     `R'
11777           Legacy register--equivalent to `r' class in i386 mode.  (for
11778           non-8-bit registers used together with 8-bit upper halves in
11779           a single instruction)
11780
11781     `A'
11782           Specifies the `a' or `d' registers.  This is primarily useful
11783           for 64-bit integer values (when in 32-bit mode) intended to
11784           be returned with the `d' register holding the most
11785           significant bits and the `a' register holding the least
11786           significant bits.
11787
11788     `f'
11789           Floating point register
11790
11791     `t'
11792           First (top of stack) floating point register
11793
11794     `u'
11795           Second floating point register
11796
11797     `a'
11798           `a' register
11799
11800     `b'
11801           `b' register
11802
11803     `c'
11804           `c' register
11805
11806     `C'
11807           Specifies constant that can be easily constructed in SSE
11808           register without loading it from memory.
11809
11810     `d'
11811           `d' register
11812
11813     `D'
11814           `di' register
11815
11816     `S'
11817           `si' register
11818
11819     `x'
11820           `xmm' SSE register
11821
11822     `y'
11823           MMX register
11824
11825     `I'
11826           Constant in range 0 to 31 (for 32-bit shifts)
11827
11828     `J'
11829           Constant in range 0 to 63 (for 64-bit shifts)
11830
11831     `K'
11832           `0xff'
11833
11834     `L'
11835           `0xffff'
11836
11837     `M'
11838           0, 1, 2, or 3 (shifts for `lea' instruction)
11839
11840     `N'
11841           Constant in range 0 to 255 (for `out' instruction)
11842
11843     `Z'
11844           Constant in range 0 to `0xffffffff' or symbolic reference
11845           known to fit specified range.  (for using immediates in zero
11846           extending 32-bit to 64-bit x86-64 instructions)
11847
11848     `e'
11849           Constant in range -2147483648 to 2147483647 or symbolic
11850           reference known to fit specified range.  (for using
11851           immediates in 64-bit x86-64 instructions)
11852
11853     `G'
11854           Standard 80387 floating point constant
11855
11856 _Intel IA-64--`ia64.h'_
11857
11858     `a'
11859           General register `r0' to `r3' for `addl' instruction
11860
11861     `b'
11862           Branch register
11863
11864     `c'
11865           Predicate register (`c' as in "conditional")
11866
11867     `d'
11868           Application register residing in M-unit
11869
11870     `e'
11871           Application register residing in I-unit
11872
11873     `f'
11874           Floating-point register
11875
11876     `m'
11877           Memory operand.  Remember that `m' allows postincrement and
11878           postdecrement which require printing with `%Pn' on IA-64.
11879           Use `S' to disallow postincrement and postdecrement.
11880
11881     `G'
11882           Floating-point constant 0.0 or 1.0
11883
11884     `I'
11885           14-bit signed integer constant
11886
11887     `J'
11888           22-bit signed integer constant
11889
11890     `K'
11891           8-bit signed integer constant for logical instructions
11892
11893     `L'
11894           8-bit adjusted signed integer constant for compare pseudo-ops
11895
11896     `M'
11897           6-bit unsigned integer constant for shift counts
11898
11899     `N'
11900           9-bit signed integer constant for load and store
11901           postincrements
11902
11903     `O'
11904           The constant zero
11905
11906     `P'
11907           0 or -1 for `dep' instruction
11908
11909     `Q'
11910           Non-volatile memory for floating-point loads and stores
11911
11912     `R'
11913           Integer constant in the range 1 to 4 for `shladd' instruction
11914
11915     `S'
11916           Memory operand except postincrement and postdecrement
11917
11918 _FRV--`frv.h'_
11919
11920     `a'
11921           Register in the class `ACC_REGS' (`acc0' to `acc7').
11922
11923     `b'
11924           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
11925
11926     `c'
11927           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
11928           to `icc3').
11929
11930     `d'
11931           Register in the class `GPR_REGS' (`gr0' to `gr63').
11932
11933     `e'
11934           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
11935           registers are excluded not in the class but through the use
11936           of a machine mode larger than 4 bytes.
11937
11938     `f'
11939           Register in the class `FPR_REGS' (`fr0' to `fr63').
11940
11941     `h'
11942           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
11943           registers are excluded not in the class but through the use
11944           of a machine mode larger than 4 bytes.
11945
11946     `l'
11947           Register in the class `LR_REG' (the `lr' register).
11948
11949     `q'
11950           Register in the class `QUAD_REGS' (`gr2' to `gr63').
11951           Register numbers not divisible by 4 are excluded not in the
11952           class but through the use of a machine mode larger than 8
11953           bytes.
11954
11955     `t'
11956           Register in the class `ICC_REGS' (`icc0' to `icc3').
11957
11958     `u'
11959           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
11960
11961     `v'
11962           Register in the class `ICR_REGS' (`cc4' to `cc7').
11963
11964     `w'
11965           Register in the class `FCR_REGS' (`cc0' to `cc3').
11966
11967     `x'
11968           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
11969           Register numbers not divisible by 4 are excluded not in the
11970           class but through the use of a machine mode larger than 8
11971           bytes.
11972
11973     `z'
11974           Register in the class `SPR_REGS' (`lcr' and `lr').
11975
11976     `A'
11977           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
11978
11979     `B'
11980           Register in the class `ACCG_REGS' (`accg0' to `accg7').
11981
11982     `C'
11983           Register in the class `CR_REGS' (`cc0' to `cc7').
11984
11985     `G'
11986           Floating point constant zero
11987
11988     `I'
11989           6-bit signed integer constant
11990
11991     `J'
11992           10-bit signed integer constant
11993
11994     `L'
11995           16-bit signed integer constant
11996
11997     `M'
11998           16-bit unsigned integer constant
11999
12000     `N'
12001           12-bit signed integer constant that is negative--i.e. in the
12002           range of -2048 to -1
12003
12004     `O'
12005           Constant zero
12006
12007     `P'
12008           12-bit signed integer constant that is greater than
12009           zero--i.e. in the range of 1 to 2047.
12010
12011
12012 _Blackfin family--`bfin.h'_
12013
12014     `a'
12015           P register
12016
12017     `d'
12018           D register
12019
12020     `z'
12021           A call clobbered P register.
12022
12023     `D'
12024           Even-numbered D register
12025
12026     `W'
12027           Odd-numbered D register
12028
12029     `e'
12030           Accumulator register.
12031
12032     `A'
12033           Even-numbered accumulator register.
12034
12035     `B'
12036           Odd-numbered accumulator register.
12037
12038     `b'
12039           I register
12040
12041     `B'
12042           B register
12043
12044     `f'
12045           M register
12046
12047     `c'
12048           Registers used for circular buffering, i.e. I, B, or L
12049           registers.
12050
12051     `C'
12052           The CC register.
12053
12054     `x'
12055           Any D, P, B, M, I or L register.
12056
12057     `y'
12058           Additional registers typically used only in prologues and
12059           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
12060           USP.
12061
12062     `w'
12063           Any register except accumulators or CC.
12064
12065     `Ksh'
12066           Signed 16 bit integer (in the range -32768 to 32767)
12067
12068     `Kuh'
12069           Unsigned 16 bit integer (in the range 0 to 65535)
12070
12071     `Ks7'
12072           Signed 7 bit integer (in the range -64 to 63)
12073
12074     `Ku7'
12075           Unsigned 7 bit integer (in the range 0 to 127)
12076
12077     `Ku5'
12078           Unsigned 5 bit integer (in the range 0 to 31)
12079
12080     `Ks4'
12081           Signed 4 bit integer (in the range -8 to 7)
12082
12083     `Ks3'
12084           Signed 3 bit integer (in the range -3 to 4)
12085
12086     `Ku3'
12087           Unsigned 3 bit integer (in the range 0 to 7)
12088
12089     `PN'
12090           Constant N, where N is a single-digit constant in the range 0
12091           to 4.
12092
12093     `M1'
12094           Constant 255.
12095
12096     `M2'
12097           Constant 65535.
12098
12099     `J'
12100           An integer constant with exactly a single bit set.
12101
12102     `L'
12103           An integer constant with all bits set except exactly one.
12104
12105     `H'
12106
12107     `Q'
12108           Any SYMBOL_REF.
12109
12110 _IP2K--`ip2k.h'_
12111
12112     `a'
12113           `DP' or `IP' registers (general address)
12114
12115     `f'
12116           `IP' register
12117
12118     `j'
12119           `IPL' register
12120
12121     `k'
12122           `IPH' register
12123
12124     `b'
12125           `DP' register
12126
12127     `y'
12128           `DPH' register
12129
12130     `z'
12131           `DPL' register
12132
12133     `q'
12134           `SP' register
12135
12136     `c'
12137           `DP' or `SP' registers (offsettable address)
12138
12139     `d'
12140           Non-pointer registers (not `SP', `DP', `IP')
12141
12142     `u'
12143           Non-SP registers (everything except `SP')
12144
12145     `R'
12146           Indirect through `IP'--Avoid this except for `QImode', since
12147           we can't access extra bytes
12148
12149     `S'
12150           Indirect through `SP' or `DP' with short displacement (0..127)
12151
12152     `T'
12153           Data-section immediate value
12154
12155     `I'
12156           Integers from -255 to -1
12157
12158     `J'
12159           Integers from 0 to 7--valid bit number in a register
12160
12161     `K'
12162           Integers from 0 to 127--valid displacement for addressing mode
12163
12164     `L'
12165           Integers from 1 to 127
12166
12167     `M'
12168           Integer -1
12169
12170     `N'
12171           Integer 1
12172
12173     `O'
12174           Zero
12175
12176     `P'
12177           Integers from 0 to 255
12178
12179 _MIPS--`mips.h'_
12180
12181     `d'
12182           General-purpose integer register
12183
12184     `f'
12185           Floating-point register (if available)
12186
12187     `h'
12188           `Hi' register
12189
12190     `l'
12191           `Lo' register
12192
12193     `x'
12194           `Hi' or `Lo' register
12195
12196     `y'
12197           General-purpose integer register
12198
12199     `z'
12200           Floating-point status register
12201
12202     `I'
12203           Signed 16-bit constant (for arithmetic instructions)
12204
12205     `J'
12206           Zero
12207
12208     `K'
12209           Zero-extended 16-bit constant (for logic instructions)
12210
12211     `L'
12212           Constant with low 16 bits zero (can be loaded with `lui')
12213
12214     `M'
12215           32-bit constant which requires two instructions to load (a
12216           constant which is not `I', `K', or `L')
12217
12218     `N'
12219           Negative 16-bit constant
12220
12221     `O'
12222           Exact power of two
12223
12224     `P'
12225           Positive 16-bit constant
12226
12227     `G'
12228           Floating point zero
12229
12230     `Q'
12231           Memory reference that can be loaded with more than one
12232           instruction (`m' is preferable for `asm' statements)
12233
12234     `R'
12235           Memory reference that can be loaded with one instruction (`m'
12236           is preferable for `asm' statements)
12237
12238     `S'
12239           Memory reference in external OSF/rose PIC format (`m' is
12240           preferable for `asm' statements)
12241
12242 _Motorola 680x0--`m68k.h'_
12243
12244     `a'
12245           Address register
12246
12247     `d'
12248           Data register
12249
12250     `f'
12251           68881 floating-point register, if available
12252
12253     `I'
12254           Integer in the range 1 to 8
12255
12256     `J'
12257           16-bit signed number
12258
12259     `K'
12260           Signed number whose magnitude is greater than 0x80
12261
12262     `L'
12263           Integer in the range -8 to -1
12264
12265     `M'
12266           Signed number whose magnitude is greater than 0x100
12267
12268     `G'
12269           Floating point constant that is not a 68881 constant
12270
12271 _Motorola 68HC11 & 68HC12 families--`m68hc11.h'_
12272
12273     `a'
12274           Register `a'
12275
12276     `b'
12277           Register `b'
12278
12279     `d'
12280           Register `d'
12281
12282     `q'
12283           An 8-bit register
12284
12285     `t'
12286           Temporary soft register _.tmp
12287
12288     `u'
12289           A soft register _.d1 to _.d31
12290
12291     `w'
12292           Stack pointer register
12293
12294     `x'
12295           Register `x'
12296
12297     `y'
12298           Register `y'
12299
12300     `z'
12301           Pseudo register `z' (replaced by `x' or `y' at the end)
12302
12303     `A'
12304           An address register: x, y or z
12305
12306     `B'
12307           An address register: x or y
12308
12309     `D'
12310           Register pair (x:d) to form a 32-bit value
12311
12312     `L'
12313           Constants in the range -65536 to 65535
12314
12315     `M'
12316           Constants whose 16-bit low part is zero
12317
12318     `N'
12319           Constant integer 1 or -1
12320
12321     `O'
12322           Constant integer 16
12323
12324     `P'
12325           Constants in the range -8 to 2
12326
12327
12328 _SPARC--`sparc.h'_
12329
12330     `f'
12331           Floating-point register on the SPARC-V8 architecture and
12332           lower floating-point register on the SPARC-V9 architecture.
12333
12334     `e'
12335           Floating-point register.  It is equivalent to `f' on the
12336           SPARC-V8 architecture and contains both lower and upper
12337           floating-point registers on the SPARC-V9 architecture.
12338
12339     `c'
12340           Floating-point condition code register.
12341
12342     `d'
12343           Lower floating-point register.  It is only valid on the
12344           SPARC-V9 architecture when the Visual Instruction Set is
12345           available.
12346
12347     `b'
12348           Floating-point register.  It is only valid on the SPARC-V9
12349           architecture when the Visual Instruction Set is available.
12350
12351     `h'
12352           64-bit global or out register for the SPARC-V8+ architecture.
12353
12354     `I'
12355           Signed 13-bit constant
12356
12357     `J'
12358           Zero
12359
12360     `K'
12361           32-bit constant with the low 12 bits clear (a constant that
12362           can be loaded with the `sethi' instruction)
12363
12364     `L'
12365           A constant in the range supported by `movcc' instructions
12366
12367     `M'
12368           A constant in the range supported by `movrcc' instructions
12369
12370     `N'
12371           Same as `K', except that it verifies that bits that are not
12372           in the lower 32-bit range are all zero.  Must be used instead
12373           of `K' for modes wider than `SImode'
12374
12375     `O'
12376           The constant 4096
12377
12378     `G'
12379           Floating-point zero
12380
12381     `H'
12382           Signed 13-bit constant, sign-extended to 32 or 64 bits
12383
12384     `Q'
12385           Floating-point constant whose integral representation can be
12386           moved into an integer register using a single sethi
12387           instruction
12388
12389     `R'
12390           Floating-point constant whose integral representation can be
12391           moved into an integer register using a single mov instruction
12392
12393     `S'
12394           Floating-point constant whose integral representation can be
12395           moved into an integer register using a high/lo_sum
12396           instruction sequence
12397
12398     `T'
12399           Memory address aligned to an 8-byte boundary
12400
12401     `U'
12402           Even register
12403
12404     `W'
12405           Memory address for `e' constraint registers
12406
12407     `Y'
12408           Vector zero
12409
12410
12411 _TMS320C3x/C4x--`c4x.h'_
12412
12413     `a'
12414           Auxiliary (address) register (ar0-ar7)
12415
12416     `b'
12417           Stack pointer register (sp)
12418
12419     `c'
12420           Standard (32-bit) precision integer register
12421
12422     `f'
12423           Extended (40-bit) precision register (r0-r11)
12424
12425     `k'
12426           Block count register (bk)
12427
12428     `q'
12429           Extended (40-bit) precision low register (r0-r7)
12430
12431     `t'
12432           Extended (40-bit) precision register (r0-r1)
12433
12434     `u'
12435           Extended (40-bit) precision register (r2-r3)
12436
12437     `v'
12438           Repeat count register (rc)
12439
12440     `x'
12441           Index register (ir0-ir1)
12442
12443     `y'
12444           Status (condition code) register (st)
12445
12446     `z'
12447           Data page register (dp)
12448
12449     `G'
12450           Floating-point zero
12451
12452     `H'
12453           Immediate 16-bit floating-point constant
12454
12455     `I'
12456           Signed 16-bit constant
12457
12458     `J'
12459           Signed 8-bit constant
12460
12461     `K'
12462           Signed 5-bit constant
12463
12464     `L'
12465           Unsigned 16-bit constant
12466
12467     `M'
12468           Unsigned 8-bit constant
12469
12470     `N'
12471           Ones complement of unsigned 16-bit constant
12472
12473     `O'
12474           High 16-bit constant (32-bit constant with 16 LSBs zero)
12475
12476     `Q'
12477           Indirect memory reference with signed 8-bit or index register
12478           displacement
12479
12480     `R'
12481           Indirect memory reference with unsigned 5-bit displacement
12482
12483     `S'
12484           Indirect memory reference with 1 bit or index register
12485           displacement
12486
12487     `T'
12488           Direct memory reference
12489
12490     `U'
12491           Symbolic address
12492
12493
12494 _S/390 and zSeries--`s390.h'_
12495
12496     `a'
12497           Address register (general purpose register except r0)
12498
12499     `c'
12500           Condition code register
12501
12502     `d'
12503           Data register (arbitrary general purpose register)
12504
12505     `f'
12506           Floating-point register
12507
12508     `I'
12509           Unsigned 8-bit constant (0-255)
12510
12511     `J'
12512           Unsigned 12-bit constant (0-4095)
12513
12514     `K'
12515           Signed 16-bit constant (-32768-32767)
12516
12517     `L'
12518           Value appropriate as displacement.
12519          `(0..4095)'
12520                for short displacement
12521
12522          `(-524288..524287)'
12523                for long displacement
12524
12525     `M'
12526           Constant integer with a value of 0x7fffffff.
12527
12528     `N'
12529           Multiple letter constraint followed by 4 parameter letters.
12530          `0..9:'
12531                number of the part counting from most to least
12532                significant
12533
12534          `H,Q:'
12535                mode of the part
12536
12537          `D,S,H:'
12538                mode of the containing operand
12539
12540          `0,F:'
12541                value of the other parts (F--all bits set)
12542           The constraint matches if the specified part of a constant
12543           has a value different from it's other parts.
12544
12545     `Q'
12546           Memory reference without index register and with short
12547           displacement.
12548
12549     `R'
12550           Memory reference with index register and short displacement.
12551
12552     `S'
12553           Memory reference without index register but with long
12554           displacement.
12555
12556     `T'
12557           Memory reference with index register and long displacement.
12558
12559     `U'
12560           Pointer with short displacement.
12561
12562     `W'
12563           Pointer with long displacement.
12564
12565     `Y'
12566           Shift count operand.
12567
12568
12569 _Xstormy16--`stormy16.h'_
12570
12571     `a'
12572           Register r0.
12573
12574     `b'
12575           Register r1.
12576
12577     `c'
12578           Register r2.
12579
12580     `d'
12581           Register r8.
12582
12583     `e'
12584           Registers r0 through r7.
12585
12586     `t'
12587           Registers r0 and r1.
12588
12589     `y'
12590           The carry register.
12591
12592     `z'
12593           Registers r8 and r9.
12594
12595     `I'
12596           A constant between 0 and 3 inclusive.
12597
12598     `J'
12599           A constant that has exactly one bit set.
12600
12601     `K'
12602           A constant that has exactly one bit clear.
12603
12604     `L'
12605           A constant between 0 and 255 inclusive.
12606
12607     `M'
12608           A constant between -255 and 0 inclusive.
12609
12610     `N'
12611           A constant between -3 and 0 inclusive.
12612
12613     `O'
12614           A constant between 1 and 4 inclusive.
12615
12616     `P'
12617           A constant between -4 and -1 inclusive.
12618
12619     `Q'
12620           A memory reference that is a stack push.
12621
12622     `R'
12623           A memory reference that is a stack pop.
12624
12625     `S'
12626           A memory reference that refers to a constant address of known
12627           value.
12628
12629     `T'
12630           The register indicated by Rx (not implemented yet).
12631
12632     `U'
12633           A constant that is not between 2 and 15 inclusive.
12634
12635     `Z'
12636           The constant 0.
12637
12638
12639 _Xtensa--`xtensa.h'_
12640
12641     `a'
12642           General-purpose 32-bit register
12643
12644     `b'
12645           One-bit boolean register
12646
12647     `A'
12648           MAC16 40-bit accumulator register
12649
12650     `I'
12651           Signed 12-bit integer constant, for use in MOVI instructions
12652
12653     `J'
12654           Signed 8-bit integer constant, for use in ADDI instructions
12655
12656     `K'
12657           Integer constant valid for BccI instructions
12658
12659     `L'
12660           Unsigned constant valid for BccUI instructions
12661
12662
12663
12664 \1f
12665 File: gccint.info,  Node: Standard Names,  Next: Pattern Ordering,  Prev: Constraints,  Up: Machine Desc
12666
12667 12.9 Standard Pattern Names For Generation
12668 ==========================================
12669
12670 Here is a table of the instruction names that are meaningful in the RTL
12671 generation pass of the compiler.  Giving one of these names to an
12672 instruction pattern tells the RTL generation pass that it can use the
12673 pattern to accomplish a certain task.
12674
12675 `movM'
12676      Here M stands for a two-letter machine mode name, in lowercase.
12677      This instruction pattern moves data with that machine mode from
12678      operand 1 to operand 0.  For example, `movsi' moves full-word data.
12679
12680      If operand 0 is a `subreg' with mode M of a register whose own
12681      mode is wider than M, the effect of this instruction is to store
12682      the specified value in the part of the register that corresponds
12683      to mode M.  Bits outside of M, but which are within the same
12684      target word as the `subreg' are undefined.  Bits which are outside
12685      the target word are left unchanged.
12686
12687      This class of patterns is special in several ways.  First of all,
12688      each of these names up to and including full word size _must_ be
12689      defined, because there is no other way to copy a datum from one
12690      place to another.  If there are patterns accepting operands in
12691      larger modes, `movM' must be defined for integer modes of those
12692      sizes.
12693
12694      Second, these patterns are not used solely in the RTL generation
12695      pass.  Even the reload pass can generate move insns to copy values
12696      from stack slots into temporary registers.  When it does so, one
12697      of the operands is a hard register and the other is an operand
12698      that can need to be reloaded into a register.
12699
12700      Therefore, when given such a pair of operands, the pattern must
12701      generate RTL which needs no reloading and needs no temporary
12702      registers--no registers other than the operands.  For example, if
12703      you support the pattern with a `define_expand', then in such a
12704      case the `define_expand' mustn't call `force_reg' or any other such
12705      function which might generate new pseudo registers.
12706
12707      This requirement exists even for subword modes on a RISC machine
12708      where fetching those modes from memory normally requires several
12709      insns and some temporary registers.
12710
12711      During reload a memory reference with an invalid address may be
12712      passed as an operand.  Such an address will be replaced with a
12713      valid address later in the reload pass.  In this case, nothing may
12714      be done with the address except to use it as it stands.  If it is
12715      copied, it will not be replaced with a valid address.  No attempt
12716      should be made to make such an address into a valid address and no
12717      routine (such as `change_address') that will do so may be called.
12718      Note that `general_operand' will fail when applied to such an
12719      address.
12720
12721      The global variable `reload_in_progress' (which must be explicitly
12722      declared if required) can be used to determine whether such special
12723      handling is required.
12724
12725      The variety of operands that have reloads depends on the rest of
12726      the machine description, but typically on a RISC machine these can
12727      only be pseudo registers that did not get hard registers, while on
12728      other machines explicit memory references will get optional
12729      reloads.
12730
12731      If a scratch register is required to move an object to or from
12732      memory, it can be allocated using `gen_reg_rtx' prior to life
12733      analysis.
12734
12735      If there are cases which need scratch registers during or after
12736      reload, you must define `SECONDARY_INPUT_RELOAD_CLASS' and/or
12737      `SECONDARY_OUTPUT_RELOAD_CLASS' to detect them, and provide
12738      patterns `reload_inM' or `reload_outM' to handle them.  *Note
12739      Register Classes::.
12740
12741      The global variable `no_new_pseudos' can be used to determine if it
12742      is unsafe to create new pseudo registers.  If this variable is
12743      nonzero, then it is unsafe to call `gen_reg_rtx' to allocate a new
12744      pseudo.
12745
12746      The constraints on a `movM' must permit moving any hard register
12747      to any other hard register provided that `HARD_REGNO_MODE_OK'
12748      permits mode M in both registers and `REGISTER_MOVE_COST' applied
12749      to their classes returns a value of 2.
12750
12751      It is obligatory to support floating point `movM' instructions
12752      into and out of any registers that can hold fixed point values,
12753      because unions and structures (which have modes `SImode' or
12754      `DImode') can be in those registers and they may have floating
12755      point members.
12756
12757      There may also be a need to support fixed point `movM'
12758      instructions in and out of floating point registers.
12759      Unfortunately, I have forgotten why this was so, and I don't know
12760      whether it is still true.  If `HARD_REGNO_MODE_OK' rejects fixed
12761      point values in floating point registers, then the constraints of
12762      the fixed point `movM' instructions must be designed to avoid ever
12763      trying to reload into a floating point register.
12764
12765 `reload_inM'
12766 `reload_outM'
12767      Like `movM', but used when a scratch register is required to move
12768      between operand 0 and operand 1.  Operand 2 describes the scratch
12769      register.  See the discussion of the `SECONDARY_RELOAD_CLASS'
12770      macro in *note Register Classes::.
12771
12772      There are special restrictions on the form of the `match_operand's
12773      used in these patterns.  First, only the predicate for the reload
12774      operand is examined, i.e., `reload_in' examines operand 1, but not
12775      the predicates for operand 0 or 2.  Second, there may be only one
12776      alternative in the constraints.  Third, only a single register
12777      class letter may be used for the constraint; subsequent constraint
12778      letters are ignored.  As a special exception, an empty constraint
12779      string matches the `ALL_REGS' register class.  This may relieve
12780      ports of the burden of defining an `ALL_REGS' constraint letter
12781      just for these patterns.
12782
12783 `movstrictM'
12784      Like `movM' except that if operand 0 is a `subreg' with mode M of
12785      a register whose natural mode is wider, the `movstrictM'
12786      instruction is guaranteed not to alter any of the register except
12787      the part which belongs to mode M.
12788
12789 `movmisalignM'
12790      This variant of a move pattern is designed to load or store a value
12791      from a memory address that is not naturally aligned for its mode.
12792      For a store, the memory will be in operand 0; for a load, the
12793      memory will be in operand 1.  The other operand is guaranteed not
12794      to be a memory, so that it's easy to tell whether this is a load
12795      or store.
12796
12797      This pattern is used by the autovectorizer, and when expanding a
12798      `MISALIGNED_INDIRECT_REF' expression.
12799
12800 `load_multiple'
12801      Load several consecutive memory locations into consecutive
12802      registers.  Operand 0 is the first of the consecutive registers,
12803      operand 1 is the first memory location, and operand 2 is a
12804      constant: the number of consecutive registers.
12805
12806      Define this only if the target machine really has such an
12807      instruction; do not define this if the most efficient way of
12808      loading consecutive registers from memory is to do them one at a
12809      time.
12810
12811      On some machines, there are restrictions as to which consecutive
12812      registers can be stored into memory, such as particular starting or
12813      ending register numbers or only a range of valid counts.  For those
12814      machines, use a `define_expand' (*note Expander Definitions::) and
12815      make the pattern fail if the restrictions are not met.
12816
12817      Write the generated insn as a `parallel' with elements being a
12818      `set' of one register from the appropriate memory location (you may
12819      also need `use' or `clobber' elements).  Use a `match_parallel'
12820      (*note RTL Template::) to recognize the insn.  See `rs6000.md' for
12821      examples of the use of this insn pattern.
12822
12823 `store_multiple'
12824      Similar to `load_multiple', but store several consecutive registers
12825      into consecutive memory locations.  Operand 0 is the first of the
12826      consecutive memory locations, operand 1 is the first register, and
12827      operand 2 is a constant: the number of consecutive registers.
12828
12829 `vec_setM'
12830      Set given field in the vector value.  Operand 0 is the vector to
12831      modify, operand 1 is new value of field and operand 2 specify the
12832      field index.
12833
12834 `vec_extractM'
12835      Extract given field from the vector value.  Operand 1 is the
12836      vector, operand 2 specify field index and operand 0 place to store
12837      value into.
12838
12839 `vec_initM'
12840      Initialize the vector to given values.  Operand 0 is the vector to
12841      initialize and operand 1 is parallel containing values for
12842      individual fields.
12843
12844 `pushM'
12845      Output a push instruction.  Operand 0 is value to push.  Used only
12846      when `PUSH_ROUNDING' is defined.  For historical reason, this
12847      pattern may be missing and in such case an `mov' expander is used
12848      instead, with a `MEM' expression forming the push operation.  The
12849      `mov' expander method is deprecated.
12850
12851 `addM3'
12852      Add operand 2 and operand 1, storing the result in operand 0.  All
12853      operands must have mode M.  This can be used even on two-address
12854      machines, by means of constraints requiring operands 1 and 0 to be
12855      the same location.
12856
12857 `subM3', `mulM3'
12858 `divM3', `udivM3'
12859 `modM3', `umodM3'
12860 `uminM3', `umaxM3'
12861 `andM3', `iorM3', `xorM3'
12862      Similar, for other arithmetic operations.
12863
12864 `sminM3', `smaxM3'
12865      Signed minimum and maximum operations.  When used with floating
12866      point, if both operands are zeros, or if either operand is `NaN',
12867      then it is unspecified which of the two operands is returned as
12868      the result.
12869
12870 `mulhisi3'
12871      Multiply operands 1 and 2, which have mode `HImode', and store a
12872      `SImode' product in operand 0.
12873
12874 `mulqihi3', `mulsidi3'
12875      Similar widening-multiplication instructions of other widths.
12876
12877 `umulqihi3', `umulhisi3', `umulsidi3'
12878      Similar widening-multiplication instructions that do unsigned
12879      multiplication.
12880
12881 `smulM3_highpart'
12882      Perform a signed multiplication of operands 1 and 2, which have
12883      mode M, and store the most significant half of the product in
12884      operand 0.  The least significant half of the product is discarded.
12885
12886 `umulM3_highpart'
12887      Similar, but the multiplication is unsigned.
12888
12889 `divmodM4'
12890      Signed division that produces both a quotient and a remainder.
12891      Operand 1 is divided by operand 2 to produce a quotient stored in
12892      operand 0 and a remainder stored in operand 3.
12893
12894      For machines with an instruction that produces both a quotient and
12895      a remainder, provide a pattern for `divmodM4' but do not provide
12896      patterns for `divM3' and `modM3'.  This allows optimization in the
12897      relatively common case when both the quotient and remainder are
12898      computed.
12899
12900      If an instruction that just produces a quotient or just a remainder
12901      exists and is more efficient than the instruction that produces
12902      both, write the output routine of `divmodM4' to call
12903      `find_reg_note' and look for a `REG_UNUSED' note on the quotient
12904      or remainder and generate the appropriate instruction.
12905
12906 `udivmodM4'
12907      Similar, but does unsigned division.
12908
12909 `ashlM3'
12910      Arithmetic-shift operand 1 left by a number of bits specified by
12911      operand 2, and store the result in operand 0.  Here M is the mode
12912      of operand 0 and operand 1; operand 2's mode is specified by the
12913      instruction pattern, and the compiler will convert the operand to
12914      that mode before generating the instruction.  The meaning of
12915      out-of-range shift counts can optionally be specified by
12916      `TARGET_SHIFT_TRUNCATION_MASK'.  *Note
12917      TARGET_SHIFT_TRUNCATION_MASK::.
12918
12919 `ashrM3', `lshrM3', `rotlM3', `rotrM3'
12920      Other shift and rotate instructions, analogous to the `ashlM3'
12921      instructions.
12922
12923 `negM2'
12924      Negate operand 1 and store the result in operand 0.
12925
12926 `absM2'
12927      Store the absolute value of operand 1 into operand 0.
12928
12929 `sqrtM2'
12930      Store the square root of operand 1 into operand 0.
12931
12932      The `sqrt' built-in function of C always uses the mode which
12933      corresponds to the C data type `double' and the `sqrtf' built-in
12934      function uses the mode which corresponds to the C data type
12935      `float'.
12936
12937 `cosM2'
12938      Store the cosine of operand 1 into operand 0.
12939
12940      The `cos' built-in function of C always uses the mode which
12941      corresponds to the C data type `double' and the `cosf' built-in
12942      function uses the mode which corresponds to the C data type
12943      `float'.
12944
12945 `sinM2'
12946      Store the sine of operand 1 into operand 0.
12947
12948      The `sin' built-in function of C always uses the mode which
12949      corresponds to the C data type `double' and the `sinf' built-in
12950      function uses the mode which corresponds to the C data type
12951      `float'.
12952
12953 `expM2'
12954      Store the exponential of operand 1 into operand 0.
12955
12956      The `exp' built-in function of C always uses the mode which
12957      corresponds to the C data type `double' and the `expf' built-in
12958      function uses the mode which corresponds to the C data type
12959      `float'.
12960
12961 `logM2'
12962      Store the natural logarithm of operand 1 into operand 0.
12963
12964      The `log' built-in function of C always uses the mode which
12965      corresponds to the C data type `double' and the `logf' built-in
12966      function uses the mode which corresponds to the C data type
12967      `float'.
12968
12969 `powM3'
12970      Store the value of operand 1 raised to the exponent operand 2 into
12971      operand 0.
12972
12973      The `pow' built-in function of C always uses the mode which
12974      corresponds to the C data type `double' and the `powf' built-in
12975      function uses the mode which corresponds to the C data type
12976      `float'.
12977
12978 `atan2M3'
12979      Store the arc tangent (inverse tangent) of operand 1 divided by
12980      operand 2 into operand 0, using the signs of both arguments to
12981      determine the quadrant of the result.
12982
12983      The `atan2' built-in function of C always uses the mode which
12984      corresponds to the C data type `double' and the `atan2f' built-in
12985      function uses the mode which corresponds to the C data type
12986      `float'.
12987
12988 `floorM2'
12989      Store the largest integral value not greater than argument.
12990
12991      The `floor' built-in function of C always uses the mode which
12992      corresponds to the C data type `double' and the `floorf' built-in
12993      function uses the mode which corresponds to the C data type
12994      `float'.
12995
12996 `truncM2'
12997      Store the argument rounded to integer towards zero.
12998
12999      The `trunc' built-in function of C always uses the mode which
13000      corresponds to the C data type `double' and the `truncf' built-in
13001      function uses the mode which corresponds to the C data type
13002      `float'.
13003
13004 `roundM2'
13005      Store the argument rounded to integer away from zero.
13006
13007      The `round' built-in function of C always uses the mode which
13008      corresponds to the C data type `double' and the `roundf' built-in
13009      function uses the mode which corresponds to the C data type
13010      `float'.
13011
13012 `ceilM2'
13013      Store the argument rounded to integer away from zero.
13014
13015      The `ceil' built-in function of C always uses the mode which
13016      corresponds to the C data type `double' and the `ceilf' built-in
13017      function uses the mode which corresponds to the C data type
13018      `float'.
13019
13020 `nearbyintM2'
13021      Store the argument rounded according to the default rounding mode
13022
13023      The `nearbyint' built-in function of C always uses the mode which
13024      corresponds to the C data type `double' and the `nearbyintf'
13025      built-in function uses the mode which corresponds to the C data
13026      type `float'.
13027
13028 `ffsM2'
13029      Store into operand 0 one plus the index of the least significant
13030      1-bit of operand 1.  If operand 1 is zero, store zero.  M is the
13031      mode of operand 0; operand 1's mode is specified by the instruction
13032      pattern, and the compiler will convert the operand to that mode
13033      before generating the instruction.
13034
13035      The `ffs' built-in function of C always uses the mode which
13036      corresponds to the C data type `int'.
13037
13038 `clzM2'
13039      Store into operand 0 the number of leading 0-bits in X, starting
13040      at the most significant bit position.  If X is 0, the result is
13041      undefined.  M is the mode of operand 0; operand 1's mode is
13042      specified by the instruction pattern, and the compiler will
13043      convert the operand to that mode before generating the instruction.
13044
13045 `ctzM2'
13046      Store into operand 0 the number of trailing 0-bits in X, starting
13047      at the least significant bit position.  If X is 0, the result is
13048      undefined.  M is the mode of operand 0; operand 1's mode is
13049      specified by the instruction pattern, and the compiler will
13050      convert the operand to that mode before generating the instruction.
13051
13052 `popcountM2'
13053      Store into operand 0 the number of 1-bits in X.  M is the mode of
13054      operand 0; operand 1's mode is specified by the instruction
13055      pattern, and the compiler will convert the operand to that mode
13056      before generating the instruction.
13057
13058 `parityM2'
13059      Store into operand 0 the parity of X, i.e. the number of 1-bits in
13060      X modulo 2.  M is the mode of operand 0; operand 1's mode is
13061      specified by the instruction pattern, and the compiler will convert
13062      the operand to that mode before generating the instruction.
13063
13064 `one_cmplM2'
13065      Store the bitwise-complement of operand 1 into operand 0.
13066
13067 `cmpM'
13068      Compare operand 0 and operand 1, and set the condition codes.  The
13069      RTL pattern should look like this:
13070
13071           (set (cc0) (compare (match_operand:M 0 ...)
13072                               (match_operand:M 1 ...)))
13073
13074 `tstM'
13075      Compare operand 0 against zero, and set the condition codes.  The
13076      RTL pattern should look like this:
13077
13078           (set (cc0) (match_operand:M 0 ...))
13079
13080      `tstM' patterns should not be defined for machines that do not use
13081      `(cc0)'.  Doing so would confuse the optimizer since it would no
13082      longer be clear which `set' operations were comparisons.  The
13083      `cmpM' patterns should be used instead.
13084
13085 `movmemM'
13086      Block move instruction.  The destination and source blocks of
13087      memory are the first two operands, and both are `mem:BLK's with an
13088      address in mode `Pmode'.
13089
13090      The number of bytes to move is the third operand, in mode M.
13091      Usually, you specify `word_mode' for M.  However, if you can
13092      generate better code knowing the range of valid lengths is smaller
13093      than those representable in a full word, you should provide a
13094      pattern with a mode corresponding to the range of values you can
13095      handle efficiently (e.g., `QImode' for values in the range 0-127;
13096      note we avoid numbers that appear negative) and also a pattern
13097      with `word_mode'.
13098
13099      The fourth operand is the known shared alignment of the source and
13100      destination, in the form of a `const_int' rtx.  Thus, if the
13101      compiler knows that both source and destination are word-aligned,
13102      it may provide the value 4 for this operand.
13103
13104      Descriptions of multiple `movmemM' patterns can only be beneficial
13105      if the patterns for smaller modes have fewer restrictions on their
13106      first, second and fourth operands.  Note that the mode M in
13107      `movmemM' does not impose any restriction on the mode of
13108      individually moved data units in the block.
13109
13110      These patterns need not give special consideration to the
13111      possibility that the source and destination strings might overlap.
13112
13113 `movstr'
13114      String copy instruction, with `stpcpy' semantics.  Operand 0 is an
13115      output operand in mode `Pmode'.  The addresses of the destination
13116      and source strings are operands 1 and 2, and both are `mem:BLK's
13117      with addresses in mode `Pmode'.  The execution of the expansion of
13118      this pattern should store in operand 0 the address in which the
13119      `NUL' terminator was stored in the destination string.
13120
13121 `clrmemM'
13122      Block clear instruction.  The destination string is the first
13123      operand, given as a `mem:BLK' whose address is in mode `Pmode'.
13124      The number of bytes to clear is the second operand, in mode M.  See
13125      `movmemM' for a discussion of the choice of mode.
13126
13127      The third operand is the known alignment of the destination, in
13128      the form of a `const_int' rtx.  Thus, if the compiler knows that
13129      the destination is word-aligned, it may provide the value 4 for
13130      this operand.
13131
13132      The use for multiple `clrmemM' is as for `movmemM'.
13133
13134 `cmpstrM'
13135      String compare instruction, with five operands.  Operand 0 is the
13136      output; it has mode M.  The remaining four operands are like the
13137      operands of `movmemM'.  The two memory blocks specified are
13138      compared byte by byte in lexicographic order starting at the
13139      beginning of each string.  The instruction is not allowed to
13140      prefetch more than one byte at a time since either string may end
13141      in the first byte and reading past that may access an invalid page
13142      or segment and cause a fault.  The effect of the instruction is to
13143      store a value in operand 0 whose sign indicates the result of the
13144      comparison.
13145
13146 `cmpmemM'
13147      Block compare instruction, with five operands like the operands of
13148      `cmpstrM'.  The two memory blocks specified are compared byte by
13149      byte in lexicographic order starting at the beginning of each
13150      block.  Unlike `cmpstrM' the instruction can prefetch any bytes in
13151      the two memory blocks.  The effect of the instruction is to store
13152      a value in operand 0 whose sign indicates the result of the
13153      comparison.
13154
13155 `strlenM'
13156      Compute the length of a string, with three operands.  Operand 0 is
13157      the result (of mode M), operand 1 is a `mem' referring to the
13158      first character of the string, operand 2 is the character to
13159      search for (normally zero), and operand 3 is a constant describing
13160      the known alignment of the beginning of the string.
13161
13162 `floatMN2'
13163      Convert signed integer operand 1 (valid for fixed point mode M) to
13164      floating point mode N and store in operand 0 (which has mode N).
13165
13166 `floatunsMN2'
13167      Convert unsigned integer operand 1 (valid for fixed point mode M)
13168      to floating point mode N and store in operand 0 (which has mode N).
13169
13170 `fixMN2'
13171      Convert operand 1 (valid for floating point mode M) to fixed point
13172      mode N as a signed number and store in operand 0 (which has mode
13173      N).  This instruction's result is defined only when the value of
13174      operand 1 is an integer.
13175
13176      If the machine description defines this pattern, it also needs to
13177      define the `ftrunc' pattern.
13178
13179 `fixunsMN2'
13180      Convert operand 1 (valid for floating point mode M) to fixed point
13181      mode N as an unsigned number and store in operand 0 (which has
13182      mode N).  This instruction's result is defined only when the value
13183      of operand 1 is an integer.
13184
13185 `ftruncM2'
13186      Convert operand 1 (valid for floating point mode M) to an integer
13187      value, still represented in floating point mode M, and store it in
13188      operand 0 (valid for floating point mode M).
13189
13190 `fix_truncMN2'
13191      Like `fixMN2' but works for any floating point value of mode M by
13192      converting the value to an integer.
13193
13194 `fixuns_truncMN2'
13195      Like `fixunsMN2' but works for any floating point value of mode M
13196      by converting the value to an integer.
13197
13198 `truncMN2'
13199      Truncate operand 1 (valid for mode M) to mode N and store in
13200      operand 0 (which has mode N).  Both modes must be fixed point or
13201      both floating point.
13202
13203 `extendMN2'
13204      Sign-extend operand 1 (valid for mode M) to mode N and store in
13205      operand 0 (which has mode N).  Both modes must be fixed point or
13206      both floating point.
13207
13208 `zero_extendMN2'
13209      Zero-extend operand 1 (valid for mode M) to mode N and store in
13210      operand 0 (which has mode N).  Both modes must be fixed point.
13211
13212 `extv'
13213      Extract a bit-field from operand 1 (a register or memory operand),
13214      where operand 2 specifies the width in bits and operand 3 the
13215      starting bit, and store it in operand 0.  Operand 0 must have mode
13216      `word_mode'.  Operand 1 may have mode `byte_mode' or `word_mode';
13217      often `word_mode' is allowed only for registers.  Operands 2 and 3
13218      must be valid for `word_mode'.
13219
13220      The RTL generation pass generates this instruction only with
13221      constants for operands 2 and 3.
13222
13223      The bit-field value is sign-extended to a full word integer before
13224      it is stored in operand 0.
13225
13226 `extzv'
13227      Like `extv' except that the bit-field value is zero-extended.
13228
13229 `insv'
13230      Store operand 3 (which must be valid for `word_mode') into a
13231      bit-field in operand 0, where operand 1 specifies the width in
13232      bits and operand 2 the starting bit.  Operand 0 may have mode
13233      `byte_mode' or `word_mode'; often `word_mode' is allowed only for
13234      registers.  Operands 1 and 2 must be valid for `word_mode'.
13235
13236      The RTL generation pass generates this instruction only with
13237      constants for operands 1 and 2.
13238
13239 `movMODEcc'
13240      Conditionally move operand 2 or operand 3 into operand 0 according
13241      to the comparison in operand 1.  If the comparison is true,
13242      operand 2 is moved into operand 0, otherwise operand 3 is moved.
13243
13244      The mode of the operands being compared need not be the same as
13245      the operands being moved.  Some machines, sparc64 for example,
13246      have instructions that conditionally move an integer value based
13247      on the floating point condition codes and vice versa.
13248
13249      If the machine does not have conditional move instructions, do not
13250      define these patterns.
13251
13252 `addMODEcc'
13253      Similar to `movMODEcc' but for conditional addition.  Conditionally
13254      move operand 2 or (operands 2 + operand 3) into operand 0
13255      according to the comparison in operand 1.  If the comparison is
13256      true, operand 2 is moved into operand 0, otherwise (operand 2 +
13257      operand 3) is moved.
13258
13259 `sCOND'
13260      Store zero or nonzero in the operand according to the condition
13261      codes.  Value stored is nonzero iff the condition COND is true.
13262      COND is the name of a comparison operation expression code, such
13263      as `eq', `lt' or `leu'.
13264
13265      You specify the mode that the operand must have when you write the
13266      `match_operand' expression.  The compiler automatically sees which
13267      mode you have used and supplies an operand of that mode.
13268
13269      The value stored for a true condition must have 1 as its low bit,
13270      or else must be negative.  Otherwise the instruction is not
13271      suitable and you should omit it from the machine description.  You
13272      describe to the compiler exactly which value is stored by defining
13273      the macro `STORE_FLAG_VALUE' (*note Misc::).  If a description
13274      cannot be found that can be used for all the `sCOND' patterns, you
13275      should omit those operations from the machine description.
13276
13277      These operations may fail, but should do so only in relatively
13278      uncommon cases; if they would fail for common cases involving
13279      integer comparisons, it is best to omit these patterns.
13280
13281      If these operations are omitted, the compiler will usually
13282      generate code that copies the constant one to the target and
13283      branches around an assignment of zero to the target.  If this code
13284      is more efficient than the potential instructions used for the
13285      `sCOND' pattern followed by those required to convert the result
13286      into a 1 or a zero in `SImode', you should omit the `sCOND'
13287      operations from the machine description.
13288
13289 `bCOND'
13290      Conditional branch instruction.  Operand 0 is a `label_ref' that
13291      refers to the label to jump to.  Jump if the condition codes meet
13292      condition COND.
13293
13294      Some machines do not follow the model assumed here where a
13295      comparison instruction is followed by a conditional branch
13296      instruction.  In that case, the `cmpM' (and `tstM') patterns should
13297      simply store the operands away and generate all the required insns
13298      in a `define_expand' (*note Expander Definitions::) for the
13299      conditional branch operations.  All calls to expand `bCOND'
13300      patterns are immediately preceded by calls to expand either a
13301      `cmpM' pattern or a `tstM' pattern.
13302
13303      Machines that use a pseudo register for the condition code value,
13304      or where the mode used for the comparison depends on the condition
13305      being tested, should also use the above mechanism.  *Note Jump
13306      Patterns::.
13307
13308      The above discussion also applies to the `movMODEcc' and `sCOND'
13309      patterns.
13310
13311 `cbranchMODE4'
13312      Conditional branch instruction combined with a compare instruction.
13313      Operand 0 is a comparison operator.  Operand 1 and operand 2 are
13314      the first and second operands of the comparison, respectively.
13315      Operand 3 is a `label_ref' that refers to the label to jump to.
13316
13317 `jump'
13318      A jump inside a function; an unconditional branch.  Operand 0 is
13319      the `label_ref' of the label to jump to.  This pattern name is
13320      mandatory on all machines.
13321
13322 `call'
13323      Subroutine call instruction returning no value.  Operand 0 is the
13324      function to call; operand 1 is the number of bytes of arguments
13325      pushed as a `const_int'; operand 2 is the number of registers used
13326      as operands.
13327
13328      On most machines, operand 2 is not actually stored into the RTL
13329      pattern.  It is supplied for the sake of some RISC machines which
13330      need to put this information into the assembler code; they can put
13331      it in the RTL instead of operand 1.
13332
13333      Operand 0 should be a `mem' RTX whose address is the address of the
13334      function.  Note, however, that this address can be a `symbol_ref'
13335      expression even if it would not be a legitimate memory address on
13336      the target machine.  If it is also not a valid argument for a call
13337      instruction, the pattern for this operation should be a
13338      `define_expand' (*note Expander Definitions::) that places the
13339      address into a register and uses that register in the call
13340      instruction.
13341
13342 `call_value'
13343      Subroutine call instruction returning a value.  Operand 0 is the
13344      hard register in which the value is returned.  There are three more
13345      operands, the same as the three operands of the `call' instruction
13346      (but with numbers increased by one).
13347
13348      Subroutines that return `BLKmode' objects use the `call' insn.
13349
13350 `call_pop', `call_value_pop'
13351      Similar to `call' and `call_value', except used if defined and if
13352      `RETURN_POPS_ARGS' is nonzero.  They should emit a `parallel' that
13353      contains both the function call and a `set' to indicate the
13354      adjustment made to the frame pointer.
13355
13356      For machines where `RETURN_POPS_ARGS' can be nonzero, the use of
13357      these patterns increases the number of functions for which the
13358      frame pointer can be eliminated, if desired.
13359
13360 `untyped_call'
13361      Subroutine call instruction returning a value of any type.
13362      Operand 0 is the function to call; operand 1 is a memory location
13363      where the result of calling the function is to be stored; operand
13364      2 is a `parallel' expression where each element is a `set'
13365      expression that indicates the saving of a function return value
13366      into the result block.
13367
13368      This instruction pattern should be defined to support
13369      `__builtin_apply' on machines where special instructions are needed
13370      to call a subroutine with arbitrary arguments or to save the value
13371      returned.  This instruction pattern is required on machines that
13372      have multiple registers that can hold a return value (i.e.
13373      `FUNCTION_VALUE_REGNO_P' is true for more than one register).
13374
13375 `return'
13376      Subroutine return instruction.  This instruction pattern name
13377      should be defined only if a single instruction can do all the work
13378      of returning from a function.
13379
13380      Like the `movM' patterns, this pattern is also used after the RTL
13381      generation phase.  In this case it is to support machines where
13382      multiple instructions are usually needed to return from a
13383      function, but some class of functions only requires one
13384      instruction to implement a return.  Normally, the applicable
13385      functions are those which do not need to save any registers or
13386      allocate stack space.
13387
13388      For such machines, the condition specified in this pattern should
13389      only be true when `reload_completed' is nonzero and the function's
13390      epilogue would only be a single instruction.  For machines with
13391      register windows, the routine `leaf_function_p' may be used to
13392      determine if a register window push is required.
13393
13394      Machines that have conditional return instructions should define
13395      patterns such as
13396
13397           (define_insn ""
13398             [(set (pc)
13399                   (if_then_else (match_operator
13400                                    0 "comparison_operator"
13401                                    [(cc0) (const_int 0)])
13402                                 (return)
13403                                 (pc)))]
13404             "CONDITION"
13405             "...")
13406
13407      where CONDITION would normally be the same condition specified on
13408      the named `return' pattern.
13409
13410 `untyped_return'
13411      Untyped subroutine return instruction.  This instruction pattern
13412      should be defined to support `__builtin_return' on machines where
13413      special instructions are needed to return a value of any type.
13414
13415      Operand 0 is a memory location where the result of calling a
13416      function with `__builtin_apply' is stored; operand 1 is a
13417      `parallel' expression where each element is a `set' expression
13418      that indicates the restoring of a function return value from the
13419      result block.
13420
13421 `nop'
13422      No-op instruction.  This instruction pattern name should always be
13423      defined to output a no-op in assembler code.  `(const_int 0)' will
13424      do as an RTL pattern.
13425
13426 `indirect_jump'
13427      An instruction to jump to an address which is operand zero.  This
13428      pattern name is mandatory on all machines.
13429
13430 `casesi'
13431      Instruction to jump through a dispatch table, including bounds
13432      checking.  This instruction takes five operands:
13433
13434        1. The index to dispatch on, which has mode `SImode'.
13435
13436        2. The lower bound for indices in the table, an integer constant.
13437
13438        3. The total range of indices in the table--the largest index
13439           minus the smallest one (both inclusive).
13440
13441        4. A label that precedes the table itself.
13442
13443        5. A label to jump to if the index has a value outside the
13444           bounds.
13445
13446      The table is a `addr_vec' or `addr_diff_vec' inside of a
13447      `jump_insn'.  The number of elements in the table is one plus the
13448      difference between the upper bound and the lower bound.
13449
13450 `tablejump'
13451      Instruction to jump to a variable address.  This is a low-level
13452      capability which can be used to implement a dispatch table when
13453      there is no `casesi' pattern.
13454
13455      This pattern requires two operands: the address or offset, and a
13456      label which should immediately precede the jump table.  If the
13457      macro `CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
13458      the first operand is an offset which counts from the address of
13459      the table; otherwise, it is an absolute address to jump to.  In
13460      either case, the first operand has mode `Pmode'.
13461
13462      The `tablejump' insn is always the last insn before the jump table
13463      it uses.  Its assembler code normally has no need to use the
13464      second operand, but you should incorporate it in the RTL pattern so
13465      that the jump optimizer will not delete the table as unreachable
13466      code.
13467
13468 `decrement_and_branch_until_zero'
13469      Conditional branch instruction that decrements a register and
13470      jumps if the register is nonzero.  Operand 0 is the register to
13471      decrement and test; operand 1 is the label to jump to if the
13472      register is nonzero.  *Note Looping Patterns::.
13473
13474      This optional instruction pattern is only used by the combiner,
13475      typically for loops reversed by the loop optimizer when strength
13476      reduction is enabled.
13477
13478 `doloop_end'
13479      Conditional branch instruction that decrements a register and
13480      jumps if the register is nonzero.  This instruction takes five
13481      operands: Operand 0 is the register to decrement and test; operand
13482      1 is the number of loop iterations as a `const_int' or
13483      `const0_rtx' if this cannot be determined until run-time; operand
13484      2 is the actual or estimated maximum number of iterations as a
13485      `const_int'; operand 3 is the number of enclosed loops as a
13486      `const_int' (an innermost loop has a value of 1); operand 4 is the
13487      label to jump to if the register is nonzero.  *Note Looping
13488      Patterns::.
13489
13490      This optional instruction pattern should be defined for machines
13491      with low-overhead looping instructions as the loop optimizer will
13492      try to modify suitable loops to utilize it.  If nested
13493      low-overhead looping is not supported, use a `define_expand'
13494      (*note Expander Definitions::) and make the pattern fail if
13495      operand 3 is not `const1_rtx'.  Similarly, if the actual or
13496      estimated maximum number of iterations is too large for this
13497      instruction, make it fail.
13498
13499 `doloop_begin'
13500      Companion instruction to `doloop_end' required for machines that
13501      need to perform some initialization, such as loading special
13502      registers used by a low-overhead looping instruction.  If
13503      initialization insns do not always need to be emitted, use a
13504      `define_expand' (*note Expander Definitions::) and make it fail.
13505
13506 `canonicalize_funcptr_for_compare'
13507      Canonicalize the function pointer in operand 1 and store the result
13508      into operand 0.
13509
13510      Operand 0 is always a `reg' and has mode `Pmode'; operand 1 may be
13511      a `reg', `mem', `symbol_ref', `const_int', etc and also has mode
13512      `Pmode'.
13513
13514      Canonicalization of a function pointer usually involves computing
13515      the address of the function which would be called if the function
13516      pointer were used in an indirect call.
13517
13518      Only define this pattern if function pointers on the target machine
13519      can have different values but still call the same function when
13520      used in an indirect call.
13521
13522 `save_stack_block'
13523 `save_stack_function'
13524 `save_stack_nonlocal'
13525 `restore_stack_block'
13526 `restore_stack_function'
13527 `restore_stack_nonlocal'
13528      Most machines save and restore the stack pointer by copying it to
13529      or from an object of mode `Pmode'.  Do not define these patterns on
13530      such machines.
13531
13532      Some machines require special handling for stack pointer saves and
13533      restores.  On those machines, define the patterns corresponding to
13534      the non-standard cases by using a `define_expand' (*note Expander
13535      Definitions::) that produces the required insns.  The three types
13536      of saves and restores are:
13537
13538        1. `save_stack_block' saves the stack pointer at the start of a
13539           block that allocates a variable-sized object, and
13540           `restore_stack_block' restores the stack pointer when the
13541           block is exited.
13542
13543        2. `save_stack_function' and `restore_stack_function' do a
13544           similar job for the outermost block of a function and are
13545           used when the function allocates variable-sized objects or
13546           calls `alloca'.  Only the epilogue uses the restored stack
13547           pointer, allowing a simpler save or restore sequence on some
13548           machines.
13549
13550        3. `save_stack_nonlocal' is used in functions that contain labels
13551           branched to by nested functions.  It saves the stack pointer
13552           in such a way that the inner function can use
13553           `restore_stack_nonlocal' to restore the stack pointer.  The
13554           compiler generates code to restore the frame and argument
13555           pointer registers, but some machines require saving and
13556           restoring additional data such as register window information
13557           or stack backchains.  Place insns in these patterns to save
13558           and restore any such required data.
13559
13560      When saving the stack pointer, operand 0 is the save area and
13561      operand 1 is the stack pointer.  The mode used to allocate the
13562      save area defaults to `Pmode' but you can override that choice by
13563      defining the `STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
13564      You must specify an integral mode, or `VOIDmode' if no save area
13565      is needed for a particular type of save (either because no save is
13566      needed or because a machine-specific save area can be used).
13567      Operand 0 is the stack pointer and operand 1 is the save area for
13568      restore operations.  If `save_stack_block' is defined, operand 0
13569      must not be `VOIDmode' since these saves can be arbitrarily nested.
13570
13571      A save area is a `mem' that is at a constant offset from
13572      `virtual_stack_vars_rtx' when the stack pointer is saved for use by
13573      nonlocal gotos and a `reg' in the other two cases.
13574
13575 `allocate_stack'
13576      Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1
13577      from the stack pointer to create space for dynamically allocated
13578      data.
13579
13580      Store the resultant pointer to this space into operand 0.  If you
13581      are allocating space from the main stack, do this by emitting a
13582      move insn to copy `virtual_stack_dynamic_rtx' to operand 0.  If
13583      you are allocating the space elsewhere, generate code to copy the
13584      location of the space to operand 0.  In the latter case, you must
13585      ensure this space gets freed when the corresponding space on the
13586      main stack is free.
13587
13588      Do not define this pattern if all that must be done is the
13589      subtraction.  Some machines require other operations such as stack
13590      probes or maintaining the back chain.  Define this pattern to emit
13591      those operations in addition to updating the stack pointer.
13592
13593 `check_stack'
13594      If stack checking cannot be done on your system by probing the
13595      stack with a load or store instruction (*note Stack Checking::),
13596      define this pattern to perform the needed check and signaling an
13597      error if the stack has overflowed.  The single operand is the
13598      location in the stack furthest from the current stack pointer that
13599      you need to validate.  Normally, on machines where this pattern is
13600      needed, you would obtain the stack limit from a global or
13601      thread-specific variable or register.
13602
13603 `nonlocal_goto'
13604      Emit code to generate a non-local goto, e.g., a jump from one
13605      function to a label in an outer function.  This pattern has four
13606      arguments, each representing a value to be used in the jump.  The
13607      first argument is to be loaded into the frame pointer, the second
13608      is the address to branch to (code to dispatch to the actual label),
13609      the third is the address of a location where the stack is saved,
13610      and the last is the address of the label, to be placed in the
13611      location for the incoming static chain.
13612
13613      On most machines you need not define this pattern, since GCC will
13614      already generate the correct code, which is to load the frame
13615      pointer and static chain, restore the stack (using the
13616      `restore_stack_nonlocal' pattern, if defined), and jump indirectly
13617      to the dispatcher.  You need only define this pattern if this code
13618      will not work on your machine.
13619
13620 `nonlocal_goto_receiver'
13621      This pattern, if defined, contains code needed at the target of a
13622      nonlocal goto after the code already generated by GCC.  You will
13623      not normally need to define this pattern.  A typical reason why
13624      you might need this pattern is if some value, such as a pointer to
13625      a global table, must be restored when the frame pointer is
13626      restored.  Note that a nonlocal goto only occurs within a
13627      unit-of-translation, so a global table pointer that is shared by
13628      all functions of a given module need not be restored.  There are
13629      no arguments.
13630
13631 `exception_receiver'
13632      This pattern, if defined, contains code needed at the site of an
13633      exception handler that isn't needed at the site of a nonlocal
13634      goto.  You will not normally need to define this pattern.  A
13635      typical reason why you might need this pattern is if some value,
13636      such as a pointer to a global table, must be restored after
13637      control flow is branched to the handler of an exception.  There
13638      are no arguments.
13639
13640 `builtin_setjmp_setup'
13641      This pattern, if defined, contains additional code needed to
13642      initialize the `jmp_buf'.  You will not normally need to define
13643      this pattern.  A typical reason why you might need this pattern is
13644      if some value, such as a pointer to a global table, must be
13645      restored.  Though it is preferred that the pointer value be
13646      recalculated if possible (given the address of a label for
13647      instance).  The single argument is a pointer to the `jmp_buf'.
13648      Note that the buffer is five words long and that the first three
13649      are normally used by the generic mechanism.
13650
13651 `builtin_setjmp_receiver'
13652      This pattern, if defined, contains code needed at the site of an
13653      built-in setjmp that isn't needed at the site of a nonlocal goto.
13654      You will not normally need to define this pattern.  A typical
13655      reason why you might need this pattern is if some value, such as a
13656      pointer to a global table, must be restored.  It takes one
13657      argument, which is the label to which builtin_longjmp transfered
13658      control; this pattern may be emitted at a small offset from that
13659      label.
13660
13661 `builtin_longjmp'
13662      This pattern, if defined, performs the entire action of the
13663      longjmp.  You will not normally need to define this pattern unless
13664      you also define `builtin_setjmp_setup'.  The single argument is a
13665      pointer to the `jmp_buf'.
13666
13667 `eh_return'
13668      This pattern, if defined, affects the way `__builtin_eh_return',
13669      and thence the call frame exception handling library routines, are
13670      built.  It is intended to handle non-trivial actions needed along
13671      the abnormal return path.
13672
13673      The address of the exception handler to which the function should
13674      return is passed as operand to this pattern.  It will normally
13675      need to copied by the pattern to some special register or memory
13676      location.  If the pattern needs to determine the location of the
13677      target call frame in order to do so, it may use
13678      `EH_RETURN_STACKADJ_RTX', if defined; it will have already been
13679      assigned.
13680
13681      If this pattern is not defined, the default action will be to
13682      simply copy the return address to `EH_RETURN_HANDLER_RTX'.  Either
13683      that macro or this pattern needs to be defined if call frame
13684      exception handling is to be used.
13685
13686 `prologue'
13687      This pattern, if defined, emits RTL for entry to a function.  The
13688      function entry is responsible for setting up the stack frame,
13689      initializing the frame pointer register, saving callee saved
13690      registers, etc.
13691
13692      Using a prologue pattern is generally preferred over defining
13693      `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
13694      prologue.
13695
13696      The `prologue' pattern is particularly useful for targets which
13697      perform instruction scheduling.
13698
13699 `epilogue'
13700      This pattern emits RTL for exit from a function.  The function
13701      exit is responsible for deallocating the stack frame, restoring
13702      callee saved registers and emitting the return instruction.
13703
13704      Using an epilogue pattern is generally preferred over defining
13705      `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
13706      epilogue.
13707
13708      The `epilogue' pattern is particularly useful for targets which
13709      perform instruction scheduling or which have delay slots for their
13710      return instruction.
13711
13712 `sibcall_epilogue'
13713      This pattern, if defined, emits RTL for exit from a function
13714      without the final branch back to the calling function.  This
13715      pattern will be emitted before any sibling call (aka tail call)
13716      sites.
13717
13718      The `sibcall_epilogue' pattern must not clobber any arguments used
13719      for parameter passing or any stack slots for arguments passed to
13720      the current function.
13721
13722 `trap'
13723      This pattern, if defined, signals an error, typically by causing
13724      some kind of signal to be raised.  Among other places, it is used
13725      by the Java front end to signal `invalid array index' exceptions.
13726
13727 `conditional_trap'
13728      Conditional trap instruction.  Operand 0 is a piece of RTL which
13729      performs a comparison.  Operand 1 is the trap code, an integer.
13730
13731      A typical `conditional_trap' pattern looks like
13732
13733           (define_insn "conditional_trap"
13734             [(trap_if (match_operator 0 "trap_operator"
13735                        [(cc0) (const_int 0)])
13736                       (match_operand 1 "const_int_operand" "i"))]
13737             ""
13738             "...")
13739
13740 `prefetch'
13741      This pattern, if defined, emits code for a non-faulting data
13742      prefetch instruction.  Operand 0 is the address of the memory to
13743      prefetch.  Operand 1 is a constant 1 if the prefetch is preparing
13744      for a write to the memory address, or a constant 0 otherwise.
13745      Operand 2 is the expected degree of temporal locality of the data
13746      and is a value between 0 and 3, inclusive; 0 means that the data
13747      has no temporal locality, so it need not be left in the cache
13748      after the access; 3 means that the data has a high degree of
13749      temporal locality and should be left in all levels of cache
13750      possible;  1 and 2 mean, respectively, a low or moderate degree of
13751      temporal locality.
13752
13753      Targets that do not support write prefetches or locality hints can
13754      ignore the values of operands 1 and 2.
13755
13756
13757 \1f
13758 File: gccint.info,  Node: Pattern Ordering,  Next: Dependent Patterns,  Prev: Standard Names,  Up: Machine Desc
13759
13760 12.10 When the Order of Patterns Matters
13761 ========================================
13762
13763 Sometimes an insn can match more than one instruction pattern.  Then the
13764 pattern that appears first in the machine description is the one used.
13765 Therefore, more specific patterns (patterns that will match fewer
13766 things) and faster instructions (those that will produce better code
13767 when they do match) should usually go first in the description.
13768
13769  In some cases the effect of ordering the patterns can be used to hide
13770 a pattern when it is not valid.  For example, the 68000 has an
13771 instruction for converting a fullword to floating point and another for
13772 converting a byte to floating point.  An instruction converting an
13773 integer to floating point could match either one.  We put the pattern
13774 to convert the fullword first to make sure that one will be used rather
13775 than the other.  (Otherwise a large integer might be generated as a
13776 single-byte immediate quantity, which would not work.)  Instead of
13777 using this pattern ordering it would be possible to make the pattern
13778 for convert-a-byte smart enough to deal properly with any constant
13779 value.
13780
13781 \1f
13782 File: gccint.info,  Node: Dependent Patterns,  Next: Jump Patterns,  Prev: Pattern Ordering,  Up: Machine Desc
13783
13784 12.11 Interdependence of Patterns
13785 =================================
13786
13787 Every machine description must have a named pattern for each of the
13788 conditional branch names `bCOND'.  The recognition template must always
13789 have the form
13790
13791      (set (pc)
13792           (if_then_else (COND (cc0) (const_int 0))
13793                         (label_ref (match_operand 0 "" ""))
13794                         (pc)))
13795
13796 In addition, every machine description must have an anonymous pattern
13797 for each of the possible reverse-conditional branches.  Their templates
13798 look like
13799
13800      (set (pc)
13801           (if_then_else (COND (cc0) (const_int 0))
13802                         (pc)
13803                         (label_ref (match_operand 0 "" ""))))
13804
13805 They are necessary because jump optimization can turn direct-conditional
13806 branches into reverse-conditional branches.
13807
13808  It is often convenient to use the `match_operator' construct to reduce
13809 the number of patterns that must be specified for branches.  For
13810 example,
13811
13812      (define_insn ""
13813        [(set (pc)
13814              (if_then_else (match_operator 0 "comparison_operator"
13815                                            [(cc0) (const_int 0)])
13816                            (pc)
13817                            (label_ref (match_operand 1 "" ""))))]
13818        "CONDITION"
13819        "...")
13820
13821  In some cases machines support instructions identical except for the
13822 machine mode of one or more operands.  For example, there may be
13823 "sign-extend halfword" and "sign-extend byte" instructions whose
13824 patterns are
13825
13826      (set (match_operand:SI 0 ...)
13827           (extend:SI (match_operand:HI 1 ...)))
13828
13829      (set (match_operand:SI 0 ...)
13830           (extend:SI (match_operand:QI 1 ...)))
13831
13832 Constant integers do not specify a machine mode, so an instruction to
13833 extend a constant value could match either pattern.  The pattern it
13834 actually will match is the one that appears first in the file.  For
13835 correct results, this must be the one for the widest possible mode
13836 (`HImode', here).  If the pattern matches the `QImode' instruction, the
13837 results will be incorrect if the constant value does not actually fit
13838 that mode.
13839
13840  Such instructions to extend constants are rarely generated because
13841 they are optimized away, but they do occasionally happen in nonoptimized
13842 compilations.
13843
13844  If a constraint in a pattern allows a constant, the reload pass may
13845 replace a register with a constant permitted by the constraint in some
13846 cases.  Similarly for memory references.  Because of this substitution,
13847 you should not provide separate patterns for increment and decrement
13848 instructions.  Instead, they should be generated from the same pattern
13849 that supports register-register add insns by examining the operands and
13850 generating the appropriate machine instruction.
13851
13852 \1f
13853 File: gccint.info,  Node: Jump Patterns,  Next: Looping Patterns,  Prev: Dependent Patterns,  Up: Machine Desc
13854
13855 12.12 Defining Jump Instruction Patterns
13856 ========================================
13857
13858 For most machines, GCC assumes that the machine has a condition code.
13859 A comparison insn sets the condition code, recording the results of both
13860 signed and unsigned comparison of the given operands.  A separate branch
13861 insn tests the condition code and branches or not according its value.
13862 The branch insns come in distinct signed and unsigned flavors.  Many
13863 common machines, such as the VAX, the 68000 and the 32000, work this
13864 way.
13865
13866  Some machines have distinct signed and unsigned compare instructions,
13867 and only one set of conditional branch instructions.  The easiest way
13868 to handle these machines is to treat them just like the others until
13869 the final stage where assembly code is written.  At this time, when
13870 outputting code for the compare instruction, peek ahead at the
13871 following branch using `next_cc0_user (insn)'.  (The variable `insn'
13872 refers to the insn being output, in the output-writing code in an
13873 instruction pattern.)  If the RTL says that is an unsigned branch,
13874 output an unsigned compare; otherwise output a signed compare.  When
13875 the branch itself is output, you can treat signed and unsigned branches
13876 identically.
13877
13878  The reason you can do this is that GCC always generates a pair of
13879 consecutive RTL insns, possibly separated by `note' insns, one to set
13880 the condition code and one to test it, and keeps the pair inviolate
13881 until the end.
13882
13883  To go with this technique, you must define the machine-description
13884 macro `NOTICE_UPDATE_CC' to do `CC_STATUS_INIT'; in other words, no
13885 compare instruction is superfluous.
13886
13887  Some machines have compare-and-branch instructions and no condition
13888 code.  A similar technique works for them.  When it is time to "output"
13889 a compare instruction, record its operands in two static variables.
13890 When outputting the branch-on-condition-code instruction that follows,
13891 actually output a compare-and-branch instruction that uses the
13892 remembered operands.
13893
13894  It also works to define patterns for compare-and-branch instructions.
13895 In optimizing compilation, the pair of compare and branch instructions
13896 will be combined according to these patterns.  But this does not happen
13897 if optimization is not requested.  So you must use one of the solutions
13898 above in addition to any special patterns you define.
13899
13900  In many RISC machines, most instructions do not affect the condition
13901 code and there may not even be a separate condition code register.  On
13902 these machines, the restriction that the definition and use of the
13903 condition code be adjacent insns is not necessary and can prevent
13904 important optimizations.  For example, on the IBM RS/6000, there is a
13905 delay for taken branches unless the condition code register is set three
13906 instructions earlier than the conditional branch.  The instruction
13907 scheduler cannot perform this optimization if it is not permitted to
13908 separate the definition and use of the condition code register.
13909
13910  On these machines, do not use `(cc0)', but instead use a register to
13911 represent the condition code.  If there is a specific condition code
13912 register in the machine, use a hard register.  If the condition code or
13913 comparison result can be placed in any general register, or if there are
13914 multiple condition registers, use a pseudo register.
13915
13916  On some machines, the type of branch instruction generated may depend
13917 on the way the condition code was produced; for example, on the 68k and
13918 SPARC, setting the condition code directly from an add or subtract
13919 instruction does not clear the overflow bit the way that a test
13920 instruction does, so a different branch instruction must be used for
13921 some conditional branches.  For machines that use `(cc0)', the set and
13922 use of the condition code must be adjacent (separated only by `note'
13923 insns) allowing flags in `cc_status' to be used.  (*Note Condition
13924 Code::.)  Also, the comparison and branch insns can be located from
13925 each other by using the functions `prev_cc0_setter' and `next_cc0_user'.
13926
13927  However, this is not true on machines that do not use `(cc0)'.  On
13928 those machines, no assumptions can be made about the adjacency of the
13929 compare and branch insns and the above methods cannot be used.  Instead,
13930 we use the machine mode of the condition code register to record
13931 different formats of the condition code register.
13932
13933  Registers used to store the condition code value should have a mode
13934 that is in class `MODE_CC'.  Normally, it will be `CCmode'.  If
13935 additional modes are required (as for the add example mentioned above in
13936 the SPARC), define the macro `EXTRA_CC_MODES' to list the additional
13937 modes required (*note Condition Code::).  Also define `SELECT_CC_MODE'
13938 to choose a mode given an operand of a compare.
13939
13940  If it is known during RTL generation that a different mode will be
13941 required (for example, if the machine has separate compare instructions
13942 for signed and unsigned quantities, like most IBM processors), they can
13943 be specified at that time.
13944
13945  If the cases that require different modes would be made by instruction
13946 combination, the macro `SELECT_CC_MODE' determines which machine mode
13947 should be used for the comparison result.  The patterns should be
13948 written using that mode.  To support the case of the add on the SPARC
13949 discussed above, we have the pattern
13950
13951      (define_insn ""
13952        [(set (reg:CC_NOOV 0)
13953              (compare:CC_NOOV
13954                (plus:SI (match_operand:SI 0 "register_operand" "%r")
13955                         (match_operand:SI 1 "arith_operand" "rI"))
13956                (const_int 0)))]
13957        ""
13958        "...")
13959
13960  The `SELECT_CC_MODE' macro on the SPARC returns `CC_NOOVmode' for
13961 comparisons whose argument is a `plus'.
13962
13963 \1f
13964 File: gccint.info,  Node: Looping Patterns,  Next: Insn Canonicalizations,  Prev: Jump Patterns,  Up: Machine Desc
13965
13966 12.13 Defining Looping Instruction Patterns
13967 ===========================================
13968
13969 Some machines have special jump instructions that can be utilized to
13970 make loops more efficient.  A common example is the 68000 `dbra'
13971 instruction which performs a decrement of a register and a branch if the
13972 result was greater than zero.  Other machines, in particular digital
13973 signal processors (DSPs), have special block repeat instructions to
13974 provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
13975 DSPs have a block repeat instruction that loads special registers to
13976 mark the top and end of a loop and to count the number of loop
13977 iterations.  This avoids the need for fetching and executing a
13978 `dbra'-like instruction and avoids pipeline stalls associated with the
13979 jump.
13980
13981  GCC has three special named patterns to support low overhead looping.
13982 They are `decrement_and_branch_until_zero', `doloop_begin', and
13983 `doloop_end'.  The first pattern, `decrement_and_branch_until_zero', is
13984 not emitted during RTL generation but may be emitted during the
13985 instruction combination phase.  This requires the assistance of the
13986 loop optimizer, using information collected during strength reduction,
13987 to reverse a loop to count down to zero.  Some targets also require the
13988 loop optimizer to add a `REG_NONNEG' note to indicate that the
13989 iteration count is always positive.  This is needed if the target
13990 performs a signed loop termination test.  For example, the 68000 uses a
13991 pattern similar to the following for its `dbra' instruction:
13992
13993      (define_insn "decrement_and_branch_until_zero"
13994        [(set (pc)
13995         (if_then_else
13996           (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
13997                        (const_int -1))
13998               (const_int 0))
13999           (label_ref (match_operand 1 "" ""))
14000           (pc)))
14001         (set (match_dup 0)
14002         (plus:SI (match_dup 0)
14003                  (const_int -1)))]
14004        "find_reg_note (insn, REG_NONNEG, 0)"
14005        "...")
14006
14007  Note that since the insn is both a jump insn and has an output, it must
14008 deal with its own reloads, hence the `m' constraints.  Also note that
14009 since this insn is generated by the instruction combination phase
14010 combining two sequential insns together into an implicit parallel insn,
14011 the iteration counter needs to be biased by the same amount as the
14012 decrement operation, in this case -1.  Note that the following similar
14013 pattern will not be matched by the combiner.
14014
14015      (define_insn "decrement_and_branch_until_zero"
14016        [(set (pc)
14017         (if_then_else
14018           (ge (match_operand:SI 0 "general_operand" "+d*am")
14019               (const_int 1))
14020           (label_ref (match_operand 1 "" ""))
14021           (pc)))
14022         (set (match_dup 0)
14023         (plus:SI (match_dup 0)
14024                  (const_int -1)))]
14025        "find_reg_note (insn, REG_NONNEG, 0)"
14026        "...")
14027
14028  The other two special looping patterns, `doloop_begin' and
14029 `doloop_end', are emitted by the loop optimizer for certain
14030 well-behaved loops with a finite number of loop iterations using
14031 information collected during strength reduction.
14032
14033  The `doloop_end' pattern describes the actual looping instruction (or
14034 the implicit looping operation) and the `doloop_begin' pattern is an
14035 optional companion pattern that can be used for initialization needed
14036 for some low-overhead looping instructions.
14037
14038  Note that some machines require the actual looping instruction to be
14039 emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
14040 the true RTL for a looping instruction at the top of the loop can cause
14041 problems with flow analysis.  So instead, a dummy `doloop' insn is
14042 emitted at the end of the loop.  The machine dependent reorg pass checks
14043 for the presence of this `doloop' insn and then searches back to the
14044 top of the loop, where it inserts the true looping insn (provided there
14045 are no instructions in the loop which would cause problems).  Any
14046 additional labels can be emitted at this point.  In addition, if the
14047 desired special iteration counter register was not allocated, this
14048 machine dependent reorg pass could emit a traditional compare and jump
14049 instruction pair.
14050
14051  The essential difference between the `decrement_and_branch_until_zero'
14052 and the `doloop_end' patterns is that the loop optimizer allocates an
14053 additional pseudo register for the latter as an iteration counter.
14054 This pseudo register cannot be used within the loop (i.e., general
14055 induction variables cannot be derived from it), however, in many cases
14056 the loop induction variable may become redundant and removed by the
14057 flow pass.
14058
14059 \1f
14060 File: gccint.info,  Node: Insn Canonicalizations,  Next: Expander Definitions,  Prev: Looping Patterns,  Up: Machine Desc
14061
14062 12.14 Canonicalization of Instructions
14063 ======================================
14064
14065 There are often cases where multiple RTL expressions could represent an
14066 operation performed by a single machine instruction.  This situation is
14067 most commonly encountered with logical, branch, and multiply-accumulate
14068 instructions.  In such cases, the compiler attempts to convert these
14069 multiple RTL expressions into a single canonical form to reduce the
14070 number of insn patterns required.
14071
14072  In addition to algebraic simplifications, following canonicalizations
14073 are performed:
14074
14075    * For commutative and comparison operators, a constant is always
14076      made the second operand.  If a machine only supports a constant as
14077      the second operand, only patterns that match a constant in the
14078      second operand need be supplied.
14079
14080    * For associative operators, a sequence of operators will always
14081      chain to the left; for instance, only the left operand of an
14082      integer `plus' can itself be a `plus'.  `and', `ior', `xor',
14083      `plus', `mult', `smin', `smax', `umin', and `umax' are associative
14084      when applied to integers, and sometimes to floating-point.
14085
14086    * For these operators, if only one operand is a `neg', `not',
14087      `mult', `plus', or `minus' expression, it will be the first
14088      operand.
14089
14090    * In combinations of `neg', `mult', `plus', and `minus', the `neg'
14091      operations (if any) will be moved inside the operations as far as
14092      possible.  For instance, `(neg (mult A B))' is canonicalized as
14093      `(mult (neg A) B)', but `(plus (mult (neg A) B) C)' is
14094      canonicalized as `(minus A (mult B C))'.
14095
14096    * For the `compare' operator, a constant is always the second operand
14097      on machines where `cc0' is used (*note Jump Patterns::).  On other
14098      machines, there are rare cases where the compiler might want to
14099      construct a `compare' with a constant as the first operand.
14100      However, these cases are not common enough for it to be worthwhile
14101      to provide a pattern matching a constant as the first operand
14102      unless the machine actually has such an instruction.
14103
14104      An operand of `neg', `not', `mult', `plus', or `minus' is made the
14105      first operand under the same conditions as above.
14106
14107    * `(minus X (const_int N))' is converted to `(plus X (const_int
14108      -N))'.
14109
14110    * Within address computations (i.e., inside `mem'), a left shift is
14111      converted into the appropriate multiplication by a power of two.
14112
14113    * De Morgan's Law is used to move bitwise negation inside a bitwise
14114      logical-and or logical-or operation.  If this results in only one
14115      operand being a `not' expression, it will be the first one.
14116
14117      A machine that has an instruction that performs a bitwise
14118      logical-and of one operand with the bitwise negation of the other
14119      should specify the pattern for that instruction as
14120
14121           (define_insn ""
14122             [(set (match_operand:M 0 ...)
14123                   (and:M (not:M (match_operand:M 1 ...))
14124                                (match_operand:M 2 ...)))]
14125             "..."
14126             "...")
14127
14128      Similarly, a pattern for a "NAND" instruction should be written
14129
14130           (define_insn ""
14131             [(set (match_operand:M 0 ...)
14132                   (ior:M (not:M (match_operand:M 1 ...))
14133                                (not:M (match_operand:M 2 ...))))]
14134             "..."
14135             "...")
14136
14137      In both cases, it is not necessary to include patterns for the many
14138      logically equivalent RTL expressions.
14139
14140    * The only possible RTL expressions involving both bitwise
14141      exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M
14142      (xor:M X Y))'.
14143
14144    * The sum of three items, one of which is a constant, will only
14145      appear in the form
14146
14147           (plus:M (plus:M X Y) CONSTANT)
14148
14149    * On machines that do not use `cc0', `(compare X (const_int 0))'
14150      will be converted to X.
14151
14152    * Equality comparisons of a group of bits (usually a single bit)
14153      with zero will be written using `zero_extract' rather than the
14154      equivalent `and' or `sign_extract' operations.
14155
14156
14157 \1f
14158 File: gccint.info,  Node: Expander Definitions,  Next: Insn Splitting,  Prev: Insn Canonicalizations,  Up: Machine Desc
14159
14160 12.15 Defining RTL Sequences for Code Generation
14161 ================================================
14162
14163 On some target machines, some standard pattern names for RTL generation
14164 cannot be handled with single insn, but a sequence of RTL insns can
14165 represent them.  For these target machines, you can write a
14166 `define_expand' to specify how to generate the sequence of RTL.
14167
14168  A `define_expand' is an RTL expression that looks almost like a
14169 `define_insn'; but, unlike the latter, a `define_expand' is used only
14170 for RTL generation and it can produce more than one RTL insn.
14171
14172  A `define_expand' RTX has four operands:
14173
14174    * The name.  Each `define_expand' must have a name, since the only
14175      use for it is to refer to it by name.
14176
14177    * The RTL template.  This is a vector of RTL expressions representing
14178      a sequence of separate instructions.  Unlike `define_insn', there
14179      is no implicit surrounding `PARALLEL'.
14180
14181    * The condition, a string containing a C expression.  This
14182      expression is used to express how the availability of this pattern
14183      depends on subclasses of target machine, selected by command-line
14184      options when GCC is run.  This is just like the condition of a
14185      `define_insn' that has a standard name.  Therefore, the condition
14186      (if present) may not depend on the data in the insn being matched,
14187      but only the target-machine-type flags.  The compiler needs to
14188      test these conditions during initialization in order to learn
14189      exactly which named instructions are available in a particular run.
14190
14191    * The preparation statements, a string containing zero or more C
14192      statements which are to be executed before RTL code is generated
14193      from the RTL template.
14194
14195      Usually these statements prepare temporary registers for use as
14196      internal operands in the RTL template, but they can also generate
14197      RTL insns directly by calling routines such as `emit_insn', etc.
14198      Any such insns precede the ones that come from the RTL template.
14199
14200  Every RTL insn emitted by a `define_expand' must match some
14201 `define_insn' in the machine description.  Otherwise, the compiler will
14202 crash when trying to generate code for the insn or trying to optimize
14203 it.
14204
14205  The RTL template, in addition to controlling generation of RTL insns,
14206 also describes the operands that need to be specified when this pattern
14207 is used.  In particular, it gives a predicate for each operand.
14208
14209  A true operand, which needs to be specified in order to generate RTL
14210 from the pattern, should be described with a `match_operand' in its
14211 first occurrence in the RTL template.  This enters information on the
14212 operand's predicate into the tables that record such things.  GCC uses
14213 the information to preload the operand into a register if that is
14214 required for valid RTL code.  If the operand is referred to more than
14215 once, subsequent references should use `match_dup'.
14216
14217  The RTL template may also refer to internal "operands" which are
14218 temporary registers or labels used only within the sequence made by the
14219 `define_expand'.  Internal operands are substituted into the RTL
14220 template with `match_dup', never with `match_operand'.  The values of
14221 the internal operands are not passed in as arguments by the compiler
14222 when it requests use of this pattern.  Instead, they are computed
14223 within the pattern, in the preparation statements.  These statements
14224 compute the values and store them into the appropriate elements of
14225 `operands' so that `match_dup' can find them.
14226
14227  There are two special macros defined for use in the preparation
14228 statements: `DONE' and `FAIL'.  Use them with a following semicolon, as
14229 a statement.
14230
14231 `DONE'
14232      Use the `DONE' macro to end RTL generation for the pattern.  The
14233      only RTL insns resulting from the pattern on this occasion will be
14234      those already emitted by explicit calls to `emit_insn' within the
14235      preparation statements; the RTL template will not be generated.
14236
14237 `FAIL'
14238      Make the pattern fail on this occasion.  When a pattern fails, it
14239      means that the pattern was not truly available.  The calling
14240      routines in the compiler will try other strategies for code
14241      generation using other patterns.
14242
14243      Failure is currently supported only for binary (addition,
14244      multiplication, shifting, etc.) and bit-field (`extv', `extzv',
14245      and `insv') operations.
14246
14247  If the preparation falls through (invokes neither `DONE' nor `FAIL'),
14248 then the `define_expand' acts like a `define_insn' in that the RTL
14249 template is used to generate the insn.
14250
14251  The RTL template is not used for matching, only for generating the
14252 initial insn list.  If the preparation statement always invokes `DONE'
14253 or `FAIL', the RTL template may be reduced to a simple list of
14254 operands, such as this example:
14255
14256      (define_expand "addsi3"
14257        [(match_operand:SI 0 "register_operand" "")
14258         (match_operand:SI 1 "register_operand" "")
14259         (match_operand:SI 2 "register_operand" "")]
14260        ""
14261        "
14262      {
14263        handle_add (operands[0], operands[1], operands[2]);
14264        DONE;
14265      }")
14266
14267  Here is an example, the definition of left-shift for the SPUR chip:
14268
14269      (define_expand "ashlsi3"
14270        [(set (match_operand:SI 0 "register_operand" "")
14271              (ashift:SI
14272                (match_operand:SI 1 "register_operand" "")
14273                (match_operand:SI 2 "nonmemory_operand" "")))]
14274        ""
14275        "
14276
14277      {
14278        if (GET_CODE (operands[2]) != CONST_INT
14279            || (unsigned) INTVAL (operands[2]) > 3)
14280          FAIL;
14281      }")
14282
14283 This example uses `define_expand' so that it can generate an RTL insn
14284 for shifting when the shift-count is in the supported range of 0 to 3
14285 but fail in other cases where machine insns aren't available.  When it
14286 fails, the compiler tries another strategy using different patterns
14287 (such as, a library call).
14288
14289  If the compiler were able to handle nontrivial condition-strings in
14290 patterns with names, then it would be possible to use a `define_insn'
14291 in that case.  Here is another case (zero-extension on the 68000) which
14292 makes more use of the power of `define_expand':
14293
14294      (define_expand "zero_extendhisi2"
14295        [(set (match_operand:SI 0 "general_operand" "")
14296              (const_int 0))
14297         (set (strict_low_part
14298                (subreg:HI
14299                  (match_dup 0)
14300                  0))
14301              (match_operand:HI 1 "general_operand" ""))]
14302        ""
14303        "operands[1] = make_safe_from (operands[1], operands[0]);")
14304
14305 Here two RTL insns are generated, one to clear the entire output operand
14306 and the other to copy the input operand into its low half.  This
14307 sequence is incorrect if the input operand refers to [the old value of]
14308 the output operand, so the preparation statement makes sure this isn't
14309 so.  The function `make_safe_from' copies the `operands[1]' into a
14310 temporary register if it refers to `operands[0]'.  It does this by
14311 emitting another RTL insn.
14312
14313  Finally, a third example shows the use of an internal operand.
14314 Zero-extension on the SPUR chip is done by `and'-ing the result against
14315 a halfword mask.  But this mask cannot be represented by a `const_int'
14316 because the constant value is too large to be legitimate on this
14317 machine.  So it must be copied into a register with `force_reg' and
14318 then the register used in the `and'.
14319
14320      (define_expand "zero_extendhisi2"
14321        [(set (match_operand:SI 0 "register_operand" "")
14322              (and:SI (subreg:SI
14323                        (match_operand:HI 1 "register_operand" "")
14324                        0)
14325                      (match_dup 2)))]
14326        ""
14327        "operands[2]
14328           = force_reg (SImode, GEN_INT (65535)); ")
14329
14330  _Note:_ If the `define_expand' is used to serve a standard binary or
14331 unary arithmetic operation or a bit-field operation, then the last insn
14332 it generates must not be a `code_label', `barrier' or `note'.  It must
14333 be an `insn', `jump_insn' or `call_insn'.  If you don't need a real insn
14334 at the end, emit an insn to copy the result of the operation into
14335 itself.  Such an insn will generate no code, but it can avoid problems
14336 in the compiler.
14337
14338 \1f
14339 File: gccint.info,  Node: Insn Splitting,  Next: Including Patterns,  Prev: Expander Definitions,  Up: Machine Desc
14340
14341 12.16 Defining How to Split Instructions
14342 ========================================
14343
14344 There are two cases where you should specify how to split a pattern
14345 into multiple insns.  On machines that have instructions requiring
14346 delay slots (*note Delay Slots::) or that have instructions whose
14347 output is not available for multiple cycles (*note Processor pipeline
14348 description::), the compiler phases that optimize these cases need to
14349 be able to move insns into one-instruction delay slots.  However, some
14350 insns may generate more than one machine instruction.  These insns
14351 cannot be placed into a delay slot.
14352
14353  Often you can rewrite the single insn as a list of individual insns,
14354 each corresponding to one machine instruction.  The disadvantage of
14355 doing so is that it will cause the compilation to be slower and require
14356 more space.  If the resulting insns are too complex, it may also
14357 suppress some optimizations.  The compiler splits the insn if there is a
14358 reason to believe that it might improve instruction or delay slot
14359 scheduling.
14360
14361  The insn combiner phase also splits putative insns.  If three insns are
14362 merged into one insn with a complex expression that cannot be matched by
14363 some `define_insn' pattern, the combiner phase attempts to split the
14364 complex pattern into two insns that are recognized.  Usually it can
14365 break the complex pattern into two patterns by splitting out some
14366 subexpression.  However, in some other cases, such as performing an
14367 addition of a large constant in two insns on a RISC machine, the way to
14368 split the addition into two insns is machine-dependent.
14369
14370  The `define_split' definition tells the compiler how to split a
14371 complex insn into several simpler insns.  It looks like this:
14372
14373      (define_split
14374        [INSN-PATTERN]
14375        "CONDITION"
14376        [NEW-INSN-PATTERN-1
14377         NEW-INSN-PATTERN-2
14378         ...]
14379        "PREPARATION-STATEMENTS")
14380
14381  INSN-PATTERN is a pattern that needs to be split and CONDITION is the
14382 final condition to be tested, as in a `define_insn'.  When an insn
14383 matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
14384 in the insn list with the insns given by NEW-INSN-PATTERN-1,
14385 NEW-INSN-PATTERN-2, etc.
14386
14387  The PREPARATION-STATEMENTS are similar to those statements that are
14388 specified for `define_expand' (*note Expander Definitions::) and are
14389 executed before the new RTL is generated to prepare for the generated
14390 code or emit some insns whose pattern is not fixed.  Unlike those in
14391 `define_expand', however, these statements must not generate any new
14392 pseudo-registers.  Once reload has completed, they also must not
14393 allocate any space in the stack frame.
14394
14395  Patterns are matched against INSN-PATTERN in two different
14396 circumstances.  If an insn needs to be split for delay slot scheduling
14397 or insn scheduling, the insn is already known to be valid, which means
14398 that it must have been matched by some `define_insn' and, if
14399 `reload_completed' is nonzero, is known to satisfy the constraints of
14400 that `define_insn'.  In that case, the new insn patterns must also be
14401 insns that are matched by some `define_insn' and, if `reload_completed'
14402 is nonzero, must also satisfy the constraints of those definitions.
14403
14404  As an example of this usage of `define_split', consider the following
14405 example from `a29k.md', which splits a `sign_extend' from `HImode' to
14406 `SImode' into a pair of shift insns:
14407
14408      (define_split
14409        [(set (match_operand:SI 0 "gen_reg_operand" "")
14410              (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
14411        ""
14412        [(set (match_dup 0)
14413              (ashift:SI (match_dup 1)
14414                         (const_int 16)))
14415         (set (match_dup 0)
14416              (ashiftrt:SI (match_dup 0)
14417                           (const_int 16)))]
14418        "
14419      { operands[1] = gen_lowpart (SImode, operands[1]); }")
14420
14421  When the combiner phase tries to split an insn pattern, it is always
14422 the case that the pattern is _not_ matched by any `define_insn'.  The
14423 combiner pass first tries to split a single `set' expression and then
14424 the same `set' expression inside a `parallel', but followed by a
14425 `clobber' of a pseudo-reg to use as a scratch register.  In these
14426 cases, the combiner expects exactly two new insn patterns to be
14427 generated.  It will verify that these patterns match some `define_insn'
14428 definitions, so you need not do this test in the `define_split' (of
14429 course, there is no point in writing a `define_split' that will never
14430 produce insns that match).
14431
14432  Here is an example of this use of `define_split', taken from
14433 `rs6000.md':
14434
14435      (define_split
14436        [(set (match_operand:SI 0 "gen_reg_operand" "")
14437              (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
14438                       (match_operand:SI 2 "non_add_cint_operand" "")))]
14439        ""
14440        [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
14441         (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
14442      "
14443      {
14444        int low = INTVAL (operands[2]) & 0xffff;
14445        int high = (unsigned) INTVAL (operands[2]) >> 16;
14446
14447        if (low & 0x8000)
14448          high++, low |= 0xffff0000;
14449
14450        operands[3] = GEN_INT (high << 16);
14451        operands[4] = GEN_INT (low);
14452      }")
14453
14454  Here the predicate `non_add_cint_operand' matches any `const_int' that
14455 is _not_ a valid operand of a single add insn.  The add with the
14456 smaller displacement is written so that it can be substituted into the
14457 address of a subsequent operation.
14458
14459  An example that uses a scratch register, from the same file, generates
14460 an equality comparison of a register and a large constant:
14461
14462      (define_split
14463        [(set (match_operand:CC 0 "cc_reg_operand" "")
14464              (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
14465                          (match_operand:SI 2 "non_short_cint_operand" "")))
14466         (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
14467        "find_single_use (operands[0], insn, 0)
14468         && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
14469             || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
14470        [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
14471         (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
14472        "
14473      {
14474        /* Get the constant we are comparing against, C, and see what it
14475           looks like sign-extended to 16 bits.  Then see what constant
14476           could be XOR'ed with C to get the sign-extended value.  */
14477
14478        int c = INTVAL (operands[2]);
14479        int sextc = (c << 16) >> 16;
14480        int xorv = c ^ sextc;
14481
14482        operands[4] = GEN_INT (xorv);
14483        operands[5] = GEN_INT (sextc);
14484      }")
14485
14486  To avoid confusion, don't write a single `define_split' that accepts
14487 some insns that match some `define_insn' as well as some insns that
14488 don't.  Instead, write two separate `define_split' definitions, one for
14489 the insns that are valid and one for the insns that are not valid.
14490
14491  The splitter is allowed to split jump instructions into sequence of
14492 jumps or create new jumps in while splitting non-jump instructions.  As
14493 the central flowgraph and branch prediction information needs to be
14494 updated, several restriction apply.
14495
14496  Splitting of jump instruction into sequence that over by another jump
14497 instruction is always valid, as compiler expect identical behavior of
14498 new jump.  When new sequence contains multiple jump instructions or new
14499 labels, more assistance is needed.  Splitter is required to create only
14500 unconditional jumps, or simple conditional jump instructions.
14501 Additionally it must attach a `REG_BR_PROB' note to each conditional
14502 jump.  A global variable `split_branch_probability' hold the
14503 probability of original branch in case it was an simple conditional
14504 jump, -1 otherwise.  To simplify recomputing of edge frequencies, new
14505 sequence is required to have only forward jumps to the newly created
14506 labels.
14507
14508  For the common case where the pattern of a define_split exactly
14509 matches the pattern of a define_insn, use `define_insn_and_split'.  It
14510 looks like this:
14511
14512      (define_insn_and_split
14513        [INSN-PATTERN]
14514        "CONDITION"
14515        "OUTPUT-TEMPLATE"
14516        "SPLIT-CONDITION"
14517        [NEW-INSN-PATTERN-1
14518         NEW-INSN-PATTERN-2
14519         ...]
14520        "PREPARATION-STATEMENTS"
14521        [INSN-ATTRIBUTES])
14522
14523  INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
14524 as in `define_insn'.  The NEW-INSN-PATTERN vector and the
14525 PREPARATION-STATEMENTS are used as in a `define_split'.  The
14526 SPLIT-CONDITION is also used as in `define_split', with the additional
14527 behavior that if the condition starts with `&&', the condition used for
14528 the split will be the constructed as a logical "and" of the split
14529 condition with the insn condition.  For example, from i386.md:
14530
14531      (define_insn_and_split "zero_extendhisi2_and"
14532        [(set (match_operand:SI 0 "register_operand" "=r")
14533           (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
14534         (clobber (reg:CC 17))]
14535        "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
14536        "#"
14537        "&& reload_completed"
14538        [(parallel [(set (match_dup 0)
14539                         (and:SI (match_dup 0) (const_int 65535)))
14540               (clobber (reg:CC 17))])]
14541        ""
14542        [(set_attr "type" "alu1")])
14543
14544  In this case, the actual split condition will be
14545 `TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
14546
14547  The `define_insn_and_split' construction provides exactly the same
14548 functionality as two separate `define_insn' and `define_split'
14549 patterns.  It exists for compactness, and as a maintenance tool to
14550 prevent having to ensure the two patterns' templates match.
14551
14552 \1f
14553 File: gccint.info,  Node: Including Patterns,  Next: Peephole Definitions,  Prev: Insn Splitting,  Up: Machine Desc
14554
14555 12.17 Including Patterns in Machine Descriptions.
14556 =================================================
14557
14558 The `include' pattern tells the compiler tools where to look for
14559 patterns that are in files other than in the file `.md'.  This is used
14560 only at build time and there is no preprocessing allowed.
14561
14562  It looks like:
14563
14564
14565      (include
14566        PATHNAME)
14567
14568  For example:
14569
14570
14571      (include "filestuff")
14572
14573  Where PATHNAME is a string that specifies the location of the file,
14574 specifies the include file to be in `gcc/config/target/filestuff'.  The
14575 directory `gcc/config/target' is regarded as the default directory.
14576
14577  Machine descriptions may be split up into smaller more manageable
14578 subsections and placed into subdirectories.
14579
14580  By specifying:
14581
14582
14583      (include "BOGUS/filestuff")
14584
14585  the include file is specified to be in
14586 `gcc/config/TARGET/BOGUS/filestuff'.
14587
14588  Specifying an absolute path for the include file such as;
14589
14590      (include "/u2/BOGUS/filestuff")
14591  is permitted but is not encouraged.
14592
14593 12.17.1 RTL Generation Tool Options for Directory Search
14594 --------------------------------------------------------
14595
14596 The `-IDIR' option specifies directories to search for machine
14597 descriptions.  For example:
14598
14599
14600      genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
14601
14602  Add the directory DIR to the head of the list of directories to be
14603 searched for header files.  This can be used to override a system
14604 machine definition file, substituting your own version, since these
14605 directories are searched before the default machine description file
14606 directories.  If you use more than one `-I' option, the directories are
14607 scanned in left-to-right order; the standard default directory come
14608 after.
14609
14610 \1f
14611 File: gccint.info,  Node: Peephole Definitions,  Next: Insn Attributes,  Prev: Including Patterns,  Up: Machine Desc
14612
14613 12.18 Machine-Specific Peephole Optimizers
14614 ==========================================
14615
14616 In addition to instruction patterns the `md' file may contain
14617 definitions of machine-specific peephole optimizations.
14618
14619  The combiner does not notice certain peephole optimizations when the
14620 data flow in the program does not suggest that it should try them.  For
14621 example, sometimes two consecutive insns related in purpose can be
14622 combined even though the second one does not appear to use a register
14623 computed in the first one.  A machine-specific peephole optimizer can
14624 detect such opportunities.
14625
14626  There are two forms of peephole definitions that may be used.  The
14627 original `define_peephole' is run at assembly output time to match
14628 insns and substitute assembly text.  Use of `define_peephole' is
14629 deprecated.
14630
14631  A newer `define_peephole2' matches insns and substitutes new insns.
14632 The `peephole2' pass is run after register allocation but before
14633 scheduling, which may result in much better code for targets that do
14634 scheduling.
14635
14636 * Menu:
14637
14638 * define_peephole::     RTL to Text Peephole Optimizers
14639 * define_peephole2::    RTL to RTL Peephole Optimizers
14640
14641 \1f
14642 File: gccint.info,  Node: define_peephole,  Next: define_peephole2,  Up: Peephole Definitions
14643
14644 12.18.1 RTL to Text Peephole Optimizers
14645 ---------------------------------------
14646
14647 A definition looks like this:
14648
14649      (define_peephole
14650        [INSN-PATTERN-1
14651         INSN-PATTERN-2
14652         ...]
14653        "CONDITION"
14654        "TEMPLATE"
14655        "OPTIONAL-INSN-ATTRIBUTES")
14656
14657 The last string operand may be omitted if you are not using any
14658 machine-specific information in this machine description.  If present,
14659 it must obey the same rules as in a `define_insn'.
14660
14661  In this skeleton, INSN-PATTERN-1 and so on are patterns to match
14662 consecutive insns.  The optimization applies to a sequence of insns when
14663 INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next,
14664 and so on.
14665
14666  Each of the insns matched by a peephole must also match a
14667 `define_insn'.  Peepholes are checked only at the last stage just
14668 before code generation, and only optionally.  Therefore, any insn which
14669 would match a peephole but no `define_insn' will cause a crash in code
14670 generation in an unoptimized compilation, or at various optimization
14671 stages.
14672
14673  The operands of the insns are matched with `match_operands',
14674 `match_operator', and `match_dup', as usual.  What is not usual is that
14675 the operand numbers apply to all the insn patterns in the definition.
14676 So, you can check for identical operands in two insns by using
14677 `match_operand' in one insn and `match_dup' in the other.
14678
14679  The operand constraints used in `match_operand' patterns do not have
14680 any direct effect on the applicability of the peephole, but they will
14681 be validated afterward, so make sure your constraints are general enough
14682 to apply whenever the peephole matches.  If the peephole matches but
14683 the constraints are not satisfied, the compiler will crash.
14684
14685  It is safe to omit constraints in all the operands of the peephole; or
14686 you can write constraints which serve as a double-check on the criteria
14687 previously tested.
14688
14689  Once a sequence of insns matches the patterns, the CONDITION is
14690 checked.  This is a C expression which makes the final decision whether
14691 to perform the optimization (we do so if the expression is nonzero).  If
14692 CONDITION is omitted (in other words, the string is empty) then the
14693 optimization is applied to every sequence of insns that matches the
14694 patterns.
14695
14696  The defined peephole optimizations are applied after register
14697 allocation is complete.  Therefore, the peephole definition can check
14698 which operands have ended up in which kinds of registers, just by
14699 looking at the operands.
14700
14701  The way to refer to the operands in CONDITION is to write
14702 `operands[I]' for operand number I (as matched by `(match_operand I
14703 ...)').  Use the variable `insn' to refer to the last of the insns
14704 being matched; use `prev_active_insn' to find the preceding insns.
14705
14706  When optimizing computations with intermediate results, you can use
14707 CONDITION to match only when the intermediate results are not used
14708 elsewhere.  Use the C expression `dead_or_set_p (INSN, OP)', where INSN
14709 is the insn in which you expect the value to be used for the last time
14710 (from the value of `insn', together with use of `prev_nonnote_insn'),
14711 and OP is the intermediate value (from `operands[I]').
14712
14713  Applying the optimization means replacing the sequence of insns with
14714 one new insn.  The TEMPLATE controls ultimate output of assembler code
14715 for this combined insn.  It works exactly like the template of a
14716 `define_insn'.  Operand numbers in this template are the same ones used
14717 in matching the original sequence of insns.
14718
14719  The result of a defined peephole optimizer does not need to match any
14720 of the insn patterns in the machine description; it does not even have
14721 an opportunity to match them.  The peephole optimizer definition itself
14722 serves as the insn pattern to control how the insn is output.
14723
14724  Defined peephole optimizers are run as assembler code is being output,
14725 so the insns they produce are never combined or rearranged in any way.
14726
14727  Here is an example, taken from the 68000 machine description:
14728
14729      (define_peephole
14730        [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
14731         (set (match_operand:DF 0 "register_operand" "=f")
14732              (match_operand:DF 1 "register_operand" "ad"))]
14733        "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
14734      {
14735        rtx xoperands[2];
14736        xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
14737      #ifdef MOTOROLA
14738        output_asm_insn ("move.l %1,(sp)", xoperands);
14739        output_asm_insn ("move.l %1,-(sp)", operands);
14740        return "fmove.d (sp)+,%0";
14741      #else
14742        output_asm_insn ("movel %1,sp@", xoperands);
14743        output_asm_insn ("movel %1,sp@-", operands);
14744        return "fmoved sp@+,%0";
14745      #endif
14746      })
14747
14748  The effect of this optimization is to change
14749
14750      jbsr _foobar
14751      addql #4,sp
14752      movel d1,sp@-
14753      movel d0,sp@-
14754      fmoved sp@+,fp0
14755
14756 into
14757
14758      jbsr _foobar
14759      movel d1,sp@
14760      movel d0,sp@-
14761      fmoved sp@+,fp0
14762
14763  INSN-PATTERN-1 and so on look _almost_ like the second operand of
14764 `define_insn'.  There is one important difference: the second operand
14765 of `define_insn' consists of one or more RTX's enclosed in square
14766 brackets.  Usually, there is only one: then the same action can be
14767 written as an element of a `define_peephole'.  But when there are
14768 multiple actions in a `define_insn', they are implicitly enclosed in a
14769 `parallel'.  Then you must explicitly write the `parallel', and the
14770 square brackets within it, in the `define_peephole'.  Thus, if an insn
14771 pattern looks like this,
14772
14773      (define_insn "divmodsi4"
14774        [(set (match_operand:SI 0 "general_operand" "=d")
14775              (div:SI (match_operand:SI 1 "general_operand" "0")
14776                      (match_operand:SI 2 "general_operand" "dmsK")))
14777         (set (match_operand:SI 3 "general_operand" "=d")
14778              (mod:SI (match_dup 1) (match_dup 2)))]
14779        "TARGET_68020"
14780        "divsl%.l %2,%3:%0")
14781
14782 then the way to mention this insn in a peephole is as follows:
14783
14784      (define_peephole
14785        [...
14786         (parallel
14787          [(set (match_operand:SI 0 "general_operand" "=d")
14788                (div:SI (match_operand:SI 1 "general_operand" "0")
14789                        (match_operand:SI 2 "general_operand" "dmsK")))
14790           (set (match_operand:SI 3 "general_operand" "=d")
14791                (mod:SI (match_dup 1) (match_dup 2)))])
14792         ...]
14793        ...)
14794
14795 \1f
14796 File: gccint.info,  Node: define_peephole2,  Prev: define_peephole,  Up: Peephole Definitions
14797
14798 12.18.2 RTL to RTL Peephole Optimizers
14799 --------------------------------------
14800
14801 The `define_peephole2' definition tells the compiler how to substitute
14802 one sequence of instructions for another sequence, what additional
14803 scratch registers may be needed and what their lifetimes must be.
14804
14805      (define_peephole2
14806        [INSN-PATTERN-1
14807         INSN-PATTERN-2
14808         ...]
14809        "CONDITION"
14810        [NEW-INSN-PATTERN-1
14811         NEW-INSN-PATTERN-2
14812         ...]
14813        "PREPARATION-STATEMENTS")
14814
14815  The definition is almost identical to `define_split' (*note Insn
14816 Splitting::) except that the pattern to match is not a single
14817 instruction, but a sequence of instructions.
14818
14819  It is possible to request additional scratch registers for use in the
14820 output template.  If appropriate registers are not free, the pattern
14821 will simply not match.
14822
14823  Scratch registers are requested with a `match_scratch' pattern at the
14824 top level of the input pattern.  The allocated register (initially) will
14825 be dead at the point requested within the original sequence.  If the
14826 scratch is used at more than a single point, a `match_dup' pattern at
14827 the top level of the input pattern marks the last position in the input
14828 sequence at which the register must be available.
14829
14830  Here is an example from the IA-32 machine description:
14831
14832      (define_peephole2
14833        [(match_scratch:SI 2 "r")
14834         (parallel [(set (match_operand:SI 0 "register_operand" "")
14835                         (match_operator:SI 3 "arith_or_logical_operator"
14836                           [(match_dup 0)
14837                            (match_operand:SI 1 "memory_operand" "")]))
14838                    (clobber (reg:CC 17))])]
14839        "! optimize_size && ! TARGET_READ_MODIFY"
14840        [(set (match_dup 2) (match_dup 1))
14841         (parallel [(set (match_dup 0)
14842                         (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
14843                    (clobber (reg:CC 17))])]
14844        "")
14845
14846 This pattern tries to split a load from its use in the hopes that we'll
14847 be able to schedule around the memory load latency.  It allocates a
14848 single `SImode' register of class `GENERAL_REGS' (`"r"') that needs to
14849 be live only at the point just before the arithmetic.
14850
14851  A real example requiring extended scratch lifetimes is harder to come
14852 by, so here's a silly made-up example:
14853
14854      (define_peephole2
14855        [(match_scratch:SI 4 "r")
14856         (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
14857         (set (match_operand:SI 2 "" "") (match_dup 1))
14858         (match_dup 4)
14859         (set (match_operand:SI 3 "" "") (match_dup 1))]
14860        "/* determine 1 does not overlap 0 and 2 */"
14861        [(set (match_dup 4) (match_dup 1))
14862         (set (match_dup 0) (match_dup 4))
14863         (set (match_dup 2) (match_dup 4))]
14864         (set (match_dup 3) (match_dup 4))]
14865        "")
14866
14867 If we had not added the `(match_dup 4)' in the middle of the input
14868 sequence, it might have been the case that the register we chose at the
14869 beginning of the sequence is killed by the first or second `set'.
14870
14871 \1f
14872 File: gccint.info,  Node: Insn Attributes,  Next: Conditional Execution,  Prev: Peephole Definitions,  Up: Machine Desc
14873
14874 12.19 Instruction Attributes
14875 ============================
14876
14877 In addition to describing the instruction supported by the target
14878 machine, the `md' file also defines a group of "attributes" and a set of
14879 values for each.  Every generated insn is assigned a value for each
14880 attribute.  One possible attribute would be the effect that the insn
14881 has on the machine's condition code.  This attribute can then be used
14882 by `NOTICE_UPDATE_CC' to track the condition codes.
14883
14884 * Menu:
14885
14886 * Defining Attributes:: Specifying attributes and their values.
14887 * Expressions::         Valid expressions for attribute values.
14888 * Tagging Insns::       Assigning attribute values to insns.
14889 * Attr Example::        An example of assigning attributes.
14890 * Insn Lengths::        Computing the length of insns.
14891 * Constant Attributes:: Defining attributes that are constant.
14892 * Delay Slots::         Defining delay slots required for a machine.
14893 * Processor pipeline description:: Specifying information for insn scheduling.
14894
14895 \1f
14896 File: gccint.info,  Node: Defining Attributes,  Next: Expressions,  Up: Insn Attributes
14897
14898 12.19.1 Defining Attributes and their Values
14899 --------------------------------------------
14900
14901 The `define_attr' expression is used to define each attribute required
14902 by the target machine.  It looks like:
14903
14904      (define_attr NAME LIST-OF-VALUES DEFAULT)
14905
14906  NAME is a string specifying the name of the attribute being defined.
14907
14908  LIST-OF-VALUES is either a string that specifies a comma-separated
14909 list of values that can be assigned to the attribute, or a null string
14910 to indicate that the attribute takes numeric values.
14911
14912  DEFAULT is an attribute expression that gives the value of this
14913 attribute for insns that match patterns whose definition does not
14914 include an explicit value for this attribute.  *Note Attr Example::,
14915 for more information on the handling of defaults.  *Note Constant
14916 Attributes::, for information on attributes that do not depend on any
14917 particular insn.
14918
14919  For each defined attribute, a number of definitions are written to the
14920 `insn-attr.h' file.  For cases where an explicit set of values is
14921 specified for an attribute, the following are defined:
14922
14923    * A `#define' is written for the symbol `HAVE_ATTR_NAME'.
14924
14925    * An enumerated class is defined for `attr_NAME' with elements of
14926      the form `UPPER-NAME_UPPER-VALUE' where the attribute name and
14927      value are first converted to uppercase.
14928
14929    * A function `get_attr_NAME' is defined that is passed an insn and
14930      returns the attribute value for that insn.
14931
14932  For example, if the following is present in the `md' file:
14933
14934      (define_attr "type" "branch,fp,load,store,arith" ...)
14935
14936 the following lines will be written to the file `insn-attr.h'.
14937
14938      #define HAVE_ATTR_type
14939      enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
14940                       TYPE_STORE, TYPE_ARITH};
14941      extern enum attr_type get_attr_type ();
14942
14943  If the attribute takes numeric values, no `enum' type will be defined
14944 and the function to obtain the attribute's value will return `int'.
14945
14946 \1f
14947 File: gccint.info,  Node: Expressions,  Next: Tagging Insns,  Prev: Defining Attributes,  Up: Insn Attributes
14948
14949 12.19.2 Attribute Expressions
14950 -----------------------------
14951
14952 RTL expressions used to define attributes use the codes described above
14953 plus a few specific to attribute definitions, to be discussed below.
14954 Attribute value expressions must have one of the following forms:
14955
14956 `(const_int I)'
14957      The integer I specifies the value of a numeric attribute.  I must
14958      be non-negative.
14959
14960      The value of a numeric attribute can be specified either with a
14961      `const_int', or as an integer represented as a string in
14962      `const_string', `eq_attr' (see below), `attr', `symbol_ref',
14963      simple arithmetic expressions, and `set_attr' overrides on
14964      specific instructions (*note Tagging Insns::).
14965
14966 `(const_string VALUE)'
14967      The string VALUE specifies a constant attribute value.  If VALUE
14968      is specified as `"*"', it means that the default value of the
14969      attribute is to be used for the insn containing this expression.
14970      `"*"' obviously cannot be used in the DEFAULT expression of a
14971      `define_attr'.
14972
14973      If the attribute whose value is being specified is numeric, VALUE
14974      must be a string containing a non-negative integer (normally
14975      `const_int' would be used in this case).  Otherwise, it must
14976      contain one of the valid values for the attribute.
14977
14978 `(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
14979      TEST specifies an attribute test, whose format is defined below.
14980      The value of this expression is TRUE-VALUE if TEST is true,
14981      otherwise it is FALSE-VALUE.
14982
14983 `(cond [TEST1 VALUE1 ...] DEFAULT)'
14984      The first operand of this expression is a vector containing an even
14985      number of expressions and consisting of pairs of TEST and VALUE
14986      expressions.  The value of the `cond' expression is that of the
14987      VALUE corresponding to the first true TEST expression.  If none of
14988      the TEST expressions are true, the value of the `cond' expression
14989      is that of the DEFAULT expression.
14990
14991  TEST expressions can have one of the following forms:
14992
14993 `(const_int I)'
14994      This test is true if I is nonzero and false otherwise.
14995
14996 `(not TEST)'
14997 `(ior TEST1 TEST2)'
14998 `(and TEST1 TEST2)'
14999      These tests are true if the indicated logical function is true.
15000
15001 `(match_operand:M N PRED CONSTRAINTS)'
15002      This test is true if operand N of the insn whose attribute value
15003      is being determined has mode M (this part of the test is ignored
15004      if M is `VOIDmode') and the function specified by the string PRED
15005      returns a nonzero value when passed operand N and mode M (this
15006      part of the test is ignored if PRED is the null string).
15007
15008      The CONSTRAINTS operand is ignored and should be the null string.
15009
15010 `(le ARITH1 ARITH2)'
15011 `(leu ARITH1 ARITH2)'
15012 `(lt ARITH1 ARITH2)'
15013 `(ltu ARITH1 ARITH2)'
15014 `(gt ARITH1 ARITH2)'
15015 `(gtu ARITH1 ARITH2)'
15016 `(ge ARITH1 ARITH2)'
15017 `(geu ARITH1 ARITH2)'
15018 `(ne ARITH1 ARITH2)'
15019 `(eq ARITH1 ARITH2)'
15020      These tests are true if the indicated comparison of the two
15021      arithmetic expressions is true.  Arithmetic expressions are formed
15022      with `plus', `minus', `mult', `div', `mod', `abs', `neg', `and',
15023      `ior', `xor', `not', `ashift', `lshiftrt', and `ashiftrt'
15024      expressions.
15025
15026      `const_int' and `symbol_ref' are always valid terms (*note Insn
15027      Lengths::,for additional forms).  `symbol_ref' is a string
15028      denoting a C expression that yields an `int' when evaluated by the
15029      `get_attr_...' routine.  It should normally be a global variable.
15030
15031 `(eq_attr NAME VALUE)'
15032      NAME is a string specifying the name of an attribute.
15033
15034      VALUE is a string that is either a valid value for attribute NAME,
15035      a comma-separated list of values, or `!' followed by a value or
15036      list.  If VALUE does not begin with a `!', this test is true if
15037      the value of the NAME attribute of the current insn is in the list
15038      specified by VALUE.  If VALUE begins with a `!', this test is true
15039      if the attribute's value is _not_ in the specified list.
15040
15041      For example,
15042
15043           (eq_attr "type" "load,store")
15044
15045      is equivalent to
15046
15047           (ior (eq_attr "type" "load") (eq_attr "type" "store"))
15048
15049      If NAME specifies an attribute of `alternative', it refers to the
15050      value of the compiler variable `which_alternative' (*note Output
15051      Statement::) and the values must be small integers.  For example,
15052
15053           (eq_attr "alternative" "2,3")
15054
15055      is equivalent to
15056
15057           (ior (eq (symbol_ref "which_alternative") (const_int 2))
15058                (eq (symbol_ref "which_alternative") (const_int 3)))
15059
15060      Note that, for most attributes, an `eq_attr' test is simplified in
15061      cases where the value of the attribute being tested is known for
15062      all insns matching a particular pattern.  This is by far the most
15063      common case.
15064
15065 `(attr_flag NAME)'
15066      The value of an `attr_flag' expression is true if the flag
15067      specified by NAME is true for the `insn' currently being scheduled.
15068
15069      NAME is a string specifying one of a fixed set of flags to test.
15070      Test the flags `forward' and `backward' to determine the direction
15071      of a conditional branch.  Test the flags `very_likely', `likely',
15072      `very_unlikely', and `unlikely' to determine if a conditional
15073      branch is expected to be taken.
15074
15075      If the `very_likely' flag is true, then the `likely' flag is also
15076      true.  Likewise for the `very_unlikely' and `unlikely' flags.
15077
15078      This example describes a conditional branch delay slot which can
15079      be nullified for forward branches that are taken (annul-true) or
15080      for backward branches which are not taken (annul-false).
15081
15082           (define_delay (eq_attr "type" "cbranch")
15083             [(eq_attr "in_branch_delay" "true")
15084              (and (eq_attr "in_branch_delay" "true")
15085                   (attr_flag "forward"))
15086              (and (eq_attr "in_branch_delay" "true")
15087                   (attr_flag "backward"))])
15088
15089      The `forward' and `backward' flags are false if the current `insn'
15090      being scheduled is not a conditional branch.
15091
15092      The `very_likely' and `likely' flags are true if the `insn' being
15093      scheduled is not a conditional branch.  The `very_unlikely' and
15094      `unlikely' flags are false if the `insn' being scheduled is not a
15095      conditional branch.
15096
15097      `attr_flag' is only used during delay slot scheduling and has no
15098      meaning to other passes of the compiler.
15099
15100 `(attr NAME)'
15101      The value of another attribute is returned.  This is most useful
15102      for numeric attributes, as `eq_attr' and `attr_flag' produce more
15103      efficient code for non-numeric attributes.
15104
15105 \1f
15106 File: gccint.info,  Node: Tagging Insns,  Next: Attr Example,  Prev: Expressions,  Up: Insn Attributes
15107
15108 12.19.3 Assigning Attribute Values to Insns
15109 -------------------------------------------
15110
15111 The value assigned to an attribute of an insn is primarily determined by
15112 which pattern is matched by that insn (or which `define_peephole'
15113 generated it).  Every `define_insn' and `define_peephole' can have an
15114 optional last argument to specify the values of attributes for matching
15115 insns.  The value of any attribute not specified in a particular insn
15116 is set to the default value for that attribute, as specified in its
15117 `define_attr'.  Extensive use of default values for attributes permits
15118 the specification of the values for only one or two attributes in the
15119 definition of most insn patterns, as seen in the example in the next
15120 section.
15121
15122  The optional last argument of `define_insn' and `define_peephole' is a
15123 vector of expressions, each of which defines the value for a single
15124 attribute.  The most general way of assigning an attribute's value is
15125 to use a `set' expression whose first operand is an `attr' expression
15126 giving the name of the attribute being set.  The second operand of the
15127 `set' is an attribute expression (*note Expressions::) giving the value
15128 of the attribute.
15129
15130  When the attribute value depends on the `alternative' attribute (i.e.,
15131 which is the applicable alternative in the constraint of the insn), the
15132 `set_attr_alternative' expression can be used.  It allows the
15133 specification of a vector of attribute expressions, one for each
15134 alternative.
15135
15136  When the generality of arbitrary attribute expressions is not required,
15137 the simpler `set_attr' expression can be used, which allows specifying
15138 a string giving either a single attribute value or a list of attribute
15139 values, one for each alternative.
15140
15141  The form of each of the above specifications is shown below.  In each
15142 case, NAME is a string specifying the attribute to be set.
15143
15144 `(set_attr NAME VALUE-STRING)'
15145      VALUE-STRING is either a string giving the desired attribute value,
15146      or a string containing a comma-separated list giving the values for
15147      succeeding alternatives.  The number of elements must match the
15148      number of alternatives in the constraint of the insn pattern.
15149
15150      Note that it may be useful to specify `*' for some alternative, in
15151      which case the attribute will assume its default value for insns
15152      matching that alternative.
15153
15154 `(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
15155      Depending on the alternative of the insn, the value will be one of
15156      the specified values.  This is a shorthand for using a `cond' with
15157      tests on the `alternative' attribute.
15158
15159 `(set (attr NAME) VALUE)'
15160      The first operand of this `set' must be the special RTL expression
15161      `attr', whose sole operand is a string giving the name of the
15162      attribute being set.  VALUE is the value of the attribute.
15163
15164  The following shows three different ways of representing the same
15165 attribute value specification:
15166
15167      (set_attr "type" "load,store,arith")
15168
15169      (set_attr_alternative "type"
15170                            [(const_string "load") (const_string "store")
15171                             (const_string "arith")])
15172
15173      (set (attr "type")
15174           (cond [(eq_attr "alternative" "1") (const_string "load")
15175                  (eq_attr "alternative" "2") (const_string "store")]
15176                 (const_string "arith")))
15177
15178  The `define_asm_attributes' expression provides a mechanism to specify
15179 the attributes assigned to insns produced from an `asm' statement.  It
15180 has the form:
15181
15182      (define_asm_attributes [ATTR-SETS])
15183
15184 where ATTR-SETS is specified the same as for both the `define_insn' and
15185 the `define_peephole' expressions.
15186
15187  These values will typically be the "worst case" attribute values.  For
15188 example, they might indicate that the condition code will be clobbered.
15189
15190  A specification for a `length' attribute is handled specially.  The
15191 way to compute the length of an `asm' insn is to multiply the length
15192 specified in the expression `define_asm_attributes' by the number of
15193 machine instructions specified in the `asm' statement, determined by
15194 counting the number of semicolons and newlines in the string.
15195 Therefore, the value of the `length' attribute specified in a
15196 `define_asm_attributes' should be the maximum possible length of a
15197 single machine instruction.
15198
15199 \1f
15200 File: gccint.info,  Node: Attr Example,  Next: Insn Lengths,  Prev: Tagging Insns,  Up: Insn Attributes
15201
15202 12.19.4 Example of Attribute Specifications
15203 -------------------------------------------
15204
15205 The judicious use of defaulting is important in the efficient use of
15206 insn attributes.  Typically, insns are divided into "types" and an
15207 attribute, customarily called `type', is used to represent this value.
15208 This attribute is normally used only to define the default value for
15209 other attributes.  An example will clarify this usage.
15210
15211  Assume we have a RISC machine with a condition code and in which only
15212 full-word operations are performed in registers.  Let us assume that we
15213 can divide all insns into loads, stores, (integer) arithmetic
15214 operations, floating point operations, and branches.
15215
15216  Here we will concern ourselves with determining the effect of an insn
15217 on the condition code and will limit ourselves to the following possible
15218 effects:  The condition code can be set unpredictably (clobbered), not
15219 be changed, be set to agree with the results of the operation, or only
15220 changed if the item previously set into the condition code has been
15221 modified.
15222
15223  Here is part of a sample `md' file for such a machine:
15224
15225      (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
15226
15227      (define_attr "cc" "clobber,unchanged,set,change0"
15228                   (cond [(eq_attr "type" "load")
15229                              (const_string "change0")
15230                          (eq_attr "type" "store,branch")
15231                              (const_string "unchanged")
15232                          (eq_attr "type" "arith")
15233                              (if_then_else (match_operand:SI 0 "" "")
15234                                            (const_string "set")
15235                                            (const_string "clobber"))]
15236                         (const_string "clobber")))
15237
15238      (define_insn ""
15239        [(set (match_operand:SI 0 "general_operand" "=r,r,m")
15240              (match_operand:SI 1 "general_operand" "r,m,r"))]
15241        ""
15242        "@
15243         move %0,%1
15244         load %0,%1
15245         store %0,%1"
15246        [(set_attr "type" "arith,load,store")])
15247
15248  Note that we assume in the above example that arithmetic operations
15249 performed on quantities smaller than a machine word clobber the
15250 condition code since they will set the condition code to a value
15251 corresponding to the full-word result.
15252
15253 \1f
15254 File: gccint.info,  Node: Insn Lengths,  Next: Constant Attributes,  Prev: Attr Example,  Up: Insn Attributes
15255
15256 12.19.5 Computing the Length of an Insn
15257 ---------------------------------------
15258
15259 For many machines, multiple types of branch instructions are provided,
15260 each for different length branch displacements.  In most cases, the
15261 assembler will choose the correct instruction to use.  However, when
15262 the assembler cannot do so, GCC can when a special attribute, the
15263 `length' attribute, is defined.  This attribute must be defined to have
15264 numeric values by specifying a null string in its `define_attr'.
15265
15266  In the case of the `length' attribute, two additional forms of
15267 arithmetic terms are allowed in test expressions:
15268
15269 `(match_dup N)'
15270      This refers to the address of operand N of the current insn, which
15271      must be a `label_ref'.
15272
15273 `(pc)'
15274      This refers to the address of the _current_ insn.  It might have
15275      been more consistent with other usage to make this the address of
15276      the _next_ insn but this would be confusing because the length of
15277      the current insn is to be computed.
15278
15279  For normal insns, the length will be determined by value of the
15280 `length' attribute.  In the case of `addr_vec' and `addr_diff_vec' insn
15281 patterns, the length is computed as the number of vectors multiplied by
15282 the size of each vector.
15283
15284  Lengths are measured in addressable storage units (bytes).
15285
15286  The following macros can be used to refine the length computation:
15287
15288 `ADJUST_INSN_LENGTH (INSN, LENGTH)'
15289      If defined, modifies the length assigned to instruction INSN as a
15290      function of the context in which it is used.  LENGTH is an lvalue
15291      that contains the initially computed length of the insn and should
15292      be updated with the correct length of the insn.
15293
15294      This macro will normally not be required.  A case in which it is
15295      required is the ROMP.  On this machine, the size of an `addr_vec'
15296      insn must be increased by two to compensate for the fact that
15297      alignment may be required.
15298
15299  The routine that returns `get_attr_length' (the value of the `length'
15300 attribute) can be used by the output routine to determine the form of
15301 the branch instruction to be written, as the example below illustrates.
15302
15303  As an example of the specification of variable-length branches,
15304 consider the IBM 360.  If we adopt the convention that a register will
15305 be set to the starting address of a function, we can jump to labels
15306 within 4k of the start using a four-byte instruction.  Otherwise, we
15307 need a six-byte sequence to load the address from memory and then
15308 branch to it.
15309
15310  On such a machine, a pattern for a branch instruction might be
15311 specified as follows:
15312
15313      (define_insn "jump"
15314        [(set (pc)
15315              (label_ref (match_operand 0 "" "")))]
15316        ""
15317      {
15318         return (get_attr_length (insn) == 4
15319                 ? "b %l0" : "l r15,=a(%l0); br r15");
15320      }
15321        [(set (attr "length")
15322              (if_then_else (lt (match_dup 0) (const_int 4096))
15323                            (const_int 4)
15324                            (const_int 6)))])
15325
15326 \1f
15327 File: gccint.info,  Node: Constant Attributes,  Next: Delay Slots,  Prev: Insn Lengths,  Up: Insn Attributes
15328
15329 12.19.6 Constant Attributes
15330 ---------------------------
15331
15332 A special form of `define_attr', where the expression for the default
15333 value is a `const' expression, indicates an attribute that is constant
15334 for a given run of the compiler.  Constant attributes may be used to
15335 specify which variety of processor is used.  For example,
15336
15337      (define_attr "cpu" "m88100,m88110,m88000"
15338       (const
15339        (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
15340               (symbol_ref "TARGET_88110") (const_string "m88110")]
15341              (const_string "m88000"))))
15342
15343      (define_attr "memory" "fast,slow"
15344       (const
15345        (if_then_else (symbol_ref "TARGET_FAST_MEM")
15346                      (const_string "fast")
15347                      (const_string "slow"))))
15348
15349  The routine generated for constant attributes has no parameters as it
15350 does not depend on any particular insn.  RTL expressions used to define
15351 the value of a constant attribute may use the `symbol_ref' form, but
15352 may not use either the `match_operand' form or `eq_attr' forms
15353 involving insn attributes.
15354
15355 \1f
15356 File: gccint.info,  Node: Delay Slots,  Next: Processor pipeline description,  Prev: Constant Attributes,  Up: Insn Attributes
15357
15358 12.19.7 Delay Slot Scheduling
15359 -----------------------------
15360
15361 The insn attribute mechanism can be used to specify the requirements for
15362 delay slots, if any, on a target machine.  An instruction is said to
15363 require a "delay slot" if some instructions that are physically after
15364 the instruction are executed as if they were located before it.
15365 Classic examples are branch and call instructions, which often execute
15366 the following instruction before the branch or call is performed.
15367
15368  On some machines, conditional branch instructions can optionally
15369 "annul" instructions in the delay slot.  This means that the
15370 instruction will not be executed for certain branch outcomes.  Both
15371 instructions that annul if the branch is true and instructions that
15372 annul if the branch is false are supported.
15373
15374  Delay slot scheduling differs from instruction scheduling in that
15375 determining whether an instruction needs a delay slot is dependent only
15376 on the type of instruction being generated, not on data flow between the
15377 instructions.  See the next section for a discussion of data-dependent
15378 instruction scheduling.
15379
15380  The requirement of an insn needing one or more delay slots is indicated
15381 via the `define_delay' expression.  It has the following form:
15382
15383      (define_delay TEST
15384                    [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
15385                     DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
15386                     ...])
15387
15388  TEST is an attribute test that indicates whether this `define_delay'
15389 applies to a particular insn.  If so, the number of required delay
15390 slots is determined by the length of the vector specified as the second
15391 argument.  An insn placed in delay slot N must satisfy attribute test
15392 DELAY-N.  ANNUL-TRUE-N is an attribute test that specifies which insns
15393 may be annulled if the branch is true.  Similarly, ANNUL-FALSE-N
15394 specifies which insns in the delay slot may be annulled if the branch
15395 is false.  If annulling is not supported for that delay slot, `(nil)'
15396 should be coded.
15397
15398  For example, in the common case where branch and call insns require a
15399 single delay slot, which may contain any insn other than a branch or
15400 call, the following would be placed in the `md' file:
15401
15402      (define_delay (eq_attr "type" "branch,call")
15403                    [(eq_attr "type" "!branch,call") (nil) (nil)])
15404
15405  Multiple `define_delay' expressions may be specified.  In this case,
15406 each such expression specifies different delay slot requirements and
15407 there must be no insn for which tests in two `define_delay' expressions
15408 are both true.
15409
15410  For example, if we have a machine that requires one delay slot for
15411 branches but two for calls,  no delay slot can contain a branch or call
15412 insn, and any valid insn in the delay slot for the branch can be
15413 annulled if the branch is true, we might represent this as follows:
15414
15415      (define_delay (eq_attr "type" "branch")
15416         [(eq_attr "type" "!branch,call")
15417          (eq_attr "type" "!branch,call")
15418          (nil)])
15419
15420      (define_delay (eq_attr "type" "call")
15421                    [(eq_attr "type" "!branch,call") (nil) (nil)
15422                     (eq_attr "type" "!branch,call") (nil) (nil)])
15423
15424 \1f
15425 File: gccint.info,  Node: Processor pipeline description,  Prev: Delay Slots,  Up: Insn Attributes
15426
15427 12.19.8 Specifying processor pipeline description
15428 -------------------------------------------------
15429
15430 To achieve better performance, most modern processors (super-pipelined,
15431 superscalar RISC, and VLIW processors) have many "functional units" on
15432 which several instructions can be executed simultaneously.  An
15433 instruction starts execution if its issue conditions are satisfied.  If
15434 not, the instruction is stalled until its conditions are satisfied.
15435 Such "interlock (pipeline) delay" causes interruption of the fetching
15436 of successor instructions (or demands nop instructions, e.g. for some
15437 MIPS processors).
15438
15439  There are two major kinds of interlock delays in modern processors.
15440 The first one is a data dependence delay determining "instruction
15441 latency time".  The instruction execution is not started until all
15442 source data have been evaluated by prior instructions (there are more
15443 complex cases when the instruction execution starts even when the data
15444 are not available but will be ready in given time after the instruction
15445 execution start).  Taking the data dependence delays into account is
15446 simple.  The data dependence (true, output, and anti-dependence) delay
15447 between two instructions is given by a constant.  In most cases this
15448 approach is adequate.  The second kind of interlock delays is a
15449 reservation delay.  The reservation delay means that two instructions
15450 under execution will be in need of shared processors resources, i.e.
15451 buses, internal registers, and/or functional units, which are reserved
15452 for some time.  Taking this kind of delay into account is complex
15453 especially for modern RISC processors.
15454
15455  The task of exploiting more processor parallelism is solved by an
15456 instruction scheduler.  For a better solution to this problem, the
15457 instruction scheduler has to have an adequate description of the
15458 processor parallelism (or "pipeline description").  GCC machine
15459 descriptions describe processor parallelism and functional unit
15460 reservations for groups of instructions with the aid of "regular
15461 expressions".
15462
15463  The GCC instruction scheduler uses a "pipeline hazard recognizer" to
15464 figure out the possibility of the instruction issue by the processor on
15465 a given simulated processor cycle.  The pipeline hazard recognizer is
15466 automatically generated from the processor pipeline description.  The
15467 pipeline hazard recognizer generated from the machine description is
15468 based on a deterministic finite state automaton (DFA): the instruction
15469 issue is possible if there is a transition from one automaton state to
15470 another one.  This algorithm is very fast, and furthermore, its speed
15471 is not dependent on processor complexity(1).
15472
15473  The rest of this section describes the directives that constitute an
15474 automaton-based processor pipeline description.  The order of these
15475 constructions within the machine description file is not important.
15476
15477  The following optional construction describes names of automata
15478 generated and used for the pipeline hazards recognition.  Sometimes the
15479 generated finite state automaton used by the pipeline hazard recognizer
15480 is large.  If we use more than one automaton and bind functional units
15481 to the automata, the total size of the automata is usually less than
15482 the size of the single automaton.  If there is no one such
15483 construction, only one finite state automaton is generated.
15484
15485      (define_automaton AUTOMATA-NAMES)
15486
15487  AUTOMATA-NAMES is a string giving names of the automata.  The names
15488 are separated by commas.  All the automata should have unique names.
15489 The automaton name is used in the constructions `define_cpu_unit' and
15490 `define_query_cpu_unit'.
15491
15492  Each processor functional unit used in the description of instruction
15493 reservations should be described by the following construction.
15494
15495      (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
15496
15497  UNIT-NAMES is a string giving the names of the functional units
15498 separated by commas.  Don't use name `nothing', it is reserved for
15499 other goals.
15500
15501  AUTOMATON-NAME is a string giving the name of the automaton with which
15502 the unit is bound.  The automaton should be described in construction
15503 `define_automaton'.  You should give "automaton-name", if there is a
15504 defined automaton.
15505
15506  The assignment of units to automata are constrained by the uses of the
15507 units in insn reservations.  The most important constraint is: if a
15508 unit reservation is present on a particular cycle of an alternative for
15509 an insn reservation, then some unit from the same automaton must be
15510 present on the same cycle for the other alternatives of the insn
15511 reservation.  The rest of the constraints are mentioned in the
15512 description of the subsequent constructions.
15513
15514  The following construction describes CPU functional units analogously
15515 to `define_cpu_unit'.  The reservation of such units can be queried for
15516 an automaton state.  The instruction scheduler never queries
15517 reservation of functional units for given automaton state.  So as a
15518 rule, you don't need this construction.  This construction could be
15519 used for future code generation goals (e.g. to generate VLIW insn
15520 templates).
15521
15522      (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
15523
15524  UNIT-NAMES is a string giving names of the functional units separated
15525 by commas.
15526
15527  AUTOMATON-NAME is a string giving the name of the automaton with which
15528 the unit is bound.
15529
15530  The following construction is the major one to describe pipeline
15531 characteristics of an instruction.
15532
15533      (define_insn_reservation INSN-NAME DEFAULT_LATENCY
15534                               CONDITION REGEXP)
15535
15536  DEFAULT_LATENCY is a number giving latency time of the instruction.
15537 There is an important difference between the old description and the
15538 automaton based pipeline description.  The latency time is used for all
15539 dependencies when we use the old description.  In the automaton based
15540 pipeline description, the given latency time is only used for true
15541 dependencies.  The cost of anti-dependencies is always zero and the
15542 cost of output dependencies is the difference between latency times of
15543 the producing and consuming insns (if the difference is negative, the
15544 cost is considered to be zero).  You can always change the default
15545 costs for any description by using the target hook
15546 `TARGET_SCHED_ADJUST_COST' (*note Scheduling::).
15547
15548  INSN-NAME is a string giving the internal name of the insn.  The
15549 internal names are used in constructions `define_bypass' and in the
15550 automaton description file generated for debugging.  The internal name
15551 has nothing in common with the names in `define_insn'.  It is a good
15552 practice to use insn classes described in the processor manual.
15553
15554  CONDITION defines what RTL insns are described by this construction.
15555 You should remember that you will be in trouble if CONDITION for two or
15556 more different `define_insn_reservation' constructions is TRUE for an
15557 insn.  In this case what reservation will be used for the insn is not
15558 defined.  Such cases are not checked during generation of the pipeline
15559 hazards recognizer because in general recognizing that two conditions
15560 may have the same value is quite difficult (especially if the conditions
15561 contain `symbol_ref').  It is also not checked during the pipeline
15562 hazard recognizer work because it would slow down the recognizer
15563 considerably.
15564
15565  REGEXP is a string describing the reservation of the cpu's functional
15566 units by the instruction.  The reservations are described by a regular
15567 expression according to the following syntax:
15568
15569             regexp = regexp "," oneof
15570                    | oneof
15571
15572             oneof = oneof "|" allof
15573                   | allof
15574
15575             allof = allof "+" repeat
15576                   | repeat
15577
15578             repeat = element "*" number
15579                    | element
15580
15581             element = cpu_function_unit_name
15582                     | reservation_name
15583                     | result_name
15584                     | "nothing"
15585                     | "(" regexp ")"
15586
15587    * `,' is used for describing the start of the next cycle in the
15588      reservation.
15589
15590    * `|' is used for describing a reservation described by the first
15591      regular expression *or* a reservation described by the second
15592      regular expression *or* etc.
15593
15594    * `+' is used for describing a reservation described by the first
15595      regular expression *and* a reservation described by the second
15596      regular expression *and* etc.
15597
15598    * `*' is used for convenience and simply means a sequence in which
15599      the regular expression are repeated NUMBER times with cycle
15600      advancing (see `,').
15601
15602    * `cpu_function_unit_name' denotes reservation of the named
15603      functional unit.
15604
15605    * `reservation_name' -- see description of construction
15606      `define_reservation'.
15607
15608    * `nothing' denotes no unit reservations.
15609
15610  Sometimes unit reservations for different insns contain common parts.
15611 In such case, you can simplify the pipeline description by describing
15612 the common part by the following construction
15613
15614      (define_reservation RESERVATION-NAME REGEXP)
15615
15616  RESERVATION-NAME is a string giving name of REGEXP.  Functional unit
15617 names and reservation names are in the same name space.  So the
15618 reservation names should be different from the functional unit names
15619 and can not be the reserved name `nothing'.
15620
15621  The following construction is used to describe exceptions in the
15622 latency time for given instruction pair.  This is so called bypasses.
15623
15624      (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
15625                     [GUARD])
15626
15627  NUMBER defines when the result generated by the instructions given in
15628 string OUT_INSN_NAMES will be ready for the instructions given in
15629 string IN_INSN_NAMES.  The instructions in the string are separated by
15630 commas.
15631
15632  GUARD is an optional string giving the name of a C function which
15633 defines an additional guard for the bypass.  The function will get the
15634 two insns as parameters.  If the function returns zero the bypass will
15635 be ignored for this case.  The additional guard is necessary to
15636 recognize complicated bypasses, e.g. when the consumer is only an
15637 address of insn `store' (not a stored value).
15638
15639  The following five constructions are usually used to describe VLIW
15640 processors, or more precisely, to describe a placement of small
15641 instructions into VLIW instruction slots.  They can be used for RISC
15642 processors, too.
15643
15644      (exclusion_set UNIT-NAMES UNIT-NAMES)
15645      (presence_set UNIT-NAMES PATTERNS)
15646      (final_presence_set UNIT-NAMES PATTERNS)
15647      (absence_set UNIT-NAMES PATTERNS)
15648      (final_absence_set UNIT-NAMES PATTERNS)
15649
15650  UNIT-NAMES is a string giving names of functional units separated by
15651 commas.
15652
15653  PATTERNS is a string giving patterns of functional units separated by
15654 comma.  Currently pattern is one unit or units separated by
15655 white-spaces.
15656
15657  The first construction (`exclusion_set') means that each functional
15658 unit in the first string can not be reserved simultaneously with a unit
15659 whose name is in the second string and vice versa.  For example, the
15660 construction is useful for describing processors (e.g. some SPARC
15661 processors) with a fully pipelined floating point functional unit which
15662 can execute simultaneously only single floating point insns or only
15663 double floating point insns.
15664
15665  The second construction (`presence_set') means that each functional
15666 unit in the first string can not be reserved unless at least one of
15667 pattern of units whose names are in the second string is reserved.
15668 This is an asymmetric relation.  For example, it is useful for
15669 description that VLIW `slot1' is reserved after `slot0' reservation.
15670 We could describe it by the following construction
15671
15672      (presence_set "slot1" "slot0")
15673
15674  Or `slot1' is reserved only after `slot0' and unit `b0' reservation.
15675 In this case we could write
15676
15677      (presence_set "slot1" "slot0 b0")
15678
15679  The third construction (`final_presence_set') is analogous to
15680 `presence_set'.  The difference between them is when checking is done.
15681 When an instruction is issued in given automaton state reflecting all
15682 current and planned unit reservations, the automaton state is changed.
15683 The first state is a source state, the second one is a result state.
15684 Checking for `presence_set' is done on the source state reservation,
15685 checking for `final_presence_set' is done on the result reservation.
15686 This construction is useful to describe a reservation which is actually
15687 two subsequent reservations.  For example, if we use
15688
15689      (presence_set "slot1" "slot0")
15690
15691  the following insn will be never issued (because `slot1' requires
15692 `slot0' which is absent in the source state).
15693
15694      (define_reservation "insn_and_nop" "slot0 + slot1")
15695
15696  but it can be issued if we use analogous `final_presence_set'.
15697
15698  The forth construction (`absence_set') means that each functional unit
15699 in the first string can be reserved only if each pattern of units whose
15700 names are in the second string is not reserved.  This is an asymmetric
15701 relation (actually `exclusion_set' is analogous to this one but it is
15702 symmetric).  For example, it is useful for description that VLIW
15703 `slot0' can not be reserved after `slot1' or `slot2' reservation.  We
15704 could describe it by the following construction
15705
15706      (absence_set "slot2" "slot0, slot1")
15707
15708  Or `slot2' can not be reserved if `slot0' and unit `b0' are reserved
15709 or `slot1' and unit `b1' are reserved.  In this case we could write
15710
15711      (absence_set "slot2" "slot0 b0, slot1 b1")
15712
15713  All functional units mentioned in a set should belong to the same
15714 automaton.
15715
15716  The last construction (`final_absence_set') is analogous to
15717 `absence_set' but checking is done on the result (state) reservation.
15718 See comments for `final_presence_set'.
15719
15720  You can control the generator of the pipeline hazard recognizer with
15721 the following construction.
15722
15723      (automata_option OPTIONS)
15724
15725  OPTIONS is a string giving options which affect the generated code.
15726 Currently there are the following options:
15727
15728    * "no-minimization" makes no minimization of the automaton.  This is
15729      only worth to do when we are debugging the description and need to
15730      look more accurately at reservations of states.
15731
15732    * "time" means printing additional time statistics about generation
15733      of automata.
15734
15735    * "v" means a generation of the file describing the result automata.
15736      The file has suffix `.dfa' and can be used for the description
15737      verification and debugging.
15738
15739    * "w" means a generation of warning instead of error for
15740      non-critical errors.
15741
15742    * "ndfa" makes nondeterministic finite state automata.  This affects
15743      the treatment of operator `|' in the regular expressions.  The
15744      usual treatment of the operator is to try the first alternative
15745      and, if the reservation is not possible, the second alternative.
15746      The nondeterministic treatment means trying all alternatives, some
15747      of them may be rejected by reservations in the subsequent insns.
15748      You can not query functional unit reservations in nondeterministic
15749      automaton states.
15750
15751    * "progress" means output of a progress bar showing how many states
15752      were generated so far for automaton being processed.  This is
15753      useful during debugging a DFA description.  If you see too many
15754      generated states, you could interrupt the generator of the pipeline
15755      hazard recognizer and try to figure out a reason for generation of
15756      the huge automaton.
15757
15758  As an example, consider a superscalar RISC machine which can issue
15759 three insns (two integer insns and one floating point insn) on the
15760 cycle but can finish only two insns.  To describe this, we define the
15761 following functional units.
15762
15763      (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
15764      (define_cpu_unit "port0, port1")
15765
15766  All simple integer insns can be executed in any integer pipeline and
15767 their result is ready in two cycles.  The simple integer insns are
15768 issued into the first pipeline unless it is reserved, otherwise they
15769 are issued into the second pipeline.  Integer division and
15770 multiplication insns can be executed only in the second integer
15771 pipeline and their results are ready correspondingly in 8 and 4 cycles.
15772 The integer division is not pipelined, i.e. the subsequent integer
15773 division insn can not be issued until the current division insn
15774 finished.  Floating point insns are fully pipelined and their results
15775 are ready in 3 cycles.  Where the result of a floating point insn is
15776 used by an integer insn, an additional delay of one cycle is incurred.
15777 To describe all of this we could specify
15778
15779      (define_cpu_unit "div")
15780
15781      (define_insn_reservation "simple" 2 (eq_attr "type" "int")
15782                               "(i0_pipeline | i1_pipeline), (port0 | port1)")
15783
15784      (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
15785                               "i1_pipeline, nothing*2, (port0 | port1)")
15786
15787      (define_insn_reservation "div" 8 (eq_attr "type" "div")
15788                               "i1_pipeline, div*7, div + (port0 | port1)")
15789
15790      (define_insn_reservation "float" 3 (eq_attr "type" "float")
15791                               "f_pipeline, nothing, (port0 | port1))
15792
15793      (define_bypass 4 "float" "simple,mult,div")
15794
15795  To simplify the description we could describe the following reservation
15796
15797      (define_reservation "finish" "port0|port1")
15798
15799  and use it in all `define_insn_reservation' as in the following
15800 construction
15801
15802      (define_insn_reservation "simple" 2 (eq_attr "type" "int")
15803                               "(i0_pipeline | i1_pipeline), finish")
15804
15805  ---------- Footnotes ----------
15806
15807  (1) However, the size of the automaton depends on   processor
15808 complexity.  To limit this effect, machine descriptions   can split
15809 orthogonal parts of the machine description among several   automata:
15810 but then, since each of these must be stepped independently,   this
15811 does cause a small decrease in the algorithm's performance.
15812
15813 \1f
15814 File: gccint.info,  Node: Conditional Execution,  Next: Constant Definitions,  Prev: Insn Attributes,  Up: Machine Desc
15815
15816 12.20 Conditional Execution
15817 ===========================
15818
15819 A number of architectures provide for some form of conditional
15820 execution, or predication.  The hallmark of this feature is the ability
15821 to nullify most of the instructions in the instruction set.  When the
15822 instruction set is large and not entirely symmetric, it can be quite
15823 tedious to describe these forms directly in the `.md' file.  An
15824 alternative is the `define_cond_exec' template.
15825
15826      (define_cond_exec
15827        [PREDICATE-PATTERN]
15828        "CONDITION"
15829        "OUTPUT-TEMPLATE")
15830
15831  PREDICATE-PATTERN is the condition that must be true for the insn to
15832 be executed at runtime and should match a relational operator.  One can
15833 use `match_operator' to match several relational operators at once.
15834 Any `match_operand' operands must have no more than one alternative.
15835
15836  CONDITION is a C expression that must be true for the generated
15837 pattern to match.
15838
15839  OUTPUT-TEMPLATE is a string similar to the `define_insn' output
15840 template (*note Output Template::), except that the `*' and `@' special
15841 cases do not apply.  This is only useful if the assembly text for the
15842 predicate is a simple prefix to the main insn.  In order to handle the
15843 general case, there is a global variable `current_insn_predicate' that
15844 will contain the entire predicate if the current insn is predicated,
15845 and will otherwise be `NULL'.
15846
15847  When `define_cond_exec' is used, an implicit reference to the
15848 `predicable' instruction attribute is made.  *Note Insn Attributes::.
15849 This attribute must be boolean (i.e. have exactly two elements in its
15850 LIST-OF-VALUES).  Further, it must not be used with complex
15851 expressions.  That is, the default and all uses in the insns must be a
15852 simple constant, not dependent on the alternative or anything else.
15853
15854  For each `define_insn' for which the `predicable' attribute is true, a
15855 new `define_insn' pattern will be generated that matches a predicated
15856 version of the instruction.  For example,
15857
15858      (define_insn "addsi"
15859        [(set (match_operand:SI 0 "register_operand" "r")
15860              (plus:SI (match_operand:SI 1 "register_operand" "r")
15861                       (match_operand:SI 2 "register_operand" "r")))]
15862        "TEST1"
15863        "add %2,%1,%0")
15864
15865      (define_cond_exec
15866        [(ne (match_operand:CC 0 "register_operand" "c")
15867             (const_int 0))]
15868        "TEST2"
15869        "(%0)")
15870
15871 generates a new pattern
15872
15873      (define_insn ""
15874        [(cond_exec
15875           (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
15876           (set (match_operand:SI 0 "register_operand" "r")
15877                (plus:SI (match_operand:SI 1 "register_operand" "r")
15878                         (match_operand:SI 2 "register_operand" "r"))))]
15879        "(TEST2) && (TEST1)"
15880        "(%3) add %2,%1,%0")
15881
15882 \1f
15883 File: gccint.info,  Node: Constant Definitions,  Next: Macros,  Prev: Conditional Execution,  Up: Machine Desc
15884
15885 12.21 Constant Definitions
15886 ==========================
15887
15888 Using literal constants inside instruction patterns reduces legibility
15889 and can be a maintenance problem.
15890
15891  To overcome this problem, you may use the `define_constants'
15892 expression.  It contains a vector of name-value pairs.  From that point
15893 on, wherever any of the names appears in the MD file, it is as if the
15894 corresponding value had been written instead.  You may use
15895 `define_constants' multiple times; each appearance adds more constants
15896 to the table.  It is an error to redefine a constant with a different
15897 value.
15898
15899  To come back to the a29k load multiple example, instead of
15900
15901      (define_insn ""
15902        [(match_parallel 0 "load_multiple_operation"
15903           [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
15904                 (match_operand:SI 2 "memory_operand" "m"))
15905            (use (reg:SI 179))
15906            (clobber (reg:SI 179))])]
15907        ""
15908        "loadm 0,0,%1,%2")
15909
15910  You could write:
15911
15912      (define_constants [
15913          (R_BP 177)
15914          (R_FC 178)
15915          (R_CR 179)
15916          (R_Q  180)
15917      ])
15918
15919      (define_insn ""
15920        [(match_parallel 0 "load_multiple_operation"
15921           [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
15922                 (match_operand:SI 2 "memory_operand" "m"))
15923            (use (reg:SI R_CR))
15924            (clobber (reg:SI R_CR))])]
15925        ""
15926        "loadm 0,0,%1,%2")
15927
15928  The constants that are defined with a define_constant are also output
15929 in the insn-codes.h header file as #defines.
15930
15931 \1f
15932 File: gccint.info,  Node: Macros,  Prev: Constant Definitions,  Up: Machine Desc
15933
15934 12.22 Macros
15935 ============
15936
15937 Ports often need to define similar patterns for more than one machine
15938 mode or for more than one rtx code.  GCC provides some simple macro
15939 facilities to make this process easier.
15940
15941 * Menu:
15942
15943 * Mode Macros::         Generating variations of patterns for different modes.
15944 * Code Macros::         Doing the same for codes.
15945
15946 \1f
15947 File: gccint.info,  Node: Mode Macros,  Next: Code Macros,  Up: Macros
15948
15949 12.22.1 Mode Macros
15950 -------------------
15951
15952 Ports often need to define similar patterns for two or more different
15953 modes.  For example:
15954
15955    * If a processor has hardware support for both single and double
15956      floating-point arithmetic, the `SFmode' patterns tend to be very
15957      similar to the `DFmode' ones.
15958
15959    * If a port uses `SImode' pointers in one configuration and `DImode'
15960      pointers in another, it will usually have very similar `SImode'
15961      and `DImode' patterns for manipulating pointers.
15962
15963  Mode macros allow several patterns to be instantiated from one `.md'
15964 file template.  They can be used with any type of rtx-based construct,
15965 such as a `define_insn', `define_split', or `define_peephole2'.
15966
15967 * Menu:
15968
15969 * Defining Mode Macros:: Defining a new mode macro.
15970 * String Substitutions:: Combining mode macros with string substitutions
15971 * Examples::             Examples
15972
15973 \1f
15974 File: gccint.info,  Node: Defining Mode Macros,  Next: String Substitutions,  Up: Mode Macros
15975
15976 12.22.1.1 Defining Mode Macros
15977 ..............................
15978
15979 The syntax for defining a mode macro is:
15980
15981      (define_mode_macro NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
15982
15983  This allows subsequent `.md' file constructs to use the mode suffix
15984 `:NAME'.  Every construct that does so will be expanded N times, once
15985 with every use of `:NAME' replaced by `:MODE1', once with every use
15986 replaced by `:MODE2', and so on.  In the expansion for a particular
15987 MODEI, every C condition will also require that CONDI be true.
15988
15989  For example:
15990
15991      (define_mode_macro P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
15992
15993  defines a new mode suffix `:P'.  Every construct that uses `:P' will
15994 be expanded twice, once with every `:P' replaced by `:SI' and once with
15995 every `:P' replaced by `:DI'.  The `:SI' version will only apply if
15996 `Pmode == SImode' and the `:DI' version will only apply if `Pmode ==
15997 DImode'.
15998
15999  As with other `.md' conditions, an empty string is treated as "always
16000 true".  `(MODE "")' can also be abbreviated to `MODE'.  For example:
16001
16002      (define_mode_macro GPR [SI (DI "TARGET_64BIT")])
16003
16004  means that the `:DI' expansion only applies if `TARGET_64BIT' but that
16005 the `:SI' expansion has no such constraint.
16006
16007  Macros are applied in the order they are defined.  This can be
16008 significant if two macros are used in a construct that requires string
16009 substitutions.  *Note String Substitutions::.
16010
16011 \1f
16012 File: gccint.info,  Node: String Substitutions,  Next: Examples,  Prev: Defining Mode Macros,  Up: Mode Macros
16013
16014 12.22.1.2 String Substitution in Mode Macros
16015 ............................................
16016
16017 If an `.md' file construct uses mode macros, each version of the
16018 construct will often need slightly different strings.  For example:
16019
16020    * When a `define_expand' defines several `addM3' patterns (*note
16021      Standard Names::), each expander will need to use the appropriate
16022      mode name for M.
16023
16024    * When a `define_insn' defines several instruction patterns, each
16025      instruction will often use a different assembler mnemonic.
16026
16027  GCC supports such variations through a system of "mode attributes".
16028 There are two standard attributes: `mode', which is the name of the
16029 mode in lower case, and `MODE', which is the same thing in upper case.
16030 You can define other attributes using:
16031
16032      (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
16033
16034  where NAME is the name of the attribute and VALUEI is the value
16035 associated with MODEI.
16036
16037  When GCC replaces some :MACRO with :MODE, it will scan each string in
16038 the pattern for sequences of the form `<MACRO:ATTR>', where ATTR is the
16039 name of a mode attribute.  If the attribute is defined for MODE, the
16040 whole `<...>' sequence will be replaced by the appropriate attribute
16041 value.
16042
16043  For example, suppose an `.md' file has:
16044
16045      (define_mode_macro P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
16046      (define_mode_attr load [(SI "lw") (DI "ld")])
16047
16048  If one of the patterns that uses `:P' contains the string
16049 `"<P:load>\t%0,%1"', the `SI' version of that pattern will use
16050 `"lw\t%0,%1"' and the `DI' version will use `"ld\t%0,%1"'.
16051
16052  The `MACRO:' prefix may be omitted, in which case the substitution
16053 will be attempted for every macro expansion.
16054
16055 \1f
16056 File: gccint.info,  Node: Examples,  Prev: String Substitutions,  Up: Mode Macros
16057
16058 12.22.1.3 Mode Macro Examples
16059 .............................
16060
16061 Here is an example from the MIPS port.  It defines the following modes
16062 and attributes (among others):
16063
16064      (define_mode_macro GPR [SI (DI "TARGET_64BIT")])
16065      (define_mode_attr d [(SI "") (DI "d")])
16066
16067  and uses the following template to define both `subsi3' and `subdi3':
16068
16069      (define_insn "sub<mode>3"
16070        [(set (match_operand:GPR 0 "register_operand" "=d")
16071              (minus:GPR (match_operand:GPR 1 "register_operand" "d")
16072                         (match_operand:GPR 2 "register_operand" "d")))]
16073        ""
16074        "<d>subu\t%0,%1,%2"
16075        [(set_attr "type" "arith")
16076         (set_attr "mode" "<MODE>")])
16077
16078  This is exactly equivalent to:
16079
16080      (define_insn "subsi3"
16081        [(set (match_operand:SI 0 "register_operand" "=d")
16082              (minus:SI (match_operand:SI 1 "register_operand" "d")
16083                        (match_operand:SI 2 "register_operand" "d")))]
16084        ""
16085        "subu\t%0,%1,%2"
16086        [(set_attr "type" "arith")
16087         (set_attr "mode" "SI")])
16088
16089      (define_insn "subdi3"
16090        [(set (match_operand:DI 0 "register_operand" "=d")
16091              (minus:DI (match_operand:DI 1 "register_operand" "d")
16092                        (match_operand:DI 2 "register_operand" "d")))]
16093        ""
16094        "dsubu\t%0,%1,%2"
16095        [(set_attr "type" "arith")
16096         (set_attr "mode" "DI")])
16097
16098 \1f
16099 File: gccint.info,  Node: Code Macros,  Prev: Mode Macros,  Up: Macros
16100
16101 12.22.2 Code Macros
16102 -------------------
16103
16104 Code macros operate in a similar way to mode macros.  *Note Mode
16105 Macros::.
16106
16107  The construct:
16108
16109      (define_code_macro NAME [(CODE1 "COND1") ... (CODEN "CONDN")])
16110
16111  defines a pseudo rtx code NAME that can be instantiated as CODEI if
16112 condition CONDI is true.  Each CODEI must have the same rtx format.
16113 *Note RTL Classes::.
16114
16115  As with mode macros, each pattern that uses NAME will be expanded N
16116 times, once with all uses of NAME replaced by CODE1, once with all uses
16117 replaced by CODE2, and so on.  *Note Defining Mode Macros::.
16118
16119  It is possible to define attributes for codes as well as for modes.
16120 There are two standard code attributes: `code', the name of the code in
16121 lower case, and `CODE', the name of the code in upper case.  Other
16122 attributes are defined using:
16123
16124      (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
16125
16126  Here's an example of code macros in action, taken from the MIPS port:
16127
16128      (define_code_macro any_cond [unordered ordered unlt unge uneq ltgt unle ungt
16129                                   eq ne gt ge lt le gtu geu ltu leu])
16130
16131      (define_expand "b<code>"
16132        [(set (pc)
16133              (if_then_else (any_cond:CC (cc0)
16134                                         (const_int 0))
16135                            (label_ref (match_operand 0 ""))
16136                            (pc)))]
16137        ""
16138      {
16139        gen_conditional_branch (operands, <CODE>);
16140        DONE;
16141      })
16142
16143  This is equivalent to:
16144
16145      (define_expand "bunordered"
16146        [(set (pc)
16147              (if_then_else (unordered:CC (cc0)
16148                                          (const_int 0))
16149                            (label_ref (match_operand 0 ""))
16150                            (pc)))]
16151        ""
16152      {
16153        gen_conditional_branch (operands, UNORDERED);
16154        DONE;
16155      })
16156
16157      (define_expand "bordered"
16158        [(set (pc)
16159              (if_then_else (ordered:CC (cc0)
16160                                        (const_int 0))
16161                            (label_ref (match_operand 0 ""))
16162                            (pc)))]
16163        ""
16164      {
16165        gen_conditional_branch (operands, ORDERED);
16166        DONE;
16167      })
16168
16169      ...
16170
16171 \1f
16172 File: gccint.info,  Node: Target Macros,  Next: Host Config,  Prev: Machine Desc,  Up: Top
16173
16174 13 Target Description Macros and Functions
16175 ******************************************
16176
16177 In addition to the file `MACHINE.md', a machine description includes a
16178 C header file conventionally given the name `MACHINE.h' and a C source
16179 file named `MACHINE.c'.  The header file defines numerous macros that
16180 convey the information about the target machine that does not fit into
16181 the scheme of the `.md' file.  The file `tm.h' should be a link to
16182 `MACHINE.h'.  The header file `config.h' includes `tm.h' and most
16183 compiler source files include `config.h'.  The source file defines a
16184 variable `targetm', which is a structure containing pointers to
16185 functions and data relating to the target machine.  `MACHINE.c' should
16186 also contain their definitions, if they are not defined elsewhere in
16187 GCC, and other functions called through the macros defined in the `.h'
16188 file.
16189
16190 * Menu:
16191
16192 * Target Structure::    The `targetm' variable.
16193 * Driver::              Controlling how the driver runs the compilation passes.
16194 * Run-time Target::     Defining `-m' options like `-m68000' and `-m68020'.
16195 * Per-Function Data::   Defining data structures for per-function information.
16196 * Storage Layout::      Defining sizes and alignments of data.
16197 * Type Layout::         Defining sizes and properties of basic user data types.
16198 * Registers::           Naming and describing the hardware registers.
16199 * Register Classes::    Defining the classes of hardware registers.
16200 * Stack and Calling::   Defining which way the stack grows and by how much.
16201 * Varargs::             Defining the varargs macros.
16202 * Trampolines::         Code set up at run time to enter a nested function.
16203 * Library Calls::       Controlling how library routines are implicitly called.
16204 * Addressing Modes::    Defining addressing modes valid for memory operands.
16205 * Condition Code::      Defining how insns update the condition code.
16206 * Costs::               Defining relative costs of different operations.
16207 * Scheduling::          Adjusting the behavior of the instruction scheduler.
16208 * Sections::            Dividing storage into text, data, and other sections.
16209 * PIC::                 Macros for position independent code.
16210 * Assembler Format::    Defining how to write insns and pseudo-ops to output.
16211 * Debugging Info::      Defining the format of debugging output.
16212 * Floating Point::      Handling floating point for cross-compilers.
16213 * Mode Switching::      Insertion of mode-switching instructions.
16214 * Target Attributes::   Defining target-specific uses of `__attribute__'.
16215 * MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
16216 * PCH Target::          Validity checking for precompiled headers.
16217 * C++ ABI::             Controlling C++ ABI changes.
16218 * Misc::                Everything else.
16219
16220 \1f
16221 File: gccint.info,  Node: Target Structure,  Next: Driver,  Up: Target Macros
16222
16223 13.1 The Global `targetm' Variable
16224 ==================================
16225
16226  -- Variable: struct gcc_target targetm
16227      The target `.c' file must define the global `targetm' variable
16228      which contains pointers to functions and data relating to the
16229      target machine.  The variable is declared in `target.h';
16230      `target-def.h' defines the macro `TARGET_INITIALIZER' which is
16231      used to initialize the variable, and macros for the default
16232      initializers for elements of the structure.  The `.c' file should
16233      override those macros for which the default definition is
16234      inappropriate.  For example:
16235           #include "target.h"
16236           #include "target-def.h"
16237
16238           /* Initialize the GCC target structure.  */
16239
16240           #undef TARGET_COMP_TYPE_ATTRIBUTES
16241           #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes
16242
16243           struct gcc_target targetm = TARGET_INITIALIZER;
16244
16245 Where a macro should be defined in the `.c' file in this manner to form
16246 part of the `targetm' structure, it is documented below as a "Target
16247 Hook" with a prototype.  Many macros will change in future from being
16248 defined in the `.h' file to being part of the `targetm' structure.
16249
16250 \1f
16251 File: gccint.info,  Node: Driver,  Next: Run-time Target,  Prev: Target Structure,  Up: Target Macros
16252
16253 13.2 Controlling the Compilation Driver, `gcc'
16254 ==============================================
16255
16256 You can control the compilation driver.
16257
16258  -- Macro: SWITCH_TAKES_ARG (CHAR)
16259      A C expression which determines whether the option `-CHAR' takes
16260      arguments.  The value should be the number of arguments that
16261      option takes-zero, for many options.
16262
16263      By default, this macro is defined as `DEFAULT_SWITCH_TAKES_ARG',
16264      which handles the standard options properly.  You need not define
16265      `SWITCH_TAKES_ARG' unless you wish to add additional options which
16266      take arguments.  Any redefinition should call
16267      `DEFAULT_SWITCH_TAKES_ARG' and then check for additional options.
16268
16269  -- Macro: WORD_SWITCH_TAKES_ARG (NAME)
16270      A C expression which determines whether the option `-NAME' takes
16271      arguments.  The value should be the number of arguments that
16272      option takes-zero, for many options.  This macro rather than
16273      `SWITCH_TAKES_ARG' is used for multi-character option names.
16274
16275      By default, this macro is defined as
16276      `DEFAULT_WORD_SWITCH_TAKES_ARG', which handles the standard options
16277      properly.  You need not define `WORD_SWITCH_TAKES_ARG' unless you
16278      wish to add additional options which take arguments.  Any
16279      redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and then
16280      check for additional options.
16281
16282  -- Macro: SWITCH_CURTAILS_COMPILATION (CHAR)
16283      A C expression which determines whether the option `-CHAR' stops
16284      compilation before the generation of an executable.  The value is
16285      boolean, nonzero if the option does stop an executable from being
16286      generated, zero otherwise.
16287
16288      By default, this macro is defined as
16289      `DEFAULT_SWITCH_CURTAILS_COMPILATION', which handles the standard
16290      options properly.  You need not define
16291      `SWITCH_CURTAILS_COMPILATION' unless you wish to add additional
16292      options which affect the generation of an executable.  Any
16293      redefinition should call `DEFAULT_SWITCH_CURTAILS_COMPILATION' and
16294      then check for additional options.
16295
16296  -- Macro: SWITCHES_NEED_SPACES
16297      A string-valued C expression which enumerates the options for which
16298      the linker needs a space between the option and its argument.
16299
16300      If this macro is not defined, the default value is `""'.
16301
16302  -- Macro: TARGET_OPTION_TRANSLATE_TABLE
16303      If defined, a list of pairs of strings, the first of which is a
16304      potential command line target to the `gcc' driver program, and the
16305      second of which is a space-separated (tabs and other whitespace
16306      are not supported) list of options with which to replace the first
16307      option.  The target defining this list is responsible for assuring
16308      that the results are valid.  Replacement options may not be the
16309      `--opt' style, they must be the `-opt' style.  It is the intention
16310      of this macro to provide a mechanism for substitution that affects
16311      the multilibs chosen, such as one option that enables many
16312      options, some of which select multilibs.  Example nonsensical
16313      definition, where `-malt-abi', `-EB', and `-mspoo' cause different
16314      multilibs to be chosen:
16315
16316           #define TARGET_OPTION_TRANSLATE_TABLE \
16317           { "-fast",   "-march=fast-foo -malt-abi -I/usr/fast-foo" }, \
16318           { "-compat", "-EB -malign=4 -mspoo" }
16319
16320  -- Macro: DRIVER_SELF_SPECS
16321      A list of specs for the driver itself.  It should be a suitable
16322      initializer for an array of strings, with no surrounding braces.
16323
16324      The driver applies these specs to its own command line between
16325      loading default `specs' files (but not command-line specified
16326      ones) and choosing the multilib directory or running any
16327      subcommands.  It applies them in the order given, so each spec can
16328      depend on the options added by earlier ones.  It is also possible
16329      to remove options using `%<OPTION' in the usual way.
16330
16331      This macro can be useful when a port has several interdependent
16332      target options.  It provides a way of standardizing the command
16333      line so that the other specs are easier to write.
16334
16335      Do not define this macro if it does not need to do anything.
16336
16337  -- Macro: OPTION_DEFAULT_SPECS
16338      A list of specs used to support configure-time default options
16339      (i.e.  `--with' options) in the driver.  It should be a suitable
16340      initializer for an array of structures, each containing two
16341      strings, without the outermost pair of surrounding braces.
16342
16343      The first item in the pair is the name of the default.  This must
16344      match the code in `config.gcc' for the target.  The second item is
16345      a spec to apply if a default with this name was specified.  The
16346      string `%(VALUE)' in the spec will be replaced by the value of the
16347      default everywhere it occurs.
16348
16349      The driver will apply these specs to its own command line between
16350      loading default `specs' files and processing `DRIVER_SELF_SPECS',
16351      using the same mechanism as `DRIVER_SELF_SPECS'.
16352
16353      Do not define this macro if it does not need to do anything.
16354
16355  -- Macro: CPP_SPEC
16356      A C string constant that tells the GCC driver program options to
16357      pass to CPP.  It can also specify how to translate options you
16358      give to GCC into options for GCC to pass to the CPP.
16359
16360      Do not define this macro if it does not need to do anything.
16361
16362  -- Macro: CPLUSPLUS_CPP_SPEC
16363      This macro is just like `CPP_SPEC', but is used for C++, rather
16364      than C.  If you do not define this macro, then the value of
16365      `CPP_SPEC' (if any) will be used instead.
16366
16367  -- Macro: CC1_SPEC
16368      A C string constant that tells the GCC driver program options to
16369      pass to `cc1', `cc1plus', `f771', and the other language front
16370      ends.  It can also specify how to translate options you give to
16371      GCC into options for GCC to pass to front ends.
16372
16373      Do not define this macro if it does not need to do anything.
16374
16375  -- Macro: CC1PLUS_SPEC
16376      A C string constant that tells the GCC driver program options to
16377      pass to `cc1plus'.  It can also specify how to translate options
16378      you give to GCC into options for GCC to pass to the `cc1plus'.
16379
16380      Do not define this macro if it does not need to do anything.  Note
16381      that everything defined in CC1_SPEC is already passed to `cc1plus'
16382      so there is no need to duplicate the contents of CC1_SPEC in
16383      CC1PLUS_SPEC.
16384
16385  -- Macro: ASM_SPEC
16386      A C string constant that tells the GCC driver program options to
16387      pass to the assembler.  It can also specify how to translate
16388      options you give to GCC into options for GCC to pass to the
16389      assembler.  See the file `sun3.h' for an example of this.
16390
16391      Do not define this macro if it does not need to do anything.
16392
16393  -- Macro: ASM_FINAL_SPEC
16394      A C string constant that tells the GCC driver program how to run
16395      any programs which cleanup after the normal assembler.  Normally,
16396      this is not needed.  See the file `mips.h' for an example of this.
16397
16398      Do not define this macro if it does not need to do anything.
16399
16400  -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
16401      Define this macro, with no value, if the driver should give the
16402      assembler an argument consisting of a single dash, `-', to
16403      instruct it to read from its standard input (which will be a pipe
16404      connected to the output of the compiler proper).  This argument is
16405      given after any `-o' option specifying the name of the output file.
16406
16407      If you do not define this macro, the assembler is assumed to read
16408      its standard input if given no non-option arguments.  If your
16409      assembler cannot read standard input at all, use a `%{pipe:%e}'
16410      construct; see `mips.h' for instance.
16411
16412  -- Macro: LINK_SPEC
16413      A C string constant that tells the GCC driver program options to
16414      pass to the linker.  It can also specify how to translate options
16415      you give to GCC into options for GCC to pass to the linker.
16416
16417      Do not define this macro if it does not need to do anything.
16418
16419  -- Macro: LIB_SPEC
16420      Another C string constant used much like `LINK_SPEC'.  The
16421      difference between the two is that `LIB_SPEC' is used at the end
16422      of the command given to the linker.
16423
16424      If this macro is not defined, a default is provided that loads the
16425      standard C library from the usual place.  See `gcc.c'.
16426
16427  -- Macro: LIBGCC_SPEC
16428      Another C string constant that tells the GCC driver program how
16429      and when to place a reference to `libgcc.a' into the linker
16430      command line.  This constant is placed both before and after the
16431      value of `LIB_SPEC'.
16432
16433      If this macro is not defined, the GCC driver provides a default
16434      that passes the string `-lgcc' to the linker.
16435
16436  -- Macro: REAL_LIBGCC_SPEC
16437      By default, if `ENABLE_SHARED_LIBGCC' is defined, the
16438      `LIBGCC_SPEC' is not directly used by the driver program but is
16439      instead modified to refer to different versions of `libgcc.a'
16440      depending on the values of the command line flags `-static',
16441      `-shared', `-static-libgcc', and `-shared-libgcc'.  On targets
16442      where these modifications are inappropriate, define
16443      `REAL_LIBGCC_SPEC' instead.  `REAL_LIBGCC_SPEC' tells the driver
16444      how to place a reference to `libgcc' on the link command line,
16445      but, unlike `LIBGCC_SPEC', it is used unmodified.
16446
16447  -- Macro: USE_LD_AS_NEEDED
16448      A macro that controls the modifications to `LIBGCC_SPEC' mentioned
16449      in `REAL_LIBGCC_SPEC'.  If nonzero, a spec will be generated that
16450      uses -as-needed and the shared libgcc in place of the static
16451      exception handler library, when linking without any of `-static',
16452      `-static-libgcc', or `-shared-libgcc'.
16453
16454  -- Macro: LINK_EH_SPEC
16455      If defined, this C string constant is added to `LINK_SPEC'.  When
16456      `USE_LD_AS_NEEDED' is zero or undefined, it also affects the
16457      modifications to `LIBGCC_SPEC' mentioned in `REAL_LIBGCC_SPEC'.
16458
16459  -- Macro: STARTFILE_SPEC
16460      Another C string constant used much like `LINK_SPEC'.  The
16461      difference between the two is that `STARTFILE_SPEC' is used at the
16462      very beginning of the command given to the linker.
16463
16464      If this macro is not defined, a default is provided that loads the
16465      standard C startup file from the usual place.  See `gcc.c'.
16466
16467  -- Macro: ENDFILE_SPEC
16468      Another C string constant used much like `LINK_SPEC'.  The
16469      difference between the two is that `ENDFILE_SPEC' is used at the
16470      very end of the command given to the linker.
16471
16472      Do not define this macro if it does not need to do anything.
16473
16474  -- Macro: THREAD_MODEL_SPEC
16475      GCC `-v' will print the thread model GCC was configured to use.
16476      However, this doesn't work on platforms that are multilibbed on
16477      thread models, such as AIX 4.3.  On such platforms, define
16478      `THREAD_MODEL_SPEC' such that it evaluates to a string without
16479      blanks that names one of the recognized thread models.  `%*', the
16480      default value of this macro, will expand to the value of
16481      `thread_file' set in `config.gcc'.
16482
16483  -- Macro: SYSROOT_SUFFIX_SPEC
16484      Define this macro to add a suffix to the target sysroot when GCC is
16485      configured with a sysroot.  This will cause GCC to search for
16486      usr/lib, et al, within sysroot+suffix.
16487
16488  -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC
16489      Define this macro to add a headers_suffix to the target sysroot
16490      when GCC is configured with a sysroot.  This will cause GCC to
16491      pass the updated sysroot+headers_suffix to CPP, causing it to
16492      search for usr/include, et al, within sysroot+headers_suffix.
16493
16494  -- Macro: EXTRA_SPECS
16495      Define this macro to provide additional specifications to put in
16496      the `specs' file that can be used in various specifications like
16497      `CC1_SPEC'.
16498
16499      The definition should be an initializer for an array of structures,
16500      containing a string constant, that defines the specification name,
16501      and a string constant that provides the specification.
16502
16503      Do not define this macro if it does not need to do anything.
16504
16505      `EXTRA_SPECS' is useful when an architecture contains several
16506      related targets, which have various `..._SPECS' which are similar
16507      to each other, and the maintainer would like one central place to
16508      keep these definitions.
16509
16510      For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to
16511      define either `_CALL_SYSV' when the System V calling sequence is
16512      used or `_CALL_AIX' when the older AIX-based calling sequence is
16513      used.
16514
16515      The `config/rs6000/rs6000.h' target file defines:
16516
16517           #define EXTRA_SPECS \
16518             { "cpp_sysv_default", CPP_SYSV_DEFAULT },
16519
16520           #define CPP_SYS_DEFAULT ""
16521
16522      The `config/rs6000/sysv.h' target file defines:
16523           #undef CPP_SPEC
16524           #define CPP_SPEC \
16525           "%{posix: -D_POSIX_SOURCE } \
16526           %{mcall-sysv: -D_CALL_SYSV } \
16527           %{!mcall-sysv: %(cpp_sysv_default) } \
16528           %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
16529
16530           #undef CPP_SYSV_DEFAULT
16531           #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
16532
16533      while the `config/rs6000/eabiaix.h' target file defines
16534      `CPP_SYSV_DEFAULT' as:
16535
16536           #undef CPP_SYSV_DEFAULT
16537           #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
16538
16539  -- Macro: LINK_LIBGCC_SPECIAL_1
16540      Define this macro if the driver program should find the library
16541      `libgcc.a'.  If you do not define this macro, the driver program
16542      will pass the argument `-lgcc' to tell the linker to do the search.
16543
16544  -- Macro: LINK_GCC_C_SEQUENCE_SPEC
16545      The sequence in which libgcc and libc are specified to the linker.
16546      By default this is `%G %L %G'.
16547
16548  -- Macro: LINK_COMMAND_SPEC
16549      A C string constant giving the complete command line need to
16550      execute the linker.  When you do this, you will need to update
16551      your port each time a change is made to the link command line
16552      within `gcc.c'.  Therefore, define this macro only if you need to
16553      completely redefine the command line for invoking the linker and
16554      there is no other way to accomplish the effect you need.
16555      Overriding this macro may be avoidable by overriding
16556      `LINK_GCC_C_SEQUENCE_SPEC' instead.
16557
16558  -- Macro: LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
16559      A nonzero value causes `collect2' to remove duplicate
16560      `-LDIRECTORY' search directories from linking commands.  Do not
16561      give it a nonzero value if removing duplicate search directories
16562      changes the linker's semantics.
16563
16564  -- Macro: MULTILIB_DEFAULTS
16565      Define this macro as a C expression for the initializer of an
16566      array of string to tell the driver program which options are
16567      defaults for this target and thus do not need to be handled
16568      specially when using `MULTILIB_OPTIONS'.
16569
16570      Do not define this macro if `MULTILIB_OPTIONS' is not defined in
16571      the target makefile fragment or if none of the options listed in
16572      `MULTILIB_OPTIONS' are set by default.  *Note Target Fragment::.
16573
16574  -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
16575      Define this macro to tell `gcc' that it should only translate a
16576      `-B' prefix into a `-L' linker option if the prefix indicates an
16577      absolute file name.
16578
16579  -- Macro: MD_EXEC_PREFIX
16580      If defined, this macro is an additional prefix to try after
16581      `STANDARD_EXEC_PREFIX'.  `MD_EXEC_PREFIX' is not searched when the
16582      `-b' option is used, or the compiler is built as a cross compiler.
16583      If you define `MD_EXEC_PREFIX', then be sure to add it to the
16584      list of directories used to find the assembler in `configure.in'.
16585
16586  -- Macro: STANDARD_STARTFILE_PREFIX
16587      Define this macro as a C string constant if you wish to override
16588      the standard choice of `libdir' as the default prefix to try when
16589      searching for startup files such as `crt0.o'.
16590      `STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
16591      built as a cross compiler.
16592
16593  -- Macro: STANDARD_STARTFILE_PREFIX_1
16594      Define this macro as a C string constant if you wish to override
16595      the standard choice of `/lib' as a prefix to try after the default
16596      prefix when searching for startup files such as `crt0.o'.
16597      `STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
16598      built as a cross compiler.
16599
16600  -- Macro: STANDARD_STARTFILE_PREFIX_2
16601      Define this macro as a C string constant if you wish to override
16602      the standard choice of `/lib' as yet another prefix to try after
16603      the default prefix when searching for startup files such as
16604      `crt0.o'.  `STANDARD_STARTFILE_PREFIX_2' is not searched when the
16605      compiler is built as a cross compiler.
16606
16607  -- Macro: MD_STARTFILE_PREFIX
16608      If defined, this macro supplies an additional prefix to try after
16609      the standard prefixes.  `MD_EXEC_PREFIX' is not searched when the
16610      `-b' option is used, or when the compiler is built as a cross
16611      compiler.
16612
16613  -- Macro: MD_STARTFILE_PREFIX_1
16614      If defined, this macro supplies yet another prefix to try after the
16615      standard prefixes.  It is not searched when the `-b' option is
16616      used, or when the compiler is built as a cross compiler.
16617
16618  -- Macro: INIT_ENVIRONMENT
16619      Define this macro as a C string constant if you wish to set
16620      environment variables for programs called by the driver, such as
16621      the assembler and loader.  The driver passes the value of this
16622      macro to `putenv' to initialize the necessary environment
16623      variables.
16624
16625  -- Macro: LOCAL_INCLUDE_DIR
16626      Define this macro as a C string constant if you wish to override
16627      the standard choice of `/usr/local/include' as the default prefix
16628      to try when searching for local header files.  `LOCAL_INCLUDE_DIR'
16629      comes before `SYSTEM_INCLUDE_DIR' in the search order.
16630
16631      Cross compilers do not search either `/usr/local/include' or its
16632      replacement.
16633
16634  -- Macro: MODIFY_TARGET_NAME
16635      Define this macro if you wish to define command-line switches that
16636      modify the default target name.
16637
16638      For each switch, you can include a string to be appended to the
16639      first part of the configuration name or a string to be deleted
16640      from the configuration name, if present.  The definition should be
16641      an initializer for an array of structures.  Each array element
16642      should have three elements: the switch name (a string constant,
16643      including the initial dash), one of the enumeration codes `ADD' or
16644      `DELETE' to indicate whether the string should be inserted or
16645      deleted, and the string to be inserted or deleted (a string
16646      constant).
16647
16648      For example, on a machine where `64' at the end of the
16649      configuration name denotes a 64-bit target and you want the `-32'
16650      and `-64' switches to select between 32- and 64-bit targets, you
16651      would code
16652
16653           #define MODIFY_TARGET_NAME \
16654             { { "-32", DELETE, "64"}, \
16655                {"-64", ADD, "64"}}
16656
16657  -- Macro: SYSTEM_INCLUDE_DIR
16658      Define this macro as a C string constant if you wish to specify a
16659      system-specific directory to search for header files before the
16660      standard directory.  `SYSTEM_INCLUDE_DIR' comes before
16661      `STANDARD_INCLUDE_DIR' in the search order.
16662
16663      Cross compilers do not use this macro and do not search the
16664      directory specified.
16665
16666  -- Macro: STANDARD_INCLUDE_DIR
16667      Define this macro as a C string constant if you wish to override
16668      the standard choice of `/usr/include' as the default prefix to try
16669      when searching for header files.
16670
16671      Cross compilers ignore this macro and do not search either
16672      `/usr/include' or its replacement.
16673
16674  -- Macro: STANDARD_INCLUDE_COMPONENT
16675      The "component" corresponding to `STANDARD_INCLUDE_DIR'.  See
16676      `INCLUDE_DEFAULTS', below, for the description of components.  If
16677      you do not define this macro, no component is used.
16678
16679  -- Macro: INCLUDE_DEFAULTS
16680      Define this macro if you wish to override the entire default
16681      search path for include files.  For a native compiler, the default
16682      search path usually consists of `GCC_INCLUDE_DIR',
16683      `LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR',
16684      `GPLUSPLUS_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'.  In addition,
16685      `GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are defined
16686      automatically by `Makefile', and specify private search areas for
16687      GCC.  The directory `GPLUSPLUS_INCLUDE_DIR' is used only for C++
16688      programs.
16689
16690      The definition should be an initializer for an array of structures.
16691      Each array element should have four elements: the directory name (a
16692      string constant), the component name (also a string constant), a
16693      flag for C++-only directories, and a flag showing that the
16694      includes in the directory don't need to be wrapped in `extern `C''
16695      when compiling C++.  Mark the end of the array with a null element.
16696
16697      The component name denotes what GNU package the include file is
16698      part of, if any, in all uppercase letters.  For example, it might
16699      be `GCC' or `BINUTILS'.  If the package is part of a
16700      vendor-supplied operating system, code the component name as `0'.
16701
16702      For example, here is the definition used for VAX/VMS:
16703
16704           #define INCLUDE_DEFAULTS \
16705           {                                       \
16706             { "GNU_GXX_INCLUDE:", "G++", 1, 1},   \
16707             { "GNU_CC_INCLUDE:", "GCC", 0, 0},    \
16708             { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0},  \
16709             { ".", 0, 0, 0},                      \
16710             { 0, 0, 0, 0}                         \
16711           }
16712
16713  Here is the order of prefixes tried for exec files:
16714
16715   1. Any prefixes specified by the user with `-B'.
16716
16717   2. The environment variable `GCC_EXEC_PREFIX', if any.
16718
16719   3. The directories specified by the environment variable
16720      `COMPILER_PATH'.
16721
16722   4. The macro `STANDARD_EXEC_PREFIX'.
16723
16724   5. `/usr/lib/gcc/'.
16725
16726   6. The macro `MD_EXEC_PREFIX', if any.
16727
16728  Here is the order of prefixes tried for startfiles:
16729
16730   1. Any prefixes specified by the user with `-B'.
16731
16732   2. The environment variable `GCC_EXEC_PREFIX', if any.
16733
16734   3. The directories specified by the environment variable
16735      `LIBRARY_PATH' (or port-specific name; native only, cross
16736      compilers do not use this).
16737
16738   4. The macro `STANDARD_EXEC_PREFIX'.
16739
16740   5. `/usr/lib/gcc/'.
16741
16742   6. The macro `MD_EXEC_PREFIX', if any.
16743
16744   7. The macro `MD_STARTFILE_PREFIX', if any.
16745
16746   8. The macro `STANDARD_STARTFILE_PREFIX'.
16747
16748   9. `/lib/'.
16749
16750  10. `/usr/lib/'.
16751
16752 \1f
16753 File: gccint.info,  Node: Run-time Target,  Next: Per-Function Data,  Prev: Driver,  Up: Target Macros
16754
16755 13.3 Run-time Target Specification
16756 ==================================
16757
16758 Here are run-time target specifications.
16759
16760  -- Macro: TARGET_CPU_CPP_BUILTINS ()
16761      This function-like macro expands to a block of code that defines
16762      built-in preprocessor macros and assertions for the target cpu,
16763      using the functions `builtin_define', `builtin_define_std' and
16764      `builtin_assert'.  When the front end calls this macro it provides
16765      a trailing semicolon, and since it has finished command line
16766      option processing your code can use those results freely.
16767
16768      `builtin_assert' takes a string in the form you pass to the
16769      command-line option `-A', such as `cpu=mips', and creates the
16770      assertion.  `builtin_define' takes a string in the form accepted
16771      by option `-D' and unconditionally defines the macro.
16772
16773      `builtin_define_std' takes a string representing the name of an
16774      object-like macro.  If it doesn't lie in the user's namespace,
16775      `builtin_define_std' defines it unconditionally.  Otherwise, it
16776      defines a version with two leading underscores, and another version
16777      with two leading and trailing underscores, and defines the original
16778      only if an ISO standard was not requested on the command line.  For
16779      example, passing `unix' defines `__unix', `__unix__' and possibly
16780      `unix'; passing `_mips' defines `__mips', `__mips__' and possibly
16781      `_mips', and passing `_ABI64' defines only `_ABI64'.
16782
16783      You can also test for the C dialect being compiled.  The variable
16784      `c_language' is set to one of `clk_c', `clk_cplusplus' or
16785      `clk_objective_c'.  Note that if we are preprocessing assembler,
16786      this variable will be `clk_c' but the function-like macro
16787      `preprocessing_asm_p()' will return true, so you might want to
16788      check for that first.  If you need to check for strict ANSI, the
16789      variable `flag_iso' can be used.  The function-like macro
16790      `preprocessing_trad_p()' can be used to check for traditional
16791      preprocessing.
16792
16793  -- Macro: TARGET_OS_CPP_BUILTINS ()
16794      Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
16795      and is used for the target operating system instead.
16796
16797  -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
16798      Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
16799      and is used for the target object format.  `elfos.h' uses this
16800      macro to define `__ELF__', so you probably do not need to define
16801      it yourself.
16802
16803  -- Variable: extern int target_flags
16804      This declaration should be present.
16805
16806  -- Macro: TARGET_FEATURENAME
16807      This series of macros is to allow compiler command arguments to
16808      enable or disable the use of optional features of the target
16809      machine.  For example, one machine description serves both the
16810      68000 and the 68020; a command argument tells the compiler whether
16811      it should use 68020-only instructions or not.  This command
16812      argument works by means of a macro `TARGET_68020' that tests a bit
16813      in `target_flags'.
16814
16815      Define a macro `TARGET_FEATURENAME' for each such option.  Its
16816      definition should test a bit in `target_flags'.  It is recommended
16817      that a helper macro `MASK_FEATURENAME' is defined for each
16818      bit-value to test, and used in `TARGET_FEATURENAME' and
16819      `TARGET_SWITCHES'.  For example:
16820
16821           #define TARGET_MASK_68020 1
16822           #define TARGET_68020 (target_flags & MASK_68020)
16823
16824      One place where these macros are used is in the
16825      condition-expressions of instruction patterns.  Note how
16826      `TARGET_68020' appears frequently in the 68000 machine description
16827      file, `m68k.md'.  Another place they are used is in the
16828      definitions of the other macros in the `MACHINE.h' file.
16829
16830  -- Macro: TARGET_SWITCHES
16831      This macro defines names of command options to set and clear bits
16832      in `target_flags'.  Its definition is an initializer with a
16833      subgrouping for each command option.
16834
16835      Each subgrouping contains a string constant, that defines the
16836      option name, a number, which contains the bits to set in
16837      `target_flags', and a second string which is the description
16838      displayed by `--help'.  If the number is negative then the bits
16839      specified by the number are cleared instead of being set.  If the
16840      description string is present but empty, then no help information
16841      will be displayed for that option, but it will not count as an
16842      undocumented option.  The actual option name is made by appending
16843      `-m' to the specified name.  Non-empty description strings should
16844      be marked with `N_(...)' for `xgettext'.  Please do not mark empty
16845      strings because the empty string is reserved by GNU gettext.
16846      `gettext("")' returns the header entry of the message catalog with
16847      meta information, not the empty string.
16848
16849      In addition to the description for `--help', more detailed
16850      documentation for each option should be added to `invoke.texi'.
16851
16852      One of the subgroupings should have a null string.  The number in
16853      this grouping is the default value for `target_flags'.  Any target
16854      options act starting with that value.
16855
16856      Here is an example which defines `-m68000' and `-m68020' with
16857      opposite meanings, and picks the latter as the default:
16858
16859           #define TARGET_SWITCHES \
16860             { { "68020", MASK_68020, "" },     \
16861               { "68000", -MASK_68020,          \
16862                 N_("Compile for the 68000") }, \
16863               { "", MASK_68020, "" },          \
16864             }
16865
16866  -- Macro: TARGET_OPTIONS
16867      This macro is similar to `TARGET_SWITCHES' but defines names of
16868      command options that have values.  Its definition is an
16869      initializer with a subgrouping for each command option.
16870
16871      Each subgrouping contains a string constant, that defines the
16872      option name, the address of a variable, a description string, and
16873      a value.  Non-empty description strings should be marked with
16874      `N_(...)' for `xgettext'.  Please do not mark empty strings
16875      because the empty string is reserved by GNU gettext.
16876      `gettext("")' returns the header entry of the message catalog with
16877      meta information, not the empty string.
16878
16879      If the value listed in the table is `NULL', then the variable, type
16880      `char *', is set to the variable part of the given option if the
16881      fixed part matches.  In other words, if the first part of the
16882      option matches what's in the table, the variable will be set to
16883      point to the rest of the option.  This allows the user to specify
16884      a value for that option.  The actual option name is made by
16885      appending `-m' to the specified name.  Again, each option should
16886      also be documented in `invoke.texi'.
16887
16888      If the value listed in the table is non-`NULL', then the option
16889      must match the option in the table exactly (with `-m'), and the
16890      variable is set to point to the value listed in the table.
16891
16892      Here is an example which defines `-mshort-data-NUMBER'.  If the
16893      given option is `-mshort-data-512', the variable `m88k_short_data'
16894      will be set to the string `"512"'.
16895
16896           extern char *m88k_short_data;
16897           #define TARGET_OPTIONS \
16898            { { "short-data-", &m88k_short_data, \
16899                N_("Specify the size of the short data section"), 0 } }
16900
16901      Here is a variant of the above that allows the user to also specify
16902      just `-mshort-data' where a default of `"64"' is used.
16903
16904           extern char *m88k_short_data;
16905           #define TARGET_OPTIONS \
16906            { { "short-data-", &m88k_short_data, \
16907                N_("Specify the size of the short data section"), 0 } \
16908               { "short-data", &m88k_short_data, "", "64" },
16909               }
16910
16911      Here is an example which defines `-mno-alu', `-malu1', and
16912      `-malu2' as a three-state switch, along with suitable macros for
16913      checking the state of the option (documentation is elided for
16914      brevity).
16915
16916           [chip.c]
16917           char *chip_alu = ""; /* Specify default here.  */
16918
16919           [chip.h]
16920           extern char *chip_alu;
16921           #define TARGET_OPTIONS \
16922             { { "no-alu", &chip_alu, "", "" }, \
16923                { "alu1", &chip_alu, "", "1" }, \
16924                { "alu2", &chip_alu, "", "2" }, }
16925           #define TARGET_ALU (chip_alu[0] != '\0')
16926           #define TARGET_ALU1 (chip_alu[0] == '1')
16927           #define TARGET_ALU2 (chip_alu[0] == '2')
16928
16929  -- Macro: TARGET_VERSION
16930      This macro is a C statement to print on `stderr' a string
16931      describing the particular machine description choice.  Every
16932      machine description should define `TARGET_VERSION'.  For example:
16933
16934           #ifdef MOTOROLA
16935           #define TARGET_VERSION \
16936             fprintf (stderr, " (68k, Motorola syntax)");
16937           #else
16938           #define TARGET_VERSION \
16939             fprintf (stderr, " (68k, MIT syntax)");
16940           #endif
16941
16942  -- Macro: OVERRIDE_OPTIONS
16943      Sometimes certain combinations of command options do not make
16944      sense on a particular target machine.  You can define a macro
16945      `OVERRIDE_OPTIONS' to take account of this.  This macro, if
16946      defined, is executed once just after all the command options have
16947      been parsed.
16948
16949      Don't use this macro to turn on various extra optimizations for
16950      `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.
16951
16952  -- Macro: OPTIMIZATION_OPTIONS (LEVEL, SIZE)
16953      Some machines may desire to change what optimizations are
16954      performed for various optimization levels.   This macro, if
16955      defined, is executed once just after the optimization level is
16956      determined and before the remainder of the command options have
16957      been parsed.  Values set in this macro are used as the default
16958      values for the other command line options.
16959
16960      LEVEL is the optimization level specified; 2 if `-O2' is
16961      specified, 1 if `-O' is specified, and 0 if neither is specified.
16962
16963      SIZE is nonzero if `-Os' is specified and zero otherwise.
16964
16965      You should not use this macro to change options that are not
16966      machine-specific.  These should uniformly selected by the same
16967      optimization level on all supported machines.  Use this macro to
16968      enable machine-specific optimizations.
16969
16970      *Do not examine `write_symbols' in this macro!* The debugging
16971      options are not supposed to alter the generated code.
16972
16973  -- Macro: CAN_DEBUG_WITHOUT_FP
16974      Define this macro if debugging can be performed even without a
16975      frame pointer.  If this macro is defined, GCC will turn on the
16976      `-fomit-frame-pointer' option whenever `-O' is specified.
16977
16978 \1f
16979 File: gccint.info,  Node: Per-Function Data,  Next: Storage Layout,  Prev: Run-time Target,  Up: Target Macros
16980
16981 13.4 Defining data structures for per-function information.
16982 ===========================================================
16983
16984 If the target needs to store information on a per-function basis, GCC
16985 provides a macro and a couple of variables to allow this.  Note, just
16986 using statics to store the information is a bad idea, since GCC supports
16987 nested functions, so you can be halfway through encoding one function
16988 when another one comes along.
16989
16990  GCC defines a data structure called `struct function' which contains
16991 all of the data specific to an individual function.  This structure
16992 contains a field called `machine' whose type is `struct
16993 machine_function *', which can be used by targets to point to their own
16994 specific data.
16995
16996  If a target needs per-function specific data it should define the type
16997 `struct machine_function' and also the macro `INIT_EXPANDERS'.  This
16998 macro should be used to initialize the function pointer
16999 `init_machine_status'.  This pointer is explained below.
17000
17001  One typical use of per-function, target specific data is to create an
17002 RTX to hold the register containing the function's return address.  This
17003 RTX can then be used to implement the `__builtin_return_address'
17004 function, for level 0.
17005
17006  Note--earlier implementations of GCC used a single data area to hold
17007 all of the per-function information.  Thus when processing of a nested
17008 function began the old per-function data had to be pushed onto a stack,
17009 and when the processing was finished, it had to be popped off the
17010 stack.  GCC used to provide function pointers called
17011 `save_machine_status' and `restore_machine_status' to handle the saving
17012 and restoring of the target specific information.  Since the single
17013 data area approach is no longer used, these pointers are no longer
17014 supported.
17015
17016  -- Macro: INIT_EXPANDERS
17017      Macro called to initialize any target specific information.  This
17018      macro is called once per function, before generation of any RTL
17019      has begun.  The intention of this macro is to allow the
17020      initialization of the function pointer `init_machine_status'.
17021
17022  -- Variable: void (*)(struct function *) init_machine_status
17023      If this function pointer is non-`NULL' it will be called once per
17024      function, before function compilation starts, in order to allow the
17025      target to perform any target specific initialization of the
17026      `struct function' structure.  It is intended that this would be
17027      used to initialize the `machine' of that structure.
17028
17029      `struct machine_function' structures are expected to be freed by
17030      GC.  Generally, any memory that they reference must be allocated
17031      by using `ggc_alloc', including the structure itself.
17032
17033 \1f
17034 File: gccint.info,  Node: Storage Layout,  Next: Type Layout,  Prev: Per-Function Data,  Up: Target Macros
17035
17036 13.5 Storage Layout
17037 ===================
17038
17039 Note that the definitions of the macros in this table which are sizes or
17040 alignments measured in bits do not need to be constant.  They can be C
17041 expressions that refer to static variables, such as the `target_flags'.
17042 *Note Run-time Target::.
17043
17044  -- Macro: BITS_BIG_ENDIAN
17045      Define this macro to have the value 1 if the most significant bit
17046      in a byte has the lowest number; otherwise define it to have the
17047      value zero.  This means that bit-field instructions count from the
17048      most significant bit.  If the machine has no bit-field
17049      instructions, then this must still be defined, but it doesn't
17050      matter which value it is defined to.  This macro need not be a
17051      constant.
17052
17053      This macro does not affect the way structure fields are packed into
17054      bytes or words; that is controlled by `BYTES_BIG_ENDIAN'.
17055
17056  -- Macro: BYTES_BIG_ENDIAN
17057      Define this macro to have the value 1 if the most significant byte
17058      in a word has the lowest number.  This macro need not be a
17059      constant.
17060
17061  -- Macro: WORDS_BIG_ENDIAN
17062      Define this macro to have the value 1 if, in a multiword object,
17063      the most significant word has the lowest number.  This applies to
17064      both memory locations and registers; GCC fundamentally assumes
17065      that the order of words in memory is the same as the order in
17066      registers.  This macro need not be a constant.
17067
17068  -- Macro: LIBGCC2_WORDS_BIG_ENDIAN
17069      Define this macro if `WORDS_BIG_ENDIAN' is not constant.  This
17070      must be a constant value with the same meaning as
17071      `WORDS_BIG_ENDIAN', which will be used only when compiling
17072      `libgcc2.c'.  Typically the value will be set based on
17073      preprocessor defines.
17074
17075  -- Macro: FLOAT_WORDS_BIG_ENDIAN
17076      Define this macro to have the value 1 if `DFmode', `XFmode' or
17077      `TFmode' floating point numbers are stored in memory with the word
17078      containing the sign bit at the lowest address; otherwise define it
17079      to have the value 0.  This macro need not be a constant.
17080
17081      You need not define this macro if the ordering is the same as for
17082      multi-word integers.
17083
17084  -- Macro: BITS_PER_UNIT
17085      Define this macro to be the number of bits in an addressable
17086      storage unit (byte).  If you do not define this macro the default
17087      is 8.
17088
17089  -- Macro: BITS_PER_WORD
17090      Number of bits in a word.  If you do not define this macro, the
17091      default is `BITS_PER_UNIT * UNITS_PER_WORD'.
17092
17093  -- Macro: MAX_BITS_PER_WORD
17094      Maximum number of bits in a word.  If this is undefined, the
17095      default is `BITS_PER_WORD'.  Otherwise, it is the constant value
17096      that is the largest value that `BITS_PER_WORD' can have at
17097      run-time.
17098
17099  -- Macro: UNITS_PER_WORD
17100      Number of storage units in a word; normally 4.
17101
17102  -- Macro: MIN_UNITS_PER_WORD
17103      Minimum number of units in a word.  If this is undefined, the
17104      default is `UNITS_PER_WORD'.  Otherwise, it is the constant value
17105      that is the smallest value that `UNITS_PER_WORD' can have at
17106      run-time.
17107
17108  -- Macro: POINTER_SIZE
17109      Width of a pointer, in bits.  You must specify a value no wider
17110      than the width of `Pmode'.  If it is not equal to the width of
17111      `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'.  If you do
17112      not specify a value the default is `BITS_PER_WORD'.
17113
17114  -- Macro: POINTERS_EXTEND_UNSIGNED
17115      A C expression whose value is greater than zero if pointers that
17116      need to be extended from being `POINTER_SIZE' bits wide to `Pmode'
17117      are to be zero-extended and zero if they are to be sign-extended.
17118      If the value is less then zero then there must be an "ptr_extend"
17119      instruction that extends a pointer from `POINTER_SIZE' to `Pmode'.
17120
17121      You need not define this macro if the `POINTER_SIZE' is equal to
17122      the width of `Pmode'.
17123
17124  -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
17125      A macro to update M and UNSIGNEDP when an object whose type is
17126      TYPE and which has the specified mode and signedness is to be
17127      stored in a register.  This macro is only called when TYPE is a
17128      scalar type.
17129
17130      On most RISC machines, which only have operations that operate on
17131      a full register, define this macro to set M to `word_mode' if M is
17132      an integer mode narrower than `BITS_PER_WORD'.  In most cases,
17133      only integer modes should be widened because wider-precision
17134      floating-point operations are usually more expensive than their
17135      narrower counterparts.
17136
17137      For most machines, the macro definition does not change UNSIGNEDP.
17138      However, some machines, have instructions that preferentially
17139      handle either signed or unsigned quantities of certain modes.  For
17140      example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
17141      instructions sign-extend the result to 64 bits.  On such machines,
17142      set UNSIGNEDP according to which kind of extension is more
17143      efficient.
17144
17145      Do not define this macro if it would never modify M.
17146
17147  -- Macro: PROMOTE_FUNCTION_MODE
17148      Like `PROMOTE_MODE', but is applied to outgoing function arguments
17149      or function return values, as specified by
17150      `TARGET_PROMOTE_FUNCTION_ARGS' and
17151      `TARGET_PROMOTE_FUNCTION_RETURN', respectively.
17152
17153      The default is `PROMOTE_MODE'.
17154
17155  -- Target Hook: bool TARGET_PROMOTE_FUNCTION_ARGS (tree FNTYPE)
17156      This target hook should return `true' if the promotion described by
17157      `PROMOTE_FUNCTION_MODE' should be done for outgoing function
17158      arguments.
17159
17160  -- Target Hook: bool TARGET_PROMOTE_FUNCTION_RETURN (tree FNTYPE)
17161      This target hook should return `true' if the promotion described by
17162      `PROMOTE_FUNCTION_MODE' should be done for the return value of
17163      functions.
17164
17165      If this target hook returns `true', `FUNCTION_VALUE' must perform
17166      the same promotions done by `PROMOTE_FUNCTION_MODE'.
17167
17168  -- Macro: PARM_BOUNDARY
17169      Normal alignment required for function parameters on the stack, in
17170      bits.  All stack parameters receive at least this much alignment
17171      regardless of data type.  On most machines, this is the same as the
17172      size of an integer.
17173
17174  -- Macro: STACK_BOUNDARY
17175      Define this macro to the minimum alignment enforced by hardware
17176      for the stack pointer on this machine.  The definition is a C
17177      expression for the desired alignment (measured in bits).  This
17178      value is used as a default if `PREFERRED_STACK_BOUNDARY' is not
17179      defined.  On most machines, this should be the same as
17180      `PARM_BOUNDARY'.
17181
17182  -- Macro: PREFERRED_STACK_BOUNDARY
17183      Define this macro if you wish to preserve a certain alignment for
17184      the stack pointer, greater than what the hardware enforces.  The
17185      definition is a C expression for the desired alignment (measured
17186      in bits).  This macro must evaluate to a value equal to or larger
17187      than `STACK_BOUNDARY'.
17188
17189  -- Macro: FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN
17190      A C expression that evaluates true if `PREFERRED_STACK_BOUNDARY' is
17191      not guaranteed by the runtime and we should emit code to align the
17192      stack at the beginning of `main'.
17193
17194      If `PUSH_ROUNDING' is not defined, the stack will always be aligned
17195      to the specified boundary.  If `PUSH_ROUNDING' is defined and
17196      specifies a less strict alignment than `PREFERRED_STACK_BOUNDARY',
17197      the stack may be momentarily unaligned while pushing arguments.
17198
17199  -- Macro: FUNCTION_BOUNDARY
17200      Alignment required for a function entry point, in bits.
17201
17202  -- Macro: BIGGEST_ALIGNMENT
17203      Biggest alignment that any data type can require on this machine,
17204      in bits.
17205
17206  -- Macro: MINIMUM_ATOMIC_ALIGNMENT
17207      If defined, the smallest alignment, in bits, that can be given to
17208      an object that can be referenced in one operation, without
17209      disturbing any nearby object.  Normally, this is `BITS_PER_UNIT',
17210      but may be larger on machines that don't have byte or half-word
17211      store operations.
17212
17213  -- Macro: BIGGEST_FIELD_ALIGNMENT
17214      Biggest alignment that any structure or union field can require on
17215      this machine, in bits.  If defined, this overrides
17216      `BIGGEST_ALIGNMENT' for structure and union fields only, unless
17217      the field alignment has been set by the `__attribute__ ((aligned
17218      (N)))' construct.
17219
17220  -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED)
17221      An expression for the alignment of a structure field FIELD if the
17222      alignment computed in the usual way (including applying of
17223      `BIGGEST_ALIGNMENT' and `BIGGEST_FIELD_ALIGNMENT' to the
17224      alignment) is COMPUTED.  It overrides alignment only if the field
17225      alignment has not been set by the `__attribute__ ((aligned (N)))'
17226      construct.
17227
17228  -- Macro: MAX_OFILE_ALIGNMENT
17229      Biggest alignment supported by the object file format of this
17230      machine.  Use this macro to limit the alignment which can be
17231      specified using the `__attribute__ ((aligned (N)))' construct.  If
17232      not defined, the default value is `BIGGEST_ALIGNMENT'.
17233
17234  -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
17235      If defined, a C expression to compute the alignment for a variable
17236      in the static store.  TYPE is the data type, and BASIC-ALIGN is
17237      the alignment that the object would ordinarily have.  The value of
17238      this macro is used instead of that alignment to align the object.
17239
17240      If this macro is not defined, then BASIC-ALIGN is used.
17241
17242      One use of this macro is to increase alignment of medium-size data
17243      to make it all fit in fewer cache lines.  Another is to cause
17244      character arrays to be word-aligned so that `strcpy' calls that
17245      copy constants to character arrays can be done inline.
17246
17247  -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN)
17248      If defined, a C expression to compute the alignment given to a
17249      constant that is being placed in memory.  CONSTANT is the constant
17250      and BASIC-ALIGN is the alignment that the object would ordinarily
17251      have.  The value of this macro is used instead of that alignment to
17252      align the object.
17253
17254      If this macro is not defined, then BASIC-ALIGN is used.
17255
17256      The typical use of this macro is to increase alignment for string
17257      constants to be word aligned so that `strcpy' calls that copy
17258      constants can be done inline.
17259
17260  -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
17261      If defined, a C expression to compute the alignment for a variable
17262      in the local store.  TYPE is the data type, and BASIC-ALIGN is the
17263      alignment that the object would ordinarily have.  The value of this
17264      macro is used instead of that alignment to align the object.
17265
17266      If this macro is not defined, then BASIC-ALIGN is used.
17267
17268      One use of this macro is to increase alignment of medium-size data
17269      to make it all fit in fewer cache lines.
17270
17271  -- Macro: EMPTY_FIELD_BOUNDARY
17272      Alignment in bits to be given to a structure bit-field that
17273      follows an empty field such as `int : 0;'.
17274
17275      If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
17276
17277  -- Macro: STRUCTURE_SIZE_BOUNDARY
17278      Number of bits which any structure or union's size must be a
17279      multiple of.  Each structure or union's size is rounded up to a
17280      multiple of this.
17281
17282      If you do not define this macro, the default is the same as
17283      `BITS_PER_UNIT'.
17284
17285  -- Macro: STRICT_ALIGNMENT
17286      Define this macro to be the value 1 if instructions will fail to
17287      work if given data not on the nominal alignment.  If instructions
17288      will merely go slower in that case, define this macro as 0.
17289
17290  -- Macro: PCC_BITFIELD_TYPE_MATTERS
17291      Define this if you wish to imitate the way many other C compilers
17292      handle alignment of bit-fields and the structures that contain
17293      them.
17294
17295      The behavior is that the type written for a named bit-field (`int',
17296      `short', or other integer type) imposes an alignment for the entire
17297      structure, as if the structure really did contain an ordinary
17298      field of that type.  In addition, the bit-field is placed within
17299      the structure so that it would fit within such a field, not
17300      crossing a boundary for it.
17301
17302      Thus, on most machines, a named bit-field whose type is written as
17303      `int' would not cross a four-byte boundary, and would force
17304      four-byte alignment for the whole structure.  (The alignment used
17305      may not be four bytes; it is controlled by the other alignment
17306      parameters.)
17307
17308      An unnamed bit-field will not affect the alignment of the
17309      containing structure.
17310
17311      If the macro is defined, its definition should be a C expression;
17312      a nonzero value for the expression enables this behavior.
17313
17314      Note that if this macro is not defined, or its value is zero, some
17315      bit-fields may cross more than one alignment boundary.  The
17316      compiler can support such references if there are `insv', `extv',
17317      and `extzv' insns that can directly reference memory.
17318
17319      The other known way of making bit-fields work is to define
17320      `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'.  Then
17321      every structure can be accessed with fullwords.
17322
17323      Unless the machine has bit-field instructions or you define
17324      `STRUCTURE_SIZE_BOUNDARY' that way, you must define
17325      `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
17326
17327      If your aim is to make GCC use the same conventions for laying out
17328      bit-fields as are used by another compiler, here is how to
17329      investigate what the other compiler does.  Compile and run this
17330      program:
17331
17332           struct foo1
17333           {
17334             char x;
17335             char :0;
17336             char y;
17337           };
17338
17339           struct foo2
17340           {
17341             char x;
17342             int :0;
17343             char y;
17344           };
17345
17346           main ()
17347           {
17348             printf ("Size of foo1 is %d\n",
17349                     sizeof (struct foo1));
17350             printf ("Size of foo2 is %d\n",
17351                     sizeof (struct foo2));
17352             exit (0);
17353           }
17354
17355      If this prints 2 and 5, then the compiler's behavior is what you
17356      would get from `PCC_BITFIELD_TYPE_MATTERS'.
17357
17358  -- Macro: BITFIELD_NBYTES_LIMITED
17359      Like `PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
17360      to aligning a bit-field within the structure.
17361
17362  -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELDS (void)
17363      When `PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine
17364      whether unnamed bitfields affect the alignment of the containing
17365      structure.  The hook should return true if the structure should
17366      inherit the alignment requirements of an unnamed bitfield's type.
17367
17368  -- Macro: MEMBER_TYPE_FORCES_BLK (FIELD, MODE)
17369      Return 1 if a structure or array containing FIELD should be
17370      accessed using `BLKMODE'.
17371
17372      If FIELD is the only field in the structure, MODE is its mode,
17373      otherwise MODE is VOIDmode.  MODE is provided in the case where
17374      structures of one field would require the structure's mode to
17375      retain the field's mode.
17376
17377      Normally, this is not needed.  See the file `c4x.h' for an example
17378      of how to use this macro to prevent a structure having a floating
17379      point field from being accessed in an integer mode.
17380
17381  -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED)
17382      Define this macro as an expression for the alignment of a type
17383      (given by TYPE as a tree node) if the alignment computed in the
17384      usual way is COMPUTED and the alignment explicitly specified was
17385      SPECIFIED.
17386
17387      The default is to use SPECIFIED if it is larger; otherwise, use
17388      the smaller of COMPUTED and `BIGGEST_ALIGNMENT'
17389
17390  -- Macro: MAX_FIXED_MODE_SIZE
17391      An integer expression for the size in bits of the largest integer
17392      machine mode that should actually be used.  All integer machine
17393      modes of this size or smaller can be used for structures and
17394      unions with the appropriate sizes.  If this macro is undefined,
17395      `GET_MODE_BITSIZE (DImode)' is assumed.
17396
17397  -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
17398      If defined, an expression of type `enum machine_mode' that
17399      specifies the mode of the save area operand of a
17400      `save_stack_LEVEL' named pattern (*note Standard Names::).
17401      SAVE_LEVEL is one of `SAVE_BLOCK', `SAVE_FUNCTION', or
17402      `SAVE_NONLOCAL' and selects which of the three named patterns is
17403      having its mode specified.
17404
17405      You need not define this macro if it always returns `Pmode'.  You
17406      would most commonly define this macro if the `save_stack_LEVEL'
17407      patterns need to support both a 32- and a 64-bit mode.
17408
17409  -- Macro: STACK_SIZE_MODE
17410      If defined, an expression of type `enum machine_mode' that
17411      specifies the mode of the size increment operand of an
17412      `allocate_stack' named pattern (*note Standard Names::).
17413
17414      You need not define this macro if it always returns `word_mode'.
17415      You would most commonly define this macro if the `allocate_stack'
17416      pattern needs to support both a 32- and a 64-bit mode.
17417
17418  -- Macro: TARGET_FLOAT_FORMAT
17419      A code distinguishing the floating point format of the target
17420      machine.  There are four defined values:
17421
17422     `IEEE_FLOAT_FORMAT'
17423           This code indicates IEEE floating point.  It is the default;
17424           there is no need to define `TARGET_FLOAT_FORMAT' when the
17425           format is IEEE.
17426
17427     `VAX_FLOAT_FORMAT'
17428           This code indicates the "F float" (for `float') and "D float"
17429           or "G float" formats (for `double') used on the VAX and
17430           PDP-11.
17431
17432     `IBM_FLOAT_FORMAT'
17433           This code indicates the format used on the IBM System/370.
17434
17435     `C4X_FLOAT_FORMAT'
17436           This code indicates the format used on the TMS320C3x/C4x.
17437
17438      If your target uses a floating point format other than these, you
17439      must define a new NAME_FLOAT_FORMAT code for it, and add support
17440      for it to `real.c'.
17441
17442      The ordering of the component words of floating point values
17443      stored in memory is controlled by `FLOAT_WORDS_BIG_ENDIAN'.
17444
17445  -- Macro: MODE_HAS_NANS (MODE)
17446      When defined, this macro should be true if MODE has a NaN
17447      representation.  The compiler assumes that NaNs are not equal to
17448      anything (including themselves) and that addition, subtraction,
17449      multiplication and division all return NaNs when one operand is
17450      NaN.
17451
17452      By default, this macro is true if MODE is a floating-point mode
17453      and the target floating-point format is IEEE.
17454
17455  -- Macro: MODE_HAS_INFINITIES (MODE)
17456      This macro should be true if MODE can represent infinity.  At
17457      present, the compiler uses this macro to decide whether `x - x' is
17458      always defined.  By default, the macro is true when MODE is a
17459      floating-point mode and the target format is IEEE.
17460
17461  -- Macro: MODE_HAS_SIGNED_ZEROS (MODE)
17462      True if MODE distinguishes between positive and negative zero.
17463      The rules are expected to follow the IEEE standard:
17464
17465         * `x + x' has the same sign as `x'.
17466
17467         * If the sum of two values with opposite sign is zero, the
17468           result is positive for all rounding modes expect towards
17469           -infinity, for which it is negative.
17470
17471         * The sign of a product or quotient is negative when exactly one
17472           of the operands is negative.
17473
17474      The default definition is true if MODE is a floating-point mode
17475      and the target format is IEEE.
17476
17477  -- Macro: MODE_HAS_SIGN_DEPENDENT_ROUNDING (MODE)
17478      If defined, this macro should be true for MODE if it has at least
17479      one rounding mode in which `x' and `-x' can be rounded to numbers
17480      of different magnitude.  Two such modes are towards -infinity and
17481      towards +infinity.
17482
17483      The default definition of this macro is true if MODE is a
17484      floating-point mode and the target format is IEEE.
17485
17486  -- Macro: ROUND_TOWARDS_ZERO
17487      If defined, this macro should be true if the prevailing rounding
17488      mode is towards zero.  A true value has the following effects:
17489
17490         * `MODE_HAS_SIGN_DEPENDENT_ROUNDING' will be false for all
17491           modes.
17492
17493         * `libgcc.a''s floating-point emulator will round towards zero
17494           rather than towards nearest.
17495
17496         * The compiler's floating-point emulator will round towards
17497           zero after doing arithmetic, and when converting from the
17498           internal float format to the target format.
17499
17500      The macro does not affect the parsing of string literals.  When the
17501      primary rounding mode is towards zero, library functions like
17502      `strtod' might still round towards nearest, and the compiler's
17503      parser should behave like the target's `strtod' where possible.
17504
17505      Not defining this macro is equivalent to returning zero.
17506
17507  -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE)
17508      This macro should return true if floats with SIZE bits do not have
17509      a NaN or infinity representation, but use the largest exponent for
17510      normal numbers instead.
17511
17512      Defining this macro to true for SIZE causes `MODE_HAS_NANS' and
17513      `MODE_HAS_INFINITIES' to be false for SIZE-bit modes.  It also
17514      affects the way `libgcc.a' and `real.c' emulate floating-point
17515      arithmetic.
17516
17517      The default definition of this macro returns false for all sizes.
17518
17519  -- Target Hook: bool TARGET_VECTOR_OPAQUE_P (tree TYPE)
17520      This target hook should return `true' a vector is opaque.  That
17521      is, if no cast is needed when copying a vector value of type TYPE
17522      into another vector lvalue of the same size.  Vector opaque types
17523      cannot be initialized.  The default is that there are no such
17524      types.
17525
17526  -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (tree RECORD_TYPE)
17527      This target hook returns `true' if bit-fields in the given
17528      RECORD_TYPE are to be laid out following the rules of Microsoft
17529      Visual C/C++, namely: (i) a bit-field won't share the same storage
17530      unit with the previous bit-field if their underlying types have
17531      different sizes, and the bit-field will be aligned to the highest
17532      alignment of the underlying types of itself and of the previous
17533      bit-field; (ii) a zero-sized bit-field will affect the alignment of
17534      the whole enclosing structure, even if it is unnamed; except that
17535      (iii) a zero-sized bit-field will be disregarded unless it follows
17536      another bit-field of nonzero size.  If this hook returns `true',
17537      other macros that control bit-field layout are ignored.
17538
17539      When a bit-field is inserted into a packed record, the whole size
17540      of the underlying type is used by one or more same-size adjacent
17541      bit-fields (that is, if its long:3, 32 bits is used in the record,
17542      and any additional adjacent long bit-fields are packed into the
17543      same chunk of 32 bits.  However, if the size changes, a new field
17544      of that size is allocated).  In an unpacked record, this is the
17545      same as using alignment, but not equivalent when packing.
17546
17547      If both MS bit-fields and `__attribute__((packed))' are used, the
17548      latter will take precedence.  If `__attribute__((packed))' is used
17549      on a single field when MS bit-fields are in use, it will take
17550      precedence for that field, but the alignment of the rest of the
17551      structure may affect its placement.
17552
17553  -- Target Hook: const char * TARGET_MANGLE_FUNDAMENTAL_TYPE (tree TYPE)
17554      If your target defines any fundamental types, define this hook to
17555      return the appropriate encoding for these types as part of a C++
17556      mangled name.  The TYPE argument is the tree structure
17557      representing the type to be mangled.  The hook may be applied to
17558      trees which are not target-specific fundamental types; it should
17559      return `NULL' for all such types, as well as arguments it does not
17560      recognize.  If the return value is not `NULL', it must point to a
17561      statically-allocated string constant.
17562
17563      Target-specific fundamental types might be new fundamental types or
17564      qualified versions of ordinary fundamental types.  Encode new
17565      fundamental types as `u N NAME', where NAME is the name used for
17566      the type in source code, and N is the length of NAME in decimal.
17567      Encode qualified versions of ordinary types as `U N NAME CODE',
17568      where NAME is the name used for the type qualifier in source code,
17569      N is the length of NAME as above, and CODE is the code used to
17570      represent the unqualified version of this type.  (See
17571      `write_builtin_type' in `cp/mangle.c' for the list of codes.)  In
17572      both cases the spaces are for clarity; do not include any spaces
17573      in your string.
17574
17575      The default version of this hook always returns `NULL', which is
17576      appropriate for a target that does not define any new fundamental
17577      types.
17578
17579 \1f
17580 File: gccint.info,  Node: Type Layout,  Next: Registers,  Prev: Storage Layout,  Up: Target Macros
17581
17582 13.6 Layout of Source Language Data Types
17583 =========================================
17584
17585 These macros define the sizes and other characteristics of the standard
17586 basic data types used in programs being compiled.  Unlike the macros in
17587 the previous section, these apply to specific features of C and related
17588 languages, rather than to fundamental aspects of storage layout.
17589
17590  -- Macro: INT_TYPE_SIZE
17591      A C expression for the size in bits of the type `int' on the
17592      target machine.  If you don't define this, the default is one word.
17593
17594  -- Macro: SHORT_TYPE_SIZE
17595      A C expression for the size in bits of the type `short' on the
17596      target machine.  If you don't define this, the default is half a
17597      word.  (If this would be less than one storage unit, it is rounded
17598      up to one unit.)
17599
17600  -- Macro: LONG_TYPE_SIZE
17601      A C expression for the size in bits of the type `long' on the
17602      target machine.  If you don't define this, the default is one word.
17603
17604  -- Macro: ADA_LONG_TYPE_SIZE
17605      On some machines, the size used for the Ada equivalent of the type
17606      `long' by a native Ada compiler differs from that used by C.  In
17607      that situation, define this macro to be a C expression to be used
17608      for the size of that type.  If you don't define this, the default
17609      is the value of `LONG_TYPE_SIZE'.
17610
17611  -- Macro: LONG_LONG_TYPE_SIZE
17612      A C expression for the size in bits of the type `long long' on the
17613      target machine.  If you don't define this, the default is two
17614      words.  If you want to support GNU Ada on your machine, the value
17615      of this macro must be at least 64.
17616
17617  -- Macro: CHAR_TYPE_SIZE
17618      A C expression for the size in bits of the type `char' on the
17619      target machine.  If you don't define this, the default is
17620      `BITS_PER_UNIT'.
17621
17622  -- Macro: BOOL_TYPE_SIZE
17623      A C expression for the size in bits of the C++ type `bool' and C99
17624      type `_Bool' on the target machine.  If you don't define this, and
17625      you probably shouldn't, the default is `CHAR_TYPE_SIZE'.
17626
17627  -- Macro: FLOAT_TYPE_SIZE
17628      A C expression for the size in bits of the type `float' on the
17629      target machine.  If you don't define this, the default is one word.
17630
17631  -- Macro: DOUBLE_TYPE_SIZE
17632      A C expression for the size in bits of the type `double' on the
17633      target machine.  If you don't define this, the default is two
17634      words.
17635
17636  -- Macro: LONG_DOUBLE_TYPE_SIZE
17637      A C expression for the size in bits of the type `long double' on
17638      the target machine.  If you don't define this, the default is two
17639      words.
17640
17641  -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE
17642      Define this macro if `LONG_DOUBLE_TYPE_SIZE' is not constant or if
17643      you want routines in `libgcc2.a' for a size other than
17644      `LONG_DOUBLE_TYPE_SIZE'.  If you don't define this, the default is
17645      `LONG_DOUBLE_TYPE_SIZE'.
17646
17647  -- Macro: LIBGCC2_HAS_DF_MODE
17648      Define this macro if neither `LIBGCC2_DOUBLE_TYPE_SIZE' nor
17649      `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is `DFmode' but you want `DFmode'
17650      routines in `libgcc2.a' anyway.  If you don't define this and
17651      either `LIBGCC2_DOUBLE_TYPE_SIZE' or
17652      `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64 then the default is 1,
17653      otherwise it is 0.
17654
17655  -- Macro: LIBGCC2_HAS_XF_MODE
17656      Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
17657      `XFmode' but you want `XFmode' routines in `libgcc2.a' anyway.  If
17658      you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80
17659      then the default is 1, otherwise it is 0.
17660
17661  -- Macro: LIBGCC2_HAS_TF_MODE
17662      Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
17663      `TFmode' but you want `TFmode' routines in `libgcc2.a' anyway.  If
17664      you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128
17665      then the default is 1, otherwise it is 0.
17666
17667  -- Macro: TARGET_FLT_EVAL_METHOD
17668      A C expression for the value for `FLT_EVAL_METHOD' in `float.h',
17669      assuming, if applicable, that the floating-point control word is
17670      in its default state.  If you do not define this macro the value of
17671      `FLT_EVAL_METHOD' will be zero.
17672
17673  -- Macro: WIDEST_HARDWARE_FP_SIZE
17674      A C expression for the size in bits of the widest floating-point
17675      format supported by the hardware.  If you define this macro, you
17676      must specify a value less than or equal to the value of
17677      `LONG_DOUBLE_TYPE_SIZE'.  If you do not define this macro, the
17678      value of `LONG_DOUBLE_TYPE_SIZE' is the default.
17679
17680  -- Macro: DEFAULT_SIGNED_CHAR
17681      An expression whose value is 1 or 0, according to whether the type
17682      `char' should be signed or unsigned by default.  The user can
17683      always override this default with the options `-fsigned-char' and
17684      `-funsigned-char'.
17685
17686  -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
17687      This target hook should return true if the compiler should give an
17688      `enum' type only as many bytes as it takes to represent the range
17689      of possible values of that type.  It should return false if all
17690      `enum' types should be allocated like `int'.
17691
17692      The default is to return false.
17693
17694  -- Macro: SIZE_TYPE
17695      A C expression for a string describing the name of the data type
17696      to use for size values.  The typedef name `size_t' is defined
17697      using the contents of the string.
17698
17699      The string can contain more than one keyword.  If so, separate
17700      them with spaces, and write first any length keyword, then
17701      `unsigned' if appropriate, and finally `int'.  The string must
17702      exactly match one of the data type names defined in the function
17703      `init_decl_processing' in the file `c-decl.c'.  You may not omit
17704      `int' or change the order--that would cause the compiler to crash
17705      on startup.
17706
17707      If you don't define this macro, the default is `"long unsigned
17708      int"'.
17709
17710  -- Macro: PTRDIFF_TYPE
17711      A C expression for a string describing the name of the data type
17712      to use for the result of subtracting two pointers.  The typedef
17713      name `ptrdiff_t' is defined using the contents of the string.  See
17714      `SIZE_TYPE' above for more information.
17715
17716      If you don't define this macro, the default is `"long int"'.
17717
17718  -- Macro: WCHAR_TYPE
17719      A C expression for a string describing the name of the data type
17720      to use for wide characters.  The typedef name `wchar_t' is defined
17721      using the contents of the string.  See `SIZE_TYPE' above for more
17722      information.
17723
17724      If you don't define this macro, the default is `"int"'.
17725
17726  -- Macro: WCHAR_TYPE_SIZE
17727      A C expression for the size in bits of the data type for wide
17728      characters.  This is used in `cpp', which cannot make use of
17729      `WCHAR_TYPE'.
17730
17731  -- Macro: WINT_TYPE
17732      A C expression for a string describing the name of the data type to
17733      use for wide characters passed to `printf' and returned from
17734      `getwc'.  The typedef name `wint_t' is defined using the contents
17735      of the string.  See `SIZE_TYPE' above for more information.
17736
17737      If you don't define this macro, the default is `"unsigned int"'.
17738
17739  -- Macro: INTMAX_TYPE
17740      A C expression for a string describing the name of the data type
17741      that can represent any value of any standard or extended signed
17742      integer type.  The typedef name `intmax_t' is defined using the
17743      contents of the string.  See `SIZE_TYPE' above for more
17744      information.
17745
17746      If you don't define this macro, the default is the first of
17747      `"int"', `"long int"', or `"long long int"' that has as much
17748      precision as `long long int'.
17749
17750  -- Macro: UINTMAX_TYPE
17751      A C expression for a string describing the name of the data type
17752      that can represent any value of any standard or extended unsigned
17753      integer type.  The typedef name `uintmax_t' is defined using the
17754      contents of the string.  See `SIZE_TYPE' above for more
17755      information.
17756
17757      If you don't define this macro, the default is the first of
17758      `"unsigned int"', `"long unsigned int"', or `"long long unsigned
17759      int"' that has as much precision as `long long unsigned int'.
17760
17761  -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
17762      The C++ compiler represents a pointer-to-member-function with a
17763      struct that looks like:
17764
17765             struct {
17766               union {
17767                 void (*fn)();
17768                 ptrdiff_t vtable_index;
17769               };
17770               ptrdiff_t delta;
17771             };
17772
17773      The C++ compiler must use one bit to indicate whether the function
17774      that will be called through a pointer-to-member-function is
17775      virtual.  Normally, we assume that the low-order bit of a function
17776      pointer must always be zero.  Then, by ensuring that the
17777      vtable_index is odd, we can distinguish which variant of the union
17778      is in use.  But, on some platforms function pointers can be odd,
17779      and so this doesn't work.  In that case, we use the low-order bit
17780      of the `delta' field, and shift the remainder of the `delta' field
17781      to the left.
17782
17783      GCC will automatically make the right selection about where to
17784      store this bit using the `FUNCTION_BOUNDARY' setting for your
17785      platform.  However, some platforms such as ARM/Thumb have
17786      `FUNCTION_BOUNDARY' set such that functions always start at even
17787      addresses, but the lowest bit of pointers to functions indicate
17788      whether the function at that address is in ARM or Thumb mode.  If
17789      this is the case of your architecture, you should define this
17790      macro to `ptrmemfunc_vbit_in_delta'.
17791
17792      In general, you should not have to define this macro.  On
17793      architectures in which function addresses are always even,
17794      according to `FUNCTION_BOUNDARY', GCC will automatically define
17795      this macro to `ptrmemfunc_vbit_in_pfn'.
17796
17797  -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
17798      Normally, the C++ compiler uses function pointers in vtables.  This
17799      macro allows the target to change to use "function descriptors"
17800      instead.  Function descriptors are found on targets for whom a
17801      function pointer is actually a small data structure.  Normally the
17802      data structure consists of the actual code address plus a data
17803      pointer to which the function's data is relative.
17804
17805      If vtables are used, the value of this macro should be the number
17806      of words that the function descriptor occupies.
17807
17808  -- Macro: TARGET_VTABLE_ENTRY_ALIGN
17809      By default, the vtable entries are void pointers, the so the
17810      alignment is the same as pointer alignment.  The value of this
17811      macro specifies the alignment of the vtable entry in bits.  It
17812      should be defined only when special alignment is necessary. */
17813
17814  -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
17815      There are a few non-descriptor entries in the vtable at offsets
17816      below zero.  If these entries must be padded (say, to preserve the
17817      alignment specified by `TARGET_VTABLE_ENTRY_ALIGN'), set this to
17818      the number of words in each data entry.
17819
17820 \1f
17821 File: gccint.info,  Node: Registers,  Next: Register Classes,  Prev: Type Layout,  Up: Target Macros
17822
17823 13.7 Register Usage
17824 ===================
17825
17826 This section explains how to describe what registers the target machine
17827 has, and how (in general) they can be used.
17828
17829  The description of which registers a specific instruction can use is
17830 done with register classes; see *Note Register Classes::.  For
17831 information on using registers to access a stack frame, see *Note Frame
17832 Registers::.  For passing values in registers, see *Note Register
17833 Arguments::.  For returning values in registers, see *Note Scalar
17834 Return::.
17835
17836 * Menu:
17837
17838 * Register Basics::             Number and kinds of registers.
17839 * Allocation Order::            Order in which registers are allocated.
17840 * Values in Registers::         What kinds of values each reg can hold.
17841 * Leaf Functions::              Renumbering registers for leaf functions.
17842 * Stack Registers::             Handling a register stack such as 80387.
17843
17844 \1f
17845 File: gccint.info,  Node: Register Basics,  Next: Allocation Order,  Up: Registers
17846
17847 13.7.1 Basic Characteristics of Registers
17848 -----------------------------------------
17849
17850 Registers have various characteristics.
17851
17852  -- Macro: FIRST_PSEUDO_REGISTER
17853      Number of hardware registers known to the compiler.  They receive
17854      numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first
17855      pseudo register's number really is assigned the number
17856      `FIRST_PSEUDO_REGISTER'.
17857
17858  -- Macro: FIXED_REGISTERS
17859      An initializer that says which registers are used for fixed
17860      purposes all throughout the compiled code and are therefore not
17861      available for general allocation.  These would include the stack
17862      pointer, the frame pointer (except on machines where that can be
17863      used as a general register when no frame pointer is needed), the
17864      program counter on machines where that is considered one of the
17865      addressable registers, and any other numbered register with a
17866      standard use.
17867
17868      This information is expressed as a sequence of numbers, separated
17869      by commas and surrounded by braces.  The Nth number is 1 if
17870      register N is fixed, 0 otherwise.
17871
17872      The table initialized from this macro, and the table initialized by
17873      the following one, may be overridden at run time either
17874      automatically, by the actions of the macro
17875      `CONDITIONAL_REGISTER_USAGE', or by the user with the command
17876      options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'.
17877
17878  -- Macro: CALL_USED_REGISTERS
17879      Like `FIXED_REGISTERS' but has 1 for each register that is
17880      clobbered (in general) by function calls as well as for fixed
17881      registers.  This macro therefore identifies the registers that are
17882      not available for general allocation of values that must live
17883      across function calls.
17884
17885      If a register has 0 in `CALL_USED_REGISTERS', the compiler
17886      automatically saves it on function entry and restores it on
17887      function exit, if the register is used within the function.
17888
17889  -- Macro: CALL_REALLY_USED_REGISTERS
17890      Like `CALL_USED_REGISTERS' except this macro doesn't require that
17891      the entire set of `FIXED_REGISTERS' be included.
17892      (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS').
17893      This macro is optional.  If not specified, it defaults to the value
17894      of `CALL_USED_REGISTERS'.
17895
17896  -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE)
17897      A C expression that is nonzero if it is not permissible to store a
17898      value of mode MODE in hard register number REGNO across a call
17899      without some part of it being clobbered.  For most machines this
17900      macro need not be defined.  It is only required for machines that
17901      do not preserve the entire contents of a register across a call.
17902
17903  -- Macro: CONDITIONAL_REGISTER_USAGE
17904      Zero or more C statements that may conditionally modify five
17905      variables `fixed_regs', `call_used_regs', `global_regs',
17906      `reg_names', and `reg_class_contents', to take into account any
17907      dependence of these register sets on target flags.  The first three
17908      of these are of type `char []' (interpreted as Boolean vectors).
17909      `global_regs' is a `const char *[]', and `reg_class_contents' is a
17910      `HARD_REG_SET'.  Before the macro is called, `fixed_regs',
17911      `call_used_regs', `reg_class_contents', and `reg_names' have been
17912      initialized from `FIXED_REGISTERS', `CALL_USED_REGISTERS',
17913      `REG_CLASS_CONTENTS', and `REGISTER_NAMES', respectively.
17914      `global_regs' has been cleared, and any `-ffixed-REG',
17915      `-fcall-used-REG' and `-fcall-saved-REG' command options have been
17916      applied.
17917
17918      You need not define this macro if it has no work to do.
17919
17920      If the usage of an entire class of registers depends on the target
17921      flags, you may indicate this to GCC by using this macro to modify
17922      `fixed_regs' and `call_used_regs' to 1 for each of the registers
17923      in the classes which should not be used by GCC.  Also define the
17924      macro `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' to
17925      return `NO_REGS' if it is called with a letter for a class that
17926      shouldn't be used.
17927
17928      (However, if this class is not included in `GENERAL_REGS' and all
17929      of the insn patterns whose constraints permit this class are
17930      controlled by target switches, then GCC will automatically avoid
17931      using these registers when the target switches are opposed to
17932      them.)
17933
17934  -- Macro: INCOMING_REGNO (OUT)
17935      Define this macro if the target machine has register windows.
17936      This C expression returns the register number as seen by the
17937      called function corresponding to the register number OUT as seen
17938      by the calling function.  Return OUT if register number OUT is not
17939      an outbound register.
17940
17941  -- Macro: OUTGOING_REGNO (IN)
17942      Define this macro if the target machine has register windows.
17943      This C expression returns the register number as seen by the
17944      calling function corresponding to the register number IN as seen
17945      by the called function.  Return IN if register number IN is not an
17946      inbound register.
17947
17948  -- Macro: LOCAL_REGNO (REGNO)
17949      Define this macro if the target machine has register windows.
17950      This C expression returns true if the register is call-saved but
17951      is in the register window.  Unlike most call-saved registers, such
17952      registers need not be explicitly restored on function exit or
17953      during non-local gotos.
17954
17955  -- Macro: PC_REGNUM
17956      If the program counter has a register number, define this as that
17957      register number.  Otherwise, do not define it.
17958
17959 \1f
17960 File: gccint.info,  Node: Allocation Order,  Next: Values in Registers,  Prev: Register Basics,  Up: Registers
17961
17962 13.7.2 Order of Allocation of Registers
17963 ---------------------------------------
17964
17965 Registers are allocated in order.
17966
17967  -- Macro: REG_ALLOC_ORDER
17968      If defined, an initializer for a vector of integers, containing the
17969      numbers of hard registers in the order in which GCC should prefer
17970      to use them (from most preferred to least).
17971
17972      If this macro is not defined, registers are used lowest numbered
17973      first (all else being equal).
17974
17975      One use of this macro is on machines where the highest numbered
17976      registers must always be saved and the save-multiple-registers
17977      instruction supports only sequences of consecutive registers.  On
17978      such machines, define `REG_ALLOC_ORDER' to be an initializer that
17979      lists the highest numbered allocable register first.
17980
17981  -- Macro: ORDER_REGS_FOR_LOCAL_ALLOC
17982      A C statement (sans semicolon) to choose the order in which to
17983      allocate hard registers for pseudo-registers local to a basic
17984      block.
17985
17986      Store the desired register order in the array `reg_alloc_order'.
17987      Element 0 should be the register to allocate first; element 1, the
17988      next register; and so on.
17989
17990      The macro body should not assume anything about the contents of
17991      `reg_alloc_order' before execution of the macro.
17992
17993      On most machines, it is not necessary to define this macro.
17994
17995 \1f
17996 File: gccint.info,  Node: Values in Registers,  Next: Leaf Functions,  Prev: Allocation Order,  Up: Registers
17997
17998 13.7.3 How Values Fit in Registers
17999 ----------------------------------
18000
18001 This section discusses the macros that describe which kinds of values
18002 (specifically, which machine modes) each register can hold, and how many
18003 consecutive registers are needed for a given mode.
18004
18005  -- Macro: HARD_REGNO_NREGS (REGNO, MODE)
18006      A C expression for the number of consecutive hard registers,
18007      starting at register number REGNO, required to hold a value of mode
18008      MODE.
18009
18010      On a machine where all registers are exactly one word, a suitable
18011      definition of this macro is
18012
18013           #define HARD_REGNO_NREGS(REGNO, MODE)            \
18014              ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
18015               / UNITS_PER_WORD)
18016
18017  -- Macro: REGMODE_NATURAL_SIZE (MODE)
18018      Define this macro if the natural size of registers that hold values
18019      of mode MODE is not the word size.  It is a C expression that
18020      should give the natural size in bytes for the specified mode.  It
18021      is used by the register allocator to try to optimize its results.
18022      This happens for example on SPARC 64-bit where the natural size of
18023      floating-point registers is still 32-bit.
18024
18025  -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE)
18026      A C expression that is nonzero if it is permissible to store a
18027      value of mode MODE in hard register number REGNO (or in several
18028      registers starting with that one).  For a machine where all
18029      registers are equivalent, a suitable definition is
18030
18031           #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
18032
18033      You need not include code to check for the numbers of fixed
18034      registers, because the allocation mechanism considers them to be
18035      always occupied.
18036
18037      On some machines, double-precision values must be kept in even/odd
18038      register pairs.  You can implement that by defining this macro to
18039      reject odd register numbers for such modes.
18040
18041      The minimum requirement for a mode to be OK in a register is that
18042      the `movMODE' instruction pattern support moves between the
18043      register and other hard register in the same class and that moving
18044      a value into the register and back out not alter it.
18045
18046      Since the same instruction used to move `word_mode' will work for
18047      all narrower integer modes, it is not necessary on any machine for
18048      `HARD_REGNO_MODE_OK' to distinguish between these modes, provided
18049      you define patterns `movhi', etc., to take advantage of this.  This
18050      is useful because of the interaction between `HARD_REGNO_MODE_OK'
18051      and `MODES_TIEABLE_P'; it is very desirable for all integer modes
18052      to be tieable.
18053
18054      Many machines have special registers for floating point arithmetic.
18055      Often people assume that floating point machine modes are allowed
18056      only in floating point registers.  This is not true.  Any
18057      registers that can hold integers can safely _hold_ a floating
18058      point machine mode, whether or not floating arithmetic can be done
18059      on it in those registers.  Integer move instructions can be used
18060      to move the values.
18061
18062      On some machines, though, the converse is true: fixed-point machine
18063      modes may not go in floating registers.  This is true if the
18064      floating registers normalize any value stored in them, because
18065      storing a non-floating value there would garble it.  In this case,
18066      `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in
18067      floating registers.  But if the floating registers do not
18068      automatically normalize, if you can store any bit pattern in one
18069      and retrieve it unchanged without a trap, then any machine mode
18070      may go in a floating register, so you can define this macro to say
18071      so.
18072
18073      The primary significance of special floating registers is rather
18074      that they are the registers acceptable in floating point arithmetic
18075      instructions.  However, this is of no concern to
18076      `HARD_REGNO_MODE_OK'.  You handle it by writing the proper
18077      constraints for those instructions.
18078
18079      On some machines, the floating registers are especially slow to
18080      access, so that it is better to store a value in a stack frame
18081      than in such a register if floating point arithmetic is not being
18082      done.  As long as the floating registers are not in class
18083      `GENERAL_REGS', they will not be used unless some pattern's
18084      constraint asks for one.
18085
18086  -- Macro: HARD_REGNO_RENAME_OK (FROM, TO)
18087      A C expression that is nonzero if it is OK to rename a hard
18088      register FROM to another hard register TO.
18089
18090      One common use of this macro is to prevent renaming of a register
18091      to another register that is not saved by a prologue in an interrupt
18092      handler.
18093
18094      The default is always nonzero.
18095
18096  -- Macro: MODES_TIEABLE_P (MODE1, MODE2)
18097      A C expression that is nonzero if a value of mode MODE1 is
18098      accessible in mode MODE2 without copying.
18099
18100      If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
18101      MODE2)' are always the same for any R, then `MODES_TIEABLE_P
18102      (MODE1, MODE2)' should be nonzero.  If they differ for any R, you
18103      should define this macro to return zero unless some other
18104      mechanism ensures the accessibility of the value in a narrower
18105      mode.
18106
18107      You should define this macro to return nonzero in as many cases as
18108      possible since doing so will allow GCC to perform better register
18109      allocation.
18110
18111  -- Macro: AVOID_CCMODE_COPIES
18112      Define this macro if the compiler should avoid copies to/from
18113      `CCmode' registers.  You should only define this macro if support
18114      for copying to/from `CCmode' is incomplete.
18115
18116 \1f
18117 File: gccint.info,  Node: Leaf Functions,  Next: Stack Registers,  Prev: Values in Registers,  Up: Registers
18118
18119 13.7.4 Handling Leaf Functions
18120 ------------------------------
18121
18122 On some machines, a leaf function (i.e., one which makes no calls) can
18123 run more efficiently if it does not make its own register window.
18124 Often this means it is required to receive its arguments in the
18125 registers where they are passed by the caller, instead of the registers
18126 where they would normally arrive.
18127
18128  The special treatment for leaf functions generally applies only when
18129 other conditions are met; for example, often they may use only those
18130 registers for its own variables and temporaries.  We use the term "leaf
18131 function" to mean a function that is suitable for this special
18132 handling, so that functions with no calls are not necessarily "leaf
18133 functions".
18134
18135  GCC assigns register numbers before it knows whether the function is
18136 suitable for leaf function treatment.  So it needs to renumber the
18137 registers in order to output a leaf function.  The following macros
18138 accomplish this.
18139
18140  -- Macro: LEAF_REGISTERS
18141      Name of a char vector, indexed by hard register number, which
18142      contains 1 for a register that is allowable in a candidate for leaf
18143      function treatment.
18144
18145      If leaf function treatment involves renumbering the registers,
18146      then the registers marked here should be the ones before
18147      renumbering--those that GCC would ordinarily allocate.  The
18148      registers which will actually be used in the assembler code, after
18149      renumbering, should not be marked with 1 in this vector.
18150
18151      Define this macro only if the target machine offers a way to
18152      optimize the treatment of leaf functions.
18153
18154  -- Macro: LEAF_REG_REMAP (REGNO)
18155      A C expression whose value is the register number to which REGNO
18156      should be renumbered, when a function is treated as a leaf
18157      function.
18158
18159      If REGNO is a register number which should not appear in a leaf
18160      function before renumbering, then the expression should yield -1,
18161      which will cause the compiler to abort.
18162
18163      Define this macro only if the target machine offers a way to
18164      optimize the treatment of leaf functions, and registers need to be
18165      renumbered to do this.
18166
18167  `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' must
18168 usually treat leaf functions specially.  They can test the C variable
18169 `current_function_is_leaf' which is nonzero for leaf functions.
18170 `current_function_is_leaf' is set prior to local register allocation
18171 and is valid for the remaining compiler passes.  They can also test the
18172 C variable `current_function_uses_only_leaf_regs' which is nonzero for
18173 leaf functions which only use leaf registers.
18174 `current_function_uses_only_leaf_regs' is valid after all passes that
18175 modify the instructions have been run and is only useful if
18176 `LEAF_REGISTERS' is defined.
18177
18178 \1f
18179 File: gccint.info,  Node: Stack Registers,  Prev: Leaf Functions,  Up: Registers
18180
18181 13.7.5 Registers That Form a Stack
18182 ----------------------------------
18183
18184 There are special features to handle computers where some of the
18185 "registers" form a stack.  Stack registers are normally written by
18186 pushing onto the stack, and are numbered relative to the top of the
18187 stack.
18188
18189  Currently, GCC can only handle one group of stack-like registers, and
18190 they must be consecutively numbered.  Furthermore, the existing support
18191 for stack-like registers is specific to the 80387 floating point
18192 coprocessor.  If you have a new architecture that uses stack-like
18193 registers, you will need to do substantial work on `reg-stack.c' and
18194 write your machine description to cooperate with it, as well as
18195 defining these macros.
18196
18197  -- Macro: STACK_REGS
18198      Define this if the machine has any stack-like registers.
18199
18200  -- Macro: FIRST_STACK_REG
18201      The number of the first stack-like register.  This one is the top
18202      of the stack.
18203
18204  -- Macro: LAST_STACK_REG
18205      The number of the last stack-like register.  This one is the
18206      bottom of the stack.
18207
18208 \1f
18209 File: gccint.info,  Node: Register Classes,  Next: Stack and Calling,  Prev: Registers,  Up: Target Macros
18210
18211 13.8 Register Classes
18212 =====================
18213
18214 On many machines, the numbered registers are not all equivalent.  For
18215 example, certain registers may not be allowed for indexed addressing;
18216 certain registers may not be allowed in some instructions.  These
18217 machine restrictions are described to the compiler using "register
18218 classes".
18219
18220  You define a number of register classes, giving each one a name and
18221 saying which of the registers belong to it.  Then you can specify
18222 register classes that are allowed as operands to particular instruction
18223 patterns.
18224
18225  In general, each register will belong to several classes.  In fact, one
18226 class must be named `ALL_REGS' and contain all the registers.  Another
18227 class must be named `NO_REGS' and contain no registers.  Often the
18228 union of two classes will be another class; however, this is not
18229 required.
18230
18231  One of the classes must be named `GENERAL_REGS'.  There is nothing
18232 terribly special about the name, but the operand constraint letters `r'
18233 and `g' specify this class.  If `GENERAL_REGS' is the same as
18234 `ALL_REGS', just define it as a macro which expands to `ALL_REGS'.
18235
18236  Order the classes so that if class X is contained in class Y then X
18237 has a lower class number than Y.
18238
18239  The way classes other than `GENERAL_REGS' are specified in operand
18240 constraints is through machine-dependent operand constraint letters.
18241 You can define such letters to correspond to various classes, then use
18242 them in operand constraints.
18243
18244  You should define a class for the union of two classes whenever some
18245 instruction allows both classes.  For example, if an instruction allows
18246 either a floating point (coprocessor) register or a general register
18247 for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS'
18248 which includes both of them.  Otherwise you will get suboptimal code.
18249
18250  You must also specify certain redundant information about the register
18251 classes: for each class, which classes contain it and which ones are
18252 contained in it; for each pair of classes, the largest class contained
18253 in their union.
18254
18255  When a value occupying several consecutive registers is expected in a
18256 certain class, all the registers used must belong to that class.
18257 Therefore, register classes cannot be used to enforce a requirement for
18258 a register pair to start with an even-numbered register.  The way to
18259 specify this requirement is with `HARD_REGNO_MODE_OK'.
18260
18261  Register classes used for input-operands of bitwise-and or shift
18262 instructions have a special requirement: each such class must have, for
18263 each fixed-point machine mode, a subclass whose registers can transfer
18264 that mode to or from memory.  For example, on some machines, the
18265 operations for single-byte values (`QImode') are limited to certain
18266 registers.  When this is so, each register class that is used in a
18267 bitwise-and or shift instruction must have a subclass consisting of
18268 registers from which single-byte values can be loaded or stored.  This
18269 is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to
18270 return.
18271
18272  -- Data type: enum reg_class
18273      An enumerated type that must be defined with all the register
18274      class names as enumerated values.  `NO_REGS' must be first.
18275      `ALL_REGS' must be the last register class, followed by one more
18276      enumerated value, `LIM_REG_CLASSES', which is not a register class
18277      but rather tells how many classes there are.
18278
18279      Each register class has a number, which is the value of casting
18280      the class name to type `int'.  The number serves as an index in
18281      many of the tables described below.
18282
18283  -- Macro: N_REG_CLASSES
18284      The number of distinct register classes, defined as follows:
18285
18286           #define N_REG_CLASSES (int) LIM_REG_CLASSES
18287
18288  -- Macro: REG_CLASS_NAMES
18289      An initializer containing the names of the register classes as C
18290      string constants.  These names are used in writing some of the
18291      debugging dumps.
18292
18293  -- Macro: REG_CLASS_CONTENTS
18294      An initializer containing the contents of the register classes, as
18295      integers which are bit masks.  The Nth integer specifies the
18296      contents of class N.  The way the integer MASK is interpreted is
18297      that register R is in the class if `MASK & (1 << R)' is 1.
18298
18299      When the machine has more than 32 registers, an integer does not
18300      suffice.  Then the integers are replaced by sub-initializers,
18301      braced groupings containing several integers.  Each
18302      sub-initializer must be suitable as an initializer for the type
18303      `HARD_REG_SET' which is defined in `hard-reg-set.h'.  In this
18304      situation, the first integer in each sub-initializer corresponds to
18305      registers 0 through 31, the second integer to registers 32 through
18306      63, and so on.
18307
18308  -- Macro: REGNO_REG_CLASS (REGNO)
18309      A C expression whose value is a register class containing hard
18310      register REGNO.  In general there is more than one such class;
18311      choose a class which is "minimal", meaning that no smaller class
18312      also contains the register.
18313
18314  -- Macro: BASE_REG_CLASS
18315      A macro whose definition is the name of the class to which a valid
18316      base register must belong.  A base register is one used in an
18317      address which is the register value plus a displacement.
18318
18319  -- Macro: MODE_BASE_REG_CLASS (MODE)
18320      This is a variation of the `BASE_REG_CLASS' macro which allows the
18321      selection of a base register in a mode dependent manner.  If MODE
18322      is VOIDmode then it should return the same value as
18323      `BASE_REG_CLASS'.
18324
18325  -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
18326      A C expression whose value is the register class to which a valid
18327      base register must belong in order to be used in a base plus index
18328      register address.  You should define this macro if base plus index
18329      addresses have different requirements than other base register
18330      uses.
18331
18332  -- Macro: INDEX_REG_CLASS
18333      A macro whose definition is the name of the class to which a valid
18334      index register must belong.  An index register is one used in an
18335      address where its value is either multiplied by a scale factor or
18336      added to another register (as well as added to a displacement).
18337
18338  -- Macro: CONSTRAINT_LEN (CHAR, STR)
18339      For the constraint at the start of STR, which starts with the
18340      letter C, return the length.  This allows you to have register
18341      class / constant / extra constraints that are longer than a single
18342      letter; you don't need to define this macro if you can do with
18343      single-letter constraints only.  The definition of this macro
18344      should use DEFAULT_CONSTRAINT_LEN for all the characters that you
18345      don't want to handle specially.  There are some sanity checks in
18346      genoutput.c that check the constraint lengths for the md file, so
18347      you can also use this macro to help you while you are
18348      transitioning from a byzantine single-letter-constraint scheme:
18349      when you return a negative length for a constraint you want to
18350      re-use, genoutput will complain about every instance where it is
18351      used in the md file.
18352
18353  -- Macro: REG_CLASS_FROM_LETTER (CHAR)
18354      A C expression which defines the machine-dependent operand
18355      constraint letters for register classes.  If CHAR is such a
18356      letter, the value should be the register class corresponding to
18357      it.  Otherwise, the value should be `NO_REGS'.  The register
18358      letter `r', corresponding to class `GENERAL_REGS', will not be
18359      passed to this macro; you do not need to handle it.
18360
18361  -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR)
18362      Like `REG_CLASS_FROM_LETTER', but you also get the constraint
18363      string passed in STR, so that you can use suffixes to distinguish
18364      between different variants.
18365
18366  -- Macro: REGNO_OK_FOR_BASE_P (NUM)
18367      A C expression which is nonzero if register number NUM is suitable
18368      for use as a base register in operand addresses.  It may be either
18369      a suitable hard register or a pseudo register that has been
18370      allocated such a hard register.
18371
18372  -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
18373      A C expression that is just like `REGNO_OK_FOR_BASE_P', except that
18374      that expression may examine the mode of the memory reference in
18375      MODE.  You should define this macro if the mode of the memory
18376      reference affects whether a register may be used as a base
18377      register.  If you define this macro, the compiler will use it
18378      instead of `REGNO_OK_FOR_BASE_P'.
18379
18380  -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
18381      A C expression which is nonzero if register number NUM is suitable
18382      for use as a base register in base plus index operand addresses,
18383      accessing memory in mode MODE.  It may be either a suitable hard
18384      register or a pseudo register that has been allocated such a hard
18385      register.  You should define this macro if base plus index
18386      addresses have different requirements than other base register
18387      uses.
18388
18389  -- Macro: REGNO_OK_FOR_INDEX_P (NUM)
18390      A C expression which is nonzero if register number NUM is suitable
18391      for use as an index register in operand addresses.  It may be
18392      either a suitable hard register or a pseudo register that has been
18393      allocated such a hard register.
18394
18395      The difference between an index register and a base register is
18396      that the index register may be scaled.  If an address involves the
18397      sum of two registers, neither one of them scaled, then either one
18398      may be labeled the "base" and the other the "index"; but whichever
18399      labeling is used must fit the machine's constraints of which
18400      registers may serve in each capacity.  The compiler will try both
18401      labelings, looking for one that is valid, and will reload one or
18402      both registers only if neither labeling works.
18403
18404  -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS)
18405      A C expression that places additional restrictions on the register
18406      class to use when it is necessary to copy value X into a register
18407      in class CLASS.  The value is a register class; perhaps CLASS, or
18408      perhaps another, smaller class.  On many machines, the following
18409      definition is safe:
18410
18411           #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
18412
18413      Sometimes returning a more restrictive class makes better code.
18414      For example, on the 68000, when X is an integer constant that is
18415      in range for a `moveq' instruction, the value of this macro is
18416      always `DATA_REGS' as long as CLASS includes the data registers.
18417      Requiring a data register guarantees that a `moveq' will be used.
18418
18419      One case where `PREFERRED_RELOAD_CLASS' must not return CLASS is
18420      if X is a legitimate constant which cannot be loaded into some
18421      register class.  By returning `NO_REGS' you can force X into a
18422      memory location.  For example, rs6000 can load immediate values
18423      into general-purpose registers, but does not have an instruction
18424      for loading an immediate value into a floating-point register, so
18425      `PREFERRED_RELOAD_CLASS' returns `NO_REGS' when X is a
18426      floating-point constant.  If the constant can't be loaded into any
18427      kind of register, code generation will be better if
18428      `LEGITIMATE_CONSTANT_P' makes the constant illegitimate instead of
18429      using `PREFERRED_RELOAD_CLASS'.
18430
18431  -- Macro: PREFERRED_OUTPUT_RELOAD_CLASS (X, CLASS)
18432      Like `PREFERRED_RELOAD_CLASS', but for output reloads instead of
18433      input reloads.  If you don't define this macro, the default is to
18434      use CLASS, unchanged.
18435
18436  -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
18437      A C expression that places additional restrictions on the register
18438      class to use when it is necessary to be able to hold a value of
18439      mode MODE in a reload register for which class CLASS would
18440      ordinarily be used.
18441
18442      Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when
18443      there are certain modes that simply can't go in certain reload
18444      classes.
18445
18446      The value is a register class; perhaps CLASS, or perhaps another,
18447      smaller class.
18448
18449      Don't define this macro unless the target machine has limitations
18450      which require the macro to do something nontrivial.
18451
18452  -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
18453  -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
18454  -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
18455      Many machines have some registers that cannot be copied directly
18456      to or from memory or even from other types of registers.  An
18457      example is the `MQ' register, which on most machines, can only be
18458      copied to or from general registers, but not memory.  Some
18459      machines allow copying all registers to and from memory, but
18460      require a scratch register for stores to some memory locations
18461      (e.g., those with symbolic address on the RT, and those with
18462      certain symbolic address on the SPARC when compiling PIC).  In
18463      some cases, both an intermediate and a scratch register are
18464      required.
18465
18466      You should define these macros to indicate to the reload phase
18467      that it may need to allocate at least one register for a reload in
18468      addition to the register to contain the data.  Specifically, if
18469      copying X to a register CLASS in MODE requires an intermediate
18470      register, you should define `SECONDARY_INPUT_RELOAD_CLASS' to
18471      return the largest register class all of whose registers can be
18472      used as intermediate registers or scratch registers.
18473
18474      If copying a register CLASS in MODE to X requires an intermediate
18475      or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' should be
18476      defined to return the largest register class required.  If the
18477      requirements for input and output reloads are the same, the macro
18478      `SECONDARY_RELOAD_CLASS' should be used instead of defining both
18479      macros identically.
18480
18481      The values returned by these macros are often `GENERAL_REGS'.
18482      Return `NO_REGS' if no spare register is needed; i.e., if X can be
18483      directly copied to or from a register of CLASS in MODE without
18484      requiring a scratch register.  Do not define this macro if it
18485      would always return `NO_REGS'.
18486
18487      If a scratch register is required (either with or without an
18488      intermediate register), you should define patterns for
18489      `reload_inM' or `reload_outM', as required (*note Standard
18490      Names::.  These patterns, which will normally be implemented with
18491      a `define_expand', should be similar to the `movM' patterns,
18492      except that operand 2 is the scratch register.
18493
18494      Define constraints for the reload register and scratch register
18495      that contain a single register class.  If the original reload
18496      register (whose class is CLASS) can meet the constraint given in
18497      the pattern, the value returned by these macros is used for the
18498      class of the scratch register.  Otherwise, two additional reload
18499      registers are required.  Their classes are obtained from the
18500      constraints in the insn pattern.
18501
18502      X might be a pseudo-register or a `subreg' of a pseudo-register,
18503      which could either be in a hard register or in memory.  Use
18504      `true_regnum' to find out; it will return -1 if the pseudo is in
18505      memory and the hard register number if it is in a register.
18506
18507      These macros should not be used in the case where a particular
18508      class of registers can only be copied to memory and not to another
18509      class of registers.  In that case, secondary reload registers are
18510      not needed and would not be helpful.  Instead, a stack location
18511      must be used to perform the copy and the `movM' pattern should use
18512      memory as an intermediate storage.  This case often occurs between
18513      floating-point and general registers.
18514
18515  -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)
18516      Certain machines have the property that some registers cannot be
18517      copied to some other registers without using memory.  Define this
18518      macro on those machines to be a C expression that is nonzero if
18519      objects of mode M in registers of CLASS1 can only be copied to
18520      registers of class CLASS2 by storing a register of CLASS1 into
18521      memory and loading that memory location into a register of CLASS2.
18522
18523      Do not define this macro if its value would always be zero.
18524
18525  -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
18526      Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler
18527      allocates a stack slot for a memory location needed for register
18528      copies.  If this macro is defined, the compiler instead uses the
18529      memory location defined by this macro.
18530
18531      Do not define this macro if you do not define
18532      `SECONDARY_MEMORY_NEEDED'.
18533
18534  -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE)
18535      When the compiler needs a secondary memory location to copy
18536      between two registers of mode MODE, it normally allocates
18537      sufficient memory to hold a quantity of `BITS_PER_WORD' bits and
18538      performs the store and load operations in a mode that many bits
18539      wide and whose class is the same as that of MODE.
18540
18541      This is right thing to do on most machines because it ensures that
18542      all bits of the register are copied and prevents accesses to the
18543      registers in a narrower mode, which some machines prohibit for
18544      floating-point registers.
18545
18546      However, this default behavior is not correct on some machines,
18547      such as the DEC Alpha, that store short integers in floating-point
18548      registers differently than in integer registers.  On those
18549      machines, the default widening will not work correctly and you
18550      must define this macro to suppress that widening in some cases.
18551      See the file `alpha.h' for details.
18552
18553      Do not define this macro if you do not define
18554      `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is
18555      `BITS_PER_WORD' bits wide is correct for your machine.
18556
18557  -- Macro: SMALL_REGISTER_CLASSES
18558      On some machines, it is risky to let hard registers live across
18559      arbitrary insns.  Typically, these machines have instructions that
18560      require values to be in specific registers (like an accumulator),
18561      and reload will fail if the required hard register is used for
18562      another purpose across such an insn.
18563
18564      Define `SMALL_REGISTER_CLASSES' to be an expression with a nonzero
18565      value on these machines.  When this macro has a nonzero value, the
18566      compiler will try to minimize the lifetime of hard registers.
18567
18568      It is always safe to define this macro with a nonzero value, but
18569      if you unnecessarily define it, you will reduce the amount of
18570      optimizations that can be performed in some cases.  If you do not
18571      define this macro with a nonzero value when it is required, the
18572      compiler will run out of spill registers and print a fatal error
18573      message.  For most machines, you should not define this macro at
18574      all.
18575
18576  -- Macro: CLASS_LIKELY_SPILLED_P (CLASS)
18577      A C expression whose value is nonzero if pseudos that have been
18578      assigned to registers of class CLASS would likely be spilled
18579      because registers of CLASS are needed for spill registers.
18580
18581      The default value of this macro returns 1 if CLASS has exactly one
18582      register and zero otherwise.  On most machines, this default
18583      should be used.  Only define this macro to some other expression
18584      if pseudos allocated by `local-alloc.c' end up in memory because
18585      their hard registers were needed for spill registers.  If this
18586      macro returns nonzero for those classes, those pseudos will only
18587      be allocated by `global.c', which knows how to reallocate the
18588      pseudo to another register.  If there would not be another
18589      register available for reallocation, you should not change the
18590      definition of this macro since the only effect of such a
18591      definition would be to slow down register allocation.
18592
18593  -- Macro: CLASS_MAX_NREGS (CLASS, MODE)
18594      A C expression for the maximum number of consecutive registers of
18595      class CLASS needed to hold a value of mode MODE.
18596
18597      This is closely related to the macro `HARD_REGNO_NREGS'.  In fact,
18598      the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be
18599      the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all
18600      REGNO values in the class CLASS.
18601
18602      This macro helps control the handling of multiple-word values in
18603      the reload pass.
18604
18605  -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS)
18606      If defined, a C expression that returns nonzero for a CLASS for
18607      which a change from mode FROM to mode TO is invalid.
18608
18609      For the example, loading 32-bit integer or floating-point objects
18610      into floating-point registers on the Alpha extends them to 64 bits.
18611      Therefore loading a 64-bit object and then storing it as a 32-bit
18612      object does not store the low-order 32 bits, as would be the case
18613      for a normal register.  Therefore, `alpha.h' defines
18614      `CANNOT_CHANGE_MODE_CLASS' as below:
18615
18616           #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
18617             (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
18618              ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0)
18619
18620  Three other special macros describe which operands fit which constraint
18621 letters.
18622
18623  -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C)
18624      A C expression that defines the machine-dependent operand
18625      constraint letters (`I', `J', `K', ... `P') that specify
18626      particular ranges of integer values.  If C is one of those
18627      letters, the expression should check that VALUE, an integer, is in
18628      the appropriate range and return 1 if so, 0 otherwise.  If C is
18629      not one of those letters, the value should be 0 regardless of
18630      VALUE.
18631
18632  -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
18633      Like `CONST_OK_FOR_LETTER_P', but you also get the constraint
18634      string passed in STR, so that you can use suffixes to distinguish
18635      between different variants.
18636
18637  -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)
18638      A C expression that defines the machine-dependent operand
18639      constraint letters that specify particular ranges of
18640      `const_double' values (`G' or `H').
18641
18642      If C is one of those letters, the expression should check that
18643      VALUE, an RTX of code `const_double', is in the appropriate range
18644      and return 1 if so, 0 otherwise.  If C is not one of those
18645      letters, the value should be 0 regardless of VALUE.
18646
18647      `const_double' is used for all floating-point constants and for
18648      `DImode' fixed-point constants.  A given letter can accept either
18649      or both kinds of values.  It can use `GET_MODE' to distinguish
18650      between these kinds.
18651
18652  -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
18653      Like `CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the
18654      constraint string passed in STR, so that you can use suffixes to
18655      distinguish between different variants.
18656
18657  -- Macro: EXTRA_CONSTRAINT (VALUE, C)
18658      A C expression that defines the optional machine-dependent
18659      constraint letters that can be used to segregate specific types of
18660      operands, usually memory references, for the target machine.  Any
18661      letter that is not elsewhere defined and not matched by
18662      `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' may be used.
18663      Normally this macro will not be defined.
18664
18665      If it is required for a particular target machine, it should
18666      return 1 if VALUE corresponds to the operand type represented by
18667      the constraint letter C.  If C is not defined as an extra
18668      constraint, the value returned should be 0 regardless of VALUE.
18669
18670      For example, on the ROMP, load instructions cannot have their
18671      output in r0 if the memory reference contains a symbolic address.
18672      Constraint letter `Q' is defined as representing a memory address
18673      that does _not_ contain a symbolic address.  An alternative is
18674      specified with a `Q' constraint on the input and `r' on the
18675      output.  The next alternative specifies `m' on the input and a
18676      register class that does not include r0 on the output.
18677
18678  -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR)
18679      Like `EXTRA_CONSTRAINT', but you also get the constraint string
18680      passed in STR, so that you can use suffixes to distinguish between
18681      different variants.
18682
18683  -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR)
18684      A C expression that defines the optional machine-dependent
18685      constraint letters, amongst those accepted by `EXTRA_CONSTRAINT',
18686      that should be treated like memory constraints by the reload pass.
18687
18688      It should return 1 if the operand type represented by the
18689      constraint at the start of STR, the first letter of which is the
18690      letter C,  comprises a subset of all memory references including
18691      all those whose address is simply a base register.  This allows
18692      the reload pass to reload an operand, if it does not directly
18693      correspond to the operand type of C, by copying its address into a
18694      base register.
18695
18696      For example, on the S/390, some instructions do not accept
18697      arbitrary memory references, but only those that do not make use
18698      of an index register.  The constraint letter `Q' is defined via
18699      `EXTRA_CONSTRAINT' as representing a memory address of this type.
18700      If the letter `Q' is marked as `EXTRA_MEMORY_CONSTRAINT', a `Q'
18701      constraint can handle any memory operand, because the reload pass
18702      knows it can be reloaded by copying the memory address into a base
18703      register if required.  This is analogous to the way a `o'
18704      constraint can handle any memory operand.
18705
18706  -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR)
18707      A C expression that defines the optional machine-dependent
18708      constraint letters, amongst those accepted by `EXTRA_CONSTRAINT' /
18709      `EXTRA_CONSTRAINT_STR', that should be treated like address
18710      constraints by the reload pass.
18711
18712      It should return 1 if the operand type represented by the
18713      constraint at the start of STR, which starts with the letter C,
18714      comprises a subset of all memory addresses including all those
18715      that consist of just a base register.  This allows the reload pass
18716      to reload an operand, if it does not directly correspond to the
18717      operand type of STR, by copying it into a base register.
18718
18719      Any constraint marked as `EXTRA_ADDRESS_CONSTRAINT' can only be
18720      used with the `address_operand' predicate.  It is treated
18721      analogously to the `p' constraint.
18722
18723 \1f
18724 File: gccint.info,  Node: Stack and Calling,  Next: Varargs,  Prev: Register Classes,  Up: Target Macros
18725
18726 13.9 Stack Layout and Calling Conventions
18727 =========================================
18728
18729 This describes the stack layout and calling conventions.
18730
18731 * Menu:
18732
18733 * Frame Layout::
18734 * Exception Handling::
18735 * Stack Checking::
18736 * Frame Registers::
18737 * Elimination::
18738 * Stack Arguments::
18739 * Register Arguments::
18740 * Scalar Return::
18741 * Aggregate Return::
18742 * Caller Saves::
18743 * Function Entry::
18744 * Profiling::
18745 * Tail Calls::
18746
18747 \1f
18748 File: gccint.info,  Node: Frame Layout,  Next: Exception Handling,  Up: Stack and Calling
18749
18750 13.9.1 Basic Stack Layout
18751 -------------------------
18752
18753 Here is the basic stack layout.
18754
18755  -- Macro: STACK_GROWS_DOWNWARD
18756      Define this macro if pushing a word onto the stack moves the stack
18757      pointer to a smaller address.
18758
18759      When we say, "define this macro if ...", it means that the
18760      compiler checks this macro only with `#ifdef' so the precise
18761      definition used does not matter.
18762
18763  -- Macro: STACK_PUSH_CODE
18764      This macro defines the operation used when something is pushed on
18765      the stack.  In RTL, a push operation will be `(set (mem
18766      (STACK_PUSH_CODE (reg sp))) ...)'
18767
18768      The choices are `PRE_DEC', `POST_DEC', `PRE_INC', and `POST_INC'.
18769      Which of these is correct depends on the stack direction and on
18770      whether the stack pointer points to the last item on the stack or
18771      whether it points to the space for the next item on the stack.
18772
18773      The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined,
18774      which is almost always right, and `PRE_INC' otherwise, which is
18775      often wrong.
18776
18777  -- Macro: FRAME_GROWS_DOWNWARD
18778      Define this macro if the addresses of local variable slots are at
18779      negative offsets from the frame pointer.
18780
18781  -- Macro: ARGS_GROW_DOWNWARD
18782      Define this macro if successive arguments to a function occupy
18783      decreasing addresses on the stack.
18784
18785  -- Macro: STARTING_FRAME_OFFSET
18786      Offset from the frame pointer to the first local variable slot to
18787      be allocated.
18788
18789      If `FRAME_GROWS_DOWNWARD', find the next slot's offset by
18790      subtracting the first slot's length from `STARTING_FRAME_OFFSET'.
18791      Otherwise, it is found by adding the length of the first slot to
18792      the value `STARTING_FRAME_OFFSET'.
18793
18794  -- Macro: STACK_ALIGNMENT_NEEDED
18795      Define to zero to disable final alignment of the stack during
18796      reload.  The nonzero default for this macro is suitable for most
18797      ports.
18798
18799      On ports where `STARTING_FRAME_OFFSET' is nonzero or where there
18800      is a register save block following the local block that doesn't
18801      require alignment to `STACK_BOUNDARY', it may be beneficial to
18802      disable stack alignment and do it in the backend.
18803
18804  -- Macro: STACK_POINTER_OFFSET
18805      Offset from the stack pointer register to the first location at
18806      which outgoing arguments are placed.  If not specified, the
18807      default value of zero is used.  This is the proper value for most
18808      machines.
18809
18810      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
18811      the first location at which outgoing arguments are placed.
18812
18813  -- Macro: FIRST_PARM_OFFSET (FUNDECL)
18814      Offset from the argument pointer register to the first argument's
18815      address.  On some machines it may depend on the data type of the
18816      function.
18817
18818      If `ARGS_GROW_DOWNWARD', this is the offset to the location above
18819      the first argument's address.
18820
18821  -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
18822      Offset from the stack pointer register to an item dynamically
18823      allocated on the stack, e.g., by `alloca'.
18824
18825      The default value for this macro is `STACK_POINTER_OFFSET' plus the
18826      length of the outgoing arguments.  The default is correct for most
18827      machines.  See `function.c' for details.
18828
18829  -- Macro: INITIAL_FRAME_ADDRESS_RTX
18830      A C expression whose value is RTL representing the address of the
18831      initial  stack frame. This address is passed to `RETURN_ADDR_RTX'
18832      and `DYNAMIC_CHAIN_ADDRESS'.  If you don't define this macro, the
18833      default is to return `hard_frame_pointer_rtx'.  This default is
18834      usually correct unless `-fomit-frame-pointer' is in effect.
18835      Define this macro in order to make `__builtin_frame_address (0)'
18836      and `__builtin_return_address (0)' work even in absence of a hard
18837      frame pointer.
18838
18839  -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
18840      A C expression whose value is RTL representing the address in a
18841      stack frame where the pointer to the caller's frame is stored.
18842      Assume that FRAMEADDR is an RTL expression for the address of the
18843      stack frame itself.
18844
18845      If you don't define this macro, the default is to return the value
18846      of FRAMEADDR--that is, the stack frame address is also the address
18847      of the stack word that points to the previous frame.
18848
18849  -- Macro: SETUP_FRAME_ADDRESSES
18850      If defined, a C expression that produces the machine-specific code
18851      to setup the stack so that arbitrary frames can be accessed.  For
18852      example, on the SPARC, we must flush all of the register windows
18853      to the stack before we can access arbitrary stack frames.  You
18854      will seldom need to define this macro.
18855
18856  -- Target Hook: bool TARGET_BUILTIN_SETJMP_FRAME_VALUE ()
18857      This target hook should return an rtx that is used to store the
18858      address of the current frame into the built in `setjmp' buffer.
18859      The default value, `virtual_stack_vars_rtx', is correct for most
18860      machines.  One reason you may need to define this target hook is if
18861      `hard_frame_pointer_rtx' is the appropriate value on your machine.
18862
18863  -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR)
18864      A C expression whose value is RTL representing the value of the
18865      return address for the frame COUNT steps up from the current
18866      frame, after the prologue.  FRAMEADDR is the frame pointer of the
18867      COUNT frame, or the frame pointer of the COUNT - 1 frame if
18868      `RETURN_ADDR_IN_PREVIOUS_FRAME' is defined.
18869
18870      The value of the expression must always be the correct address when
18871      COUNT is zero, but may be `NULL_RTX' if there is not way to
18872      determine the return address of other frames.
18873
18874  -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
18875      Define this if the return address of a particular stack frame is
18876      accessed from the frame pointer of the previous stack frame.
18877
18878  -- Macro: INCOMING_RETURN_ADDR_RTX
18879      A C expression whose value is RTL representing the location of the
18880      incoming return address at the beginning of any function, before
18881      the prologue.  This RTL is either a `REG', indicating that the
18882      return value is saved in `REG', or a `MEM' representing a location
18883      in the stack.
18884
18885      You only need to define this macro if you want to support call
18886      frame debugging information like that provided by DWARF 2.
18887
18888      If this RTL is a `REG', you should also define
18889      `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'.
18890
18891  -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
18892      A C expression whose value is an integer giving a DWARF 2 column
18893      number that may be used as an alternate return column.  This should
18894      be defined only if `DWARF_FRAME_RETURN_COLUMN' is set to a general
18895      register, but an alternate column needs to be used for signal
18896      frames.
18897
18898  -- Macro: DWARF_ZERO_REG
18899      A C expression whose value is an integer giving a DWARF 2 register
18900      number that is considered to always have the value zero.  This
18901      should only be defined if the target has an architected zero
18902      register, and someone decided it was a good idea to use that
18903      register number to terminate the stack backtrace.  New ports
18904      should avoid this.
18905
18906  -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
18907           *LABEL, rtx PATTERN, int INDEX)
18908      This target hook allows the backend to emit frame-related insns
18909      that contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame
18910      debugging info engine will invoke it on insns of the form
18911           (set (reg) (unspec [...] UNSPEC_INDEX))
18912      and
18913           (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
18914      to let the backend emit the call frame instructions.  LABEL is the
18915      CFI label attached to the insn, PATTERN is the pattern of the insn
18916      and INDEX is `UNSPEC_INDEX' or `UNSPECV_INDEX'.
18917
18918  -- Macro: INCOMING_FRAME_SP_OFFSET
18919      A C expression whose value is an integer giving the offset, in
18920      bytes, from the value of the stack pointer register to the top of
18921      the stack frame at the beginning of any function, before the
18922      prologue.  The top of the frame is defined to be the value of the
18923      stack pointer in the previous frame, just before the call
18924      instruction.
18925
18926      You only need to define this macro if you want to support call
18927      frame debugging information like that provided by DWARF 2.
18928
18929  -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
18930      A C expression whose value is an integer giving the offset, in
18931      bytes, from the argument pointer to the canonical frame address
18932      (cfa).  The final value should coincide with that calculated by
18933      `INCOMING_FRAME_SP_OFFSET'.  Which is unfortunately not usable
18934      during virtual register instantiation.
18935
18936      The default value for this macro is `FIRST_PARM_OFFSET (fundecl)',
18937      which is correct for most machines; in general, the arguments are
18938      found immediately before the stack frame.  Note that this is not
18939      the case on some targets that save registers into the caller's
18940      frame, such as SPARC and rs6000, and so such targets need to
18941      define this macro.
18942
18943      You only need to define this macro if the default is incorrect,
18944      and you want to support call frame debugging information like that
18945      provided by DWARF 2.
18946
18947 \1f
18948 File: gccint.info,  Node: Exception Handling,  Next: Stack Checking,  Prev: Frame Layout,  Up: Stack and Calling
18949
18950 13.9.2 Exception Handling Support
18951 ---------------------------------
18952
18953  -- Macro: EH_RETURN_DATA_REGNO (N)
18954      A C expression whose value is the Nth register number used for
18955      data by exception handlers, or `INVALID_REGNUM' if fewer than N
18956      registers are usable.
18957
18958      The exception handling library routines communicate with the
18959      exception handlers via a set of agreed upon registers.  Ideally
18960      these registers should be call-clobbered; it is possible to use
18961      call-saved registers, but may negatively impact code size.  The
18962      target must support at least 2 data registers, but should define 4
18963      if there are enough free registers.
18964
18965      You must define this macro if you want to support call frame
18966      exception handling like that provided by DWARF 2.
18967
18968  -- Macro: EH_RETURN_STACKADJ_RTX
18969      A C expression whose value is RTL representing a location in which
18970      to store a stack adjustment to be applied before function return.
18971      This is used to unwind the stack to an exception handler's call
18972      frame.  It will be assigned zero on code paths that return
18973      normally.
18974
18975      Typically this is a call-clobbered hard register that is otherwise
18976      untouched by the epilogue, but could also be a stack slot.
18977
18978      Do not define this macro if the stack pointer is saved and restored
18979      by the regular prolog and epilog code in the call frame itself; in
18980      this case, the exception handling library routines will update the
18981      stack location to be restored in place.  Otherwise, you must define
18982      this macro if you want to support call frame exception handling
18983      like that provided by DWARF 2.
18984
18985  -- Macro: EH_RETURN_HANDLER_RTX
18986      A C expression whose value is RTL representing a location in which
18987      to store the address of an exception handler to which we should
18988      return.  It will not be assigned on code paths that return
18989      normally.
18990
18991      Typically this is the location in the call frame at which the
18992      normal return address is stored.  For targets that return by
18993      popping an address off the stack, this might be a memory address
18994      just below the _target_ call frame rather than inside the current
18995      call frame.  If defined, `EH_RETURN_STACKADJ_RTX' will have already
18996      been assigned, so it may be used to calculate the location of the
18997      target call frame.
18998
18999      Some targets have more complex requirements than storing to an
19000      address calculable during initial code generation.  In that case
19001      the `eh_return' instruction pattern should be used instead.
19002
19003      If you want to support call frame exception handling, you must
19004      define either this macro or the `eh_return' instruction pattern.
19005
19006  -- Macro: RETURN_ADDR_OFFSET
19007      If defined, an integer-valued C expression for which rtl will be
19008      generated to add it to the exception handler address before it is
19009      searched in the exception handling tables, and to subtract it
19010      again from the address before using it to return to the exception
19011      handler.
19012
19013  -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL)
19014      This macro chooses the encoding of pointers embedded in the
19015      exception handling sections.  If at all possible, this should be
19016      defined such that the exception handling section will not require
19017      dynamic relocations, and so may be read-only.
19018
19019      CODE is 0 for data, 1 for code labels, 2 for function pointers.
19020      GLOBAL is true if the symbol may be affected by dynamic
19021      relocations.  The macro should return a combination of the
19022      `DW_EH_PE_*' defines as found in `dwarf2.h'.
19023
19024      If this macro is not defined, pointers will not be encoded but
19025      represented directly.
19026
19027  -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
19028           ADDR, DONE)
19029      This macro allows the target to emit whatever special magic is
19030      required to represent the encoding chosen by
19031      `ASM_PREFERRED_EH_DATA_FORMAT'.  Generic code takes care of
19032      pc-relative and indirect encodings; this must be defined if the
19033      target uses text-relative or data-relative encodings.
19034
19035      This is a C statement that branches to DONE if the format was
19036      handled.  ENCODING is the format chosen, SIZE is the number of
19037      bytes that the format occupies, ADDR is the `SYMBOL_REF' to be
19038      emitted.
19039
19040  -- Macro: MD_UNWIND_SUPPORT
19041      A string specifying a file to be #include'd in unwind-dw2.c.  The
19042      file so included typically defines `MD_FALLBACK_FRAME_STATE_FOR'.
19043
19044  -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
19045      This macro allows the target to add cpu and operating system
19046      specific code to the call-frame unwinder for use when there is no
19047      unwind data available.  The most common reason to implement this
19048      macro is to unwind through signal frames.
19049
19050      This macro is called from `uw_frame_state_for' in `unwind-dw2.c'
19051      and `unwind-ia64.c'.  CONTEXT is an `_Unwind_Context'; FS is an
19052      `_Unwind_FrameState'.  Examine `context->ra' for the address of
19053      the code being executed and `context->cfa' for the stack pointer
19054      value.  If the frame can be decoded, the register save addresses
19055      should be updated in FS and the macro should evaluate to
19056      `_URC_NO_REASON'.  If the frame cannot be decoded, the macro should
19057      evaluate to `_URC_END_OF_STACK'.
19058
19059      For proper signal handling in Java this macro is accompanied by
19060      `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h'
19061      headers.
19062
19063  -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
19064      This macro allows the target to add operating system specific code
19065      to the call-frame unwinder to handle the IA-64 `.unwabi' unwinding
19066      directive, usually used for signal or interrupt frames.
19067
19068      This macro is called from `uw_update_context' in `unwind-ia64.c'.
19069      CONTEXT is an `_Unwind_Context'; FS is an `_Unwind_FrameState'.
19070      Examine `fs->unwabi' for the abi and context in the `.unwabi'
19071      directive.  If the `.unwabi' directive can be handled, the
19072      register save addresses should be updated in FS.
19073
19074  -- Macro: TARGET_USES_WEAK_UNWIND_INFO
19075      A C expression that evaluates to true if the target requires unwind
19076      info to be given comdat linkage.  Define it to be `1' if comdat
19077      linkage is necessary.  The default is `0'.
19078
19079 \1f
19080 File: gccint.info,  Node: Stack Checking,  Next: Frame Registers,  Prev: Exception Handling,  Up: Stack and Calling
19081
19082 13.9.3 Specifying How Stack Checking is Done
19083 --------------------------------------------
19084
19085 GCC will check that stack references are within the boundaries of the
19086 stack, if the `-fstack-check' is specified, in one of three ways:
19087
19088   1. If the value of the `STACK_CHECK_BUILTIN' macro is nonzero, GCC
19089      will assume that you have arranged for stack checking to be done at
19090      appropriate places in the configuration files, e.g., in
19091      `TARGET_ASM_FUNCTION_PROLOGUE'.  GCC will do not other special
19092      processing.
19093
19094   2. If `STACK_CHECK_BUILTIN' is zero and you defined a named pattern
19095      called `check_stack' in your `md' file, GCC will call that pattern
19096      with one argument which is the address to compare the stack value
19097      against.  You must arrange for this pattern to report an error if
19098      the stack pointer is out of range.
19099
19100   3. If neither of the above are true, GCC will generate code to
19101      periodically "probe" the stack pointer using the values of the
19102      macros defined below.
19103
19104  Normally, you will use the default values of these macros, so GCC will
19105 use the third approach.
19106
19107  -- Macro: STACK_CHECK_BUILTIN
19108      A nonzero value if stack checking is done by the configuration
19109      files in a machine-dependent manner.  You should define this macro
19110      if stack checking is require by the ABI of your machine or if you
19111      would like to have to stack checking in some more efficient way
19112      than GCC's portable approach.  The default value of this macro is
19113      zero.
19114
19115  -- Macro: STACK_CHECK_PROBE_INTERVAL
19116      An integer representing the interval at which GCC must generate
19117      stack probe instructions.  You will normally define this macro to
19118      be no larger than the size of the "guard pages" at the end of a
19119      stack area.  The default value of 4096 is suitable for most
19120      systems.
19121
19122  -- Macro: STACK_CHECK_PROBE_LOAD
19123      A integer which is nonzero if GCC should perform the stack probe
19124      as a load instruction and zero if GCC should use a store
19125      instruction.  The default is zero, which is the most efficient
19126      choice on most systems.
19127
19128  -- Macro: STACK_CHECK_PROTECT
19129      The number of bytes of stack needed to recover from a stack
19130      overflow, for languages where such a recovery is supported.  The
19131      default value of 75 words should be adequate for most machines.
19132
19133  -- Macro: STACK_CHECK_MAX_FRAME_SIZE
19134      The maximum size of a stack frame, in bytes.  GCC will generate
19135      probe instructions in non-leaf functions to ensure at least this
19136      many bytes of stack are available.  If a stack frame is larger
19137      than this size, stack checking will not be reliable and GCC will
19138      issue a warning.  The default is chosen so that GCC only generates
19139      one instruction on most systems.  You should normally not change
19140      the default value of this macro.
19141
19142  -- Macro: STACK_CHECK_FIXED_FRAME_SIZE
19143      GCC uses this value to generate the above warning message.  It
19144      represents the amount of fixed frame used by a function, not
19145      including space for any callee-saved registers, temporaries and
19146      user variables.  You need only specify an upper bound for this
19147      amount and will normally use the default of four words.
19148
19149  -- Macro: STACK_CHECK_MAX_VAR_SIZE
19150      The maximum size, in bytes, of an object that GCC will place in the
19151      fixed area of the stack frame when the user specifies
19152      `-fstack-check'.  GCC computed the default from the values of the
19153      above macros and you will normally not need to override that
19154      default.
19155
19156 \1f
19157 File: gccint.info,  Node: Frame Registers,  Next: Elimination,  Prev: Stack Checking,  Up: Stack and Calling
19158
19159 13.9.4 Registers That Address the Stack Frame
19160 ---------------------------------------------
19161
19162 This discusses registers that address the stack frame.
19163
19164  -- Macro: STACK_POINTER_REGNUM
19165      The register number of the stack pointer register, which must also
19166      be a fixed register according to `FIXED_REGISTERS'.  On most
19167      machines, the hardware determines which register this is.
19168
19169  -- Macro: FRAME_POINTER_REGNUM
19170      The register number of the frame pointer register, which is used to
19171      access automatic variables in the stack frame.  On some machines,
19172      the hardware determines which register this is.  On other
19173      machines, you can choose any register you wish for this purpose.
19174
19175  -- Macro: HARD_FRAME_POINTER_REGNUM
19176      On some machines the offset between the frame pointer and starting
19177      offset of the automatic variables is not known until after register
19178      allocation has been done (for example, because the saved registers
19179      are between these two locations).  On those machines, define
19180      `FRAME_POINTER_REGNUM' the number of a special, fixed register to
19181      be used internally until the offset is known, and define
19182      `HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
19183      used for the frame pointer.
19184
19185      You should define this macro only in the very rare circumstances
19186      when it is not possible to calculate the offset between the frame
19187      pointer and the automatic variables until after register
19188      allocation has been completed.  When this macro is defined, you
19189      must also indicate in your definition of `ELIMINABLE_REGS' how to
19190      eliminate `FRAME_POINTER_REGNUM' into either
19191      `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'.
19192
19193      Do not define this macro if it would be the same as
19194      `FRAME_POINTER_REGNUM'.
19195
19196  -- Macro: ARG_POINTER_REGNUM
19197      The register number of the arg pointer register, which is used to
19198      access the function's argument list.  On some machines, this is
19199      the same as the frame pointer register.  On some machines, the
19200      hardware determines which register this is.  On other machines,
19201      you can choose any register you wish for this purpose.  If this is
19202      not the same register as the frame pointer register, then you must
19203      mark it as a fixed register according to `FIXED_REGISTERS', or
19204      arrange to be able to eliminate it (*note Elimination::).
19205
19206  -- Macro: RETURN_ADDRESS_POINTER_REGNUM
19207      The register number of the return address pointer register, which
19208      is used to access the current function's return address from the
19209      stack.  On some machines, the return address is not at a fixed
19210      offset from the frame pointer or stack pointer or argument
19211      pointer.  This register can be defined to point to the return
19212      address on the stack, and then be converted by `ELIMINABLE_REGS'
19213      into either the frame pointer or stack pointer.
19214
19215      Do not define this macro unless there is no other way to get the
19216      return address from the stack.
19217
19218  -- Macro: STATIC_CHAIN_REGNUM
19219  -- Macro: STATIC_CHAIN_INCOMING_REGNUM
19220      Register numbers used for passing a function's static chain
19221      pointer.  If register windows are used, the register number as
19222      seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM',
19223      while the register number as seen by the calling function is
19224      `STATIC_CHAIN_REGNUM'.  If these registers are the same,
19225      `STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
19226
19227      The static chain register need not be a fixed register.
19228
19229      If the static chain is passed in memory, these macros should not be
19230      defined; instead, the next two macros should be defined.
19231
19232  -- Macro: STATIC_CHAIN
19233  -- Macro: STATIC_CHAIN_INCOMING
19234      If the static chain is passed in memory, these macros provide rtx
19235      giving `mem' expressions that denote where they are stored.
19236      `STATIC_CHAIN' and `STATIC_CHAIN_INCOMING' give the locations as
19237      seen by the calling and called functions, respectively.  Often the
19238      former will be at an offset from the stack pointer and the latter
19239      at an offset from the frame pointer.
19240
19241      The variables `stack_pointer_rtx', `frame_pointer_rtx', and
19242      `arg_pointer_rtx' will have been initialized prior to the use of
19243      these macros and should be used to refer to those items.
19244
19245      If the static chain is passed in a register, the two previous
19246      macros should be defined instead.
19247
19248  -- Macro: DWARF_FRAME_REGISTERS
19249      This macro specifies the maximum number of hard registers that can
19250      be saved in a call frame.  This is used to size data structures
19251      used in DWARF2 exception handling.
19252
19253      Prior to GCC 3.0, this macro was needed in order to establish a
19254      stable exception handling ABI in the face of adding new hard
19255      registers for ISA extensions.  In GCC 3.0 and later, the EH ABI is
19256      insulated from changes in the number of hard registers.
19257      Nevertheless, this macro can still be used to reduce the runtime
19258      memory requirements of the exception handling routines, which can
19259      be substantial if the ISA contains a lot of registers that are not
19260      call-saved.
19261
19262      If this macro is not defined, it defaults to
19263      `FIRST_PSEUDO_REGISTER'.
19264
19265  -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
19266      This macro is similar to `DWARF_FRAME_REGISTERS', but is provided
19267      for backward compatibility in pre GCC 3.0 compiled code.
19268
19269      If this macro is not defined, it defaults to
19270      `DWARF_FRAME_REGISTERS'.
19271
19272  -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
19273      Define this macro if the target's representation for dwarf
19274      registers is different than the internal representation for unwind
19275      column.  Given a dwarf register, this macro should return the
19276      internal unwind column number to use instead.
19277
19278      See the PowerPC's SPE target for an example.
19279
19280  -- Macro: DWARF_FRAME_REGNUM (REGNO)
19281      Define this macro if the target's representation for dwarf
19282      registers used in .eh_frame or .debug_frame is different from that
19283      used in other debug info sections.  Given a GCC hard register
19284      number, this macro should return the .eh_frame register number.
19285      The default is `DBX_REGISTER_NUMBER (REGNO)'.
19286
19287
19288  -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
19289      Define this macro to map register numbers held in the call frame
19290      info that GCC has collected using `DWARF_FRAME_REGNUM' to those
19291      that should be output in .debug_frame (`FOR_EH' is zero) and
19292      .eh_frame (`FOR_EH' is nonzero).  The default is to return `REGNO'.
19293
19294
19295 \1f
19296 File: gccint.info,  Node: Elimination,  Next: Stack Arguments,  Prev: Frame Registers,  Up: Stack and Calling
19297
19298 13.9.5 Eliminating Frame Pointer and Arg Pointer
19299 ------------------------------------------------
19300
19301 This is about eliminating the frame pointer and arg pointer.
19302
19303  -- Macro: FRAME_POINTER_REQUIRED
19304      A C expression which is nonzero if a function must have and use a
19305      frame pointer.  This expression is evaluated  in the reload pass.
19306      If its value is nonzero the function will have a frame pointer.
19307
19308      The expression can in principle examine the current function and
19309      decide according to the facts, but on most machines the constant 0
19310      or the constant 1 suffices.  Use 0 when the machine allows code to
19311      be generated with no frame pointer, and doing so saves some time
19312      or space.  Use 1 when there is no possible advantage to avoiding a
19313      frame pointer.
19314
19315      In certain cases, the compiler does not know how to produce valid
19316      code without a frame pointer.  The compiler recognizes those cases
19317      and automatically gives the function a frame pointer regardless of
19318      what `FRAME_POINTER_REQUIRED' says.  You don't need to worry about
19319      them.
19320
19321      In a function that does not require a frame pointer, the frame
19322      pointer register can be allocated for ordinary usage, unless you
19323      mark it as a fixed register.  See `FIXED_REGISTERS' for more
19324      information.
19325
19326  -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)
19327      A C statement to store in the variable DEPTH-VAR the difference
19328      between the frame pointer and the stack pointer values immediately
19329      after the function prologue.  The value would be computed from
19330      information such as the result of `get_frame_size ()' and the
19331      tables of registers `regs_ever_live' and `call_used_regs'.
19332
19333      If `ELIMINABLE_REGS' is defined, this macro will be not be used and
19334      need not be defined.  Otherwise, it must be defined even if
19335      `FRAME_POINTER_REQUIRED' is defined to always be true; in that
19336      case, you may set DEPTH-VAR to anything.
19337
19338  -- Macro: ELIMINABLE_REGS
19339      If defined, this macro specifies a table of register pairs used to
19340      eliminate unneeded registers that point into the stack frame.  If
19341      it is not defined, the only elimination attempted by the compiler
19342      is to replace references to the frame pointer with references to
19343      the stack pointer.
19344
19345      The definition of this macro is a list of structure
19346      initializations, each of which specifies an original and
19347      replacement register.
19348
19349      On some machines, the position of the argument pointer is not
19350      known until the compilation is completed.  In such a case, a
19351      separate hard register must be used for the argument pointer.
19352      This register can be eliminated by replacing it with either the
19353      frame pointer or the argument pointer, depending on whether or not
19354      the frame pointer has been eliminated.
19355
19356      In this case, you might specify:
19357           #define ELIMINABLE_REGS  \
19358           {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
19359            {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
19360            {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
19361
19362      Note that the elimination of the argument pointer with the stack
19363      pointer is specified first since that is the preferred elimination.
19364
19365  -- Macro: CAN_ELIMINATE (FROM-REG, TO-REG)
19366      A C expression that returns nonzero if the compiler is allowed to
19367      try to replace register number FROM-REG with register number
19368      TO-REG.  This macro need only be defined if `ELIMINABLE_REGS' is
19369      defined, and will usually be the constant 1, since most of the
19370      cases preventing register elimination are things that the compiler
19371      already knows about.
19372
19373  -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
19374      This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It
19375      specifies the initial difference between the specified pair of
19376      registers.  This macro must be defined if `ELIMINABLE_REGS' is
19377      defined.
19378
19379 \1f
19380 File: gccint.info,  Node: Stack Arguments,  Next: Register Arguments,  Prev: Elimination,  Up: Stack and Calling
19381
19382 13.9.6 Passing Function Arguments on the Stack
19383 ----------------------------------------------
19384
19385 The macros in this section control how arguments are passed on the
19386 stack.  See the following section for other macros that control passing
19387 certain arguments in registers.
19388
19389  -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (tree FNTYPE)
19390      This target hook returns `true' if an argument declared in a
19391      prototype as an integral type smaller than `int' should actually be
19392      passed as an `int'.  In addition to avoiding errors in certain
19393      cases of mismatch, it also makes for better code on certain
19394      machines.  The default is to not promote prototypes.
19395
19396  -- Macro: PUSH_ARGS
19397      A C expression.  If nonzero, push insns will be used to pass
19398      outgoing arguments.  If the target machine does not have a push
19399      instruction, set it to zero.  That directs GCC to use an alternate
19400      strategy: to allocate the entire argument block and then store the
19401      arguments into it.  When `PUSH_ARGS' is nonzero, `PUSH_ROUNDING'
19402      must be defined too.
19403
19404  -- Macro: PUSH_ARGS_REVERSED
19405      A C expression.  If nonzero, function arguments will be evaluated
19406      from last to first, rather than from first to last.  If this macro
19407      is not defined, it defaults to `PUSH_ARGS' on targets where the
19408      stack and args grow in opposite directions, and 0 otherwise.
19409
19410  -- Macro: PUSH_ROUNDING (NPUSHED)
19411      A C expression that is the number of bytes actually pushed onto the
19412      stack when an instruction attempts to push NPUSHED bytes.
19413
19414      On some machines, the definition
19415
19416           #define PUSH_ROUNDING(BYTES) (BYTES)
19417
19418      will suffice.  But on other machines, instructions that appear to
19419      push one byte actually push two bytes in an attempt to maintain
19420      alignment.  Then the definition should be
19421
19422           #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
19423
19424  -- Macro: ACCUMULATE_OUTGOING_ARGS
19425      A C expression.  If nonzero, the maximum amount of space required
19426      for outgoing arguments will be computed and placed into the
19427      variable `current_function_outgoing_args_size'.  No space will be
19428      pushed onto the stack for each call; instead, the function
19429      prologue should increase the stack frame size by this amount.
19430
19431      Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not
19432      proper.
19433
19434  -- Macro: REG_PARM_STACK_SPACE (FNDECL)
19435      Define this macro if functions should assume that stack space has
19436      been allocated for arguments even when their values are passed in
19437      registers.
19438
19439      The value of this macro is the size, in bytes, of the area
19440      reserved for arguments passed in registers for the function
19441      represented by FNDECL, which can be zero if GCC is calling a
19442      library function.
19443
19444      This space can be allocated by the caller, or be a part of the
19445      machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
19446      which.
19447
19448  -- Macro: OUTGOING_REG_PARM_STACK_SPACE
19449      Define this if it is the responsibility of the caller to allocate
19450      the area reserved for arguments passed in registers.
19451
19452      If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
19453      whether the space for these arguments counts in the value of
19454      `current_function_outgoing_args_size'.
19455
19456  -- Macro: STACK_PARMS_IN_REG_PARM_AREA
19457      Define this macro if `REG_PARM_STACK_SPACE' is defined, but the
19458      stack parameters don't skip the area specified by it.
19459
19460      Normally, when a parameter is not passed in registers, it is
19461      placed on the stack beyond the `REG_PARM_STACK_SPACE' area.
19462      Defining this macro suppresses this behavior and causes the
19463      parameter to be passed on the stack in its natural location.
19464
19465  -- Macro: RETURN_POPS_ARGS (FUNDECL, FUNTYPE, STACK-SIZE)
19466      A C expression that should indicate the number of bytes of its own
19467      arguments that a function pops on returning, or 0 if the function
19468      pops no arguments and the caller must therefore pop them all after
19469      the function returns.
19470
19471      FUNDECL is a C variable whose value is a tree node that describes
19472      the function in question.  Normally it is a node of type
19473      `FUNCTION_DECL' that describes the declaration of the function.
19474      From this you can obtain the `DECL_ATTRIBUTES' of the function.
19475
19476      FUNTYPE is a C variable whose value is a tree node that describes
19477      the function in question.  Normally it is a node of type
19478      `FUNCTION_TYPE' that describes the data type of the function.
19479      From this it is possible to obtain the data types of the value and
19480      arguments (if known).
19481
19482      When a call to a library function is being considered, FUNDECL
19483      will contain an identifier node for the library function.  Thus, if
19484      you need to distinguish among various library functions, you can
19485      do so by their names.  Note that "library function" in this
19486      context means a function used to perform arithmetic, whose name is
19487      known specially in the compiler and was not mentioned in the C
19488      code being compiled.
19489
19490      STACK-SIZE is the number of bytes of arguments passed on the
19491      stack.  If a variable number of bytes is passed, it is zero, and
19492      argument popping will always be the responsibility of the calling
19493      function.
19494
19495      On the VAX, all functions always pop their arguments, so the
19496      definition of this macro is STACK-SIZE.  On the 68000, using the
19497      standard calling convention, no functions pop their arguments, so
19498      the value of the macro is always 0 in this case.  But an
19499      alternative calling convention is available in which functions
19500      that take a fixed number of arguments pop them but other functions
19501      (such as `printf') pop nothing (the caller pops all).  When this
19502      convention is in use, FUNTYPE is examined to determine whether a
19503      function takes a fixed number of arguments.
19504
19505  -- Macro: CALL_POPS_ARGS (CUM)
19506      A C expression that should indicate the number of bytes a call
19507      sequence pops off the stack.  It is added to the value of
19508      `RETURN_POPS_ARGS' when compiling a function call.
19509
19510      CUM is the variable in which all arguments to the called function
19511      have been accumulated.
19512
19513      On certain architectures, such as the SH5, a call trampoline is
19514      used that pops certain registers off the stack, depending on the
19515      arguments that have been passed to the function.  Since this is a
19516      property of the call site, not of the called function,
19517      `RETURN_POPS_ARGS' is not appropriate.
19518
19519 \1f
19520 File: gccint.info,  Node: Register Arguments,  Next: Scalar Return,  Prev: Stack Arguments,  Up: Stack and Calling
19521
19522 13.9.7 Passing Arguments in Registers
19523 -------------------------------------
19524
19525 This section describes the macros which let you control how various
19526 types of arguments are passed in registers or how they are arranged in
19527 the stack.
19528
19529  -- Macro: FUNCTION_ARG (CUM, MODE, TYPE, NAMED)
19530      A C expression that controls whether a function argument is passed
19531      in a register, and which register.
19532
19533      The arguments are CUM, which summarizes all the previous
19534      arguments; MODE, the machine mode of the argument; TYPE, the data
19535      type of the argument as a tree node or 0 if that is not known
19536      (which happens for C support library functions); and NAMED, which
19537      is 1 for an ordinary argument and 0 for nameless arguments that
19538      correspond to `...' in the called function's prototype.  TYPE can
19539      be an incomplete type if a syntax error has previously occurred.
19540
19541      The value of the expression is usually either a `reg' RTX for the
19542      hard register in which to pass the argument, or zero to pass the
19543      argument on the stack.
19544
19545      For machines like the VAX and 68000, where normally all arguments
19546      are pushed, zero suffices as a definition.
19547
19548      The value of the expression can also be a `parallel' RTX.  This is
19549      used when an argument is passed in multiple locations.  The mode
19550      of the `parallel' should be the mode of the entire argument.  The
19551      `parallel' holds any number of `expr_list' pairs; each one
19552      describes where part of the argument is passed.  In each
19553      `expr_list' the first operand must be a `reg' RTX for the hard
19554      register in which to pass this part of the argument, and the mode
19555      of the register RTX indicates how large this part of the argument
19556      is.  The second operand of the `expr_list' is a `const_int' which
19557      gives the offset in bytes into the entire argument of where this
19558      part starts.  As a special exception the first `expr_list' in the
19559      `parallel' RTX may have a first operand of zero.  This indicates
19560      that the entire argument is also stored on the stack.
19561
19562      The last time this macro is called, it is called with `MODE ==
19563      VOIDmode', and its result is passed to the `call' or `call_value'
19564      pattern as operands 2 and 3 respectively.
19565
19566      The usual way to make the ISO library `stdarg.h' work on a machine
19567      where some arguments are usually passed in registers, is to cause
19568      nameless arguments to be passed on the stack instead.  This is done
19569      by making `FUNCTION_ARG' return 0 whenever NAMED is 0.
19570
19571      You may use the hook `targetm.calls.must_pass_in_stack' in the
19572      definition of this macro to determine if this argument is of a
19573      type that must be passed in the stack.  If `REG_PARM_STACK_SPACE'
19574      is not defined and `FUNCTION_ARG' returns nonzero for such an
19575      argument, the compiler will abort.  If `REG_PARM_STACK_SPACE' is
19576      defined, the argument will be computed in the stack and then
19577      loaded into a register.
19578
19579  -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode
19580           MODE, tree TYPE)
19581      This target hook should return `true' if we should not pass TYPE
19582      solely in registers.  The file `expr.h' defines a definition that
19583      is usually appropriate, refer to `expr.h' for additional
19584      documentation.
19585
19586  -- Macro: FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)
19587      Define this macro if the target machine has "register windows", so
19588      that the register in which a function sees an arguments is not
19589      necessarily the same as the one in which the caller passed the
19590      argument.
19591
19592      For such machines, `FUNCTION_ARG' computes the register in which
19593      the caller passes the value, and `FUNCTION_INCOMING_ARG' should be
19594      defined in a similar fashion to tell the function being called
19595      where the arguments will arrive.
19596
19597      If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves
19598      both purposes.
19599
19600  -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS *CUM,
19601           enum machine_mode MODE, tree TYPE, bool NAMED)
19602      This target hook returns the number of bytes at the beginning of an
19603      argument that must be put in registers.  The value must be zero for
19604      arguments that are passed entirely in registers or that are
19605      entirely pushed on the stack.
19606
19607      On some machines, certain arguments must be passed partially in
19608      registers and partially in memory.  On these machines, typically
19609      the first few words of arguments are passed in registers, and the
19610      rest on the stack.  If a multi-word argument (a `double' or a
19611      structure) crosses that boundary, its first few words must be
19612      passed in registers and the rest must be pushed.  This macro tells
19613      the compiler when this occurs, and how many bytes should go in
19614      registers.
19615
19616      `FUNCTION_ARG' for these arguments should return the first
19617      register to be used by the caller for this argument; likewise
19618      `FUNCTION_INCOMING_ARG', for the called function.
19619
19620  -- Target Hook: bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS *CUM,
19621           enum machine_mode MODE, tree TYPE, bool NAMED)
19622      This target hook should return `true' if an argument at the
19623      position indicated by CUM should be passed by reference.  This
19624      predicate is queried after target independent reasons for being
19625      passed by reference, such as `TREE_ADDRESSABLE (type)'.
19626
19627      If the hook returns true, a copy of that argument is made in
19628      memory and a pointer to the argument is passed instead of the
19629      argument itself.  The pointer is passed in whatever way is
19630      appropriate for passing a pointer to that type.
19631
19632  -- Target Hook: bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS *CUM, enum
19633           machine_mode MODE, tree TYPE, bool NAMED)
19634      The function argument described by the parameters to this hook is
19635      known to be passed by reference.  The hook should return true if
19636      the function argument should be copied by the callee instead of
19637      copied by the caller.
19638
19639      For any argument for which the hook returns true, if it can be
19640      determined that the argument is not modified, then a copy need not
19641      be generated.
19642
19643      The default version of this hook always returns false.
19644
19645  -- Macro: CUMULATIVE_ARGS
19646      A C type for declaring a variable that is used as the first
19647      argument of `FUNCTION_ARG' and other related values.  For some
19648      target machines, the type `int' suffices and can hold the number
19649      of bytes of argument so far.
19650
19651      There is no need to record in `CUMULATIVE_ARGS' anything about the
19652      arguments that have been passed on the stack.  The compiler has
19653      other variables to keep track of that.  For target machines on
19654      which all arguments are passed on the stack, there is no need to
19655      store anything in `CUMULATIVE_ARGS'; however, the data structure
19656      must exist and should not be empty, so use `int'.
19657
19658  -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
19659           N_NAMED_ARGS)
19660      A C statement (sans semicolon) for initializing the variable CUM
19661      for the state at the beginning of the argument list.  The variable
19662      has type `CUMULATIVE_ARGS'.  The value of FNTYPE is the tree node
19663      for the data type of the function which will receive the args, or
19664      0 if the args are to a compiler support library function.  For
19665      direct calls that are not libcalls, FNDECL contain the declaration
19666      node of the function.  FNDECL is also set when
19667      `INIT_CUMULATIVE_ARGS' is used to find arguments for the function
19668      being compiled.  N_NAMED_ARGS is set to the number of named
19669      arguments, including a structure return address if it is passed as
19670      a parameter, when making a call.  When processing incoming
19671      arguments, N_NAMED_ARGS is set to -1.
19672
19673      When processing a call to a compiler support library function,
19674      LIBNAME identifies which one.  It is a `symbol_ref' rtx which
19675      contains the name of the function, as a string.  LIBNAME is 0 when
19676      an ordinary C function call is being processed.  Thus, each time
19677      this macro is called, either LIBNAME or FNTYPE is nonzero, but
19678      never both of them at once.
19679
19680  -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
19681      Like `INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls,
19682      it gets a `MODE' argument instead of FNTYPE, that would be `NULL'.
19683      INDIRECT would always be zero, too.  If this macro is not
19684      defined, `INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is
19685      used instead.
19686
19687  -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
19688      Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
19689      finding the arguments for the function being compiled.  If this
19690      macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead.
19691
19692      The value passed for LIBNAME is always 0, since library routines
19693      with special calling conventions are never compiled with GCC.  The
19694      argument LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'.
19695
19696  -- Macro: FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)
19697      A C statement (sans semicolon) to update the summarizer variable
19698      CUM to advance past an argument in the argument list.  The values
19699      MODE, TYPE and NAMED describe that argument.  Once this is done,
19700      the variable CUM is suitable for analyzing the _following_
19701      argument with `FUNCTION_ARG', etc.
19702
19703      This macro need not do anything if the argument in question was
19704      passed on the stack.  The compiler knows how to track the amount
19705      of stack space used for arguments without any special help.
19706
19707  -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE)
19708      If defined, a C expression which determines whether, and in which
19709      direction, to pad out an argument with extra space.  The value
19710      should be of type `enum direction': either `upward' to pad above
19711      the argument, `downward' to pad below, or `none' to inhibit
19712      padding.
19713
19714      The _amount_ of padding is always just enough to reach the next
19715      multiple of `FUNCTION_ARG_BOUNDARY'; this macro does not control
19716      it.
19717
19718      This macro has a default definition which is right for most
19719      systems.  For little-endian machines, the default is to pad
19720      upward.  For big-endian machines, the default is to pad downward
19721      for an argument of constant size shorter than an `int', and upward
19722      otherwise.
19723
19724  -- Macro: PAD_VARARGS_DOWN
19725      If defined, a C expression which determines whether the default
19726      implementation of va_arg will attempt to pad down before reading
19727      the next argument, if that argument is smaller than its aligned
19728      space as controlled by `PARM_BOUNDARY'.  If this macro is not
19729      defined, all such arguments are padded down if `BYTES_BIG_ENDIAN'
19730      is true.
19731
19732  -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
19733      Specify padding for the last element of a block move between
19734      registers and memory.  FIRST is nonzero if this is the only
19735      element.  Defining this macro allows better control of register
19736      function parameters on big-endian machines, without using
19737      `PARALLEL' rtl.  In particular, `MUST_PASS_IN_STACK' need not test
19738      padding and mode of types in registers, as there is no longer a
19739      "wrong" part of a register;  For example, a three byte aggregate
19740      may be passed in the high part of a register if so required.
19741
19742  -- Macro: FUNCTION_ARG_BOUNDARY (MODE, TYPE)
19743      If defined, a C expression that gives the alignment boundary, in
19744      bits, of an argument with the specified mode and type.  If it is
19745      not defined, `PARM_BOUNDARY' is used for all arguments.
19746
19747  -- Macro: FUNCTION_ARG_REGNO_P (REGNO)
19748      A C expression that is nonzero if REGNO is the number of a hard
19749      register in which function arguments are sometimes passed.  This
19750      does _not_ include implicit arguments such as the static chain and
19751      the structure-value address.  On many machines, no registers can be
19752      used for this purpose since all function arguments are pushed on
19753      the stack.
19754
19755  -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (tree TYPE)
19756      This hook should return true if parameter of type TYPE are passed
19757      as two scalar parameters.  By default, GCC will attempt to pack
19758      complex arguments into the target's word size.  Some ABIs require
19759      complex arguments to be split and treated as their individual
19760      components.  For example, on AIX64, complex floats should be
19761      passed in a pair of floating point registers, even though a
19762      complex float would fit in one 64-bit floating point register.
19763
19764      The default value of this hook is `NULL', which is treated as
19765      always false.
19766
19767  -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
19768      This hook returns a type node for `va_list' for the target.  The
19769      default version of the hook returns `void*'.
19770
19771  -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
19772           TYPE, tree *PRE_P, tree *POST_P)
19773      This hook performs target-specific gimplification of
19774      `VA_ARG_EXPR'.  The first two parameters correspond to the
19775      arguments to `va_arg'; the latter two are as in
19776      `gimplify.c:gimplify_expr'.
19777
19778  -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE)
19779      Define this to return nonzero if the port can handle pointers with
19780      machine mode MODE.  The default version of this hook returns true
19781      for both `ptr_mode' and `Pmode'.
19782
19783  -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode
19784           MODE)
19785      Define this to return nonzero if the port is prepared to handle
19786      insns involving scalar mode MODE.  For a scalar mode to be
19787      considered supported, all the basic arithmetic and comparisons
19788      must work.
19789
19790      The default version of this hook returns true for any mode
19791      required to handle the basic C types (as defined by the port).
19792      Included here are the double-word arithmetic supported by the code
19793      in `optabs.c'.
19794
19795  -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode
19796           MODE)
19797      Define this to return nonzero if the port is prepared to handle
19798      insns involving vector mode MODE.  At the very least, it must have
19799      move patterns for this mode.
19800
19801 \1f
19802 File: gccint.info,  Node: Scalar Return,  Next: Aggregate Return,  Prev: Register Arguments,  Up: Stack and Calling
19803
19804 13.9.8 How Scalar Function Values Are Returned
19805 ----------------------------------------------
19806
19807 This section discusses the macros that control returning scalars as
19808 values--values that can fit in registers.
19809
19810  -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
19811      A C expression to create an RTX representing the place where a
19812      function returns a value of data type VALTYPE.  VALTYPE is a tree
19813      node representing a data type.  Write `TYPE_MODE (VALTYPE)' to get
19814      the machine mode used to represent that type.  On many machines,
19815      only the mode is relevant.  (Actually, on most machines, scalar
19816      values are returned in the same place regardless of mode).
19817
19818      The value of the expression is usually a `reg' RTX for the hard
19819      register where the return value is stored.  The value can also be a
19820      `parallel' RTX, if the return value is in multiple places.  See
19821      `FUNCTION_ARG' for an explanation of the `parallel' form.
19822
19823      If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
19824      the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is
19825      a scalar type.
19826
19827      If the precise function being called is known, FUNC is a tree node
19828      (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
19829      makes it possible to use a different value-returning convention
19830      for specific functions when all their calls are known.
19831
19832      `FUNCTION_VALUE' is not used for return vales with aggregate data
19833      types, because these are returned in another way.  See
19834      `TARGET_STRUCT_VALUE_RTX' and related macros, below.
19835
19836  -- Macro: FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)
19837      Define this macro if the target machine has "register windows" so
19838      that the register in which a function returns its value is not the
19839      same as the one in which the caller sees the value.
19840
19841      For such machines, `FUNCTION_VALUE' computes the register in which
19842      the caller will see the value.  `FUNCTION_OUTGOING_VALUE' should be
19843      defined in a similar fashion to tell the function where to put the
19844      value.
19845
19846      If `FUNCTION_OUTGOING_VALUE' is not defined, `FUNCTION_VALUE'
19847      serves both purposes.
19848
19849      `FUNCTION_OUTGOING_VALUE' is not used for return vales with
19850      aggregate data types, because these are returned in another way.
19851      See `TARGET_STRUCT_VALUE_RTX' and related macros, below.
19852
19853  -- Macro: LIBCALL_VALUE (MODE)
19854      A C expression to create an RTX representing the place where a
19855      library function returns a value of mode MODE.  If the precise
19856      function being called is known, FUNC is a tree node
19857      (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer.  This
19858      makes it possible to use a different value-returning convention
19859      for specific functions when all their calls are known.
19860
19861      Note that "library function" in this context means a compiler
19862      support routine, used to perform arithmetic, whose name is known
19863      specially by the compiler and was not mentioned in the C code being
19864      compiled.
19865
19866      The definition of `LIBRARY_VALUE' need not be concerned aggregate
19867      data types, because none of the library functions returns such
19868      types.
19869
19870  -- Macro: FUNCTION_VALUE_REGNO_P (REGNO)
19871      A C expression that is nonzero if REGNO is the number of a hard
19872      register in which the values of called function may come back.
19873
19874      A register whose use for returning values is limited to serving as
19875      the second of a pair (for a value of type `double', say) need not
19876      be recognized by this macro.  So for most machines, this definition
19877      suffices:
19878
19879           #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
19880
19881      If the machine has register windows, so that the caller and the
19882      called function use different registers for the return value, this
19883      macro should recognize only the caller's register numbers.
19884
19885  -- Macro: APPLY_RESULT_SIZE
19886      Define this macro if `untyped_call' and `untyped_return' need more
19887      space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and
19888      restoring an arbitrary return value.
19889
19890  -- Target Hook: bool TARGET_RETURN_IN_MSB (tree TYPE)
19891      This hook should return true if values of type TYPE are returned
19892      at the most significant end of a register (in other words, if they
19893      are padded at the least significant end).  You can assume that TYPE
19894      is returned in a register; the caller is required to check this.
19895
19896      Note that the register provided by `FUNCTION_VALUE' must be able
19897      to hold the complete return value.  For example, if a 1-, 2- or
19898      3-byte structure is returned at the most significant end of a
19899      4-byte register, `FUNCTION_VALUE' should provide an `SImode' rtx.
19900
19901 \1f
19902 File: gccint.info,  Node: Aggregate Return,  Next: Caller Saves,  Prev: Scalar Return,  Up: Stack and Calling
19903
19904 13.9.9 How Large Values Are Returned
19905 ------------------------------------
19906
19907 When a function value's mode is `BLKmode' (and in some other cases),
19908 the value is not returned according to `FUNCTION_VALUE' (*note Scalar
19909 Return::).  Instead, the caller passes the address of a block of memory
19910 in which the value should be stored.  This address is called the
19911 "structure value address".
19912
19913  This section describes how to control returning structure values in
19914 memory.
19915
19916  -- Target Hook: bool TARGET_RETURN_IN_MEMORY (tree TYPE, tree FNTYPE)
19917      This target hook should return a nonzero value to say to return the
19918      function value in memory, just as large structures are always
19919      returned.  Here TYPE will be the data type of the value, and FNTYPE
19920      will be the type of the function doing the returning, or `NULL' for
19921      libcalls.
19922
19923      Note that values of mode `BLKmode' must be explicitly handled by
19924      this function.  Also, the option `-fpcc-struct-return' takes
19925      effect regardless of this macro.  On most systems, it is possible
19926      to leave the hook undefined; this causes a default definition to
19927      be used, whose value is the constant 1 for `BLKmode' values, and 0
19928      otherwise.
19929
19930      Do not use this hook to indicate that structures and unions should
19931      always be returned in memory.  You should instead use
19932      `DEFAULT_PCC_STRUCT_RETURN' to indicate this.
19933
19934  -- Macro: DEFAULT_PCC_STRUCT_RETURN
19935      Define this macro to be 1 if all structure and union return values
19936      must be in memory.  Since this results in slower code, this should
19937      be defined only if needed for compatibility with other compilers
19938      or with an ABI.  If you define this macro to be 0, then the
19939      conventions used for structure and union return values are decided
19940      by the `TARGET_RETURN_IN_MEMORY' target hook.
19941
19942      If not defined, this defaults to the value 1.
19943
19944  -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
19945      This target hook should return the location of the structure value
19946      address (normally a `mem' or `reg'), or 0 if the address is passed
19947      as an "invisible" first argument.  Note that FNDECL may be `NULL',
19948      for libcalls.  You do not need to define this target hook if the
19949      address is always passed as an "invisible" first argument.
19950
19951      On some architectures the place where the structure value address
19952      is found by the called function is not the same place that the
19953      caller put it.  This can be due to register windows, or it could
19954      be because the function prologue moves it to a different place.
19955      INCOMING is `true' when the location is needed in the context of
19956      the called function, and `false' in the context of the caller.
19957
19958      If INCOMING is `true' and the address is to be found on the stack,
19959      return a `mem' which refers to the frame pointer.
19960
19961  -- Macro: PCC_STATIC_STRUCT_RETURN
19962      Define this macro if the usual system convention on the target
19963      machine for returning structures and unions is for the called
19964      function to return the address of a static variable containing the
19965      value.
19966
19967      Do not define this if the usual system convention is for the
19968      caller to pass an address to the subroutine.
19969
19970      This macro has effect in `-fpcc-struct-return' mode, but it does
19971      nothing when you use `-freg-struct-return' mode.
19972
19973 \1f
19974 File: gccint.info,  Node: Caller Saves,  Next: Function Entry,  Prev: Aggregate Return,  Up: Stack and Calling
19975
19976 13.9.10 Caller-Saves Register Allocation
19977 ----------------------------------------
19978
19979 If you enable it, GCC can save registers around function calls.  This
19980 makes it possible to use call-clobbered registers to hold variables that
19981 must live across calls.
19982
19983  -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS)
19984      A C expression to determine whether it is worthwhile to consider
19985      placing a pseudo-register in a call-clobbered hard register and
19986      saving and restoring it around each function call.  The expression
19987      should be 1 when this is worth doing, and 0 otherwise.
19988
19989      If you don't define this macro, a default is used which is good on
19990      most machines: `4 * CALLS < REFS'.
19991
19992  -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
19993      A C expression specifying which mode is required for saving NREGS
19994      of a pseudo-register in call-clobbered hard register REGNO.  If
19995      REGNO is unsuitable for caller save, `VOIDmode' should be
19996      returned.  For most machines this macro need not be defined since
19997      GCC will select the smallest suitable mode.
19998
19999 \1f
20000 File: gccint.info,  Node: Function Entry,  Next: Profiling,  Prev: Caller Saves,  Up: Stack and Calling
20001
20002 13.9.11 Function Entry and Exit
20003 -------------------------------
20004
20005 This section describes the macros that output function entry
20006 ("prologue") and exit ("epilogue") code.
20007
20008  -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
20009           HOST_WIDE_INT SIZE)
20010      If defined, a function that outputs the assembler code for entry
20011      to a function.  The prologue is responsible for setting up the
20012      stack frame, initializing the frame pointer register, saving
20013      registers that must be saved, and allocating SIZE additional bytes
20014      of storage for the local variables.  SIZE is an integer.  FILE is
20015      a stdio stream to which the assembler code should be output.
20016
20017      The label for the beginning of the function need not be output by
20018      this macro.  That has already been done when the macro is run.
20019
20020      To determine which registers to save, the macro can refer to the
20021      array `regs_ever_live': element R is nonzero if hard register R is
20022      used anywhere within the function.  This implies the function
20023      prologue should save register R, provided it is not one of the
20024      call-used registers.  (`TARGET_ASM_FUNCTION_EPILOGUE' must
20025      likewise use `regs_ever_live'.)
20026
20027      On machines that have "register windows", the function entry code
20028      does not save on the stack the registers that are in the windows,
20029      even if they are supposed to be preserved by function calls;
20030      instead it takes appropriate steps to "push" the register stack,
20031      if any non-call-used registers are used in the function.
20032
20033      On machines where functions may or may not have frame-pointers, the
20034      function entry code must vary accordingly; it must set up the frame
20035      pointer if one is wanted, and not otherwise.  To determine whether
20036      a frame pointer is in wanted, the macro can refer to the variable
20037      `frame_pointer_needed'.  The variable's value will be 1 at run
20038      time in a function that needs a frame pointer.  *Note
20039      Elimination::.
20040
20041      The function entry code is responsible for allocating any stack
20042      space required for the function.  This stack space consists of the
20043      regions listed below.  In most cases, these regions are allocated
20044      in the order listed, with the last listed region closest to the
20045      top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is
20046      defined, and the highest address if it is not defined).  You can
20047      use a different order for a machine if doing so is more convenient
20048      or required for compatibility reasons.  Except in cases where
20049      required by standard or by a debugger, there is no reason why the
20050      stack layout used by GCC need agree with that used by other
20051      compilers for a machine.
20052
20053  -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE)
20054      If defined, a function that outputs assembler code at the end of a
20055      prologue.  This should be used when the function prologue is being
20056      emitted as RTL, and you have some extra assembler that needs to be
20057      emitted.  *Note prologue instruction pattern::.
20058
20059  -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE)
20060      If defined, a function that outputs assembler code at the start of
20061      an epilogue.  This should be used when the function epilogue is
20062      being emitted as RTL, and you have some extra assembler that needs
20063      to be emitted.  *Note epilogue instruction pattern::.
20064
20065  -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE,
20066           HOST_WIDE_INT SIZE)
20067      If defined, a function that outputs the assembler code for exit
20068      from a function.  The epilogue is responsible for restoring the
20069      saved registers and stack pointer to their values when the
20070      function was called, and returning control to the caller.  This
20071      macro takes the same arguments as the macro
20072      `TARGET_ASM_FUNCTION_PROLOGUE', and the registers to restore are
20073      determined from `regs_ever_live' and `CALL_USED_REGISTERS' in the
20074      same way.
20075
20076      On some machines, there is a single instruction that does all the
20077      work of returning from the function.  On these machines, give that
20078      instruction the name `return' and do not define the macro
20079      `TARGET_ASM_FUNCTION_EPILOGUE' at all.
20080
20081      Do not define a pattern named `return' if you want the
20082      `TARGET_ASM_FUNCTION_EPILOGUE' to be used.  If you want the target
20083      switches to control whether return instructions or epilogues are
20084      used, define a `return' pattern with a validity condition that
20085      tests the target switches appropriately.  If the `return'
20086      pattern's validity condition is false, epilogues will be used.
20087
20088      On machines where functions may or may not have frame-pointers, the
20089      function exit code must vary accordingly.  Sometimes the code for
20090      these two cases is completely different.  To determine whether a
20091      frame pointer is wanted, the macro can refer to the variable
20092      `frame_pointer_needed'.  The variable's value will be 1 when
20093      compiling a function that needs a frame pointer.
20094
20095      Normally, `TARGET_ASM_FUNCTION_PROLOGUE' and
20096      `TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
20097      The C variable `current_function_is_leaf' is nonzero for such a
20098      function.  *Note Leaf Functions::.
20099
20100      On some machines, some functions pop their arguments on exit while
20101      others leave that for the caller to do.  For example, the 68020
20102      when given `-mrtd' pops arguments in functions that take a fixed
20103      number of arguments.
20104
20105      Your definition of the macro `RETURN_POPS_ARGS' decides which
20106      functions pop their own arguments.  `TARGET_ASM_FUNCTION_EPILOGUE'
20107      needs to know what was decided.  The variable that is called
20108      `current_function_pops_args' is the number of bytes of its
20109      arguments that a function should pop.  *Note Scalar Return::.
20110
20111    * A region of `current_function_pretend_args_size' bytes of
20112      uninitialized space just underneath the first argument arriving on
20113      the stack.  (This may not be at the very start of the allocated
20114      stack region if the calling sequence has pushed anything else
20115      since pushing the stack arguments.  But usually, on such machines,
20116      nothing else has been pushed yet, because the function prologue
20117      itself does all the pushing.)  This region is used on machines
20118      where an argument may be passed partly in registers and partly in
20119      memory, and, in some cases to support the features in `<stdarg.h>'.
20120
20121    * An area of memory used to save certain registers used by the
20122      function.  The size of this area, which may also include space for
20123      such things as the return address and pointers to previous stack
20124      frames, is machine-specific and usually depends on which registers
20125      have been used in the function.  Machines with register windows
20126      often do not require a save area.
20127
20128    * A region of at least SIZE bytes, possibly rounded up to an
20129      allocation boundary, to contain the local variables of the
20130      function.  On some machines, this region and the save area may
20131      occur in the opposite order, with the save area closer to the top
20132      of the stack.
20133
20134    * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a region of
20135      `current_function_outgoing_args_size' bytes to be used for outgoing
20136      argument lists of the function.  *Note Stack Arguments::.
20137
20138  -- Macro: EXIT_IGNORE_STACK
20139      Define this macro as a C expression that is nonzero if the return
20140      instruction or the function epilogue ignores the value of the stack
20141      pointer; in other words, if it is safe to delete an instruction to
20142      adjust the stack pointer before a return from the function.  The
20143      default is 0.
20144
20145      Note that this macro's value is relevant only for functions for
20146      which frame pointers are maintained.  It is never safe to delete a
20147      final stack adjustment in a function that has no frame pointer,
20148      and the compiler knows this regardless of `EXIT_IGNORE_STACK'.
20149
20150  -- Macro: EPILOGUE_USES (REGNO)
20151      Define this macro as a C expression that is nonzero for registers
20152      that are used by the epilogue or the `return' pattern.  The stack
20153      and frame pointer registers are already be assumed to be used as
20154      needed.
20155
20156  -- Macro: EH_USES (REGNO)
20157      Define this macro as a C expression that is nonzero for registers
20158      that are used by the exception handling mechanism, and so should
20159      be considered live on entry to an exception edge.
20160
20161  -- Macro: DELAY_SLOTS_FOR_EPILOGUE
20162      Define this macro if the function epilogue contains delay slots to
20163      which instructions from the rest of the function can be "moved".
20164      The definition should be a C expression whose value is an integer
20165      representing the number of delay slots there.
20166
20167  -- Macro: ELIGIBLE_FOR_EPILOGUE_DELAY (INSN, N)
20168      A C expression that returns 1 if INSN can be placed in delay slot
20169      number N of the epilogue.
20170
20171      The argument N is an integer which identifies the delay slot now
20172      being considered (since different slots may have different rules of
20173      eligibility).  It is never negative and is always less than the
20174      number of epilogue delay slots (what `DELAY_SLOTS_FOR_EPILOGUE'
20175      returns).  If you reject a particular insn for a given delay slot,
20176      in principle, it may be reconsidered for a subsequent delay slot.
20177      Also, other insns may (at least in principle) be considered for
20178      the so far unfilled delay slot.
20179
20180      The insns accepted to fill the epilogue delay slots are put in an
20181      RTL list made with `insn_list' objects, stored in the variable
20182      `current_function_epilogue_delay_list'.  The insn for the first
20183      delay slot comes first in the list.  Your definition of the macro
20184      `TARGET_ASM_FUNCTION_EPILOGUE' should fill the delay slots by
20185      outputting the insns in this list, usually by calling
20186      `final_scan_insn'.
20187
20188      You need not define this macro if you did not define
20189      `DELAY_SLOTS_FOR_EPILOGUE'.
20190
20191  -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree
20192           THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
20193           VCALL_OFFSET, tree FUNCTION)
20194      A function that outputs the assembler code for a thunk function,
20195      used to implement C++ virtual function calls with multiple
20196      inheritance.  The thunk acts as a wrapper around a virtual
20197      function, adjusting the implicit object parameter before handing
20198      control off to the real function.
20199
20200      First, emit code to add the integer DELTA to the location that
20201      contains the incoming first argument.  Assume that this argument
20202      contains a pointer, and is the one used to pass the `this' pointer
20203      in C++.  This is the incoming argument _before_ the function
20204      prologue, e.g. `%o0' on a sparc.  The addition must preserve the
20205      values of all other incoming arguments.
20206
20207      Then, if VCALL_OFFSET is nonzero, an additional adjustment should
20208      be made after adding `delta'.  In particular, if P is the adjusted
20209      pointer, the following adjustment should be made:
20210
20211           p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
20212
20213      After the additions, emit code to jump to FUNCTION, which is a
20214      `FUNCTION_DECL'.  This is a direct pure jump, not a call, and does
20215      not touch the return address.  Hence returning from FUNCTION will
20216      return to whoever called the current `thunk'.
20217
20218      The effect must be as if FUNCTION had been called directly with
20219      the adjusted first argument.  This macro is responsible for
20220      emitting all of the code for a thunk function;
20221      `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE'
20222      are not invoked.
20223
20224      The THUNK_FNDECL is redundant.  (DELTA and FUNCTION have already
20225      been extracted from it.)  It might possibly be useful on some
20226      targets, but probably not.
20227
20228      If you do not define this macro, the target-independent code in
20229      the C++ front end will generate a less efficient heavyweight thunk
20230      that calls FUNCTION instead of jumping to it.  The generic
20231      approach does not support varargs.
20232
20233  -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (tree
20234           THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
20235           VCALL_OFFSET, tree FUNCTION)
20236      A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would
20237      be able to output the assembler code for the thunk function
20238      specified by the arguments it is passed, and false otherwise.  In
20239      the latter case, the generic approach will be used by the C++
20240      front end, with the limitations previously exposed.
20241
20242 \1f
20243 File: gccint.info,  Node: Profiling,  Next: Tail Calls,  Prev: Function Entry,  Up: Stack and Calling
20244
20245 13.9.12 Generating Code for Profiling
20246 -------------------------------------
20247
20248 These macros will help you generate code for profiling.
20249
20250  -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
20251      A C statement or compound statement to output to FILE some
20252      assembler code to call the profiling subroutine `mcount'.
20253
20254      The details of how `mcount' expects to be called are determined by
20255      your operating system environment, not by GCC.  To figure them out,
20256      compile a small program for profiling using the system's installed
20257      C compiler and look at the assembler code that results.
20258
20259      Older implementations of `mcount' expect the address of a counter
20260      variable to be loaded into some register.  The name of this
20261      variable is `LP' followed by the number LABELNO, so you would
20262      generate the name using `LP%d' in a `fprintf'.
20263
20264  -- Macro: PROFILE_HOOK
20265      A C statement or compound statement to output to FILE some assembly
20266      code to call the profiling subroutine `mcount' even the target does
20267      not support profiling.
20268
20269  -- Macro: NO_PROFILE_COUNTERS
20270      Define this macro if the `mcount' subroutine on your system does
20271      not need a counter variable allocated for each function.  This is
20272      true for almost all modern implementations.  If you define this
20273      macro, you must not use the LABELNO argument to
20274      `FUNCTION_PROFILER'.
20275
20276  -- Macro: PROFILE_BEFORE_PROLOGUE
20277      Define this macro if the code for function profiling should come
20278      before the function prologue.  Normally, the profiling code comes
20279      after.
20280
20281 \1f
20282 File: gccint.info,  Node: Tail Calls,  Prev: Profiling,  Up: Stack and Calling
20283
20284 13.9.13 Permitting tail calls
20285 -----------------------------
20286
20287  -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
20288           EXP)
20289      True if it is ok to do sibling call optimization for the specified
20290      call expression EXP.  DECL will be the called function, or `NULL'
20291      if this is an indirect call.
20292
20293      It is not uncommon for limitations of calling conventions to
20294      prevent tail calls to functions outside the current unit of
20295      translation, or during PIC compilation.  The hook is used to
20296      enforce these restrictions, as the `sibcall' md pattern can not
20297      fail, or fall over to a "normal" call.  The criteria for
20298      successful sibling call optimization may vary greatly between
20299      different architectures.
20300
20301 \1f
20302 File: gccint.info,  Node: Varargs,  Next: Trampolines,  Prev: Stack and Calling,  Up: Target Macros
20303
20304 13.10 Implementing the Varargs Macros
20305 =====================================
20306
20307 GCC comes with an implementation of `<varargs.h>' and `<stdarg.h>' that
20308 work without change on machines that pass arguments on the stack.
20309 Other machines require their own implementations of varargs, and the
20310 two machine independent header files must have conditionals to include
20311 it.
20312
20313  ISO `<stdarg.h>' differs from traditional `<varargs.h>' mainly in the
20314 calling convention for `va_start'.  The traditional implementation
20315 takes just one argument, which is the variable in which to store the
20316 argument pointer.  The ISO implementation of `va_start' takes an
20317 additional second argument.  The user is supposed to write the last
20318 named argument of the function here.
20319
20320  However, `va_start' should not use this argument.  The way to find the
20321 end of the named arguments is with the built-in functions described
20322 below.
20323
20324  -- Macro: __builtin_saveregs ()
20325      Use this built-in function to save the argument registers in
20326      memory so that the varargs mechanism can access them.  Both ISO
20327      and traditional versions of `va_start' must use
20328      `__builtin_saveregs', unless you use
20329      `TARGET_SETUP_INCOMING_VARARGS' (see below) instead.
20330
20331      On some machines, `__builtin_saveregs' is open-coded under the
20332      control of the target hook `TARGET_EXPAND_BUILTIN_SAVEREGS'.  On
20333      other machines, it calls a routine written in assembler language,
20334      found in `libgcc2.c'.
20335
20336      Code generated for the call to `__builtin_saveregs' appears at the
20337      beginning of the function, as opposed to where the call to
20338      `__builtin_saveregs' is written, regardless of what the code is.
20339      This is because the registers must be saved before the function
20340      starts to use them for its own purposes.
20341
20342  -- Macro: __builtin_args_info (CATEGORY)
20343      Use this built-in function to find the first anonymous arguments in
20344      registers.
20345
20346      In general, a machine may have several categories of registers
20347      used for arguments, each for a particular category of data types.
20348      (For example, on some machines, floating-point registers are used
20349      for floating-point arguments while other arguments are passed in
20350      the general registers.)  To make non-varargs functions use the
20351      proper calling convention, you have defined the `CUMULATIVE_ARGS'
20352      data type to record how many registers in each category have been
20353      used so far
20354
20355      `__builtin_args_info' accesses the same data structure of type
20356      `CUMULATIVE_ARGS' after the ordinary argument layout is finished
20357      with it, with CATEGORY specifying which word to access.  Thus, the
20358      value indicates the first unused register in a given category.
20359
20360      Normally, you would use `__builtin_args_info' in the implementation
20361      of `va_start', accessing each category just once and storing the
20362      value in the `va_list' object.  This is because `va_list' will
20363      have to update the values, and there is no way to alter the values
20364      accessed by `__builtin_args_info'.
20365
20366  -- Macro: __builtin_next_arg (LASTARG)
20367      This is the equivalent of `__builtin_args_info', for stack
20368      arguments.  It returns the address of the first anonymous stack
20369      argument, as type `void *'.  If `ARGS_GROW_DOWNWARD', it returns
20370      the address of the location above the first anonymous stack
20371      argument.  Use it in `va_start' to initialize the pointer for
20372      fetching arguments from the stack.  Also use it in `va_start' to
20373      verify that the second parameter LASTARG is the last named argument
20374      of the current function.
20375
20376  -- Macro: __builtin_classify_type (OBJECT)
20377      Since each machine has its own conventions for which data types are
20378      passed in which kind of register, your implementation of `va_arg'
20379      has to embody these conventions.  The easiest way to categorize the
20380      specified data type is to use `__builtin_classify_type' together
20381      with `sizeof' and `__alignof__'.
20382
20383      `__builtin_classify_type' ignores the value of OBJECT, considering
20384      only its data type.  It returns an integer describing what kind of
20385      type that is--integer, floating, pointer, structure, and so on.
20386
20387      The file `typeclass.h' defines an enumeration that you can use to
20388      interpret the values of `__builtin_classify_type'.
20389
20390  These machine description macros help implement varargs:
20391
20392  -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
20393      If defined, this hook produces the machine-specific code for a
20394      call to `__builtin_saveregs'.  This code will be moved to the very
20395      beginning of the function, before any parameter access are made.
20396      The return value of this function should be an RTX that contains
20397      the value to use as the return of `__builtin_saveregs'.
20398
20399  -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS
20400           *ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int
20401           *PRETEND_ARGS_SIZE, int SECOND_TIME)
20402      This target hook offers an alternative to using
20403      `__builtin_saveregs' and defining the hook
20404      `TARGET_EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous
20405      register arguments into the stack so that all the arguments appear
20406      to have been passed consecutively on the stack.  Once this is
20407      done, you can use the standard implementation of varargs that
20408      works for machines that pass all their arguments on the stack.
20409
20410      The argument ARGS_SO_FAR points to the `CUMULATIVE_ARGS' data
20411      structure, containing the values that are obtained after
20412      processing the named arguments.  The arguments MODE and TYPE
20413      describe the last named argument--its machine mode and its data
20414      type as a tree node.
20415
20416      The target hook should do two things: first, push onto the stack
20417      all the argument registers _not_ used for the named arguments, and
20418      second, store the size of the data thus pushed into the
20419      `int'-valued variable pointed to by PRETEND_ARGS_SIZE.  The value
20420      that you store here will serve as additional offset for setting up
20421      the stack frame.
20422
20423      Because you must generate code to push the anonymous arguments at
20424      compile time without knowing their data types,
20425      `TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
20426      have just a single category of argument register and use it
20427      uniformly for all data types.
20428
20429      If the argument SECOND_TIME is nonzero, it means that the
20430      arguments of the function are being analyzed for the second time.
20431      This happens for an inline function, which is not actually
20432      compiled until the end of the source file.  The hook
20433      `TARGET_SETUP_INCOMING_VARARGS' should not generate any
20434      instructions in this case.
20435
20436  -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS
20437           *CA)
20438      Define this hook to return `true' if the location where a function
20439      argument is passed depends on whether or not it is a named
20440      argument.
20441
20442      This hook controls how the NAMED argument to `FUNCTION_ARG' is set
20443      for varargs and stdarg functions.  If this hook returns `true',
20444      the NAMED argument is always true for named arguments, and false
20445      for unnamed arguments.  If it returns `false', but
20446      `TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns `true', then all
20447      arguments are treated as named.  Otherwise, all named arguments
20448      except the last are treated as named.
20449
20450      You need not define this hook if it always returns zero.
20451
20452  -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
20453      If you need to conditionally change ABIs so that one works with
20454      `TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
20455      `TARGET_SETUP_INCOMING_VARARGS' nor
20456      `TARGET_STRICT_ARGUMENT_NAMING' was defined, then define this hook
20457      to return `true' if `TARGET_SETUP_INCOMING_VARARGS' is used,
20458      `false' otherwise.  Otherwise, you should not define this hook.
20459
20460 \1f
20461 File: gccint.info,  Node: Trampolines,  Next: Library Calls,  Prev: Varargs,  Up: Target Macros
20462
20463 13.11 Trampolines for Nested Functions
20464 ======================================
20465
20466 A "trampoline" is a small piece of code that is created at run time
20467 when the address of a nested function is taken.  It normally resides on
20468 the stack, in the stack frame of the containing function.  These macros
20469 tell GCC how to generate code to allocate and initialize a trampoline.
20470
20471  The instructions in the trampoline must do two things: load a constant
20472 address into the static chain register, and jump to the real address of
20473 the nested function.  On CISC machines such as the m68k, this requires
20474 two instructions, a move immediate and a jump.  Then the two addresses
20475 exist in the trampoline as word-long immediate operands.  On RISC
20476 machines, it is often necessary to load each address into a register in
20477 two parts.  Then pieces of each address form separate immediate
20478 operands.
20479
20480  The code generated to initialize the trampoline must store the variable
20481 parts--the static chain value and the function address--into the
20482 immediate operands of the instructions.  On a CISC machine, this is
20483 simply a matter of copying each address to a memory reference at the
20484 proper offset from the start of the trampoline.  On a RISC machine, it
20485 may be necessary to take out pieces of the address and store them
20486 separately.
20487
20488  -- Macro: TRAMPOLINE_TEMPLATE (FILE)
20489      A C statement to output, on the stream FILE, assembler code for a
20490      block of data that contains the constant parts of a trampoline.
20491      This code should not include a label--the label is taken care of
20492      automatically.
20493
20494      If you do not define this macro, it means no template is needed
20495      for the target.  Do not define this macro on systems where the
20496      block move code to copy the trampoline into place would be larger
20497      than the code to generate it on the spot.
20498
20499  -- Macro: TRAMPOLINE_SECTION
20500      The name of a subroutine to switch to the section in which the
20501      trampoline template is to be placed (*note Sections::).  The
20502      default is a value of `readonly_data_section', which places the
20503      trampoline in the section containing read-only data.
20504
20505  -- Macro: TRAMPOLINE_SIZE
20506      A C expression for the size in bytes of the trampoline, as an
20507      integer.
20508
20509  -- Macro: TRAMPOLINE_ALIGNMENT
20510      Alignment required for trampolines, in bits.
20511
20512      If you don't define this macro, the value of `BIGGEST_ALIGNMENT'
20513      is used for aligning trampolines.
20514
20515  -- Macro: INITIALIZE_TRAMPOLINE (ADDR, FNADDR, STATIC_CHAIN)
20516      A C statement to initialize the variable parts of a trampoline.
20517      ADDR is an RTX for the address of the trampoline; FNADDR is an RTX
20518      for the address of the nested function; STATIC_CHAIN is an RTX for
20519      the static chain value that should be passed to the function when
20520      it is called.
20521
20522  -- Macro: TRAMPOLINE_ADJUST_ADDRESS (ADDR)
20523      A C statement that should perform any machine-specific adjustment
20524      in the address of the trampoline.  Its argument contains the
20525      address that was passed to `INITIALIZE_TRAMPOLINE'.  In case the
20526      address to be used for a function call should be different from
20527      the address in which the template was stored, the different
20528      address should be assigned to ADDR.  If this macro is not defined,
20529      ADDR will be used for function calls.
20530
20531      If this macro is not defined, by default the trampoline is
20532      allocated as a stack slot.  This default is right for most
20533      machines.  The exceptions are machines where it is impossible to
20534      execute instructions in the stack area.  On such machines, you may
20535      have to implement a separate stack, using this macro in
20536      conjunction with `TARGET_ASM_FUNCTION_PROLOGUE' and
20537      `TARGET_ASM_FUNCTION_EPILOGUE'.
20538
20539      FP points to a data structure, a `struct function', which
20540      describes the compilation status of the immediate containing
20541      function of the function which the trampoline is for.  The stack
20542      slot for the trampoline is in the stack frame of this containing
20543      function.  Other allocation strategies probably must do something
20544      analogous with this information.
20545
20546  Implementing trampolines is difficult on many machines because they
20547 have separate instruction and data caches.  Writing into a stack
20548 location fails to clear the memory in the instruction cache, so when
20549 the program jumps to that location, it executes the old contents.
20550
20551  Here are two possible solutions.  One is to clear the relevant parts of
20552 the instruction cache whenever a trampoline is set up.  The other is to
20553 make all trampolines identical, by having them jump to a standard
20554 subroutine.  The former technique makes trampoline execution faster; the
20555 latter makes initialization faster.
20556
20557  To clear the instruction cache when a trampoline is initialized, define
20558 the following macro.
20559
20560  -- Macro: CLEAR_INSN_CACHE (BEG, END)
20561      If defined, expands to a C expression clearing the _instruction
20562      cache_ in the specified interval.  The definition of this macro
20563      would typically be a series of `asm' statements.  Both BEG and END
20564      are both pointer expressions.
20565
20566  The operating system may also require the stack to be made executable
20567 before calling the trampoline.  To implement this requirement, define
20568 the following macro.
20569
20570  -- Macro: ENABLE_EXECUTE_STACK
20571      Define this macro if certain operations must be performed before
20572      executing code located on the stack.  The macro should expand to a
20573      series of C file-scope constructs (e.g. functions) and provide a
20574      unique entry point named `__enable_execute_stack'.  The target is
20575      responsible for emitting calls to the entry point in the code, for
20576      example from the `INITIALIZE_TRAMPOLINE' macro.
20577
20578  To use a standard subroutine, define the following macro.  In addition,
20579 you must make sure that the instructions in a trampoline fill an entire
20580 cache line with identical instructions, or else ensure that the
20581 beginning of the trampoline code is always aligned at the same point in
20582 its cache line.  Look in `m68k.h' as a guide.
20583
20584  -- Macro: TRANSFER_FROM_TRAMPOLINE
20585      Define this macro if trampolines need a special subroutine to do
20586      their work.  The macro should expand to a series of `asm'
20587      statements which will be compiled with GCC.  They go in a library
20588      function named `__transfer_from_trampoline'.
20589
20590      If you need to avoid executing the ordinary prologue code of a
20591      compiled C function when you jump to the subroutine, you can do so
20592      by placing a special label of your own in the assembler code.  Use
20593      one `asm' statement to generate an assembler label, and another to
20594      make the label global.  Then trampolines can use that label to
20595      jump directly to your special assembler code.
20596
20597 \1f
20598 File: gccint.info,  Node: Library Calls,  Next: Addressing Modes,  Prev: Trampolines,  Up: Target Macros
20599
20600 13.12 Implicit Calls to Library Routines
20601 ========================================
20602
20603 Here is an explanation of implicit calls to library routines.
20604
20605  -- Macro: DECLARE_LIBRARY_RENAMES
20606      This macro, if defined, should expand to a piece of C code that
20607      will get expanded when compiling functions for libgcc.a.  It can
20608      be used to provide alternate names for GCC's internal library
20609      functions if there are ABI-mandated names that the compiler should
20610      provide.
20611
20612  -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
20613      This hook should declare additional library routines or rename
20614      existing ones, using the functions `set_optab_libfunc' and
20615      `init_one_libfunc' defined in `optabs.c'.  `init_optabs' calls
20616      this macro after initializing all the normal library routines.
20617
20618      The default is to do nothing.  Most ports don't need to define
20619      this hook.
20620
20621  -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
20622      This macro should return `true' if the library routine that
20623      implements the floating point comparison operator COMPARISON in
20624      mode MODE will return a boolean, and FALSE if it will return a
20625      tristate.
20626
20627      GCC's own floating point libraries return tristates from the
20628      comparison operators, so the default returns false always.  Most
20629      ports don't need to define this macro.
20630
20631  -- Macro: TARGET_LIB_INT_CMP_BIASED
20632      This macro should evaluate to `true' if the integer comparison
20633      functions (like `__cmpdi2') return 0 to indicate that the first
20634      operand is smaller than the second, 1 to indicate that they are
20635      equal, and 2 to indicate that the first operand is greater than
20636      the second.  If this macro evaluates to `false' the comparison
20637      functions return -1, 0, and 1 instead of 0, 1, and 2.  If the
20638      target uses the routines in `libgcc.a', you do not need to define
20639      this macro.
20640
20641  -- Macro: US_SOFTWARE_GOFAST
20642      Define this macro if your system C library uses the US Software
20643      GOFAST library to provide floating point emulation.
20644
20645      In addition to defining this macro, your architecture must set
20646      `TARGET_INIT_LIBFUNCS' to `gofast_maybe_init_libfuncs', or else
20647      call that function from its version of that hook.  It is defined
20648      in `config/gofast.h', which must be included by your
20649      architecture's `CPU.c' file.  See `sparc/sparc.c' for an example.
20650
20651      If this macro is defined, the
20652      `TARGET_FLOAT_LIB_COMPARE_RETURNS_BOOL' target hook must return
20653      false for `SFmode' and `DFmode' comparisons.
20654
20655  -- Macro: TARGET_EDOM
20656      The value of `EDOM' on the target machine, as a C integer constant
20657      expression.  If you don't define this macro, GCC does not attempt
20658      to deposit the value of `EDOM' into `errno' directly.  Look in
20659      `/usr/include/errno.h' to find the value of `EDOM' on your system.
20660
20661      If you do not define `TARGET_EDOM', then compiled code reports
20662      domain errors by calling the library function and letting it
20663      report the error.  If mathematical functions on your system use
20664      `matherr' when there is an error, then you should leave
20665      `TARGET_EDOM' undefined so that `matherr' is used normally.
20666
20667  -- Macro: GEN_ERRNO_RTX
20668      Define this macro as a C expression to create an rtl expression
20669      that refers to the global "variable" `errno'.  (On certain systems,
20670      `errno' may not actually be a variable.)  If you don't define this
20671      macro, a reasonable default is used.
20672
20673  -- Macro: TARGET_C99_FUNCTIONS
20674      When this macro is nonzero, GCC will implicitly optimize `sin'
20675      calls into `sinf' and similarly for other functions defined by C99
20676      standard.  The default is nonzero that should be proper value for
20677      most modern systems, however number of existing systems lacks
20678      support for these functions in the runtime so they needs this
20679      macro to be redefined to 0.
20680
20681  -- Macro: NEXT_OBJC_RUNTIME
20682      Define this macro to generate code for Objective-C message sending
20683      using the calling convention of the NeXT system.  This calling
20684      convention involves passing the object, the selector and the
20685      method arguments all at once to the method-lookup library function.
20686
20687      The default calling convention passes just the object and the
20688      selector to the lookup function, which returns a pointer to the
20689      method.
20690
20691 \1f
20692 File: gccint.info,  Node: Addressing Modes,  Next: Condition Code,  Prev: Library Calls,  Up: Target Macros
20693
20694 13.13 Addressing Modes
20695 ======================
20696
20697 This is about addressing modes.
20698
20699  -- Macro: HAVE_PRE_INCREMENT
20700  -- Macro: HAVE_PRE_DECREMENT
20701  -- Macro: HAVE_POST_INCREMENT
20702  -- Macro: HAVE_POST_DECREMENT
20703      A C expression that is nonzero if the machine supports
20704      pre-increment, pre-decrement, post-increment, or post-decrement
20705      addressing respectively.
20706
20707  -- Macro: HAVE_PRE_MODIFY_DISP
20708  -- Macro: HAVE_POST_MODIFY_DISP
20709      A C expression that is nonzero if the machine supports pre- or
20710      post-address side-effect generation involving constants other than
20711      the size of the memory operand.
20712
20713  -- Macro: HAVE_PRE_MODIFY_REG
20714  -- Macro: HAVE_POST_MODIFY_REG
20715      A C expression that is nonzero if the machine supports pre- or
20716      post-address side-effect generation involving a register
20717      displacement.
20718
20719  -- Macro: CONSTANT_ADDRESS_P (X)
20720      A C expression that is 1 if the RTX X is a constant which is a
20721      valid address.  On most machines, this can be defined as
20722      `CONSTANT_P (X)', but a few machines are more restrictive in which
20723      constant addresses are supported.
20724
20725  -- Macro: CONSTANT_P (X)
20726      `CONSTANT_P', which is defined by target-independent code, accepts
20727      integer-values expressions whose values are not explicitly known,
20728      such as `symbol_ref', `label_ref', and `high' expressions and
20729      `const' arithmetic expressions, in addition to `const_int' and
20730      `const_double' expressions.
20731
20732  -- Macro: MAX_REGS_PER_ADDRESS
20733      A number, the maximum number of registers that can appear in a
20734      valid memory address.  Note that it is up to you to specify a
20735      value equal to the maximum number that `GO_IF_LEGITIMATE_ADDRESS'
20736      would ever accept.
20737
20738  -- Macro: GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
20739      A C compound statement with a conditional `goto LABEL;' executed
20740      if X (an RTX) is a legitimate memory address on the target machine
20741      for a memory operand of mode MODE.
20742
20743      It usually pays to define several simpler macros to serve as
20744      subroutines for this one.  Otherwise it may be too complicated to
20745      understand.
20746
20747      This macro must exist in two variants: a strict variant and a
20748      non-strict one.  The strict variant is used in the reload pass.  It
20749      must be defined so that any pseudo-register that has not been
20750      allocated a hard register is considered a memory reference.  In
20751      contexts where some kind of register is required, a pseudo-register
20752      with no hard register must be rejected.
20753
20754      The non-strict variant is used in other passes.  It must be
20755      defined to accept all pseudo-registers in every context where some
20756      kind of register is required.
20757
20758      Compiler source files that want to use the strict variant of this
20759      macro define the macro `REG_OK_STRICT'.  You should use an `#ifdef
20760      REG_OK_STRICT' conditional to define the strict variant in that
20761      case and the non-strict variant otherwise.
20762
20763      Subroutines to check for acceptable registers for various purposes
20764      (one for base registers, one for index registers, and so on) are
20765      typically among the subroutines used to define
20766      `GO_IF_LEGITIMATE_ADDRESS'.  Then only these subroutine macros
20767      need have two variants; the higher levels of macros may be the
20768      same whether strict or not.
20769
20770      Normally, constant addresses which are the sum of a `symbol_ref'
20771      and an integer are stored inside a `const' RTX to mark them as
20772      constant.  Therefore, there is no need to recognize such sums
20773      specifically as legitimate addresses.  Normally you would simply
20774      recognize any `const' as legitimate.
20775
20776      Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant
20777      sums that are not marked with  `const'.  It assumes that a naked
20778      `plus' indicates indexing.  If so, then you _must_ reject such
20779      naked constant sums as illegitimate addresses, so that none of
20780      them will be given to `PRINT_OPERAND_ADDRESS'.
20781
20782      On some machines, whether a symbolic address is legitimate depends
20783      on the section that the address refers to.  On these machines,
20784      define the target hook `TARGET_ENCODE_SECTION_INFO' to store the
20785      information into the `symbol_ref', and then check for it here.
20786      When you see a `const', you will have to look inside it to find the
20787      `symbol_ref' in order to determine the section.  *Note Assembler
20788      Format::.
20789
20790  -- Macro: REG_OK_FOR_BASE_P (X)
20791      A C expression that is nonzero if X (assumed to be a `reg' RTX) is
20792      valid for use as a base register.  For hard registers, it should
20793      always accept those which the hardware permits and reject the
20794      others.  Whether the macro accepts or rejects pseudo registers
20795      must be controlled by `REG_OK_STRICT' as described above.  This
20796      usually requires two variant definitions, of which `REG_OK_STRICT'
20797      controls the one actually used.
20798
20799  -- Macro: REG_MODE_OK_FOR_BASE_P (X, MODE)
20800      A C expression that is just like `REG_OK_FOR_BASE_P', except that
20801      that expression may examine the mode of the memory reference in
20802      MODE.  You should define this macro if the mode of the memory
20803      reference affects whether a register may be used as a base
20804      register.  If you define this macro, the compiler will use it
20805      instead of `REG_OK_FOR_BASE_P'.
20806
20807  -- Macro: REG_MODE_OK_FOR_REG_BASE_P (X, MODE)
20808      A C expression which is nonzero if X (assumed to be a `reg' RTX)
20809      is suitable for use as a base register in base plus index operand
20810      addresses, accessing memory in mode MODE.  It may be either a
20811      suitable hard register or a pseudo register that has been
20812      allocated such a hard register.  You should define this macro if
20813      base plus index addresses have different requirements than other
20814      base register uses.
20815
20816  -- Macro: REG_OK_FOR_INDEX_P (X)
20817      A C expression that is nonzero if X (assumed to be a `reg' RTX) is
20818      valid for use as an index register.
20819
20820      The difference between an index register and a base register is
20821      that the index register may be scaled.  If an address involves the
20822      sum of two registers, neither one of them scaled, then either one
20823      may be labeled the "base" and the other the "index"; but whichever
20824      labeling is used must fit the machine's constraints of which
20825      registers may serve in each capacity.  The compiler will try both
20826      labelings, looking for one that is valid, and will reload one or
20827      both registers only if neither labeling works.
20828
20829  -- Macro: FIND_BASE_TERM (X)
20830      A C expression to determine the base term of address X.  This
20831      macro is used in only one place: `find_base_term' in alias.c.
20832
20833      It is always safe for this macro to not be defined.  It exists so
20834      that alias analysis can understand machine-dependent addresses.
20835
20836      The typical use of this macro is to handle addresses containing a
20837      label_ref or symbol_ref within an UNSPEC.
20838
20839  -- Macro: LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN)
20840      A C compound statement that attempts to replace X with a valid
20841      memory address for an operand of mode MODE.  WIN will be a C
20842      statement label elsewhere in the code; the macro definition may use
20843
20844           GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN);
20845
20846      to avoid further processing if the address has become legitimate.
20847
20848      X will always be the result of a call to `break_out_memory_refs',
20849      and OLDX will be the operand that was given to that function to
20850      produce X.
20851
20852      The code generated by this macro should not alter the substructure
20853      of X.  If it transforms X into a more legitimate form, it should
20854      assign X (which will always be a C variable) a new value.
20855
20856      It is not necessary for this macro to come up with a legitimate
20857      address.  The compiler has standard ways of doing so in all cases.
20858      In fact, it is safe to omit this macro.  But often a
20859      machine-dependent strategy can generate better code.
20860
20861  -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
20862           WIN)
20863      A C compound statement that attempts to replace X, which is an
20864      address that needs reloading, with a valid memory address for an
20865      operand of mode MODE.  WIN will be a C statement label elsewhere
20866      in the code.  It is not necessary to define this macro, but it
20867      might be useful for performance reasons.
20868
20869      For example, on the i386, it is sometimes possible to use a single
20870      reload register instead of two by reloading a sum of two pseudo
20871      registers into a register.  On the other hand, for number of RISC
20872      processors offsets are limited so that often an intermediate
20873      address needs to be generated in order to address a stack slot.
20874      By defining `LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
20875      intermediate addresses generated for adjacent some stack slots can
20876      be made identical, and thus be shared.
20877
20878      _Note_: This macro should be used with caution.  It is necessary
20879      to know something of how reload works in order to effectively use
20880      this, and it is quite easy to produce macros that build in too
20881      much knowledge of reload internals.
20882
20883      _Note_: This macro must be able to reload an address created by a
20884      previous invocation of this macro.  If it fails to handle such
20885      addresses then the compiler may generate incorrect code or abort.
20886
20887      The macro definition should use `push_reload' to indicate parts
20888      that need reloading; OPNUM, TYPE and IND_LEVELS are usually
20889      suitable to be passed unaltered to `push_reload'.
20890
20891      The code generated by this macro must not alter the substructure of
20892      X.  If it transforms X into a more legitimate form, it should
20893      assign X (which will always be a C variable) a new value.  This
20894      also applies to parts that you change indirectly by calling
20895      `push_reload'.
20896
20897      The macro definition may use `strict_memory_address_p' to test if
20898      the address has become legitimate.
20899
20900      If you want to change only a part of X, one standard way of doing
20901      this is to use `copy_rtx'.  Note, however, that is unshares only a
20902      single level of rtl.  Thus, if the part to be changed is not at the
20903      top level, you'll need to replace first the top level.  It is not
20904      necessary for this macro to come up with a legitimate address;
20905      but often a machine-dependent strategy can generate better code.
20906
20907  -- Macro: GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)
20908      A C statement or compound statement with a conditional `goto
20909      LABEL;' executed if memory address X (an RTX) can have different
20910      meanings depending on the machine mode of the memory reference it
20911      is used for or if the address is valid for some modes but not
20912      others.
20913
20914      Autoincrement and autodecrement addresses typically have
20915      mode-dependent effects because the amount of the increment or
20916      decrement is the size of the operand being addressed.  Some
20917      machines have other mode-dependent addresses.  Many RISC machines
20918      have no mode-dependent addresses.
20919
20920      You may assume that ADDR is a valid address for the machine.
20921
20922  -- Macro: LEGITIMATE_CONSTANT_P (X)
20923      A C expression that is nonzero if X is a legitimate constant for
20924      an immediate operand on the target machine.  You can assume that X
20925      satisfies `CONSTANT_P', so you need not check this.  In fact, `1'
20926      is a suitable definition for this macro on machines where anything
20927      `CONSTANT_P' is valid.
20928
20929  -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
20930      This hook is used to undo the possibly obfuscating effects of the
20931      `LEGITIMIZE_ADDRESS' and `LEGITIMIZE_RELOAD_ADDRESS' target
20932      macros.  Some backend implementations of these macros wrap symbol
20933      references inside an `UNSPEC' rtx to represent PIC or similar
20934      addressing modes.  This target hook allows GCC's optimizers to
20935      understand the semantics of these opaque `UNSPEC's by converting
20936      them back into their original form.
20937
20938  -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (rtx X)
20939      This hook should return true if X is of a form that cannot (or
20940      should not) be spilled to the constant pool.  The default version
20941      of this hook returns false.
20942
20943      The primary reason to define this hook is to prevent reload from
20944      deciding that a non-legitimate constant would be better reloaded
20945      from the constant pool instead of spilling and reloading a register
20946      holding the constant.  This restriction is often true of addresses
20947      of TLS symbols for various targets.
20948
20949  -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
20950      This hook should return the DECL of a function F that given an
20951      address ADDR as an argument returns a mask M that can be used to
20952      extract from two vectors the relevant data that resides in ADDR in
20953      case ADDR is not properly aligned.
20954
20955      The autovectrizer, when vectorizing a load operation from an
20956      address ADDR that may be unaligned, will generate two vector loads
20957      from the two aligned addresses around ADDR. It then generates a
20958      `REALIGN_LOAD' operation to extract the relevant data from the two
20959      loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and
20960      V2, are the two vectors, each of size VS, and the third argument,
20961      OFF, defines how the data will be extracted from these two
20962      vectors: if OFF is 0, then the returned vector is V2; otherwise,
20963      the returned vector is composed from the last VS-OFF elements of
20964      V1 concatenated to the first OFF elements of V2.
20965
20966      If this hook is defined, the autovectorizer will generate a call
20967      to F (using the DECL tree that this hook returns) and will use the
20968      return value of F as the argument OFF to `REALIGN_LOAD'.
20969      Therefore, the mask M returned by F should comply with the
20970      semantics expected by `REALIGN_LOAD' described above.  If this
20971      hook is not defined, then ADDR will be used as the argument OFF to
20972      `REALIGN_LOAD', in which case the low log2(VS)-1 bits of ADDR will
20973      be considered.
20974
20975 \1f
20976 File: gccint.info,  Node: Condition Code,  Next: Costs,  Prev: Addressing Modes,  Up: Target Macros
20977
20978 13.14 Condition Code Status
20979 ===========================
20980
20981 This describes the condition code status.
20982
20983  The file `conditions.h' defines a variable `cc_status' to describe how
20984 the condition code was computed (in case the interpretation of the
20985 condition code depends on the instruction that it was set by).  This
20986 variable contains the RTL expressions on which the condition code is
20987 currently based, and several standard flags.
20988
20989  Sometimes additional machine-specific flags must be defined in the
20990 machine description header file.  It can also add additional
20991 machine-specific information by defining `CC_STATUS_MDEP'.
20992
20993  -- Macro: CC_STATUS_MDEP
20994      C code for a data type which is used for declaring the `mdep'
20995      component of `cc_status'.  It defaults to `int'.
20996
20997      This macro is not used on machines that do not use `cc0'.
20998
20999  -- Macro: CC_STATUS_MDEP_INIT
21000      A C expression to initialize the `mdep' field to "empty".  The
21001      default definition does nothing, since most machines don't use the
21002      field anyway.  If you want to use the field, you should probably
21003      define this macro to initialize it.
21004
21005      This macro is not used on machines that do not use `cc0'.
21006
21007  -- Macro: NOTICE_UPDATE_CC (EXP, INSN)
21008      A C compound statement to set the components of `cc_status'
21009      appropriately for an insn INSN whose body is EXP.  It is this
21010      macro's responsibility to recognize insns that set the condition
21011      code as a byproduct of other activity as well as those that
21012      explicitly set `(cc0)'.
21013
21014      This macro is not used on machines that do not use `cc0'.
21015
21016      If there are insns that do not set the condition code but do alter
21017      other machine registers, this macro must check to see whether they
21018      invalidate the expressions that the condition code is recorded as
21019      reflecting.  For example, on the 68000, insns that store in address
21020      registers do not set the condition code, which means that usually
21021      `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns.
21022      But suppose that the previous insn set the condition code based
21023      on location `a4@(102)' and the current insn stores a new value in
21024      `a4'.  Although the condition code is not changed by this, it will
21025      no longer be true that it reflects the contents of `a4@(102)'.
21026      Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case
21027      to say that nothing is known about the condition code value.
21028
21029      The definition of `NOTICE_UPDATE_CC' must be prepared to deal with
21030      the results of peephole optimization: insns whose patterns are
21031      `parallel' RTXs containing various `reg', `mem' or constants which
21032      are just the operands.  The RTL structure of these insns is not
21033      sufficient to indicate what the insns actually do.  What
21034      `NOTICE_UPDATE_CC' should do when it sees one is just to run
21035      `CC_STATUS_INIT'.
21036
21037      A possible definition of `NOTICE_UPDATE_CC' is to call a function
21038      that looks at an attribute (*note Insn Attributes::) named, for
21039      example, `cc'.  This avoids having detailed information about
21040      patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'.
21041
21042  -- Macro: SELECT_CC_MODE (OP, X, Y)
21043      Returns a mode from class `MODE_CC' to be used when comparison
21044      operation code OP is applied to rtx X and Y.  For example, on the
21045      SPARC, `SELECT_CC_MODE' is defined as (see *note Jump Patterns::
21046      for a description of the reason for this definition)
21047
21048           #define SELECT_CC_MODE(OP,X,Y) \
21049             (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
21050              ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
21051              : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
21052                  || GET_CODE (X) == NEG) \
21053                 ? CC_NOOVmode : CCmode))
21054
21055      You should define this macro if and only if you define extra CC
21056      modes in `MACHINE-modes.def'.
21057
21058  -- Macro: CANONICALIZE_COMPARISON (CODE, OP0, OP1)
21059      On some machines not all possible comparisons are defined, but you
21060      can convert an invalid comparison into a valid one.  For example,
21061      the Alpha does not have a `GT' comparison, but you can use an `LT'
21062      comparison instead and swap the order of the operands.
21063
21064      On such machines, define this macro to be a C statement to do any
21065      required conversions.  CODE is the initial comparison code and OP0
21066      and OP1 are the left and right operands of the comparison,
21067      respectively.  You should modify CODE, OP0, and OP1 as required.
21068
21069      GCC will not assume that the comparison resulting from this macro
21070      is valid but will see if the resulting insn matches a pattern in
21071      the `md' file.
21072
21073      You need not define this macro if it would never change the
21074      comparison code or operands.
21075
21076  -- Macro: REVERSIBLE_CC_MODE (MODE)
21077      A C expression whose value is one if it is always safe to reverse a
21078      comparison whose mode is MODE.  If `SELECT_CC_MODE' can ever
21079      return MODE for a floating-point inequality comparison, then
21080      `REVERSIBLE_CC_MODE (MODE)' must be zero.
21081
21082      You need not define this macro if it would always returns zero or
21083      if the floating-point format is anything other than
21084      `IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
21085      the SPARC, where floating-point inequality comparisons are always
21086      given `CCFPEmode':
21087
21088           #define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)
21089
21090  -- Macro: REVERSE_CONDITION (CODE, MODE)
21091      A C expression whose value is reversed condition code of the CODE
21092      for comparison done in CC_MODE MODE.  The macro is used only in
21093      case `REVERSIBLE_CC_MODE (MODE)' is nonzero.  Define this macro in
21094      case machine has some non-standard way how to reverse certain
21095      conditionals.  For instance in case all floating point conditions
21096      are non-trapping, compiler may freely convert unordered compares
21097      to ordered one.  Then definition may look like:
21098
21099           #define REVERSE_CONDITION(CODE, MODE) \
21100              ((MODE) != CCFPmode ? reverse_condition (CODE) \
21101               : reverse_condition_maybe_unordered (CODE))
21102
21103  -- Macro: REVERSE_CONDEXEC_PREDICATES_P (OP1, OP2)
21104      A C expression that returns true if the conditional execution
21105      predicate OP1, a comparison operation, is the inverse of OP2 and
21106      vice versa.  Define this to return 0 if the target has conditional
21107      execution predicates that cannot be reversed safely.  There is no
21108      need to validate that the arguments of op1 and op2 are the same,
21109      this is done separately.  If no expansion is specified, this macro
21110      is defined as follows:
21111
21112           #define REVERSE_CONDEXEC_PREDICATES_P (x, y) \
21113              (GET_CODE ((x)) == reversed_comparison_code ((y), NULL))
21114
21115  -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int *,
21116           unsigned int *)
21117      On targets which do not use `(cc0)', and which use a hard register
21118      rather than a pseudo-register to hold condition codes, the regular
21119      CSE passes are often not able to identify cases in which the hard
21120      register is set to a common value.  Use this hook to enable a
21121      small pass which optimizes such cases.  This hook should return
21122      true to enable this pass, and it should set the integers to which
21123      its arguments point to the hard register numbers used for
21124      condition codes.  When there is only one such register, as is true
21125      on most systems, the integer pointed to by the second argument
21126      should be set to `INVALID_REGNUM'.
21127
21128      The default version of this hook returns false.
21129
21130  -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum
21131           machine_mode, enum machine_mode)
21132      On targets which use multiple condition code modes in class
21133      `MODE_CC', it is sometimes the case that a comparison can be
21134      validly done in more than one mode.  On such a system, define this
21135      target hook to take two mode arguments and to return a mode in
21136      which both comparisons may be validly done.  If there is no such
21137      mode, return `VOIDmode'.
21138
21139      The default version of this hook checks whether the modes are the
21140      same.  If they are, it returns that mode.  If they are different,
21141      it returns `VOIDmode'.
21142
21143 \1f
21144 File: gccint.info,  Node: Costs,  Next: Scheduling,  Prev: Condition Code,  Up: Target Macros
21145
21146 13.15 Describing Relative Costs of Operations
21147 =============================================
21148
21149 These macros let you describe the relative speed of various operations
21150 on the target machine.
21151
21152  -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
21153      A C expression for the cost of moving data of mode MODE from a
21154      register in class FROM to one in class TO.  The classes are
21155      expressed using the enumeration values such as `GENERAL_REGS'.  A
21156      value of 2 is the default; other values are interpreted relative to
21157      that.
21158
21159      It is not required that the cost always equal 2 when FROM is the
21160      same as TO; on some machines it is expensive to move between
21161      registers if they are not general registers.
21162
21163      If reload sees an insn consisting of a single `set' between two
21164      hard registers, and if `REGISTER_MOVE_COST' applied to their
21165      classes returns a value of 2, reload does not check to ensure that
21166      the constraints of the insn are met.  Setting a cost of other than
21167      2 will allow reload to verify that the constraints are met.  You
21168      should do this if the `movM' pattern's constraints do not allow
21169      such copying.
21170
21171  -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN)
21172      A C expression for the cost of moving data of mode MODE between a
21173      register of class CLASS and memory; IN is zero if the value is to
21174      be written to memory, nonzero if it is to be read in.  This cost
21175      is relative to those in `REGISTER_MOVE_COST'.  If moving between
21176      registers and memory is more expensive than between two registers,
21177      you should define this macro to express the relative cost.
21178
21179      If you do not define this macro, GCC uses a default cost of 4 plus
21180      the cost of copying via a secondary reload register, if one is
21181      needed.  If your machine requires a secondary reload register to
21182      copy between memory and a register of CLASS but the reload
21183      mechanism is more complex than copying via an intermediate, define
21184      this macro to reflect the actual cost of the move.
21185
21186      GCC defines the function `memory_move_secondary_cost' if secondary
21187      reloads are needed.  It computes the costs due to copying via a
21188      secondary register.  If your machine copies from memory using a
21189      secondary register in the conventional way but the default base
21190      value of 4 is not correct for your machine, define this macro to
21191      add some other value to the result of that function.  The
21192      arguments to that function are the same as to this macro.
21193
21194  -- Macro: BRANCH_COST
21195      A C expression for the cost of a branch instruction.  A value of 1
21196      is the default; other values are interpreted relative to that.
21197
21198  Here are additional macros which do not specify precise relative costs,
21199 but only that certain actions are more expensive than GCC would
21200 ordinarily expect.
21201
21202  -- Macro: SLOW_BYTE_ACCESS
21203      Define this macro as a C expression which is nonzero if accessing
21204      less than a word of memory (i.e. a `char' or a `short') is no
21205      faster than accessing a word of memory, i.e., if such access
21206      require more than one instruction or if there is no difference in
21207      cost between byte and (aligned) word loads.
21208
21209      When this macro is not defined, the compiler will access a field by
21210      finding the smallest containing object; when it is defined, a
21211      fullword load will be used if alignment permits.  Unless bytes
21212      accesses are faster than word accesses, using word accesses is
21213      preferable since it may eliminate subsequent memory access if
21214      subsequent accesses occur to other fields in the same word of the
21215      structure, but to different bytes.
21216
21217  -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT)
21218      Define this macro to be the value 1 if memory accesses described
21219      by the MODE and ALIGNMENT parameters have a cost many times greater
21220      than aligned accesses, for example if they are emulated in a trap
21221      handler.
21222
21223      When this macro is nonzero, the compiler will act as if
21224      `STRICT_ALIGNMENT' were nonzero when generating code for block
21225      moves.  This can cause significantly more instructions to be
21226      produced.  Therefore, do not set this macro nonzero if unaligned
21227      accesses only add a cycle or two to the time for a memory access.
21228
21229      If the value of this macro is always zero, it need not be defined.
21230      If this macro is defined, it should produce a nonzero value when
21231      `STRICT_ALIGNMENT' is nonzero.
21232
21233  -- Macro: MOVE_RATIO
21234      The threshold of number of scalar memory-to-memory move insns,
21235      _below_ which a sequence of insns should be generated instead of a
21236      string move insn or a library call.  Increasing the value will
21237      always make code faster, but eventually incurs high cost in
21238      increased code size.
21239
21240      Note that on machines where the corresponding move insn is a
21241      `define_expand' that emits a sequence of insns, this macro counts
21242      the number of such sequences.
21243
21244      If you don't define this, a reasonable default is used.
21245
21246  -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT)
21247      A C expression used to determine whether `move_by_pieces' will be
21248      used to copy a chunk of memory, or whether some other block move
21249      mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
21250      returns less than `MOVE_RATIO'.
21251
21252  -- Macro: MOVE_MAX_PIECES
21253      A C expression used by `move_by_pieces' to determine the largest
21254      unit a load or store used to copy memory is.  Defaults to
21255      `MOVE_MAX'.
21256
21257  -- Macro: CLEAR_RATIO
21258      The threshold of number of scalar move insns, _below_ which a
21259      sequence of insns should be generated to clear memory instead of a
21260      string clear insn or a library call.  Increasing the value will
21261      always make code faster, but eventually incurs high cost in
21262      increased code size.
21263
21264      If you don't define this, a reasonable default is used.
21265
21266  -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT)
21267      A C expression used to determine whether `clear_by_pieces' will be
21268      used to clear a chunk of memory, or whether some other block clear
21269      mechanism will be used.  Defaults to 1 if `move_by_pieces_ninsns'
21270      returns less than `CLEAR_RATIO'.
21271
21272  -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT)
21273      A C expression used to determine whether `store_by_pieces' will be
21274      used to set a chunk of memory to a constant value, or whether some
21275      other mechanism will be used.  Used by `__builtin_memset' when
21276      storing values other than constant zero and by `__builtin_strcpy'
21277      when when called with a constant source string.  Defaults to 1 if
21278      `move_by_pieces_ninsns' returns less than `MOVE_RATIO'.
21279
21280  -- Macro: USE_LOAD_POST_INCREMENT (MODE)
21281      A C expression used to determine whether a load postincrement is a
21282      good thing to use for a given mode.  Defaults to the value of
21283      `HAVE_POST_INCREMENT'.
21284
21285  -- Macro: USE_LOAD_POST_DECREMENT (MODE)
21286      A C expression used to determine whether a load postdecrement is a
21287      good thing to use for a given mode.  Defaults to the value of
21288      `HAVE_POST_DECREMENT'.
21289
21290  -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
21291      A C expression used to determine whether a load preincrement is a
21292      good thing to use for a given mode.  Defaults to the value of
21293      `HAVE_PRE_INCREMENT'.
21294
21295  -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
21296      A C expression used to determine whether a load predecrement is a
21297      good thing to use for a given mode.  Defaults to the value of
21298      `HAVE_PRE_DECREMENT'.
21299
21300  -- Macro: USE_STORE_POST_INCREMENT (MODE)
21301      A C expression used to determine whether a store postincrement is
21302      a good thing to use for a given mode.  Defaults to the value of
21303      `HAVE_POST_INCREMENT'.
21304
21305  -- Macro: USE_STORE_POST_DECREMENT (MODE)
21306      A C expression used to determine whether a store postdecrement is
21307      a good thing to use for a given mode.  Defaults to the value of
21308      `HAVE_POST_DECREMENT'.
21309
21310  -- Macro: USE_STORE_PRE_INCREMENT (MODE)
21311      This macro is used to determine whether a store preincrement is a
21312      good thing to use for a given mode.  Defaults to the value of
21313      `HAVE_PRE_INCREMENT'.
21314
21315  -- Macro: USE_STORE_PRE_DECREMENT (MODE)
21316      This macro is used to determine whether a store predecrement is a
21317      good thing to use for a given mode.  Defaults to the value of
21318      `HAVE_PRE_DECREMENT'.
21319
21320  -- Macro: NO_FUNCTION_CSE
21321      Define this macro if it is as good or better to call a constant
21322      function address than to call an address kept in a register.
21323
21324  -- Macro: RANGE_TEST_NON_SHORT_CIRCUIT
21325      Define this macro if a non-short-circuit operation produced by
21326      `fold_range_test ()' is optimal.  This macro defaults to true if
21327      `BRANCH_COST' is greater than or equal to the value 2.
21328
21329  -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int
21330           OUTER_CODE, int *TOTAL)
21331      This target hook describes the relative costs of RTL expressions.
21332
21333      The cost may depend on the precise form of the expression, which is
21334      available for examination in X, and the rtx code of the expression
21335      in which it is contained, found in OUTER_CODE.  CODE is the
21336      expression code--redundant, since it can be obtained with
21337      `GET_CODE (X)'.
21338
21339      In implementing this hook, you can use the construct
21340      `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions.
21341
21342      On entry to the hook, `*TOTAL' contains a default estimate for the
21343      cost of the expression.  The hook should modify this value as
21344      necessary.  Traditionally, the default costs are `COSTS_N_INSNS
21345      (5)' for multiplications, `COSTS_N_INSNS (7)' for division and
21346      modulus operations, and `COSTS_N_INSNS (1)' for all other
21347      operations.
21348
21349      When optimizing for code size, i.e. when `optimize_size' is
21350      nonzero, this target hook should be used to estimate the relative
21351      size cost of an expression, again relative to `COSTS_N_INSNS'.
21352
21353      The hook returns true when all subexpressions of X have been
21354      processed, and false when `rtx_cost' should recurse.
21355
21356  -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS)
21357      This hook computes the cost of an addressing mode that contains
21358      ADDRESS.  If not defined, the cost is computed from the ADDRESS
21359      expression and the `TARGET_RTX_COST' hook.
21360
21361      For most CISC machines, the default cost is a good approximation
21362      of the true cost of the addressing mode.  However, on RISC
21363      machines, all instructions normally have the same length and
21364      execution time.  Hence all addresses will have equal costs.
21365
21366      In cases where more than one form of an address is known, the form
21367      with the lowest cost will be used.  If multiple forms have the
21368      same, lowest, cost, the one that is the most complex will be used.
21369
21370      For example, suppose an address that is equal to the sum of a
21371      register and a constant is used twice in the same basic block.
21372      When this macro is not defined, the address will be computed in a
21373      register and memory references will be indirect through that
21374      register.  On machines where the cost of the addressing mode
21375      containing the sum is no higher than that of a simple indirect
21376      reference, this will produce an additional instruction and
21377      possibly require an additional register.  Proper specification of
21378      this macro eliminates this overhead for such machines.
21379
21380      This hook is never called with an invalid address.
21381
21382      On machines where an address involving more than one register is as
21383      cheap as an address computation involving only one register,
21384      defining `TARGET_ADDRESS_COST' to reflect this can cause two
21385      registers to be live over a region of code where only one would
21386      have been if `TARGET_ADDRESS_COST' were not defined in that
21387      manner.  This effect should be considered in the definition of
21388      this macro.  Equivalent costs should probably only be given to
21389      addresses with different numbers of registers on machines with
21390      lots of registers.
21391
21392 \1f
21393 File: gccint.info,  Node: Scheduling,  Next: Sections,  Prev: Costs,  Up: Target Macros
21394
21395 13.16 Adjusting the Instruction Scheduler
21396 =========================================
21397
21398 The instruction scheduler may need a fair amount of machine-specific
21399 adjustment in order to produce good code.  GCC provides several target
21400 hooks for this purpose.  It is usually enough to define just a few of
21401 them: try the first ones in this list first.
21402
21403  -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void)
21404      This hook returns the maximum number of instructions that can ever
21405      issue at the same time on the target machine.  The default is one.
21406      Although the insn scheduler can define itself the possibility of
21407      issue an insn on the same cycle, the value can serve as an
21408      additional constraint to issue insns on the same simulated
21409      processor cycle (see hooks `TARGET_SCHED_REORDER' and
21410      `TARGET_SCHED_REORDER2').  This value must be constant over the
21411      entire compilation.  If you need it to vary depending on what the
21412      instructions are, you must use `TARGET_SCHED_VARIABLE_ISSUE'.
21413
21414      You could define this hook to return the value of the macro
21415      `MAX_DFA_ISSUE_RATE'.
21416
21417  -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
21418           VERBOSE, rtx INSN, int MORE)
21419      This hook is executed by the scheduler after it has scheduled an
21420      insn from the ready list.  It should return the number of insns
21421      which can still be issued in the current cycle.  The default is
21422      `MORE - 1' for insns other than `CLOBBER' and `USE', which
21423      normally are not counted against the issue rate.  You should
21424      define this hook if some insns take more machine resources than
21425      others, so that fewer insns can follow them in the same cycle.
21426      FILE is either a null pointer, or a stdio stream to write any
21427      debug output to.  VERBOSE is the verbose level provided by
21428      `-fsched-verbose-N'.  INSN is the instruction that was scheduled.
21429
21430  -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx
21431           DEP_INSN, int COST)
21432      This function corrects the value of COST based on the relationship
21433      between INSN and DEP_INSN through the dependence LINK.  It should
21434      return the new value.  The default is to make no adjustment to
21435      COST.  This can be used for example to specify to the scheduler
21436      using the traditional pipeline description that an output- or
21437      anti-dependence does not incur the same cost as a data-dependence.
21438      If the scheduler using the automaton based pipeline description,
21439      the cost of anti-dependence is zero and the cost of
21440      output-dependence is maximum of one and the difference of latency
21441      times of the first and the second insns.  If these values are not
21442      acceptable, you could use the hook to modify them too.  See also
21443      *note Processor pipeline description::.
21444
21445  -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int
21446           PRIORITY)
21447      This hook adjusts the integer scheduling priority PRIORITY of
21448      INSN.  It should return the new priority.  Reduce the priority to
21449      execute INSN earlier, increase the priority to execute INSN later.
21450      Do not define this hook if you do not need to adjust the
21451      scheduling priorities of insns.
21452
21453  -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx
21454           *READY, int *N_READYP, int CLOCK)
21455      This hook is executed by the scheduler after it has scheduled the
21456      ready list, to allow the machine description to reorder it (for
21457      example to combine two small instructions together on `VLIW'
21458      machines).  FILE is either a null pointer, or a stdio stream to
21459      write any debug output to.  VERBOSE is the verbose level provided
21460      by `-fsched-verbose-N'.  READY is a pointer to the ready list of
21461      instructions that are ready to be scheduled.  N_READYP is a
21462      pointer to the number of elements in the ready list.  The scheduler
21463      reads the ready list in reverse order, starting with
21464      READY[*N_READYP-1] and going to READY[0].  CLOCK is the timer tick
21465      of the scheduler.  You may modify the ready list and the number of
21466      ready insns.  The return value is the number of insns that can
21467      issue this cycle; normally this is just `issue_rate'.  See also
21468      `TARGET_SCHED_REORDER2'.
21469
21470  -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
21471           rtx *READY, int *N_READY, CLOCK)
21472      Like `TARGET_SCHED_REORDER', but called at a different time.  That
21473      function is called whenever the scheduler starts a new cycle.
21474      This one is called once per iteration over a cycle, immediately
21475      after `TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list
21476      and return the number of insns to be scheduled in the same cycle.
21477      Defining this hook can be useful if there are frequent situations
21478      where scheduling one insn causes other insns to become ready in
21479      the same cycle.  These other insns can then be taken into account
21480      properly.
21481
21482  -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx
21483           HEAD, rtx TAIL)
21484      This hook is called after evaluation forward dependencies of insns
21485      in chain given by two parameter values (HEAD and TAIL
21486      correspondingly) but before insns scheduling of the insn chain.
21487      For example, it can be used for better insn classification if it
21488      requires analysis of dependencies.  This hook can use backward and
21489      forward dependencies of the insn scheduler because they are already
21490      calculated.
21491
21492  -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
21493           MAX_READY)
21494      This hook is executed by the scheduler at the beginning of each
21495      block of instructions that are to be scheduled.  FILE is either a
21496      null pointer, or a stdio stream to write any debug output to.
21497      VERBOSE is the verbose level provided by `-fsched-verbose-N'.
21498      MAX_READY is the maximum number of insns in the current scheduling
21499      region that can be live at the same time.  This can be used to
21500      allocate scratch space if it is needed, e.g. by
21501      `TARGET_SCHED_REORDER'.
21502
21503  -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
21504      This hook is executed by the scheduler at the end of each block of
21505      instructions that are to be scheduled.  It can be used to perform
21506      cleanup of any actions done by the other scheduling hooks.  FILE
21507      is either a null pointer, or a stdio stream to write any debug
21508      output to.  VERBOSE is the verbose level provided by
21509      `-fsched-verbose-N'.
21510
21511  -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int
21512           VERBOSE, int OLD_MAX_UID)
21513      This hook is executed by the scheduler after function level
21514      initializations.  FILE is either a null pointer, or a stdio stream
21515      to write any debug output to.  VERBOSE is the verbose level
21516      provided by `-fsched-verbose-N'.  OLD_MAX_UID is the maximum insn
21517      uid when scheduling begins.
21518
21519  -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
21520           VERBOSE)
21521      This is the cleanup hook corresponding to
21522      `TARGET_SCHED_INIT_GLOBAL'.  FILE is either a null pointer, or a
21523      stdio stream to write any debug output to.  VERBOSE is the verbose
21524      level provided by `-fsched-verbose-N'.
21525
21526  -- Target Hook: int TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
21527      The hook returns an RTL insn.  The automaton state used in the
21528      pipeline hazard recognizer is changed as if the insn were scheduled
21529      when the new simulated processor cycle starts.  Usage of the hook
21530      may simplify the automaton pipeline description for some VLIW
21531      processors.  If the hook is defined, it is used only for the
21532      automaton based pipeline description.  The default is not to
21533      change the state when the new simulated processor cycle starts.
21534
21535  -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
21536      The hook can be used to initialize data used by the previous hook.
21537
21538  -- Target Hook: int TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
21539      The hook is analogous to `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used
21540      to changed the state as if the insn were scheduled when the new
21541      simulated processor cycle finishes.
21542
21543  -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
21544      The hook is analogous to `TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
21545      used to initialize data used by the previous hook.
21546
21547  -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
21548           (void)
21549      This hook controls better choosing an insn from the ready insn
21550      queue for the DFA-based insn scheduler.  Usually the scheduler
21551      chooses the first insn from the queue.  If the hook returns a
21552      positive value, an additional scheduler code tries all
21553      permutations of `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
21554      ()' subsequent ready insns to choose an insn whose issue will
21555      result in maximal number of issued insns on the same cycle.  For
21556      the VLIW processor, the code could actually solve the problem of
21557      packing simple insns into the VLIW insn.  Of course, if the rules
21558      of VLIW packing are described in the automaton.
21559
21560      This code also could be used for superscalar RISC processors.  Let
21561      us consider a superscalar RISC processor with 3 pipelines.  Some
21562      insns can be executed in pipelines A or B, some insns can be
21563      executed only in pipelines B or C, and one insn can be executed in
21564      pipeline B.  The processor may issue the 1st insn into A and the
21565      2nd one into B.  In this case, the 3rd insn will wait for freeing B
21566      until the next cycle.  If the scheduler issues the 3rd insn the
21567      first, the processor could issue all 3 insns per cycle.
21568
21569      Actually this code demonstrates advantages of the automaton based
21570      pipeline hazard recognizer.  We try quickly and easy many insn
21571      schedules to choose the best one.
21572
21573      The default is no multipass scheduling.
21574
21575  -- Target Hook: int
21576 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx)
21577      This hook controls what insns from the ready insn queue will be
21578      considered for the multipass insn scheduling.  If the hook returns
21579      zero for insn passed as the parameter, the insn will be not chosen
21580      to be issued.
21581
21582      The default is that any ready insns can be chosen to be issued.
21583
21584  -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *, int, rtx, int,
21585           int, int *)
21586      This hook is called by the insn scheduler before issuing insn
21587      passed as the third parameter on given cycle.  If the hook returns
21588      nonzero, the insn is not issued on given processors cycle.
21589      Instead of that, the processor cycle is advanced.  If the value
21590      passed through the last parameter is zero, the insn ready queue is
21591      not sorted on the new cycle start as usually.  The first parameter
21592      passes file for debugging output.  The second one passes the
21593      scheduler verbose level of the debugging output.  The forth and
21594      the fifth parameter values are correspondingly processor cycle on
21595      which the previous insn has been issued and the current processor
21596      cycle.
21597
21598  -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (rtx INSN1, rtx
21599           INSN2, rtx DEP_LINK, int DEP_COST, int DISTANCE)
21600      This hook is used to define which dependences are considered
21601      costly by the target, so costly that it is not advisable to
21602      schedule the insns that are involved in the dependence too close
21603      to one another.  The parameters to this hook are as follows:  The
21604      second parameter INSN2 is dependent upon the first parameter
21605      INSN1.  The dependence between INSN1 and INSN2 is represented by
21606      the third parameter DEP_LINK.  The fourth parameter COST is the
21607      cost of the dependence, and the fifth parameter DISTANCE is the
21608      distance in cycles between the two insns.  The hook returns `true'
21609      if considering the distance between the two insns the dependence
21610      between them is considered costly by the target, and `false'
21611      otherwise.
21612
21613      Defining this hook can be useful in multiple-issue out-of-order
21614      machines, where (a) it's practically hopeless to predict the
21615      actual data/resource delays, however: (b) there's a better chance
21616      to predict the actual grouping that will be formed, and (c)
21617      correctly emulating the grouping can be very important.  In such
21618      targets one may want to allow issuing dependent insns closer to
21619      one another--i.e., closer than the dependence distance;  however,
21620      not in cases of "costly dependences", which this hooks allows to
21621      define.
21622
21623  Macros in the following table are generated by the program `genattr'
21624 and can be useful for writing the hooks.
21625
21626  -- Macro: MAX_DFA_ISSUE_RATE
21627      The macro definition is generated in the automaton based pipeline
21628      description interface.  Its value is calculated from the automaton
21629      based pipeline description and is equal to maximal number of all
21630      insns described in constructions `define_insn_reservation' which
21631      can be issued on the same processor cycle.
21632
21633 \1f
21634 File: gccint.info,  Node: Sections,  Next: PIC,  Prev: Scheduling,  Up: Target Macros
21635
21636 13.17 Dividing the Output into Sections (Texts, Data, ...)
21637 ==========================================================
21638
21639 An object file is divided into sections containing different types of
21640 data.  In the most common case, there are three sections: the "text
21641 section", which holds instructions and read-only data; the "data
21642 section", which holds initialized writable data; and the "bss section",
21643 which holds uninitialized data.  Some systems have other kinds of
21644 sections.
21645
21646  The compiler must tell the assembler when to switch sections.  These
21647 macros control what commands to output to tell the assembler this.  You
21648 can also define additional sections.
21649
21650  -- Macro: TEXT_SECTION_ASM_OP
21651      A C expression whose value is a string, including spacing,
21652      containing the assembler operation that should precede
21653      instructions and read-only data.  Normally `"\t.text"' is right.
21654
21655  -- Macro: HOT_TEXT_SECTION_NAME
21656      If defined, a C string constant for the name of the section
21657      containing most frequently executed functions of the program.  If
21658      not defined, GCC will provide a default definition if the target
21659      supports named sections.
21660
21661  -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME
21662      If defined, a C string constant for the name of the section
21663      containing unlikely executed functions in the program.
21664
21665  -- Macro: DATA_SECTION_ASM_OP
21666      A C expression whose value is a string, including spacing,
21667      containing the assembler operation to identify the following data
21668      as writable initialized data.  Normally `"\t.data"' is right.
21669
21670  -- Macro: READONLY_DATA_SECTION_ASM_OP
21671      A C expression whose value is a string, including spacing,
21672      containing the assembler operation to identify the following data
21673      as read-only initialized data.
21674
21675  -- Macro: READONLY_DATA_SECTION
21676      A macro naming a function to call to switch to the proper section
21677      for read-only data.  The default is to use
21678      `READONLY_DATA_SECTION_ASM_OP' if defined, else fall back to
21679      `text_section'.
21680
21681      The most common definition will be `data_section', if the target
21682      does not have a special read-only data section, and does not put
21683      data in the text section.
21684
21685  -- Macro: BSS_SECTION_ASM_OP
21686      If defined, a C expression whose value is a string, including
21687      spacing, containing the assembler operation to identify the
21688      following data as uninitialized global data.  If not defined, and
21689      neither `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
21690      uninitialized global data will be output in the data section if
21691      `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
21692      used.
21693
21694  -- Macro: INIT_SECTION_ASM_OP
21695      If defined, a C expression whose value is a string, including
21696      spacing, containing the assembler operation to identify the
21697      following data as initialization code.  If not defined, GCC will
21698      assume such a section does not exist.
21699
21700  -- Macro: FINI_SECTION_ASM_OP
21701      If defined, a C expression whose value is a string, including
21702      spacing, containing the assembler operation to identify the
21703      following data as finalization code.  If not defined, GCC will
21704      assume such a section does not exist.
21705
21706  -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
21707      If defined, an ASM statement that switches to a different section
21708      via SECTION_OP, calls FUNCTION, and switches back to the text
21709      section.  This is used in `crtstuff.c' if `INIT_SECTION_ASM_OP' or
21710      `FINI_SECTION_ASM_OP' to calls to initialization and finalization
21711      functions from the init and fini sections.  By default, this macro
21712      uses a simple function call.  Some ports need hand-crafted
21713      assembly code to avoid dependencies on registers initialized in
21714      the function prologue or to ensure that constant pools don't end
21715      up too far way in the text section.
21716
21717  -- Macro: FORCE_CODE_SECTION_ALIGN
21718      If defined, an ASM statement that aligns a code section to some
21719      arbitrary boundary.  This is used to force all fragments of the
21720      `.init' and `.fini' sections to have to same alignment and thus
21721      prevent the linker from having to add any padding.
21722
21723  -- Macro: EXTRA_SECTIONS
21724      A list of names for sections other than the standard two, which are
21725      `in_text' and `in_data'.  You need not define this macro on a
21726      system with no other sections (that GCC needs to use).
21727
21728  -- Macro: EXTRA_SECTION_FUNCTIONS
21729      One or more functions to be defined in `varasm.c'.  These
21730      functions should do jobs analogous to those of `text_section' and
21731      `data_section', for your additional sections.  Do not define this
21732      macro if you do not define `EXTRA_SECTIONS'.
21733
21734  -- Macro: JUMP_TABLES_IN_TEXT_SECTION
21735      Define this macro to be an expression with a nonzero value if jump
21736      tables (for `tablejump' insns) should be output in the text
21737      section, along with the assembler instructions.  Otherwise, the
21738      readonly data section is used.
21739
21740      This macro is irrelevant if there is no separate readonly data
21741      section.
21742
21743  -- Target Hook: void TARGET_ASM_SELECT_SECTION (tree EXP, int RELOC,
21744           unsigned HOST_WIDE_INT ALIGN)
21745      Switches to the appropriate section for output of EXP.  You can
21746      assume that EXP is either a `VAR_DECL' node or a constant of some
21747      sort.  RELOC indicates whether the initial value of EXP requires
21748      link-time relocations.  Bit 0 is set when variable contains local
21749      relocations only, while bit 1 is set for global relocations.
21750      Select the section by calling `data_section' or one of the
21751      alternatives for other sections.  ALIGN is the constant alignment
21752      in bits.
21753
21754      The default version of this function takes care of putting
21755      read-only variables in `readonly_data_section'.
21756
21757      See also USE_SELECT_SECTION_FOR_FUNCTIONS.
21758
21759  -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
21760      Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
21761      called for `FUNCTION_DECL's as well as for variables and constants.
21762
21763      In the case of a `FUNCTION_DECL', RELOC will be zero if the
21764      function has been determined to be likely to be called, and
21765      nonzero if it is unlikely to be called.
21766
21767  -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
21768      Build up a unique section name, expressed as a `STRING_CST' node,
21769      and assign it to `DECL_SECTION_NAME (DECL)'.  As with
21770      `TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
21771      value of EXP requires link-time relocations.
21772
21773      The default version of this function appends the symbol name to the
21774      ELF section name that would normally be used for the symbol.  For
21775      example, the function `foo' would be placed in `.text.foo'.
21776      Whatever the actual target object format, this is often good
21777      enough.
21778
21779  -- Target Hook: void TARGET_ASM_FUNCTION_RODATA_SECTION (tree DECL)
21780      Switches to a readonly data section associated with
21781      `DECL_SECTION_NAME (DECL)'.  The default version of this function
21782      switches to `.gnu.linkonce.r.name' section if function's section
21783      is `.gnu.linkonce.t.name', to `.rodata.name' if function is in
21784      `.text.name' section and otherwise switches to the normal readonly
21785      data section.
21786
21787  -- Target Hook: void TARGET_ASM_SELECT_RTX_SECTION (enum machine_mode
21788           MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
21789      Switches to the appropriate section for output of constant pool
21790      entry X in MODE.  You can assume that X is some kind of constant
21791      in RTL.  The argument MODE is redundant except in the case of a
21792      `const_int' rtx.  Select the section by calling
21793      `readonly_data_section' or one of the alternatives for other
21794      sections.  ALIGN is the constant alignment in bits.
21795
21796      The default version of this function takes care of putting symbolic
21797      constants in `flag_pic' mode in `data_section' and everything else
21798      in `readonly_data_section'.
21799
21800  -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
21801           int NEW_DECL_P)
21802      Define this hook if references to a symbol or a constant must be
21803      treated differently depending on something about the variable or
21804      function named by the symbol (such as what section it is in).
21805
21806      The hook is executed immediately after rtl has been created for
21807      DECL, which may be a variable or function declaration or an entry
21808      in the constant pool.  In either case, RTL is the rtl in question.
21809      Do _not_ use `DECL_RTL (DECL)' in this hook; that field may not
21810      have been initialized yet.
21811
21812      In the case of a constant, it is safe to assume that the rtl is a
21813      `mem' whose address is a `symbol_ref'.  Most decls will also have
21814      this form, but that is not guaranteed.  Global register variables,
21815      for instance, will have a `reg' for their rtl.  (Normally the
21816      right thing to do with such unusual rtl is leave it alone.)
21817
21818      The NEW_DECL_P argument will be true if this is the first time
21819      that `TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.
21820      It will be false for subsequent invocations, which will happen for
21821      duplicate declarations.  Whether or not anything must be done for
21822      the duplicate declaration depends on whether the hook examines
21823      `DECL_ATTRIBUTES'.  NEW_DECL_P is always true when the hook is
21824      called for a constant.
21825
21826      The usual thing for this hook to do is to record flags in the
21827      `symbol_ref', using `SYMBOL_REF_FLAG' or `SYMBOL_REF_FLAGS'.
21828      Historically, the name string was modified if it was necessary to
21829      encode more than one bit of information, but this practice is now
21830      discouraged; use `SYMBOL_REF_FLAGS'.
21831
21832      The default definition of this hook, `default_encode_section_info'
21833      in `varasm.c', sets a number of commonly-useful bits in
21834      `SYMBOL_REF_FLAGS'.  Check whether the default does what you need
21835      before overriding it.
21836
21837  -- Target Hook: const char *TARGET_STRIP_NAME_ENCODING (const char
21838           *name)
21839      Decode NAME and return the real name part, sans the characters
21840      that `TARGET_ENCODE_SECTION_INFO' may have added.
21841
21842  -- Target Hook: bool TARGET_IN_SMALL_DATA_P (tree EXP)
21843      Returns true if EXP should be placed into a "small data" section.
21844      The default version of this hook always returns false.
21845
21846  -- Variable: Target Hook bool TARGET_HAVE_SRODATA_SECTION
21847      Contains the value true if the target places read-only "small
21848      data" into a separate section.  The default value is false.
21849
21850  -- Target Hook: bool TARGET_BINDS_LOCAL_P (tree EXP)
21851      Returns true if EXP names an object for which name resolution
21852      rules must resolve to the current "module" (dynamic shared library
21853      or executable image).
21854
21855      The default version of this hook implements the name resolution
21856      rules for ELF, which has a looser model of global name binding
21857      than other currently supported object file formats.
21858
21859  -- Variable: Target Hook bool TARGET_HAVE_TLS
21860      Contains the value true if the target supports thread-local
21861      storage.  The default value is false.
21862
21863 \1f
21864 File: gccint.info,  Node: PIC,  Next: Assembler Format,  Prev: Sections,  Up: Target Macros
21865
21866 13.18 Position Independent Code
21867 ===============================
21868
21869 This section describes macros that help implement generation of position
21870 independent code.  Simply defining these macros is not enough to
21871 generate valid PIC; you must also add support to the macros
21872 `GO_IF_LEGITIMATE_ADDRESS' and `PRINT_OPERAND_ADDRESS', as well as
21873 `LEGITIMIZE_ADDRESS'.  You must modify the definition of `movsi' to do
21874 something appropriate when the source operand contains a symbolic
21875 address.  You may also need to alter the handling of switch statements
21876 so that they use relative addresses.
21877
21878  -- Macro: PIC_OFFSET_TABLE_REGNUM
21879      The register number of the register used to address a table of
21880      static data addresses in memory.  In some cases this register is
21881      defined by a processor's "application binary interface" (ABI).
21882      When this macro is defined, RTL is generated for this register
21883      once, as with the stack pointer and frame pointer registers.  If
21884      this macro is not defined, it is up to the machine-dependent files
21885      to allocate such a register (if necessary).  Note that this
21886      register must be fixed when in use (e.g.  when `flag_pic' is true).
21887
21888  -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
21889      Define this macro if the register defined by
21890      `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls.  Do not define
21891      this macro if `PIC_OFFSET_TABLE_REGNUM' is not defined.
21892
21893  -- Macro: FINALIZE_PIC
21894      By generating position-independent code, when two different
21895      programs (A and B) share a common library (libC.a), the text of
21896      the library can be shared whether or not the library is linked at
21897      the same address for both programs.  In some of these
21898      environments, position-independent code requires not only the use
21899      of different addressing modes, but also special code to enable the
21900      use of these addressing modes.
21901
21902      The `FINALIZE_PIC' macro serves as a hook to emit these special
21903      codes once the function is being compiled into assembly code, but
21904      not before.  (It is not done before, because in the case of
21905      compiling an inline function, it would lead to multiple PIC
21906      prologues being included in functions which used inline functions
21907      and were compiled to assembly language.)
21908
21909  -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
21910      A C expression that is nonzero if X is a legitimate immediate
21911      operand on the target machine when generating position independent
21912      code.  You can assume that X satisfies `CONSTANT_P', so you need
21913      not check this.  You can also assume FLAG_PIC is true, so you need
21914      not check it either.  You need not define this macro if all
21915      constants (including `SYMBOL_REF') can be immediate operands when
21916      generating position independent code.
21917
21918 \1f
21919 File: gccint.info,  Node: Assembler Format,  Next: Debugging Info,  Prev: PIC,  Up: Target Macros
21920
21921 13.19 Defining the Output Assembler Language
21922 ============================================
21923
21924 This section describes macros whose principal purpose is to describe how
21925 to write instructions in assembler language--rather than what the
21926 instructions do.
21927
21928 * Menu:
21929
21930 * File Framework::       Structural information for the assembler file.
21931 * Data Output::          Output of constants (numbers, strings, addresses).
21932 * Uninitialized Data::   Output of uninitialized variables.
21933 * Label Output::         Output and generation of labels.
21934 * Initialization::       General principles of initialization
21935                            and termination routines.
21936 * Macros for Initialization::
21937                          Specific macros that control the handling of
21938                            initialization and termination routines.
21939 * Instruction Output::   Output of actual instructions.
21940 * Dispatch Tables::      Output of jump tables.
21941 * Exception Region Output:: Output of exception region code.
21942 * Alignment Output::     Pseudo ops for alignment and skipping data.
21943
21944 \1f
21945 File: gccint.info,  Node: File Framework,  Next: Data Output,  Up: Assembler Format
21946
21947 13.19.1 The Overall Framework of an Assembler File
21948 --------------------------------------------------
21949
21950 This describes the overall framework of an assembly file.
21951
21952  -- Target Hook: void TARGET_ASM_FILE_START ()
21953      Output to `asm_out_file' any text which the assembler expects to
21954      find at the beginning of a file.  The default behavior is
21955      controlled by two flags, documented below.  Unless your target's
21956      assembler is quite unusual, if you override the default, you
21957      should call `default_file_start' at some point in your target
21958      hook.  This lets other target files rely on these variables.
21959
21960  -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
21961      If this flag is true, the text of the macro `ASM_APP_OFF' will be
21962      printed as the very first line in the assembly file, unless
21963      `-fverbose-asm' is in effect.  (If that macro has been defined to
21964      the empty string, this variable has no effect.)  With the normal
21965      definition of `ASM_APP_OFF', the effect is to notify the GNU
21966      assembler that it need not bother stripping comments or extra
21967      whitespace from its input.  This allows it to work a bit faster.
21968
21969      The default is false.  You should not set it to true unless you
21970      have verified that your port does not generate any extra
21971      whitespace or comments that will cause GAS to issue errors in
21972      NO_APP mode.
21973
21974  -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
21975      If this flag is true, `output_file_directive' will be called for
21976      the primary source file, immediately after printing `ASM_APP_OFF'
21977      (if that is enabled).  Most ELF assemblers expect this to be done.
21978      The default is false.
21979
21980  -- Target Hook: void TARGET_ASM_FILE_END ()
21981      Output to `asm_out_file' any text which the assembler expects to
21982      find at the end of a file.  The default is to output nothing.
21983
21984  -- Function: void file_end_indicate_exec_stack ()
21985      Some systems use a common convention, the `.note.GNU-stack'
21986      special section, to indicate whether or not an object file relies
21987      on the stack being executable.  If your system uses this
21988      convention, you should define `TARGET_ASM_FILE_END' to this
21989      function.  If you need to do other things in that hook, have your
21990      hook function call this function.
21991
21992  -- Macro: ASM_COMMENT_START
21993      A C string constant describing how to begin a comment in the target
21994      assembler language.  The compiler assumes that the comment will
21995      end at the end of the line.
21996
21997  -- Macro: ASM_APP_ON
21998      A C string constant for text to be output before each `asm'
21999      statement or group of consecutive ones.  Normally this is
22000      `"#APP"', which is a comment that has no effect on most assemblers
22001      but tells the GNU assembler that it must check the lines that
22002      follow for all valid assembler constructs.
22003
22004  -- Macro: ASM_APP_OFF
22005      A C string constant for text to be output after each `asm'
22006      statement or group of consecutive ones.  Normally this is
22007      `"#NO_APP"', which tells the GNU assembler to resume making the
22008      time-saving assumptions that are valid for ordinary compiler
22009      output.
22010
22011  -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)
22012      A C statement to output COFF information or DWARF debugging
22013      information which indicates that filename NAME is the current
22014      source file to the stdio stream STREAM.
22015
22016      This macro need not be defined if the standard form of output for
22017      the file format in use is appropriate.
22018
22019  -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
22020      A C statement to output the string STRING to the stdio stream
22021      STREAM.  If you do not call the function `output_quoted_string' in
22022      your config files, GCC will only call it to output filenames to
22023      the assembler source.  So you can use it to canonicalize the format
22024      of the filename using this macro.
22025
22026  -- Macro: ASM_OUTPUT_IDENT (STREAM, STRING)
22027      A C statement to output something to the assembler file to handle a
22028      `#ident' directive containing the text STRING.  If this macro is
22029      not defined, nothing is output for a `#ident' directive.
22030
22031  -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME,
22032           unsigned int FLAGS, unsigned int ALIGN)
22033      Output assembly directives to switch to section NAME.  The section
22034      should have attributes as specified by FLAGS, which is a bit mask
22035      of the `SECTION_*' flags defined in `output.h'.  If ALIGN is
22036      nonzero, it contains an alignment in bytes to be used for the
22037      section, otherwise some target default should be used.  Only
22038      targets that must specify an alignment within the section
22039      directive need pay attention to ALIGN - we will still use
22040      `ASM_OUTPUT_ALIGN'.
22041
22042  -- Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
22043      This flag is true if the target supports
22044      `TARGET_ASM_NAMED_SECTION'.
22045
22046  -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
22047           const char *NAME, int RELOC)
22048      Choose a set of section attributes for use by
22049      `TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a
22050      section name, and whether or not the declaration's initializer may
22051      contain runtime relocations.  DECL may be  null, in which case
22052      read-write data should be assumed.
22053
22054      The default version if this function handles choosing code vs data,
22055      read-only vs read-write data, and `flag_pic'.  You should only
22056      need to override this if your target has special flags that might
22057      be set via `__attribute__'.
22058
22059 \1f
22060 File: gccint.info,  Node: Data Output,  Next: Uninitialized Data,  Prev: File Framework,  Up: Assembler Format
22061
22062 13.19.2 Output of Data
22063 ----------------------
22064
22065  -- Target Hook: const char * TARGET_ASM_BYTE_OP
22066  -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP
22067  -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP
22068  -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP
22069  -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP
22070  -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP
22071  -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP
22072  -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP
22073  -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
22074      These hooks specify assembly directives for creating certain kinds
22075      of integer object.  The `TARGET_ASM_BYTE_OP' directive creates a
22076      byte-sized object, the `TARGET_ASM_ALIGNED_HI_OP' one creates an
22077      aligned two-byte object, and so on.  Any of the hooks may be
22078      `NULL', indicating that no suitable directive is available.
22079
22080      The compiler will print these strings at the start of a new line,
22081      followed immediately by the object's initial value.  In most cases,
22082      the string should contain a tab, a pseudo-op, and then another tab.
22083
22084  -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
22085           ALIGNED_P)
22086      The `assemble_integer' function uses this hook to output an
22087      integer object.  X is the object's value, SIZE is its size in
22088      bytes and ALIGNED_P indicates whether it is aligned.  The function
22089      should return `true' if it was able to output the object.  If it
22090      returns false, `assemble_integer' will try to split the object
22091      into smaller parts.
22092
22093      The default implementation of this hook will use the
22094      `TARGET_ASM_BYTE_OP' family of strings, returning `false' when the
22095      relevant string is `NULL'.
22096
22097  -- Macro: OUTPUT_ADDR_CONST_EXTRA (STREAM, X, FAIL)
22098      A C statement to recognize RTX patterns that `output_addr_const'
22099      can't deal with, and output assembly code to STREAM corresponding
22100      to the pattern X.  This may be used to allow machine-dependent
22101      `UNSPEC's to appear within constants.
22102
22103      If `OUTPUT_ADDR_CONST_EXTRA' fails to recognize a pattern, it must
22104      `goto fail', so that a standard error message is printed.  If it
22105      prints an error message itself, by calling, for example,
22106      `output_operand_lossage', it may just complete normally.
22107
22108  -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
22109      A C statement to output to the stdio stream STREAM an assembler
22110      instruction to assemble a string constant containing the LEN bytes
22111      at PTR.  PTR will be a C expression of type `char *' and LEN a C
22112      expression of type `int'.
22113
22114      If the assembler has a `.ascii' pseudo-op as found in the Berkeley
22115      Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'.
22116
22117  -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
22118      A C statement to output word N of a function descriptor for DECL.
22119      This must be defined if `TARGET_VTABLE_USES_DESCRIPTORS' is
22120      defined, and is otherwise unused.
22121
22122  -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
22123      You may define this macro as a C expression.  You should define the
22124      expression to have a nonzero value if GCC should output the
22125      constant pool for a function before the code for the function, or
22126      a zero value if GCC should output the constant pool after the
22127      function.  If you do not define this macro, the usual case, GCC
22128      will output the constant pool before the function.
22129
22130  -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE)
22131      A C statement to output assembler commands to define the start of
22132      the constant pool for a function.  FUNNAME is a string giving the
22133      name of the function.  Should the return type of the function be
22134      required, it can be obtained via FUNDECL.  SIZE is the size, in
22135      bytes, of the constant pool that will be written immediately after
22136      this call.
22137
22138      If no constant-pool prefix is required, the usual case, this macro
22139      need not be defined.
22140
22141  -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN,
22142           LABELNO, JUMPTO)
22143      A C statement (with or without semicolon) to output a constant in
22144      the constant pool, if it needs special treatment.  (This macro
22145      need not do anything for RTL expressions that can be output
22146      normally.)
22147
22148      The argument FILE is the standard I/O stream to output the
22149      assembler code on.  X is the RTL expression for the constant to
22150      output, and MODE is the machine mode (in case X is a `const_int').
22151      ALIGN is the required alignment for the value X; you should
22152      output an assembler directive to force this much alignment.
22153
22154      The argument LABELNO is a number to use in an internal label for
22155      the address of this pool entry.  The definition of this macro is
22156      responsible for outputting the label definition at the proper
22157      place.  Here is how to do this:
22158
22159           `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO);
22160
22161      When you output a pool entry specially, you should end with a
22162      `goto' to the label JUMPTO.  This will prevent the same pool entry
22163      from being output a second time in the usual manner.
22164
22165      You need not define this macro if it would do nothing.
22166
22167  -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE)
22168      A C statement to output assembler commands to at the end of the
22169      constant pool for a function.  FUNNAME is a string giving the name
22170      of the function.  Should the return type of the function be
22171      required, you can obtain it via FUNDECL.  SIZE is the size, in
22172      bytes, of the constant pool that GCC wrote immediately before this
22173      call.
22174
22175      If no constant-pool epilogue is required, the usual case, you need
22176      not define this macro.
22177
22178  -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C)
22179      Define this macro as a C expression which is nonzero if C is used
22180      as a logical line separator by the assembler.
22181
22182      If you do not define this macro, the default is that only the
22183      character `;' is treated as a logical line separator.
22184
22185  -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
22186  -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
22187      These target hooks are C string constants, describing the syntax
22188      in the assembler for grouping arithmetic expressions.  If not
22189      overridden, they default to normal parentheses, which is correct
22190      for most assemblers.
22191
22192  These macros are provided by `real.h' for writing the definitions of
22193 `ASM_OUTPUT_DOUBLE' and the like:
22194
22195  -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
22196  -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
22197  -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)
22198      These translate X, of type `REAL_VALUE_TYPE', to the target's
22199      floating point representation, and store its bit pattern in the
22200      variable L.  For `REAL_VALUE_TO_TARGET_SINGLE', this variable
22201      should be a simple `long int'.  For the others, it should be an
22202      array of `long int'.  The number of elements in this array is
22203      determined by the size of the desired target floating point data
22204      type: 32 bits of it go in each `long int' array element.  Each
22205      array element holds 32 bits of the result, even if `long int' is
22206      wider than 32 bits on the host machine.
22207
22208      The array element values are designed so that you can print them
22209      out using `fprintf' in the order they should appear in the target
22210      machine's memory.
22211
22212 \1f
22213 File: gccint.info,  Node: Uninitialized Data,  Next: Label Output,  Prev: Data Output,  Up: Assembler Format
22214
22215 13.19.3 Output of Uninitialized Variables
22216 -----------------------------------------
22217
22218 Each of the macros in this section is used to do the whole job of
22219 outputting a single uninitialized variable.
22220
22221  -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)
22222      A C statement (sans semicolon) to output to the stdio stream
22223      STREAM the assembler definition of a common-label named NAME whose
22224      size is SIZE bytes.  The variable ROUNDED is the size rounded up
22225      to whatever alignment the caller wants.
22226
22227      Use the expression `assemble_name (STREAM, NAME)' to output the
22228      name itself; before and after that, output the additional
22229      assembler syntax for defining the name, and a newline.
22230
22231      This macro controls how the assembler definitions of uninitialized
22232      common global variables are output.
22233
22234  -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
22235      Like `ASM_OUTPUT_COMMON' except takes the required alignment as a
22236      separate, explicit argument.  If you define this macro, it is used
22237      in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in
22238      handling the required alignment of the variable.  The alignment is
22239      specified as the number of bits.
22240
22241  -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
22242           ALIGNMENT)
22243      Like `ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
22244      to be output, if there is one, or `NULL_TREE' if there is no
22245      corresponding variable.  If you define this macro, GCC will use it
22246      in place of both `ASM_OUTPUT_COMMON' and
22247      `ASM_OUTPUT_ALIGNED_COMMON'.  Define this macro when you need to
22248      see the variable's decl in order to chose what to output.
22249
22250  -- Macro: ASM_OUTPUT_SHARED_COMMON (STREAM, NAME, SIZE, ROUNDED)
22251      If defined, it is similar to `ASM_OUTPUT_COMMON', except that it
22252      is used when NAME is shared.  If not defined, `ASM_OUTPUT_COMMON'
22253      will be used.
22254
22255  -- Macro: ASM_OUTPUT_BSS (STREAM, DECL, NAME, SIZE, ROUNDED)
22256      A C statement (sans semicolon) to output to the stdio stream
22257      STREAM the assembler definition of uninitialized global DECL named
22258      NAME whose size is SIZE bytes.  The variable ROUNDED is the size
22259      rounded up to whatever alignment the caller wants.
22260
22261      Try to use function `asm_output_bss' defined in `varasm.c' when
22262      defining this macro.  If unable, use the expression `assemble_name
22263      (STREAM, NAME)' to output the name itself; before and after that,
22264      output the additional assembler syntax for defining the name, and
22265      a newline.
22266
22267      This macro controls how the assembler definitions of uninitialized
22268      global variables are output.  This macro exists to properly
22269      support languages like C++ which do not have `common' data.
22270      However, this macro currently is not defined for all targets.  If
22271      this macro and `ASM_OUTPUT_ALIGNED_BSS' are not defined then
22272      `ASM_OUTPUT_COMMON' or `ASM_OUTPUT_ALIGNED_COMMON' or
22273      `ASM_OUTPUT_ALIGNED_DECL_COMMON' is used.
22274
22275  -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
22276      Like `ASM_OUTPUT_BSS' except takes the required alignment as a
22277      separate, explicit argument.  If you define this macro, it is used
22278      in place of `ASM_OUTPUT_BSS', and gives you more flexibility in
22279      handling the required alignment of the variable.  The alignment is
22280      specified as the number of bits.
22281
22282      Try to use function `asm_output_aligned_bss' defined in file
22283      `varasm.c' when defining this macro.
22284
22285  -- Macro: ASM_OUTPUT_SHARED_BSS (STREAM, DECL, NAME, SIZE, ROUNDED)
22286      If defined, it is similar to `ASM_OUTPUT_BSS', except that it is
22287      used when NAME is shared.  If not defined, `ASM_OUTPUT_BSS' will
22288      be used.
22289
22290  -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)
22291      A C statement (sans semicolon) to output to the stdio stream
22292      STREAM the assembler definition of a local-common-label named NAME
22293      whose size is SIZE bytes.  The variable ROUNDED is the size
22294      rounded up to whatever alignment the caller wants.
22295
22296      Use the expression `assemble_name (STREAM, NAME)' to output the
22297      name itself; before and after that, output the additional
22298      assembler syntax for defining the name, and a newline.
22299
22300      This macro controls how the assembler definitions of uninitialized
22301      static variables are output.
22302
22303  -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
22304      Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a
22305      separate, explicit argument.  If you define this macro, it is used
22306      in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in
22307      handling the required alignment of the variable.  The alignment is
22308      specified as the number of bits.
22309
22310  -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
22311           ALIGNMENT)
22312      Like `ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to
22313      be output, if there is one, or `NULL_TREE' if there is no
22314      corresponding variable.  If you define this macro, GCC will use it
22315      in place of both `ASM_OUTPUT_DECL' and `ASM_OUTPUT_ALIGNED_DECL'.
22316      Define this macro when you need to see the variable's decl in
22317      order to chose what to output.
22318
22319  -- Macro: ASM_OUTPUT_SHARED_LOCAL (STREAM, NAME, SIZE, ROUNDED)
22320      If defined, it is similar to `ASM_OUTPUT_LOCAL', except that it is
22321      used when NAME is shared.  If not defined, `ASM_OUTPUT_LOCAL' will
22322      be used.
22323
22324 \1f
22325 File: gccint.info,  Node: Label Output,  Next: Initialization,  Prev: Uninitialized Data,  Up: Assembler Format
22326
22327 13.19.4 Output and Generation of Labels
22328 ---------------------------------------
22329
22330 This is about outputting labels.
22331
22332  -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
22333      A C statement (sans semicolon) to output to the stdio stream
22334      STREAM the assembler definition of a label named NAME.  Use the
22335      expression `assemble_name (STREAM, NAME)' to output the name
22336      itself; before and after that, output the additional assembler
22337      syntax for defining the name, and a newline.  A default definition
22338      of this macro is provided which is correct for most systems.
22339
22340  -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
22341      Identical to `ASM_OUTPUT_lABEL', except that NAME is known to
22342      refer to a compiler-generated label.  The default definition uses
22343      `assemble_name_raw', which is like `assemble_name' except that it
22344      is more efficient.
22345
22346  -- Macro: SIZE_ASM_OP
22347      A C string containing the appropriate assembler directive to
22348      specify the size of a symbol, without any arguments.  On systems
22349      that use ELF, the default (in `config/elfos.h') is `"\t.size\t"';
22350      on other systems, the default is not to define this macro.
22351
22352      Define this macro only if it is correct to use the default
22353      definitions of `ASM_OUTPUT_SIZE_DIRECTIVE' and
22354      `ASM_OUTPUT_MEASURED_SIZE' for your system.  If you need your own
22355      custom definitions of those macros, or if you do not need explicit
22356      symbol sizes at all, do not define this macro.
22357
22358  -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
22359      A C statement (sans semicolon) to output to the stdio stream
22360      STREAM a directive telling the assembler that the size of the
22361      symbol NAME is SIZE.  SIZE is a `HOST_WIDE_INT'.  If you define
22362      `SIZE_ASM_OP', a default definition of this macro is provided.
22363
22364  -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
22365      A C statement (sans semicolon) to output to the stdio stream
22366      STREAM a directive telling the assembler to calculate the size of
22367      the symbol NAME by subtracting its address from the current
22368      address.
22369
22370      If you define `SIZE_ASM_OP', a default definition of this macro is
22371      provided.  The default assumes that the assembler recognizes a
22372      special `.' symbol as referring to the current address, and can
22373      calculate the difference between this and another symbol.  If your
22374      assembler does not recognize `.' or cannot do calculations with
22375      it, you will need to redefine `ASM_OUTPUT_MEASURED_SIZE' to use
22376      some other technique.
22377
22378  -- Macro: TYPE_ASM_OP
22379      A C string containing the appropriate assembler directive to
22380      specify the type of a symbol, without any arguments.  On systems
22381      that use ELF, the default (in `config/elfos.h') is `"\t.type\t"';
22382      on other systems, the default is not to define this macro.
22383
22384      Define this macro only if it is correct to use the default
22385      definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
22386      need your own custom definition of this macro, or if you do not
22387      need explicit symbol types at all, do not define this macro.
22388
22389  -- Macro: TYPE_OPERAND_FMT
22390      A C string which specifies (using `printf' syntax) the format of
22391      the second operand to `TYPE_ASM_OP'.  On systems that use ELF, the
22392      default (in `config/elfos.h') is `"@%s"'; on other systems, the
22393      default is not to define this macro.
22394
22395      Define this macro only if it is correct to use the default
22396      definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system.  If you
22397      need your own custom definition of this macro, or if you do not
22398      need explicit symbol types at all, do not define this macro.
22399
22400  -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE)
22401      A C statement (sans semicolon) to output to the stdio stream
22402      STREAM a directive telling the assembler that the type of the
22403      symbol NAME is TYPE.  TYPE is a C string; currently, that string
22404      is always either `"function"' or `"object"', but you should not
22405      count on this.
22406
22407      If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default
22408      definition of this macro is provided.
22409
22410  -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
22411      A C statement (sans semicolon) to output to the stdio stream
22412      STREAM any text necessary for declaring the name NAME of a
22413      function which is being defined.  This macro is responsible for
22414      outputting the label definition (perhaps using
22415      `ASM_OUTPUT_LABEL').  The argument DECL is the `FUNCTION_DECL'
22416      tree node representing the function.
22417
22418      If this macro is not defined, then the function name is defined in
22419      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
22420
22421      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
22422      of this macro.
22423
22424  -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
22425      A C statement (sans semicolon) to output to the stdio stream
22426      STREAM any text necessary for declaring the size of a function
22427      which is being defined.  The argument NAME is the name of the
22428      function.  The argument DECL is the `FUNCTION_DECL' tree node
22429      representing the function.
22430
22431      If this macro is not defined, then the function size is not
22432      defined.
22433
22434      You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition
22435      of this macro.
22436
22437  -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
22438      A C statement (sans semicolon) to output to the stdio stream
22439      STREAM any text necessary for declaring the name NAME of an
22440      initialized variable which is being defined.  This macro must
22441      output the label definition (perhaps using `ASM_OUTPUT_LABEL').
22442      The argument DECL is the `VAR_DECL' tree node representing the
22443      variable.
22444
22445      If this macro is not defined, then the variable name is defined in
22446      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
22447
22448      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or
22449      `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
22450
22451  -- Macro: ASM_DECLARE_CONSTANT_NAME (STREAM, NAME, EXP, SIZE)
22452      A C statement (sans semicolon) to output to the stdio stream
22453      STREAM any text necessary for declaring the name NAME of a
22454      constant which is being defined.  This macro is responsible for
22455      outputting the label definition (perhaps using
22456      `ASM_OUTPUT_LABEL').  The argument EXP is the value of the
22457      constant, and SIZE is the size of the constant in bytes.  NAME
22458      will be an internal label.
22459
22460      If this macro is not defined, then the NAME is defined in the
22461      usual manner as a label (by means of `ASM_OUTPUT_LABEL').
22462
22463      You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
22464      of this macro.
22465
22466  -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
22467      A C statement (sans semicolon) to output to the stdio stream
22468      STREAM any text necessary for claiming a register REGNO for a
22469      global variable DECL with name NAME.
22470
22471      If you don't define this macro, that is equivalent to defining it
22472      to do nothing.
22473
22474  -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)
22475      A C statement (sans semicolon) to finish up declaring a variable
22476      name once the compiler has processed its initializer fully and
22477      thus has had a chance to determine the size of an array when
22478      controlled by an initializer.  This is used on systems where it's
22479      necessary to declare something about the size of the object.
22480
22481      If you don't define this macro, that is equivalent to defining it
22482      to do nothing.
22483
22484      You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or
22485      `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
22486
22487  -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
22488           char *NAME)
22489      This target hook is a function to output to the stdio stream
22490      STREAM some commands that will make the label NAME global; that
22491      is, available for reference from other files.
22492
22493      The default implementation relies on a proper definition of
22494      `GLOBAL_ASM_OP'.
22495
22496  -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME)
22497      A C statement (sans semicolon) to output to the stdio stream
22498      STREAM some commands that will make the label NAME weak; that is,
22499      available for reference from other files but only used if no other
22500      definition is available.  Use the expression `assemble_name
22501      (STREAM, NAME)' to output the name itself; before and after that,
22502      output the additional assembler syntax for making that name weak,
22503      and a newline.
22504
22505      If you don't define this macro or `ASM_WEAKEN_DECL', GCC will not
22506      support weak symbols and you should not define the `SUPPORTS_WEAK'
22507      macro.
22508
22509  -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
22510      Combines (and replaces) the function of `ASM_WEAKEN_LABEL' and
22511      `ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
22512      or variable decl.  If VALUE is not `NULL', this C statement should
22513      output to the stdio stream STREAM assembler code which defines
22514      (equates) the weak symbol NAME to have the value VALUE.  If VALUE
22515      is `NULL', it should output commands to make NAME weak.
22516
22517  -- Macro: SUPPORTS_WEAK
22518      A C expression which evaluates to true if the target supports weak
22519      symbols.
22520
22521      If you don't define this macro, `defaults.h' provides a default
22522      definition.  If either `ASM_WEAKEN_LABEL' or `ASM_WEAKEN_DECL' is
22523      defined, the default definition is `1'; otherwise, it is `0'.
22524      Define this macro if you want to control weak symbol support with
22525      a compiler flag such as `-melf'.
22526
22527  -- Macro: MAKE_DECL_ONE_ONLY (DECL)
22528      A C statement (sans semicolon) to mark DECL to be emitted as a
22529      public symbol such that extra copies in multiple translation units
22530      will be discarded by the linker.  Define this macro if your object
22531      file format provides support for this concept, such as the `COMDAT'
22532      section flags in the Microsoft Windows PE/COFF format, and this
22533      support requires changes to DECL, such as putting it in a separate
22534      section.
22535
22536  -- Macro: SUPPORTS_ONE_ONLY
22537      A C expression which evaluates to true if the target supports
22538      one-only semantics.
22539
22540      If you don't define this macro, `varasm.c' provides a default
22541      definition.  If `MAKE_DECL_ONE_ONLY' is defined, the default
22542      definition is `1'; otherwise, it is `0'.  Define this macro if you
22543      want to control one-only symbol support with a compiler flag, or if
22544      setting the `DECL_ONE_ONLY' flag is enough to mark a declaration to
22545      be emitted as one-only.
22546
22547  -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, const
22548           char *VISIBILITY)
22549      This target hook is a function to output to ASM_OUT_FILE some
22550      commands that will make the symbol(s) associated with DECL have
22551      hidden, protected or internal visibility as specified by
22552      VISIBILITY.
22553
22554  -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
22555      A C expression that evaluates to true if the target's linker
22556      expects that weak symbols do not appear in a static archive's
22557      table of contents.  The default is `0'.
22558
22559      Leaving weak symbols out of an archive's table of contents means
22560      that, if a symbol will only have a definition in one translation
22561      unit and will have undefined references from other translation
22562      units, that symbol should not be weak.  Defining this macro to be
22563      nonzero will thus have the effect that certain symbols that would
22564      normally be weak (explicit template instantiations, and vtables
22565      for polymorphic classes with noninline key methods) will instead
22566      be nonweak.
22567
22568      The C++ ABI requires this macro to be zero.  Define this macro for
22569      targets where full C++ ABI compliance is impossible and where
22570      linker restrictions require weak symbols to be left out of a
22571      static archive's table of contents.
22572
22573  -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)
22574      A C statement (sans semicolon) to output to the stdio stream
22575      STREAM any text necessary for declaring the name of an external
22576      symbol named NAME which is referenced in this compilation but not
22577      defined.  The value of DECL is the tree node for the declaration.
22578
22579      This macro need not be defined if it does not need to output
22580      anything.  The GNU assembler and most Unix assemblers don't
22581      require anything.
22582
22583  -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF)
22584      This target hook is a function to output to ASM_OUT_FILE an
22585      assembler pseudo-op to declare a library function name external.
22586      The name of the library function is given by SYMREF, which is a
22587      `symbol_ref'.
22588
22589  -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (tree DECL)
22590      This target hook is a function to output to ASM_OUT_FILE an
22591      assembler directive to annotate used symbol.  Darwin target use
22592      .no_dead_code_strip directive.
22593
22594  -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
22595      A C statement (sans semicolon) to output to the stdio stream
22596      STREAM a reference in assembler syntax to a label named NAME.
22597      This should add `_' to the front of the name, if that is customary
22598      on your operating system, as it is in most Berkeley Unix systems.
22599      This macro is used in `assemble_name'.
22600
22601  -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
22602      A C statement (sans semicolon) to output a reference to
22603      `SYMBOL_REF' SYM.  If not defined, `assemble_name' will be used to
22604      output the name of the symbol.  This macro may be used to modify
22605      the way a symbol is referenced depending on information encoded by
22606      `TARGET_ENCODE_SECTION_INFO'.
22607
22608  -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
22609      A C statement (sans semicolon) to output a reference to BUF, the
22610      result of `ASM_GENERATE_INTERNAL_LABEL'.  If not defined,
22611      `assemble_name' will be used to output the name of the symbol.
22612      This macro is not used by `output_asm_label', or the `%l'
22613      specifier that calls it; the intention is that this macro should
22614      be set when it is necessary to output a label differently when its
22615      address is being taken.
22616
22617  -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const
22618           char *PREFIX, unsigned long LABELNO)
22619      A function to output to the stdio stream STREAM a label whose name
22620      is made from the string PREFIX and the number LABELNO.
22621
22622      It is absolutely essential that these labels be distinct from the
22623      labels used for user-level functions and variables.  Otherwise,
22624      certain programs will have name conflicts with internal labels.
22625
22626      It is desirable to exclude internal labels from the symbol table
22627      of the object file.  Most assemblers have a naming convention for
22628      labels that should be excluded; on many systems, the letter `L' at
22629      the beginning of a label has this effect.  You should find out what
22630      convention your system uses, and follow it.
22631
22632      The default version of this function utilizes
22633      `ASM_GENERATE_INTERNAL_LABEL'.
22634
22635  -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
22636      A C statement to output to the stdio stream STREAM a debug info
22637      label whose name is made from the string PREFIX and the number
22638      NUM.  This is useful for VLIW targets, where debug info labels may
22639      need to be treated differently than branch target labels.  On some
22640      systems, branch target labels must be at the beginning of
22641      instruction bundles, but debug info labels can occur in the middle
22642      of instruction bundles.
22643
22644      If this macro is not defined, then
22645      `(*targetm.asm_out.internal_label)' will be used.
22646
22647  -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
22648      A C statement to store into the string STRING a label whose name
22649      is made from the string PREFIX and the number NUM.
22650
22651      This string, when output subsequently by `assemble_name', should
22652      produce the output that `(*targetm.asm_out.internal_label)' would
22653      produce with the same PREFIX and NUM.
22654
22655      If the string begins with `*', then `assemble_name' will output
22656      the rest of the string unchanged.  It is often convenient for
22657      `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way.  If the
22658      string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to
22659      output the string, and may change it.  (Of course,
22660      `ASM_OUTPUT_LABELREF' is also part of your machine description, so
22661      you should know what it does on your machine.)
22662
22663  -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
22664      A C expression to assign to OUTVAR (which is a variable of type
22665      `char *') a newly allocated string made from the string NAME and
22666      the number NUMBER, with some suitable punctuation added.  Use
22667      `alloca' to get space for the string.
22668
22669      The string will be used as an argument to `ASM_OUTPUT_LABELREF' to
22670      produce an assembler label for an internal static variable whose
22671      name is NAME.  Therefore, the string must be such as to result in
22672      valid assembler code.  The argument NUMBER is different each time
22673      this macro is executed; it prevents conflicts between
22674      similarly-named internal static variables in different scopes.
22675
22676      Ideally this string should not be a valid C identifier, to prevent
22677      any conflict with the user's own symbols.  Most assemblers allow
22678      periods or percent signs in assembler symbols; putting at least
22679      one of these between the name and the number will suffice.
22680
22681      If this macro is not defined, a default definition will be provided
22682      which is correct for most systems.
22683
22684  -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE)
22685      A C statement to output to the stdio stream STREAM assembler code
22686      which defines (equates) the symbol NAME to have the value VALUE.
22687
22688      If `SET_ASM_OP' is defined, a default definition is provided which
22689      is correct for most systems.
22690
22691  -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
22692           DECL_OF_VALUE)
22693      A C statement to output to the stdio stream STREAM assembler code
22694      which defines (equates) the symbol whose tree node is DECL_OF_NAME
22695      to have the value of the tree node DECL_OF_VALUE.  This macro will
22696      be used in preference to `ASM_OUTPUT_DEF' if it is defined and if
22697      the tree nodes are available.
22698
22699      If `SET_ASM_OP' is defined, a default definition is provided which
22700      is correct for most systems.
22701
22702  -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
22703      A C statement that evaluates to true if the assembler code which
22704      defines (equates) the symbol whose tree node is DECL_OF_NAME to
22705      have the value of the tree node DECL_OF_VALUE should be emitted
22706      near the end of the current compilation unit.  The default is to
22707      not defer output of defines.  This macro affects defines output by
22708      `ASM_OUTPUT_DEF' and `ASM_OUTPUT_DEF_FROM_DECLS'.
22709
22710  -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
22711      A C statement to output to the stdio stream STREAM assembler code
22712      which defines (equates) the weak symbol NAME to have the value
22713      VALUE.  If VALUE is `NULL', it defines NAME as an undefined weak
22714      symbol.
22715
22716      Define this macro if the target only supports weak aliases; define
22717      `ASM_OUTPUT_DEF' instead if possible.
22718
22719  -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
22720           SEL_NAME)
22721      Define this macro to override the default assembler names used for
22722      Objective-C methods.
22723
22724      The default name is a unique method number followed by the name of
22725      the class (e.g. `_1_Foo').  For methods in categories, the name of
22726      the category is also included in the assembler name (e.g.
22727      `_1_Foo_Bar').
22728
22729      These names are safe on most systems, but make debugging difficult
22730      since the method's selector is not present in the name.
22731      Therefore, particular systems define other ways of computing names.
22732
22733      BUF is an expression of type `char *' which gives you a buffer in
22734      which to store the name; its length is as long as CLASS_NAME,
22735      CAT_NAME and SEL_NAME put together, plus 50 characters extra.
22736
22737      The argument IS_INST specifies whether the method is an instance
22738      method or a class method; CLASS_NAME is the name of the class;
22739      CAT_NAME is the name of the category (or `NULL' if the method is
22740      not in a category); and SEL_NAME is the name of the selector.
22741
22742      On systems where the assembler can handle quoted names, you can
22743      use this macro to provide more human-readable names.
22744
22745  -- Macro: ASM_DECLARE_CLASS_REFERENCE (STREAM, NAME)
22746      A C statement (sans semicolon) to output to the stdio stream
22747      STREAM commands to declare that the label NAME is an Objective-C
22748      class reference.  This is only needed for targets whose linkers
22749      have special support for NeXT-style runtimes.
22750
22751  -- Macro: ASM_DECLARE_UNRESOLVED_REFERENCE (STREAM, NAME)
22752      A C statement (sans semicolon) to output to the stdio stream
22753      STREAM commands to declare that the label NAME is an unresolved
22754      Objective-C class reference.  This is only needed for targets
22755      whose linkers have special support for NeXT-style runtimes.
22756
22757 \1f
22758 File: gccint.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format
22759
22760 13.19.5 How Initialization Functions Are Handled
22761 ------------------------------------------------
22762
22763 The compiled code for certain languages includes "constructors" (also
22764 called "initialization routines")--functions to initialize data in the
22765 program when the program is started.  These functions need to be called
22766 before the program is "started"--that is to say, before `main' is
22767 called.
22768
22769  Compiling some languages generates "destructors" (also called
22770 "termination routines") that should be called when the program
22771 terminates.
22772
22773  To make the initialization and termination functions work, the compiler
22774 must output something in the assembler code to cause those functions to
22775 be called at the appropriate time.  When you port the compiler to a new
22776 system, you need to specify how to do this.
22777
22778  There are two major ways that GCC currently supports the execution of
22779 initialization and termination functions.  Each way has two variants.
22780 Much of the structure is common to all four variations.
22781
22782  The linker must build two lists of these functions--a list of
22783 initialization functions, called `__CTOR_LIST__', and a list of
22784 termination functions, called `__DTOR_LIST__'.
22785
22786  Each list always begins with an ignored function pointer (which may
22787 hold 0, -1, or a count of the function pointers after it, depending on
22788 the environment).  This is followed by a series of zero or more function
22789 pointers to constructors (or destructors), followed by a function
22790 pointer containing zero.
22791
22792  Depending on the operating system and its executable file format,
22793 either `crtstuff.c' or `libgcc2.c' traverses these lists at startup
22794 time and exit time.  Constructors are called in reverse order of the
22795 list; destructors in forward order.
22796
22797  The best way to handle static constructors works only for object file
22798 formats which provide arbitrarily-named sections.  A section is set
22799 aside for a list of constructors, and another for a list of destructors.
22800 Traditionally these are called `.ctors' and `.dtors'.  Each object file
22801 that defines an initialization function also puts a word in the
22802 constructor section to point to that function.  The linker accumulates
22803 all these words into one contiguous `.ctors' section.  Termination
22804 functions are handled similarly.
22805
22806  This method will be chosen as the default by `target-def.h' if
22807 `TARGET_ASM_NAMED_SECTION' is defined.  A target that does not support
22808 arbitrary sections, but does support special designated constructor and
22809 destructor sections may define `CTORS_SECTION_ASM_OP' and
22810 `DTORS_SECTION_ASM_OP' to achieve the same effect.
22811
22812  When arbitrary sections are available, there are two variants,
22813 depending upon how the code in `crtstuff.c' is called.  On systems that
22814 support a ".init" section which is executed at program startup, parts
22815 of `crtstuff.c' are compiled into that section.  The program is linked
22816 by the `gcc' driver like this:
22817
22818      ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
22819
22820  The prologue of a function (`__init') appears in the `.init' section
22821 of `crti.o'; the epilogue appears in `crtn.o'.  Likewise for the
22822 function `__fini' in the ".fini" section.  Normally these files are
22823 provided by the operating system or by the GNU C library, but are
22824 provided by GCC for a few targets.
22825
22826  The objects `crtbegin.o' and `crtend.o' are (for most targets)
22827 compiled from `crtstuff.c'.  They contain, among other things, code
22828 fragments within the `.init' and `.fini' sections that branch to
22829 routines in the `.text' section.  The linker will pull all parts of a
22830 section together, which results in a complete `__init' function that
22831 invokes the routines we need at startup.
22832
22833  To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
22834 properly.
22835
22836  If no init section is available, when GCC compiles any function called
22837 `main' (or more accurately, any function designated as a program entry
22838 point by the language front end calling `expand_main_function'), it
22839 inserts a procedure call to `__main' as the first executable code after
22840 the function prologue.  The `__main' function is defined in `libgcc2.c'
22841 and runs the global constructors.
22842
22843  In file formats that don't support arbitrary sections, there are again
22844 two variants.  In the simplest variant, the GNU linker (GNU `ld') and
22845 an `a.out' format must be used.  In this case, `TARGET_ASM_CONSTRUCTOR'
22846 is defined to produce a `.stabs' entry of type `N_SETT', referencing
22847 the name `__CTOR_LIST__', and with the address of the void function
22848 containing the initialization code as its value.  The GNU linker
22849 recognizes this as a request to add the value to a "set"; the values
22850 are accumulated, and are eventually placed in the executable as a
22851 vector in the format described above, with a leading (ignored) count
22852 and a trailing zero element.  `TARGET_ASM_DESTRUCTOR' is handled
22853 similarly.  Since no init section is available, the absence of
22854 `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main'
22855 as above, starting the initialization process.
22856
22857  The last variant uses neither arbitrary sections nor the GNU linker.
22858 This is preferable when you want to do dynamic linking and when using
22859 file formats which the GNU linker does not support, such as `ECOFF'.  In
22860 this case, `TARGET_HAVE_CTORS_DTORS' is false, initialization and
22861 termination functions are recognized simply by their names.  This
22862 requires an extra program in the linkage step, called `collect2'.  This
22863 program pretends to be the linker, for use with GCC; it does its job by
22864 running the ordinary linker, but also arranges to include the vectors of
22865 initialization and termination functions.  These functions are called
22866 via `__main' as described above.  In order to use this method,
22867 `use_collect2' must be defined in the target in `config.gcc'.
22868
22869  The following section describes the specific macros that control and
22870 customize the handling of initialization and termination functions.
22871
22872 \1f
22873 File: gccint.info,  Node: Macros for Initialization,  Next: Instruction Output,  Prev: Initialization,  Up: Assembler Format
22874
22875 13.19.6 Macros Controlling Initialization Routines
22876 --------------------------------------------------
22877
22878 Here are the macros that control how the compiler handles initialization
22879 and termination functions:
22880
22881  -- Macro: INIT_SECTION_ASM_OP
22882      If defined, a C string constant, including spacing, for the
22883      assembler operation to identify the following data as
22884      initialization code.  If not defined, GCC will assume such a
22885      section does not exist.  When you are using special sections for
22886      initialization and termination functions, this macro also controls
22887      how `crtstuff.c' and `libgcc2.c' arrange to run the initialization
22888      functions.
22889
22890  -- Macro: HAS_INIT_SECTION
22891      If defined, `main' will not call `__main' as described above.
22892      This macro should be defined for systems that control start-up code
22893      on a symbol-by-symbol basis, such as OSF/1, and should not be
22894      defined explicitly for systems that support `INIT_SECTION_ASM_OP'.
22895
22896  -- Macro: LD_INIT_SWITCH
22897      If defined, a C string constant for a switch that tells the linker
22898      that the following symbol is an initialization routine.
22899
22900  -- Macro: LD_FINI_SWITCH
22901      If defined, a C string constant for a switch that tells the linker
22902      that the following symbol is a finalization routine.
22903
22904  -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC)
22905      If defined, a C statement that will write a function that can be
22906      automatically called when a shared library is loaded.  The function
22907      should call FUNC, which takes no arguments.  If not defined, and
22908      the object format requires an explicit initialization function,
22909      then a function called `_GLOBAL__DI' will be generated.
22910
22911      This function and the following one are used by collect2 when
22912      linking a shared library that needs constructors or destructors,
22913      or has DWARF2 exception tables embedded in the code.
22914
22915  -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC)
22916      If defined, a C statement that will write a function that can be
22917      automatically called when a shared library is unloaded.  The
22918      function should call FUNC, which takes no arguments.  If not
22919      defined, and the object format requires an explicit finalization
22920      function, then a function called `_GLOBAL__DD' will be generated.
22921
22922  -- Macro: INVOKE__main
22923      If defined, `main' will call `__main' despite the presence of
22924      `INIT_SECTION_ASM_OP'.  This macro should be defined for systems
22925      where the init section is not actually run automatically, but is
22926      still useful for collecting the lists of constructors and
22927      destructors.
22928
22929  -- Macro: SUPPORTS_INIT_PRIORITY
22930      If nonzero, the C++ `init_priority' attribute is supported and the
22931      compiler should emit instructions to control the order of
22932      initialization of objects.  If zero, the compiler will issue an
22933      error message upon encountering an `init_priority' attribute.
22934
22935  -- Target Hook: bool TARGET_HAVE_CTORS_DTORS
22936      This value is true if the target supports some "native" method of
22937      collecting constructors and destructors to be run at startup and
22938      exit.  It is false if we must use `collect2'.
22939
22940  -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
22941      If defined, a function that outputs assembler code to arrange to
22942      call the function referenced by SYMBOL at initialization time.
22943
22944      Assume that SYMBOL is a `SYMBOL_REF' for a function taking no
22945      arguments and with no return value.  If the target supports
22946      initialization priorities, PRIORITY is a value between 0 and
22947      `MAX_INIT_PRIORITY'; otherwise it must be `DEFAULT_INIT_PRIORITY'.
22948
22949      If this macro is not defined by the target, a suitable default will
22950      be chosen if (1) the target supports arbitrary section names, (2)
22951      the target defines `CTORS_SECTION_ASM_OP', or (3) `USE_COLLECT2'
22952      is not defined.
22953
22954  -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
22955      This is like `TARGET_ASM_CONSTRUCTOR' but used for termination
22956      functions rather than initialization functions.
22957
22958  If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
22959 generated for the generated object file will have static linkage.
22960
22961  If your system uses `collect2' as the means of processing
22962 constructors, then that program normally uses `nm' to scan an object
22963 file for constructor functions to be called.
22964
22965  On certain kinds of systems, you can define this macro to make
22966 `collect2' work faster (and, in some cases, make it work at all):
22967
22968  -- Macro: OBJECT_FORMAT_COFF
22969      Define this macro if the system uses COFF (Common Object File
22970      Format) object files, so that `collect2' can assume this format
22971      and scan object files directly for dynamic constructor/destructor
22972      functions.
22973
22974      This macro is effective only in a native compiler; `collect2' as
22975      part of a cross compiler always uses `nm' for the target machine.
22976
22977  -- Macro: REAL_NM_FILE_NAME
22978      Define this macro as a C string constant containing the file name
22979      to use to execute `nm'.  The default is to search the path
22980      normally for `nm'.
22981
22982      If your system supports shared libraries and has a program to list
22983      the dynamic dependencies of a given library or executable, you can
22984      define these macros to enable support for running initialization
22985      and termination functions in shared libraries:
22986
22987  -- Macro: LDD_SUFFIX
22988      Define this macro to a C string constant containing the name of
22989      the program which lists dynamic dependencies, like `"ldd"' under
22990      SunOS 4.
22991
22992  -- Macro: PARSE_LDD_OUTPUT (PTR)
22993      Define this macro to be C code that extracts filenames from the
22994      output of the program denoted by `LDD_SUFFIX'.  PTR is a variable
22995      of type `char *' that points to the beginning of a line of output
22996      from `LDD_SUFFIX'.  If the line lists a dynamic dependency, the
22997      code must advance PTR to the beginning of the filename on that
22998      line.  Otherwise, it must set PTR to `NULL'.
22999
23000 \1f
23001 File: gccint.info,  Node: Instruction Output,  Next: Dispatch Tables,  Prev: Macros for Initialization,  Up: Assembler Format
23002
23003 13.19.7 Output of Assembler Instructions
23004 ----------------------------------------
23005
23006 This describes assembler instruction output.
23007
23008  -- Macro: REGISTER_NAMES
23009      A C initializer containing the assembler's names for the machine
23010      registers, each one as a C string constant.  This is what
23011      translates register numbers in the compiler into assembler
23012      language.
23013
23014  -- Macro: ADDITIONAL_REGISTER_NAMES
23015      If defined, a C initializer for an array of structures containing
23016      a name and a register number.  This macro defines additional names
23017      for hard registers, thus allowing the `asm' option in declarations
23018      to refer to registers using alternate names.
23019
23020  -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR)
23021      Define this macro if you are using an unusual assembler that
23022      requires different names for the machine instructions.
23023
23024      The definition is a C statement or statements which output an
23025      assembler instruction opcode to the stdio stream STREAM.  The
23026      macro-operand PTR is a variable of type `char *' which points to
23027      the opcode name in its "internal" form--the form that is written
23028      in the machine description.  The definition should output the
23029      opcode name to STREAM, performing any translation you desire, and
23030      increment the variable PTR to point at the end of the opcode so
23031      that it will not be output twice.
23032
23033      In fact, your macro definition may process less than the entire
23034      opcode name, or more than the opcode name; but if you want to
23035      process text that includes `%'-sequences to substitute operands,
23036      you must take care of the substitution yourself.  Just be sure to
23037      increment PTR over whatever text should not be output normally.
23038
23039      If you need to look at the operand values, they can be found as the
23040      elements of `recog_data.operand'.
23041
23042      If the macro definition does nothing, the instruction is output in
23043      the usual way.
23044
23045  -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)
23046      If defined, a C statement to be executed just prior to the output
23047      of assembler code for INSN, to modify the extracted operands so
23048      they will be output differently.
23049
23050      Here the argument OPVEC is the vector containing the operands
23051      extracted from INSN, and NOPERANDS is the number of elements of
23052      the vector which contain meaningful data for this insn.  The
23053      contents of this vector are what will be used to convert the insn
23054      template into assembler code, so you can change the assembler
23055      output by changing the contents of the vector.
23056
23057      This macro is useful when various assembler syntaxes share a single
23058      file of instruction patterns; by defining this macro differently,
23059      you can cause a large class of instructions to be output
23060      differently (such as with rearranged operands).  Naturally,
23061      variations in assembler syntax affecting individual insn patterns
23062      ought to be handled by writing conditional output routines in
23063      those patterns.
23064
23065      If this macro is not defined, it is equivalent to a null statement.
23066
23067  -- Macro: PRINT_OPERAND (STREAM, X, CODE)
23068      A C compound statement to output to stdio stream STREAM the
23069      assembler syntax for an instruction operand X.  X is an RTL
23070      expression.
23071
23072      CODE is a value that can be used to specify one of several ways of
23073      printing the operand.  It is used when identical operands must be
23074      printed differently depending on the context.  CODE comes from the
23075      `%' specification that was used to request printing of the
23076      operand.  If the specification was just `%DIGIT' then CODE is 0;
23077      if the specification was `%LTR DIGIT' then CODE is the ASCII code
23078      for LTR.
23079
23080      If X is a register, this macro should print the register's name.
23081      The names can be found in an array `reg_names' whose type is `char
23082      *[]'.  `reg_names' is initialized from `REGISTER_NAMES'.
23083
23084      When the machine description has a specification `%PUNCT' (a `%'
23085      followed by a punctuation character), this macro is called with a
23086      null pointer for X and the punctuation character for CODE.
23087
23088  -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
23089      A C expression which evaluates to true if CODE is a valid
23090      punctuation character for use in the `PRINT_OPERAND' macro.  If
23091      `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
23092      punctuation characters (except for the standard one, `%') are used
23093      in this way.
23094
23095  -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
23096      A C compound statement to output to stdio stream STREAM the
23097      assembler syntax for an instruction operand that is a memory
23098      reference whose address is X.  X is an RTL expression.
23099
23100      On some machines, the syntax for a symbolic address depends on the
23101      section that the address refers to.  On these machines, define the
23102      hook `TARGET_ENCODE_SECTION_INFO' to store the information into the
23103      `symbol_ref', and then check for it here.  *Note Assembler
23104      Format::.
23105
23106  -- Macro: DBR_OUTPUT_SEQEND (FILE)
23107      A C statement, to be executed after all slot-filler instructions
23108      have been output.  If necessary, call `dbr_sequence_length' to
23109      determine the number of slots filled in a sequence (zero if not
23110      currently outputting a sequence), to decide how many no-ops to
23111      output, or whatever.
23112
23113      Don't define this macro if it has nothing to do, but it is helpful
23114      in reading assembly output if the extent of the delay sequence is
23115      made explicit (e.g. with white space).
23116
23117  Note that output routines for instructions with delay slots must be
23118 prepared to deal with not being output as part of a sequence (i.e. when
23119 the scheduling pass is not run, or when no slot fillers could be
23120 found.)  The variable `final_sequence' is null when not processing a
23121 sequence, otherwise it contains the `sequence' rtx being output.
23122
23123  -- Macro: REGISTER_PREFIX
23124  -- Macro: LOCAL_LABEL_PREFIX
23125  -- Macro: USER_LABEL_PREFIX
23126  -- Macro: IMMEDIATE_PREFIX
23127      If defined, C string expressions to be used for the `%R', `%L',
23128      `%U', and `%I' options of `asm_fprintf' (see `final.c').  These
23129      are useful when a single `md' file must support multiple assembler
23130      formats.  In that case, the various `tm.h' files can define these
23131      macros differently.
23132
23133  -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
23134      If defined this macro should expand to a series of `case'
23135      statements which will be parsed inside the `switch' statement of
23136      the `asm_fprintf' function.  This allows targets to define extra
23137      printf formats which may useful when generating their assembler
23138      statements.  Note that uppercase letters are reserved for future
23139      generic extensions to asm_fprintf, and so are not available to
23140      target specific code.  The output file is given by the parameter
23141      FILE.  The varargs input pointer is ARGPTR and the rest of the
23142      format string, starting the character after the one that is being
23143      switched upon, is pointed to by FORMAT.
23144
23145  -- Macro: ASSEMBLER_DIALECT
23146      If your target supports multiple dialects of assembler language
23147      (such as different opcodes), define this macro as a C expression
23148      that gives the numeric index of the assembler language dialect to
23149      use, with zero as the first variant.
23150
23151      If this macro is defined, you may use constructs of the form
23152           `{option0|option1|option2...}'
23153      in the output templates of patterns (*note Output Template::) or
23154      in the first argument of `asm_fprintf'.  This construct outputs
23155      `option0', `option1', `option2', etc., if the value of
23156      `ASSEMBLER_DIALECT' is zero, one, two, etc.  Any special characters
23157      within these strings retain their usual meaning.  If there are
23158      fewer alternatives within the braces than the value of
23159      `ASSEMBLER_DIALECT', the construct outputs nothing.
23160
23161      If you do not define this macro, the characters `{', `|' and `}'
23162      do not have any special meaning when used in templates or operands
23163      to `asm_fprintf'.
23164
23165      Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX',
23166      `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the
23167      variations in assembler language syntax with that mechanism.
23168      Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax
23169      if the syntax variant are larger and involve such things as
23170      different opcodes or operand order.
23171
23172  -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO)
23173      A C expression to output to STREAM some assembler code which will
23174      push hard register number REGNO onto the stack.  The code need not
23175      be optimal, since this macro is used only when profiling.
23176
23177  -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO)
23178      A C expression to output to STREAM some assembler code which will
23179      pop hard register number REGNO off of the stack.  The code need
23180      not be optimal, since this macro is used only when profiling.
23181
23182 \1f
23183 File: gccint.info,  Node: Dispatch Tables,  Next: Exception Region Output,  Prev: Instruction Output,  Up: Assembler Format
23184
23185 13.19.8 Output of Dispatch Tables
23186 ---------------------------------
23187
23188 This concerns dispatch tables.
23189
23190  -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
23191      A C statement to output to the stdio stream STREAM an assembler
23192      pseudo-instruction to generate a difference between two labels.
23193      VALUE and REL are the numbers of two internal labels.  The
23194      definitions of these labels are output using
23195      `(*targetm.asm_out.internal_label)', and they must be printed in
23196      the same way here.  For example,
23197
23198           fprintf (STREAM, "\t.word L%d-L%d\n",
23199                    VALUE, REL)
23200
23201      You must provide this macro on machines where the addresses in a
23202      dispatch table are relative to the table's own address.  If
23203      defined, GCC will also use this macro on all machines when
23204      producing PIC.  BODY is the body of the `ADDR_DIFF_VEC'; it is
23205      provided so that the mode and flags can be read.
23206
23207  -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
23208      This macro should be provided on machines where the addresses in a
23209      dispatch table are absolute.
23210
23211      The definition should be a C statement to output to the stdio
23212      stream STREAM an assembler pseudo-instruction to generate a
23213      reference to a label.  VALUE is the number of an internal label
23214      whose definition is output using
23215      `(*targetm.asm_out.internal_label)'.  For example,
23216
23217           fprintf (STREAM, "\t.word L%d\n", VALUE)
23218
23219  -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
23220      Define this if the label before a jump-table needs to be output
23221      specially.  The first three arguments are the same as for
23222      `(*targetm.asm_out.internal_label)'; the fourth argument is the
23223      jump-table which follows (a `jump_insn' containing an `addr_vec'
23224      or `addr_diff_vec').
23225
23226      This feature is used on system V to output a `swbeg' statement for
23227      the table.
23228
23229      If this macro is not defined, these labels are output with
23230      `(*targetm.asm_out.internal_label)'.
23231
23232  -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
23233      Define this if something special must be output at the end of a
23234      jump-table.  The definition should be a C statement to be executed
23235      after the assembler code for the table is written.  It should write
23236      the appropriate code to stdio stream STREAM.  The argument TABLE
23237      is the jump-table insn, and NUM is the label-number of the
23238      preceding label.
23239
23240      If this macro is not defined, nothing special is output at the end
23241      of the jump-table.
23242
23243  -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (STREAM, DECL,
23244           FOR_EH, EMPTY)
23245      This target hook emits a label at the beginning of each FDE.  It
23246      should be defined on targets where FDEs need special labels, and it
23247      should write the appropriate label, for the FDE associated with the
23248      function declaration DECL, to the stdio stream STREAM.  The third
23249      argument, FOR_EH, is a boolean: true if this is for an exception
23250      table.  The fourth argument, EMPTY, is a boolean: true if this is
23251      a placeholder label for an omitted FDE.
23252
23253      The default is that FDEs are not given nonlocal labels.
23254
23255  -- Taget Hook: void TARGET_UNWIND_EMIT (FILE * STREAM, rtx INSN)
23256      This target hook emits and assembly directives required to unwind
23257      the given instruction.  This is only used when TARGET_UNWIND_INFO
23258      is set.
23259
23260 \1f
23261 File: gccint.info,  Node: Exception Region Output,  Next: Alignment Output,  Prev: Dispatch Tables,  Up: Assembler Format
23262
23263 13.19.9 Assembler Commands for Exception Regions
23264 ------------------------------------------------
23265
23266 This describes commands marking the start and the end of an exception
23267 region.
23268
23269  -- Macro: EH_FRAME_SECTION_NAME
23270      If defined, a C string constant for the name of the section
23271      containing exception handling frame unwind information.  If not
23272      defined, GCC will provide a default definition if the target
23273      supports named sections.  `crtstuff.c' uses this macro to switch
23274      to the appropriate section.
23275
23276      You should define this symbol if your target supports DWARF 2 frame
23277      unwind information and the default definition does not work.
23278
23279  -- Macro: EH_FRAME_IN_DATA_SECTION
23280      If defined, DWARF 2 frame unwind information will be placed in the
23281      data section even though the target supports named sections.  This
23282      might be necessary, for instance, if the system linker does garbage
23283      collection and sections cannot be marked as not to be collected.
23284
23285      Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also
23286      defined.
23287
23288  -- Macro: EH_TABLES_CAN_BE_READ_ONLY
23289      Define this macro to 1 if your target is such that no frame unwind
23290      information encoding used with non-PIC code will ever require a
23291      runtime relocation, but the linker may not support merging
23292      read-only and read-write sections into a single read-write section.
23293
23294  -- Macro: MASK_RETURN_ADDR
23295      An rtx used to mask the return address found via
23296      `RETURN_ADDR_RTX', so that it does not contain any extraneous set
23297      bits in it.
23298
23299  -- Macro: DWARF2_UNWIND_INFO
23300      Define this macro to 0 if your target supports DWARF 2 frame unwind
23301      information, but it does not yet work with exception handling.
23302      Otherwise, if your target supports this information (if it defines
23303      `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or
23304      `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1.
23305
23306      If `TARGET_UNWIND_INFO' is defined, the target specific unwinder
23307      will be used in all cases.  Defining this macro will enable the
23308      generation of DWARF 2 frame debugging information.
23309
23310      If `TARGET_UNWIND_INFO' is not defined, and this macro is defined
23311      to 1, the DWARF 2 unwinder will be the default exception handling
23312      mechanism; otherwise, `setjmp'/`longjmp' will be used by default.
23313
23314  -- Macro: TARGET_UNWIND_INFO
23315      Define this macro if your target has ABI specified unwind tables.
23316      Usually these will be output by `TARGET_UNWIND_EMIT'.
23317
23318  -- Macro: MUST_USE_SJLJ_EXCEPTIONS
23319      This macro need only be defined if `DWARF2_UNWIND_INFO' is
23320      runtime-variable.  In that case, `except.h' cannot correctly
23321      determine the corresponding definition of
23322      `MUST_USE_SJLJ_EXCEPTIONS', so the target must provide it directly.
23323
23324  -- Macro: DWARF_CIE_DATA_ALIGNMENT
23325      This macro need only be defined if the target might save registers
23326      in the function prologue at an offset to the stack pointer that is
23327      not aligned to `UNITS_PER_WORD'.  The definition should be the
23328      negative minimum alignment if `STACK_GROWS_DOWNWARD' is defined,
23329      and the positive minimum alignment otherwise.  *Note SDB and
23330      DWARF::.  Only applicable if the target supports DWARF 2 frame
23331      unwind information.
23332
23333  -- Target Hook: void TARGET_ASM_EXCEPTION_SECTION ()
23334      If defined, a function that switches to the section in which the
23335      main exception table is to be placed (*note Sections::).  The
23336      default is a function that switches to a section named
23337      `.gcc_except_table' on machines that support named sections via
23338      `TARGET_ASM_NAMED_SECTION', otherwise if `-fpic' or `-fPIC' is in
23339      effect, the `data_section', otherwise the `readonly_data_section'.
23340
23341  -- Target Hook: void TARGET_ASM_EH_FRAME_SECTION ()
23342      If defined, a function that switches to the section in which the
23343      DWARF 2 frame unwind information to be placed (*note Sections::).
23344      The default is a function that outputs a standard GAS section
23345      directive, if `EH_FRAME_SECTION_NAME' is defined, or else a data
23346      section directive followed by a synthetic label.
23347
23348  -- Variable: Target Hook bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
23349      Contains the value true if the target should add a zero word onto
23350      the end of a Dwarf-2 frame info section when used for exception
23351      handling.  Default value is false if `EH_FRAME_SECTION_NAME' is
23352      defined, and true otherwise.
23353
23354  -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
23355      Given a register, this hook should return a parallel of registers
23356      to represent where to find the register pieces.  Define this hook
23357      if the register and its mode are represented in Dwarf in
23358      non-contiguous locations, or if the register should be represented
23359      in more than one register in Dwarf.  Otherwise, this hook should
23360      return `NULL_RTX'.  If not defined, the default is to return
23361      `NULL_RTX'.
23362
23363 \1f
23364 File: gccint.info,  Node: Alignment Output,  Prev: Exception Region Output,  Up: Assembler Format
23365
23366 13.19.10 Assembler Commands for Alignment
23367 -----------------------------------------
23368
23369 This describes commands for alignment.
23370
23371  -- Macro: JUMP_ALIGN (LABEL)
23372      The alignment (log base 2) to put in front of LABEL, which is a
23373      common destination of jumps and has no fallthru incoming edge.
23374
23375      This macro need not be defined if you don't want any special
23376      alignment to be done at such a time.  Most machine descriptions do
23377      not currently define the macro.
23378
23379      Unless it's necessary to inspect the LABEL parameter, it is better
23380      to set the variable ALIGN_JUMPS in the target's
23381      `OVERRIDE_OPTIONS'.  Otherwise, you should try to honor the user's
23382      selection in ALIGN_JUMPS in a `JUMP_ALIGN' implementation.
23383
23384  -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
23385      The alignment (log base 2) to put in front of LABEL, which follows
23386      a `BARRIER'.
23387
23388      This macro need not be defined if you don't want any special
23389      alignment to be done at such a time.  Most machine descriptions do
23390      not currently define the macro.
23391
23392  -- Macro: LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
23393      The maximum number of bytes to skip when applying
23394      `LABEL_ALIGN_AFTER_BARRIER'.  This works only if
23395      `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
23396
23397  -- Macro: LOOP_ALIGN (LABEL)
23398      The alignment (log base 2) to put in front of LABEL, which follows
23399      a `NOTE_INSN_LOOP_BEG' note.
23400
23401      This macro need not be defined if you don't want any special
23402      alignment to be done at such a time.  Most machine descriptions do
23403      not currently define the macro.
23404
23405      Unless it's necessary to inspect the LABEL parameter, it is better
23406      to set the variable `align_loops' in the target's
23407      `OVERRIDE_OPTIONS'.  Otherwise, you should try to honor the user's
23408      selection in `align_loops' in a `LOOP_ALIGN' implementation.
23409
23410  -- Macro: LOOP_ALIGN_MAX_SKIP
23411      The maximum number of bytes to skip when applying `LOOP_ALIGN'.
23412      This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
23413
23414  -- Macro: LABEL_ALIGN (LABEL)
23415      The alignment (log base 2) to put in front of LABEL.  If
23416      `LABEL_ALIGN_AFTER_BARRIER' / `LOOP_ALIGN' specify a different
23417      alignment, the maximum of the specified values is used.
23418
23419      Unless it's necessary to inspect the LABEL parameter, it is better
23420      to set the variable `align_labels' in the target's
23421      `OVERRIDE_OPTIONS'.  Otherwise, you should try to honor the user's
23422      selection in `align_labels' in a `LABEL_ALIGN' implementation.
23423
23424  -- Macro: LABEL_ALIGN_MAX_SKIP
23425      The maximum number of bytes to skip when applying `LABEL_ALIGN'.
23426      This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
23427
23428  -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
23429      A C statement to output to the stdio stream STREAM an assembler
23430      instruction to advance the location counter by NBYTES bytes.
23431      Those bytes should be zero when loaded.  NBYTES will be a C
23432      expression of type `int'.
23433
23434  -- Macro: ASM_NO_SKIP_IN_TEXT
23435      Define this macro if `ASM_OUTPUT_SKIP' should not be used in the
23436      text section because it fails to put zeros in the bytes that are
23437      skipped.  This is true on many Unix systems, where the pseudo-op
23438      to skip bytes produces no-op instructions rather than zeros when
23439      used in the text section.
23440
23441  -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
23442      A C statement to output to the stdio stream STREAM an assembler
23443      command to advance the location counter to a multiple of 2 to the
23444      POWER bytes.  POWER will be a C expression of type `int'.
23445
23446  -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
23447      Like `ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
23448      for padding, if necessary.
23449
23450  -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
23451      A C statement to output to the stdio stream STREAM an assembler
23452      command to advance the location counter to a multiple of 2 to the
23453      POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
23454      satisfy the alignment request.  POWER and MAX_SKIP will be a C
23455      expression of type `int'.
23456
23457 \1f
23458 File: gccint.info,  Node: Debugging Info,  Next: Floating Point,  Prev: Assembler Format,  Up: Target Macros
23459
23460 13.20 Controlling Debugging Information Format
23461 ==============================================
23462
23463 This describes how to specify debugging information.
23464
23465 * Menu:
23466
23467 * All Debuggers::      Macros that affect all debugging formats uniformly.
23468 * DBX Options::        Macros enabling specific options in DBX format.
23469 * DBX Hooks::          Hook macros for varying DBX format.
23470 * File Names and DBX:: Macros controlling output of file names in DBX format.
23471 * SDB and DWARF::      Macros for SDB (COFF) and DWARF formats.
23472 * VMS Debug::          Macros for VMS debug format.
23473
23474 \1f
23475 File: gccint.info,  Node: All Debuggers,  Next: DBX Options,  Up: Debugging Info
23476
23477 13.20.1 Macros Affecting All Debugging Formats
23478 ----------------------------------------------
23479
23480 These macros affect all debugging formats.
23481
23482  -- Macro: DBX_REGISTER_NUMBER (REGNO)
23483      A C expression that returns the DBX register number for the
23484      compiler register number REGNO.  In the default macro provided,
23485      the value of this expression will be REGNO itself.  But sometimes
23486      there are some registers that the compiler knows about and DBX
23487      does not, or vice versa.  In such cases, some register may need to
23488      have one number in the compiler and another for DBX.
23489
23490      If two registers have consecutive numbers inside GCC, and they can
23491      be used as a pair to hold a multiword value, then they _must_ have
23492      consecutive numbers after renumbering with `DBX_REGISTER_NUMBER'.
23493      Otherwise, debuggers will be unable to access such a pair, because
23494      they expect register pairs to be consecutive in their own
23495      numbering scheme.
23496
23497      If you find yourself defining `DBX_REGISTER_NUMBER' in way that
23498      does not preserve register pairs, then what you must do instead is
23499      redefine the actual register numbering scheme.
23500
23501  -- Macro: DEBUGGER_AUTO_OFFSET (X)
23502      A C expression that returns the integer offset value for an
23503      automatic variable having address X (an RTL expression).  The
23504      default computation assumes that X is based on the frame-pointer
23505      and gives the offset from the frame-pointer.  This is required for
23506      targets that produce debugging output for DBX or COFF-style
23507      debugging output for SDB and allow the frame-pointer to be
23508      eliminated when the `-g' options is used.
23509
23510  -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
23511      A C expression that returns the integer offset value for an
23512      argument having address X (an RTL expression).  The nominal offset
23513      is OFFSET.
23514
23515  -- Macro: PREFERRED_DEBUGGING_TYPE
23516      A C expression that returns the type of debugging output GCC should
23517      produce when the user specifies just `-g'.  Define this if you
23518      have arranged for GCC to support more than one format of debugging
23519      output.  Currently, the allowable values are `DBX_DEBUG',
23520      `SDB_DEBUG', `DWARF_DEBUG', `DWARF2_DEBUG', `XCOFF_DEBUG',
23521      `VMS_DEBUG', and `VMS_AND_DWARF2_DEBUG'.
23522
23523      When the user specifies `-ggdb', GCC normally also uses the value
23524      of this macro to select the debugging output format, but with two
23525      exceptions.  If `DWARF2_DEBUGGING_INFO' is defined, GCC uses the
23526      value `DWARF2_DEBUG'.  Otherwise, if `DBX_DEBUGGING_INFO' is
23527      defined, GCC uses `DBX_DEBUG'.
23528
23529      The value of this macro only affects the default debugging output;
23530      the user can always get a specific type of output by using
23531      `-gstabs', `-gcoff', `-gdwarf-2', `-gxcoff', or `-gvms'.
23532
23533 \1f
23534 File: gccint.info,  Node: DBX Options,  Next: DBX Hooks,  Prev: All Debuggers,  Up: Debugging Info
23535
23536 13.20.2 Specific Options for DBX Output
23537 ---------------------------------------
23538
23539 These are specific options for DBX output.
23540
23541  -- Macro: DBX_DEBUGGING_INFO
23542      Define this macro if GCC should produce debugging output for DBX
23543      in response to the `-g' option.
23544
23545  -- Macro: XCOFF_DEBUGGING_INFO
23546      Define this macro if GCC should produce XCOFF format debugging
23547      output in response to the `-g' option.  This is a variant of DBX
23548      format.
23549
23550  -- Macro: DEFAULT_GDB_EXTENSIONS
23551      Define this macro to control whether GCC should by default generate
23552      GDB's extended version of DBX debugging information (assuming
23553      DBX-format debugging information is enabled at all).  If you don't
23554      define the macro, the default is 1: always generate the extended
23555      information if there is any occasion to.
23556
23557  -- Macro: DEBUG_SYMS_TEXT
23558      Define this macro if all `.stabs' commands should be output while
23559      in the text section.
23560
23561  -- Macro: ASM_STABS_OP
23562      A C string constant, including spacing, naming the assembler
23563      pseudo op to use instead of `"\t.stabs\t"' to define an ordinary
23564      debugging symbol.  If you don't define this macro, `"\t.stabs\t"'
23565      is used.  This macro applies only to DBX debugging information
23566      format.
23567
23568  -- Macro: ASM_STABD_OP
23569      A C string constant, including spacing, naming the assembler
23570      pseudo op to use instead of `"\t.stabd\t"' to define a debugging
23571      symbol whose value is the current location.  If you don't define
23572      this macro, `"\t.stabd\t"' is used.  This macro applies only to
23573      DBX debugging information format.
23574
23575  -- Macro: ASM_STABN_OP
23576      A C string constant, including spacing, naming the assembler
23577      pseudo op to use instead of `"\t.stabn\t"' to define a debugging
23578      symbol with no name.  If you don't define this macro,
23579      `"\t.stabn\t"' is used.  This macro applies only to DBX debugging
23580      information format.
23581
23582  -- Macro: DBX_NO_XREFS
23583      Define this macro if DBX on your system does not support the
23584      construct `xsTAGNAME'.  On some systems, this construct is used to
23585      describe a forward reference to a structure named TAGNAME.  On
23586      other systems, this construct is not supported at all.
23587
23588  -- Macro: DBX_CONTIN_LENGTH
23589      A symbol name in DBX-format debugging information is normally
23590      continued (split into two separate `.stabs' directives) when it
23591      exceeds a certain length (by default, 80 characters).  On some
23592      operating systems, DBX requires this splitting; on others,
23593      splitting must not be done.  You can inhibit splitting by defining
23594      this macro with the value zero.  You can override the default
23595      splitting-length by defining this macro as an expression for the
23596      length you desire.
23597
23598  -- Macro: DBX_CONTIN_CHAR
23599      Normally continuation is indicated by adding a `\' character to
23600      the end of a `.stabs' string when a continuation follows.  To use
23601      a different character instead, define this macro as a character
23602      constant for the character you want to use.  Do not define this
23603      macro if backslash is correct for your system.
23604
23605  -- Macro: DBX_STATIC_STAB_DATA_SECTION
23606      Define this macro if it is necessary to go to the data section
23607      before outputting the `.stabs' pseudo-op for a non-global static
23608      variable.
23609
23610  -- Macro: DBX_TYPE_DECL_STABS_CODE
23611      The value to use in the "code" field of the `.stabs' directive for
23612      a typedef.  The default is `N_LSYM'.
23613
23614  -- Macro: DBX_STATIC_CONST_VAR_CODE
23615      The value to use in the "code" field of the `.stabs' directive for
23616      a static variable located in the text section.  DBX format does not
23617      provide any "right" way to do this.  The default is `N_FUN'.
23618
23619  -- Macro: DBX_REGPARM_STABS_CODE
23620      The value to use in the "code" field of the `.stabs' directive for
23621      a parameter passed in registers.  DBX format does not provide any
23622      "right" way to do this.  The default is `N_RSYM'.
23623
23624  -- Macro: DBX_REGPARM_STABS_LETTER
23625      The letter to use in DBX symbol data to identify a symbol as a
23626      parameter passed in registers.  DBX format does not customarily
23627      provide any way to do this.  The default is `'P''.
23628
23629  -- Macro: DBX_FUNCTION_FIRST
23630      Define this macro if the DBX information for a function and its
23631      arguments should precede the assembler code for the function.
23632      Normally, in DBX format, the debugging information entirely
23633      follows the assembler code.
23634
23635  -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE
23636      Define this macro, with value 1, if the value of a symbol
23637      describing the scope of a block (`N_LBRAC' or `N_RBRAC') should be
23638      relative to the start of the enclosing function.  Normally, GCC
23639      uses an absolute address.
23640
23641  -- Macro: DBX_LINES_FUNCTION_RELATIVE
23642      Define this macro, with value 1, if the value of a symbol
23643      indicating the current line number (`N_SLINE') should be relative
23644      to the start of the enclosing function.  Normally, GCC uses an
23645      absolute address.
23646
23647  -- Macro: DBX_USE_BINCL
23648      Define this macro if GCC should generate `N_BINCL' and `N_EINCL'
23649      stabs for included header files, as on Sun systems.  This macro
23650      also directs GCC to output a type number as a pair of a file
23651      number and a type number within the file.  Normally, GCC does not
23652      generate `N_BINCL' or `N_EINCL' stabs, and it outputs a single
23653      number for a type number.
23654
23655 \1f
23656 File: gccint.info,  Node: DBX Hooks,  Next: File Names and DBX,  Prev: DBX Options,  Up: Debugging Info
23657
23658 13.20.3 Open-Ended Hooks for DBX Format
23659 ---------------------------------------
23660
23661 These are hooks for DBX format.
23662
23663  -- Macro: DBX_OUTPUT_LBRAC (STREAM, NAME)
23664      Define this macro to say how to output to STREAM the debugging
23665      information for the start of a scope level for variable names.  The
23666      argument NAME is the name of an assembler symbol (for use with
23667      `assemble_name') whose value is the address where the scope begins.
23668
23669  -- Macro: DBX_OUTPUT_RBRAC (STREAM, NAME)
23670      Like `DBX_OUTPUT_LBRAC', but for the end of a scope level.
23671
23672  -- Macro: DBX_OUTPUT_NFUN (STREAM, LSCOPE_LABEL, DECL)
23673      Define this macro if the target machine requires special handling
23674      to output an `N_FUN' entry for the function DECL.
23675
23676  -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER)
23677      A C statement to output DBX debugging information before code for
23678      line number LINE of the current source file to the stdio stream
23679      STREAM.  COUNTER is the number of time the macro was invoked,
23680      including the current invocation; it is intended to generate
23681      unique labels in the assembly output.
23682
23683      This macro should not be defined if the default output is correct,
23684      or if it can be made correct by defining
23685      `DBX_LINES_FUNCTION_RELATIVE'.
23686
23687  -- Macro: NO_DBX_FUNCTION_END
23688      Some stabs encapsulation formats (in particular ECOFF), cannot
23689      handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx
23690      extension construct.  On those machines, define this macro to turn
23691      this feature off without disturbing the rest of the gdb extensions.
23692
23693  -- Macro: NO_DBX_BNSYM_ENSYM
23694      Some assemblers cannot handle the `.stabd BNSYM/ENSYM,0,0' gdb dbx
23695      extension construct.  On those machines, define this macro to turn
23696      this feature off without disturbing the rest of the gdb extensions.
23697
23698 \1f
23699 File: gccint.info,  Node: File Names and DBX,  Next: SDB and DWARF,  Prev: DBX Hooks,  Up: Debugging Info
23700
23701 13.20.4 File Names in DBX Format
23702 --------------------------------
23703
23704 This describes file names in DBX format.
23705
23706  -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)
23707      A C statement to output DBX debugging information to the stdio
23708      stream STREAM, which indicates that file NAME is the main source
23709      file--the file specified as the input file for compilation.  This
23710      macro is called only once, at the beginning of compilation.
23711
23712      This macro need not be defined if the standard form of output for
23713      DBX debugging information is appropriate.
23714
23715      It may be necessary to refer to a label equal to the beginning of
23716      the text section.  You can use `assemble_name (stream,
23717      ltext_label_name)' to do so.  If you do this, you must also set
23718      the variable USED_LTEXT_LABEL_NAME to `true'.
23719
23720  -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY
23721      Define this macro, with value 1, if GCC should not emit an
23722      indication of the current directory for compilation and current
23723      source language at the beginning of the file.
23724
23725  -- Macro: NO_DBX_GCC_MARKER
23726      Define this macro, with value 1, if GCC should not emit an
23727      indication that this object file was compiled by GCC.  The default
23728      is to emit an `N_OPT' stab at the beginning of every source file,
23729      with `gcc2_compiled.' for the string and value 0.
23730
23731  -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)
23732      A C statement to output DBX debugging information at the end of
23733      compilation of the main source file NAME.  Output should be
23734      written to the stdio stream STREAM.
23735
23736      If you don't define this macro, nothing special is output at the
23737      end of compilation, which is correct for most machines.
23738
23739  -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
23740      Define this macro _instead of_ defining
23741      `DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at
23742      the end of compilation is a `N_SO' stab with an empty string,
23743      whose value is the highest absolute text address in the file.
23744
23745 \1f
23746 File: gccint.info,  Node: SDB and DWARF,  Next: VMS Debug,  Prev: File Names and DBX,  Up: Debugging Info
23747
23748 13.20.5 Macros for SDB and DWARF Output
23749 ---------------------------------------
23750
23751 Here are macros for SDB and DWARF output.
23752
23753  -- Macro: SDB_DEBUGGING_INFO
23754      Define this macro if GCC should produce COFF-style debugging output
23755      for SDB in response to the `-g' option.
23756
23757  -- Macro: DWARF2_DEBUGGING_INFO
23758      Define this macro if GCC should produce dwarf version 2 format
23759      debugging output in response to the `-g' option.
23760
23761       -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (tree
23762                FUNCTION)
23763           Define this to enable the dwarf attribute
23764           `DW_AT_calling_convention' to be emitted for each function.
23765           Instead of an integer return the enum value for the `DW_CC_'
23766           tag.
23767
23768      To support optional call frame debugging information, you must also
23769      define `INCOMING_RETURN_ADDR_RTX' and either set
23770      `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
23771      prologue, or call `dwarf2out_def_cfa' and `dwarf2out_reg_save' as
23772      appropriate from `TARGET_ASM_FUNCTION_PROLOGUE' if you don't.
23773
23774  -- Macro: DWARF2_FRAME_INFO
23775      Define this macro to a nonzero value if GCC should always output
23776      Dwarf 2 frame information.  If `DWARF2_UNWIND_INFO' (*note
23777      Exception Region Output:: is nonzero, GCC will output this
23778      information not matter how you define `DWARF2_FRAME_INFO'.
23779
23780  -- Macro: DWARF2_ASM_LINE_DEBUG_INFO
23781      Define this macro to be a nonzero value if the assembler can
23782      generate Dwarf 2 line debug info sections.  This will result in
23783      much more compact line number tables, and hence is desirable if it
23784      works.
23785
23786  -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2)
23787      A C statement to issue assembly directives that create a difference
23788      between the two given labels, using an integer of the given size.
23789
23790  -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL)
23791      A C statement to issue assembly directives that create a
23792      section-relative reference to the given label, using an integer of
23793      the given size.
23794
23795  -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL)
23796      A C statement to issue assembly directives that create a
23797      self-relative reference to the given label, using an integer of
23798      the given size.
23799
23800  -- Macro: PUT_SDB_...
23801      Define these macros to override the assembler syntax for the
23802      special SDB assembler directives.  See `sdbout.c' for a list of
23803      these macros and their arguments.  If the standard syntax is used,
23804      you need not define them yourself.
23805
23806  -- Macro: SDB_DELIM
23807      Some assemblers do not support a semicolon as a delimiter, even
23808      between SDB assembler directives.  In that case, define this macro
23809      to be the delimiter to use (usually `\n').  It is not necessary to
23810      define a new set of `PUT_SDB_OP' macros if this is the only change
23811      required.
23812
23813  -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES
23814      Define this macro to allow references to unknown structure, union,
23815      or enumeration tags to be emitted.  Standard COFF does not allow
23816      handling of unknown references, MIPS ECOFF has support for it.
23817
23818  -- Macro: SDB_ALLOW_FORWARD_REFERENCES
23819      Define this macro to allow references to structure, union, or
23820      enumeration tags that have not yet been seen to be handled.  Some
23821      assemblers choke if forward tags are used, while some require it.
23822
23823  -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE)
23824      A C statement to output SDB debugging information before code for
23825      line number LINE of the current source file to the stdio stream
23826      STREAM.  The default is to emit an `.ln' directive.
23827
23828 \1f
23829 File: gccint.info,  Node: VMS Debug,  Prev: SDB and DWARF,  Up: Debugging Info
23830
23831 13.20.6 Macros for VMS Debug Format
23832 -----------------------------------
23833
23834 Here are macros for VMS debug format.
23835
23836  -- Macro: VMS_DEBUGGING_INFO
23837      Define this macro if GCC should produce debugging output for VMS
23838      in response to the `-g' option.  The default behavior for VMS is
23839      to generate minimal debug info for a traceback in the absence of
23840      `-g' unless explicitly overridden with `-g0'.  This behavior is
23841      controlled by `OPTIMIZATION_OPTIONS' and `OVERRIDE_OPTIONS'.
23842
23843 \1f
23844 File: gccint.info,  Node: Floating Point,  Next: Mode Switching,  Prev: Debugging Info,  Up: Target Macros
23845
23846 13.21 Cross Compilation and Floating Point
23847 ==========================================
23848
23849 While all modern machines use twos-complement representation for
23850 integers, there are a variety of representations for floating point
23851 numbers.  This means that in a cross-compiler the representation of
23852 floating point numbers in the compiled program may be different from
23853 that used in the machine doing the compilation.
23854
23855  Because different representation systems may offer different amounts of
23856 range and precision, all floating point constants must be represented in
23857 the target machine's format.  Therefore, the cross compiler cannot
23858 safely use the host machine's floating point arithmetic; it must emulate
23859 the target's arithmetic.  To ensure consistency, GCC always uses
23860 emulation to work with floating point values, even when the host and
23861 target floating point formats are identical.
23862
23863  The following macros are provided by `real.h' for the compiler to use.
23864 All parts of the compiler which generate or optimize floating-point
23865 calculations must use these macros.  They may evaluate their operands
23866 more than once, so operands must not have side effects.
23867
23868  -- Macro: REAL_VALUE_TYPE
23869      The C data type to be used to hold a floating point value in the
23870      target machine's format.  Typically this is a `struct' containing
23871      an array of `HOST_WIDE_INT', but all code should treat it as an
23872      opaque quantity.
23873
23874  -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
23875      Compares for equality the two values, X and Y.  If the target
23876      floating point format supports negative zeroes and/or NaNs,
23877      `REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and `REAL_VALUES_EQUAL
23878      (NaN, NaN)' is false.
23879
23880  -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
23881      Tests whether X is less than Y.
23882
23883  -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
23884      Truncates X to a signed integer, rounding toward zero.
23885
23886  -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX
23887           (REAL_VALUE_TYPE X)
23888      Truncates X to an unsigned integer, rounding toward zero.  If X is
23889      negative, returns zero.
23890
23891  -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum
23892           machine_mode MODE)
23893      Converts STRING into a floating point number in the target
23894      machine's representation for mode MODE.  This routine can handle
23895      both decimal and hexadecimal floating point constants, using the
23896      syntax defined by the C language for both.
23897
23898  -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
23899      Returns 1 if X is negative (including negative zero), 0 otherwise.
23900
23901  -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
23902      Determines whether X represents infinity (positive or negative).
23903
23904  -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
23905      Determines whether X represents a "NaN" (not-a-number).
23906
23907  -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code
23908           CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
23909      Calculates an arithmetic operation on the two floating point values
23910      X and Y, storing the result in OUTPUT (which must be a variable).
23911
23912      The operation to be performed is specified by CODE.  Only the
23913      following codes are supported: `PLUS_EXPR', `MINUS_EXPR',
23914      `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'.
23915
23916      If `REAL_ARITHMETIC' is asked to evaluate division by zero and the
23917      target's floating point format cannot represent infinity, it will
23918      call `abort'.  Callers should check for this situation first, using
23919      `MODE_HAS_INFINITIES'.  *Note Storage Layout::.
23920
23921  -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
23922      Returns the negative of the floating point value X.
23923
23924  -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
23925      Returns the absolute value of X.
23926
23927  -- Macro: REAL_VALUE_TYPE REAL_VALUE_TRUNCATE (REAL_VALUE_TYPE MODE,
23928           enum machine_mode X)
23929      Truncates the floating point value X to fit in MODE.  The return
23930      value is still a full-size `REAL_VALUE_TYPE', but it has an
23931      appropriate bit pattern to be output asa floating constant whose
23932      precision accords with mode MODE.
23933
23934  -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT
23935           HIGH, REAL_VALUE_TYPE X)
23936      Converts a floating point value X into a double-precision integer
23937      which is then stored into LOW and HIGH.  If the value is not
23938      integral, it is truncated.
23939
23940  -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT
23941           LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE)
23942      Converts a double-precision integer found in LOW and HIGH, into a
23943      floating point value which is then stored into X.  The value is
23944      truncated to fit in mode MODE.
23945
23946 \1f
23947 File: gccint.info,  Node: Mode Switching,  Next: Target Attributes,  Prev: Floating Point,  Up: Target Macros
23948
23949 13.22 Mode Switching Instructions
23950 =================================
23951
23952 The following macros control mode switching optimizations:
23953
23954  -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY)
23955      Define this macro if the port needs extra instructions inserted
23956      for mode switching in an optimizing compilation.
23957
23958      For an example, the SH4 can perform both single and double
23959      precision floating point operations, but to perform a single
23960      precision operation, the FPSCR PR bit has to be cleared, while for
23961      a double precision operation, this bit has to be set.  Changing
23962      the PR bit requires a general purpose register as a scratch
23963      register, hence these FPSCR sets have to be inserted before
23964      reload, i.e. you can't put this into instruction emitting or
23965      `TARGET_MACHINE_DEPENDENT_REORG'.
23966
23967      You can have multiple entities that are mode-switched, and select
23968      at run time which entities actually need it.
23969      `OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY
23970      that needs mode-switching.  If you define this macro, you also
23971      have to define `NUM_MODES_FOR_MODE_SWITCHING', `MODE_NEEDED',
23972      `MODE_PRIORITY_TO_MODE' and `EMIT_MODE_SET'.  `MODE_AFTER',
23973      `MODE_ENTRY', and `MODE_EXIT' are optional.
23974
23975  -- Macro: NUM_MODES_FOR_MODE_SWITCHING
23976      If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as
23977      initializer for an array of integers.  Each initializer element N
23978      refers to an entity that needs mode switching, and specifies the
23979      number of different modes that might need to be set for this
23980      entity.  The position of the initializer in the
23981      initializer--starting counting at zero--determines the integer
23982      that is used to refer to the mode-switched entity in question.  In
23983      macros that take mode arguments / yield a mode result, modes are
23984      represented as numbers 0 ... N - 1.  N is used to specify that no
23985      mode switch is needed / supplied.
23986
23987  -- Macro: MODE_NEEDED (ENTITY, INSN)
23988      ENTITY is an integer specifying a mode-switched entity.  If
23989      `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
23990      return an integer value not larger than the corresponding element
23991      in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
23992      must be switched into prior to the execution of INSN.
23993
23994  -- Macro: MODE_AFTER (MODE, INSN)
23995      If this macro is defined, it is evaluated for every INSN during
23996      mode switching.  It determines the mode that an insn results in (if
23997      different from the incoming mode).
23998
23999  -- Macro: MODE_ENTRY (ENTITY)
24000      If this macro is defined, it is evaluated for every ENTITY that
24001      needs mode switching.  It should evaluate to an integer, which is
24002      a mode that ENTITY is assumed to be switched to at function entry.
24003      If `MODE_ENTRY' is defined then `MODE_EXIT' must be defined.
24004
24005  -- Macro: MODE_EXIT (ENTITY)
24006      If this macro is defined, it is evaluated for every ENTITY that
24007      needs mode switching.  It should evaluate to an integer, which is
24008      a mode that ENTITY is assumed to be switched to at function exit.
24009      If `MODE_EXIT' is defined then `MODE_ENTRY' must be defined.
24010
24011  -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N)
24012      This macro specifies the order in which modes for ENTITY are
24013      processed.  0 is the highest priority,
24014      `NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest.  The value
24015      of the macro should be an integer designating a mode for ENTITY.
24016      For any fixed ENTITY, `mode_priority_to_mode' (ENTITY, N) shall be
24017      a bijection in 0 ...  `num_modes_for_mode_switching[ENTITY] - 1'.
24018
24019  -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE)
24020      Generate one or more insns to set ENTITY to MODE.  HARD_REG_LIVE
24021      is the set of hard registers live at the point where the insn(s)
24022      are to be inserted.
24023
24024 \1f
24025 File: gccint.info,  Node: Target Attributes,  Next: MIPS Coprocessors,  Prev: Mode Switching,  Up: Target Macros
24026
24027 13.23 Defining target-specific uses of `__attribute__'
24028 ======================================================
24029
24030 Target-specific attributes may be defined for functions, data and types.
24031 These are described using the following target hooks; they also need to
24032 be documented in `extend.texi'.
24033
24034  -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
24035      If defined, this target hook points to an array of `struct
24036      attribute_spec' (defined in `tree.h') specifying the machine
24037      specific attributes for this target and some of the restrictions
24038      on the entities to which these attributes are applied and the
24039      arguments they take.
24040
24041  -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (tree TYPE1, tree
24042           TYPE2)
24043      If defined, this target hook is a function which returns zero if
24044      the attributes on TYPE1 and TYPE2 are incompatible, one if they
24045      are compatible, and two if they are nearly compatible (which
24046      causes a warning to be generated).  If this is not defined,
24047      machine-specific attributes are supposed always to be compatible.
24048
24049  -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
24050      If defined, this target hook is a function which assigns default
24051      attributes to newly defined TYPE.
24052
24053  -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
24054           TYPE2)
24055      Define this target hook if the merging of type attributes needs
24056      special handling.  If defined, the result is a list of the combined
24057      `TYPE_ATTRIBUTES' of TYPE1 and TYPE2.  It is assumed that
24058      `comptypes' has already been called and returned 1.  This function
24059      may call `merge_attributes' to handle machine-independent merging.
24060
24061  -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
24062           NEWDECL)
24063      Define this target hook if the merging of decl attributes needs
24064      special handling.  If defined, the result is a list of the combined
24065      `DECL_ATTRIBUTES' of OLDDECL and NEWDECL.  NEWDECL is a duplicate
24066      declaration of OLDDECL.  Examples of when this is needed are when
24067      one attribute overrides another, or when an attribute is nullified
24068      by a subsequent definition.  This function may call
24069      `merge_attributes' to handle machine-independent merging.
24070
24071      If the only target-specific handling you require is `dllimport'
24072      for Microsoft Windows targets, you should define the macro
24073      `TARGET_DLLIMPORT_DECL_ATTRIBUTES' to `1'.  The compiler will then
24074      define a function called `merge_dllimport_decl_attributes' which
24075      can then be defined as the expansion of
24076      `TARGET_MERGE_DECL_ATTRIBUTES'.  You can also add
24077      `handle_dll_attribute' in the attribute table for your port to
24078      perform initial processing of the `dllimport' and `dllexport'
24079      attributes.  This is done in `i386/cygwin.h' and `i386/i386.c',
24080      for example.
24081
24082  -- Macro: TARGET_DECLSPEC
24083      Define this macro to a nonzero value if you want to treat
24084      `__declspec(X)' as equivalent to `__attribute((X))'.  By default,
24085      this behavior is enabled only for targets that define
24086      `TARGET_DLLIMPORT_DECL_ATTRIBUTES'.  The current implementation of
24087      `__declspec' is via a built-in macro, but you should not rely on
24088      this implementation detail.
24089
24090  -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
24091           *ATTR_PTR)
24092      Define this target hook if you want to be able to add attributes
24093      to a decl when it is being created.  This is normally useful for
24094      back ends which wish to implement a pragma by using the attributes
24095      which correspond to the pragma's effect.  The NODE argument is the
24096      decl which is being created.  The ATTR_PTR argument is a pointer
24097      to the attribute list for this decl.  The list itself should not
24098      be modified, since it may be shared with other decls, but
24099      attributes may be chained on the head of the list and `*ATTR_PTR'
24100      modified to point to the new attributes, or a copy of the list may
24101      be made if further changes are needed.
24102
24103  -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (tree
24104           FNDECL)
24105      This target hook returns `true' if it is ok to inline FNDECL into
24106      the current function, despite its having target-specific
24107      attributes, `false' otherwise.  By default, if a function has a
24108      target specific attribute attached to it, it will not be inlined.
24109
24110 \1f
24111 File: gccint.info,  Node: MIPS Coprocessors,  Next: PCH Target,  Prev: Target Attributes,  Up: Target Macros
24112
24113 13.24 Defining coprocessor specifics for MIPS targets.
24114 ======================================================
24115
24116 The MIPS specification allows MIPS implementations to have as many as 4
24117 coprocessors, each with as many as 32 private registers.  GCC supports
24118 accessing these registers and transferring values between the registers
24119 and memory using asm-ized variables.  For example:
24120
24121        register unsigned int cp0count asm ("c0r1");
24122        unsigned int d;
24123
24124        d = cp0count + 3;
24125
24126  ("c0r1" is the default name of register 1 in coprocessor 0; alternate
24127 names may be added as described below, or the default names may be
24128 overridden entirely in `SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)
24129
24130  Coprocessor registers are assumed to be epilogue-used; sets to them
24131 will be preserved even if it does not appear that the register is used
24132 again later in the function.
24133
24134  Another note: according to the MIPS spec, coprocessor 1 (if present) is
24135 the FPU.  One accesses COP1 registers through standard mips
24136 floating-point support; they are not included in this mechanism.
24137
24138  There is one macro used in defining the MIPS coprocessor interface
24139 which you may want to override in subtargets; it is described below.
24140
24141  -- Macro: ALL_COP_ADDITIONAL_REGISTER_NAMES
24142      A comma-separated list (with leading comma) of pairs describing the
24143      alternate names of coprocessor registers.  The format of each
24144      entry should be
24145           { ALTERNATENAME, REGISTER_NUMBER}
24146      Default: empty.
24147
24148 \1f
24149 File: gccint.info,  Node: PCH Target,  Next: C++ ABI,  Prev: MIPS Coprocessors,  Up: Target Macros
24150
24151 13.25 Parameters for Precompiled Header Validity Checking
24152 =========================================================
24153
24154  -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t * SZ)
24155      Define this hook if your target needs to check a different
24156      collection of flags than the default, which is every flag defined
24157      by `TARGET_SWITCHES' and `TARGET_OPTIONS'.  It should return some
24158      data which will be saved in the PCH file and presented to
24159      `TARGET_PCH_VALID_P' later; it should set `SZ' to the size of the
24160      data.
24161
24162  -- Target Hook: const char * TARGET_PCH_VALID_P (const void * DATA,
24163           size_t SZ)
24164      Define this hook if your target needs to check a different
24165      collection of flags than the default, which is every flag defined
24166      by `TARGET_SWITCHES' and `TARGET_OPTIONS'.  It is given data which
24167      came from `TARGET_GET_PCH_VALIDITY' (in this version of this
24168      compiler, so there is no need for extensive validity checking).
24169      It returns `NULL' if it is safe to load a PCH file with this data,
24170      or a suitable error message if not.  The error message will be
24171      presented to the user, so it should be localized.
24172
24173 \1f
24174 File: gccint.info,  Node: C++ ABI,  Next: Misc,  Prev: PCH Target,  Up: Target Macros
24175
24176 13.26 C++ ABI parameters
24177 ========================
24178
24179  -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void)
24180      Define this hook to override the integer type used for guard
24181      variables.  These are used to implement one-time construction of
24182      static objects.  The default is long_long_integer_type_node.
24183
24184  -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
24185      This hook determines how guard variables are used.  It should
24186      return `false' (the default) if first byte should be used.  A
24187      return value of `true' indicates the least significant bit should
24188      be used.
24189
24190  -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
24191      This hook returns the size of the cookie to use when allocating an
24192      array whose elements have the indicated TYPE.  Assumes that it is
24193      already known that a cookie is needed.  The default is `max(sizeof
24194      (size_t), alignof(type))', as defined in section 2.7 of the
24195      IA64/Generic C++ ABI.
24196
24197  -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
24198      This hook should return `true' if the element size should be
24199      stored in array cookies.  The default is to return `false'.
24200
24201  -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
24202           IMPORT_EXPORT)
24203      If defined by a backend this hook allows the decision made to
24204      export class TYPE to be overruled.  Upon entry IMPORT_EXPORT will
24205      contain 1 if the class is going to be exported, -1 if it is going
24206      to be imported and 0 otherwise.  This function should return the
24207      modified value and perform any other actions necessary to support
24208      the backend's targeted operating system.
24209
24210  -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
24211      This hook should return `true' if constructors and destructors
24212      return the address of the object created/destroyed.  The default
24213      is to return `false'.
24214
24215  -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
24216      This hook returns true if the key method for a class (i.e., the
24217      method which, if defined in the current translation unit, causes
24218      the virtual table to be emitted) may be an inline function.  Under
24219      the standard Itanium C++ ABI the key method may be an inline
24220      function so long as the function is not declared inline in the
24221      class definition.  Under some variants of the ABI, an inline
24222      function can never be the key method.  The default is to return
24223      `true'.
24224
24225  -- Target Hook: bool TARGET_CXX_EXPORT_CLASS_DATA (void)
24226      If this hook returns false (the default), then virtual tables and
24227      RTTI data structures will have the ELF visibility of their
24228      containing class.  If this hook returns true, then these data
24229      structures will have ELF "default" visibility, independently of
24230      the visibility of the containing class.
24231
24232 \1f
24233 File: gccint.info,  Node: Misc,  Prev: C++ ABI,  Up: Target Macros
24234
24235 13.27 Miscellaneous Parameters
24236 ==============================
24237
24238 Here are several miscellaneous parameters.
24239
24240  -- Macro: PREDICATE_CODES
24241      Define this if you have defined special-purpose predicates in the
24242      file `MACHINE.c'.  This macro is called within an initializer of an
24243      array of structures.  The first field in the structure is the name
24244      of a predicate and the second field is an array of rtl codes.  For
24245      each predicate, list all rtl codes that can be in expressions
24246      matched by the predicate.  The list should have a trailing comma.
24247      Here is an example of two entries in the list for a typical RISC
24248      machine:
24249
24250           #define PREDICATE_CODES \
24251             {"gen_reg_rtx_operand", {SUBREG, REG}},  \
24252             {"reg_or_short_cint_operand", {SUBREG, REG, CONST_INT}},
24253
24254      Defining this macro does not affect the generated code (however,
24255      incorrect definitions that omit an rtl code that may be matched by
24256      the predicate can cause the compiler to malfunction).  Instead, it
24257      allows the table built by `genrecog' to be more compact and
24258      efficient, thus speeding up the compiler.  The most important
24259      predicates to include in the list specified by this macro are
24260      those used in the most insn patterns.
24261
24262      For each predicate function named in `PREDICATE_CODES', a
24263      declaration will be generated in `insn-codes.h'.
24264
24265      Use of this macro is deprecated; use `define_predicate' instead.
24266      *Note Defining Predicates::.
24267
24268  -- Macro: SPECIAL_MODE_PREDICATES
24269      Define this if you have special predicates that know special things
24270      about modes.  Genrecog will warn about certain forms of
24271      `match_operand' without a mode; if the operand predicate is listed
24272      in `SPECIAL_MODE_PREDICATES', the warning will be suppressed.
24273
24274      Here is an example from the IA-32 port (`ext_register_operand'
24275      specially checks for `HImode' or `SImode' in preparation for a
24276      byte extraction from `%ah' etc.).
24277
24278           #define SPECIAL_MODE_PREDICATES \
24279             "ext_register_operand",
24280
24281      Use of this macro is deprecated; use `define_special_predicate'
24282      instead.  *Note Defining Predicates::.
24283
24284  -- Macro: HAS_LONG_COND_BRANCH
24285      Define this boolean macro to indicate whether or not your
24286      architecture has conditional branches that can span all of memory.
24287      It is used in conjunction with an optimization that partitions
24288      hot and cold basic blocks into separate sections of the
24289      executable.  If this macro is set to false, gcc will convert any
24290      conditional branches that attempt to cross between sections into
24291      unconditional branches or indirect jumps.
24292
24293  -- Macro: HAS_LONG_UNCOND_BRANCH
24294      Define this boolean macro to indicate whether or not your
24295      architecture has unconditional branches that can span all of
24296      memory.  It is used in conjunction with an optimization that
24297      partitions hot and cold basic blocks into separate sections of the
24298      executable.  If this macro is set to false, gcc will convert any
24299      unconditional branches that attempt to cross between sections into
24300      indirect jumps.
24301
24302  -- Macro: CASE_VECTOR_MODE
24303      An alias for a machine mode name.  This is the machine mode that
24304      elements of a jump-table should have.
24305
24306  -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
24307      Optional: return the preferred mode for an `addr_diff_vec' when
24308      the minimum and maximum offset are known.  If you define this, it
24309      enables extra code in branch shortening to deal with
24310      `addr_diff_vec'.  To make this work, you also have to define
24311      `INSN_ALIGN' and make the alignment for `addr_diff_vec' explicit.
24312      The BODY argument is provided so that the offset_unsigned and scale
24313      flags can be updated.
24314
24315  -- Macro: CASE_VECTOR_PC_RELATIVE
24316      Define this macro to be a C expression to indicate when jump-tables
24317      should contain relative addresses.  You need not define this macro
24318      if jump-tables never contain relative addresses, or jump-tables
24319      should contain relative addresses only when `-fPIC' or `-fPIC' is
24320      in effect.
24321
24322  -- Macro: CASE_VALUES_THRESHOLD
24323      Define this to be the smallest number of different values for
24324      which it is best to use a jump-table instead of a tree of
24325      conditional branches.  The default is four for machines with a
24326      `casesi' instruction and five otherwise.  This is best for most
24327      machines.
24328
24329  -- Macro: CASE_USE_BIT_TESTS
24330      Define this macro to be a C expression to indicate whether C switch
24331      statements may be implemented by a sequence of bit tests.  This is
24332      advantageous on processors that can efficiently implement left
24333      shift of 1 by the number of bits held in a register, but
24334      inappropriate on targets that would require a loop.  By default,
24335      this macro returns `true' if the target defines an `ashlsi3'
24336      pattern, and `false' otherwise.
24337
24338  -- Macro: WORD_REGISTER_OPERATIONS
24339      Define this macro if operations between registers with integral
24340      mode smaller than a word are always performed on the entire
24341      register.  Most RISC machines have this property and most CISC
24342      machines do not.
24343
24344  -- Macro: LOAD_EXTEND_OP (MEM_MODE)
24345      Define this macro to be a C expression indicating when insns that
24346      read memory in MEM_MODE, an integral mode narrower than a word,
24347      set the bits outside of MEM_MODE to be either the sign-extension
24348      or the zero-extension of the data read.  Return `SIGN_EXTEND' for
24349      values of MEM_MODE for which the insn sign-extends, `ZERO_EXTEND'
24350      for which it zero-extends, and `UNKNOWN' for other modes.
24351
24352      This macro is not called with MEM_MODE non-integral or with a width
24353      greater than or equal to `BITS_PER_WORD', so you may return any
24354      value in this case.  Do not define this macro if it would always
24355      return `UNKNOWN'.  On machines where this macro is defined, you
24356      will normally define it as the constant `SIGN_EXTEND' or
24357      `ZERO_EXTEND'.
24358
24359      You may return a non-`UNKNOWN' value even if for some hard
24360      registers the sign extension is not performed, if for the
24361      `REGNO_REG_CLASS' of these hard registers
24362      `CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is
24363      MEM_MODE and the TO mode is any integral mode larger than this but
24364      not larger than `word_mode'.
24365
24366      You must return `UNKNOWN' if for some hard registers that allow
24367      this mode, `CANNOT_CHANGE_MODE_CLASS' says that they cannot change
24368      to `word_mode', but that they can change to another integral mode
24369      that is larger then MEM_MODE but still smaller than `word_mode'.
24370
24371  -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
24372      Define this macro if loading short immediate values into registers
24373      sign extends.
24374
24375  -- Macro: FIXUNS_TRUNC_LIKE_FIX_TRUNC
24376      Define this macro if the same instructions that convert a floating
24377      point number to a signed fixed point number also convert validly
24378      to an unsigned one.
24379
24380  -- Macro: MOVE_MAX
24381      The maximum number of bytes that a single instruction can move
24382      quickly between memory and registers or between two memory
24383      locations.
24384
24385  -- Macro: MAX_MOVE_MAX
24386      The maximum number of bytes that a single instruction can move
24387      quickly between memory and registers or between two memory
24388      locations.  If this is undefined, the default is `MOVE_MAX'.
24389      Otherwise, it is the constant value that is the largest value that
24390      `MOVE_MAX' can have at run-time.
24391
24392  -- Macro: SHIFT_COUNT_TRUNCATED
24393      A C expression that is nonzero if on this machine the number of
24394      bits actually used for the count of a shift operation is equal to
24395      the number of bits needed to represent the size of the object
24396      being shifted.  When this macro is nonzero, the compiler will
24397      assume that it is safe to omit a sign-extend, zero-extend, and
24398      certain bitwise `and' instructions that truncates the count of a
24399      shift operation.  On machines that have instructions that act on
24400      bit-fields at variable positions, which may include `bit test'
24401      instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables
24402      deletion of truncations of the values that serve as arguments to
24403      bit-field instructions.
24404
24405      If both types of instructions truncate the count (for shifts) and
24406      position (for bit-field operations), or if no variable-position
24407      bit-field instructions exist, you should define this macro.
24408
24409      However, on some machines, such as the 80386 and the 680x0,
24410      truncation only applies to shift operations and not the (real or
24411      pretended) bit-field operations.  Define `SHIFT_COUNT_TRUNCATED'
24412      to be zero on such machines.  Instead, add patterns to the `md'
24413      file that include the implied truncation of the shift instructions.
24414
24415      You need not define this macro if it would always have the value
24416      of zero.
24417
24418  -- Target Hook: int TARGET_SHIFT_TRUNCATION_MASK (enum machine_mode
24419           MODE)
24420      This function describes how the standard shift patterns for MODE
24421      deal with shifts by negative amounts or by more than the width of
24422      the mode.  *Note shift patterns::.
24423
24424      On many machines, the shift patterns will apply a mask M to the
24425      shift count, meaning that a fixed-width shift of X by Y is
24426      equivalent to an arbitrary-width shift of X by Y & M.  If this is
24427      true for mode MODE, the function should return M, otherwise it
24428      should return 0.  A return value of 0 indicates that no particular
24429      behavior is guaranteed.
24430
24431      Note that, unlike `SHIFT_COUNT_TRUNCATED', this function does
24432      _not_ apply to general shift rtxes; it applies only to instructions
24433      that are generated by the named shift patterns.
24434
24435      The default implementation of this function returns
24436      `GET_MODE_BITSIZE (MODE) - 1' if `SHIFT_COUNT_TRUNCATED' and 0
24437      otherwise.  This definition is always safe, but if
24438      `SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
24439      nevertheless truncate the shift count, you may get better code by
24440      overriding it.
24441
24442  -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)
24443      A C expression which is nonzero if on this machine it is safe to
24444      "convert" an integer of INPREC bits to one of OUTPREC bits (where
24445      OUTPREC is smaller than INPREC) by merely operating on it as if it
24446      had only OUTPREC bits.
24447
24448      On many machines, this expression can be 1.
24449
24450      When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
24451      modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result.
24452      If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in
24453      such cases may improve things.
24454
24455  -- Macro: STORE_FLAG_VALUE
24456      A C expression describing the value returned by a comparison
24457      operator with an integral mode and stored by a store-flag
24458      instruction (`sCOND') when the condition is true.  This
24459      description must apply to _all_ the `sCOND' patterns and all the
24460      comparison operators whose results have a `MODE_INT' mode.
24461
24462      A value of 1 or -1 means that the instruction implementing the
24463      comparison operator returns exactly 1 or -1 when the comparison is
24464      true and 0 when the comparison is false.  Otherwise, the value
24465      indicates which bits of the result are guaranteed to be 1 when the
24466      comparison is true.  This value is interpreted in the mode of the
24467      comparison operation, which is given by the mode of the first
24468      operand in the `sCOND' pattern.  Either the low bit or the sign
24469      bit of `STORE_FLAG_VALUE' be on.  Presently, only those bits are
24470      used by the compiler.
24471
24472      If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
24473      generate code that depends only on the specified bits.  It can also
24474      replace comparison operators with equivalent operations if they
24475      cause the required bits to be set, even if the remaining bits are
24476      undefined.  For example, on a machine whose comparison operators
24477      return an `SImode' value and where `STORE_FLAG_VALUE' is defined as
24478      `0x80000000', saying that just the sign bit is relevant, the
24479      expression
24480
24481           (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
24482
24483      can be converted to
24484
24485           (ashift:SI X (const_int N))
24486
24487      where N is the appropriate shift count to move the bit being
24488      tested into the sign bit.
24489
24490      There is no way to describe a machine that always sets the
24491      low-order bit for a true value, but does not guarantee the value
24492      of any other bits, but we do not know of any machine that has such
24493      an instruction.  If you are trying to port GCC to such a machine,
24494      include an instruction to perform a logical-and of the result with
24495      1 in the pattern for the comparison operators and let us know at
24496      <gcc@gcc.gnu.org>.
24497
24498      Often, a machine will have multiple instructions that obtain a
24499      value from a comparison (or the condition codes).  Here are rules
24500      to guide the choice of value for `STORE_FLAG_VALUE', and hence the
24501      instructions to be used:
24502
24503         * Use the shortest sequence that yields a valid definition for
24504           `STORE_FLAG_VALUE'.  It is more efficient for the compiler to
24505           "normalize" the value (convert it to, e.g., 1 or 0) than for
24506           the comparison operators to do so because there may be
24507           opportunities to combine the normalization with other
24508           operations.
24509
24510         * For equal-length sequences, use a value of 1 or -1, with -1
24511           being slightly preferred on machines with expensive jumps and
24512           1 preferred on other machines.
24513
24514         * As a second choice, choose a value of `0x80000001' if
24515           instructions exist that set both the sign and low-order bits
24516           but do not define the others.
24517
24518         * Otherwise, use a value of `0x80000000'.
24519
24520      Many machines can produce both the value chosen for
24521      `STORE_FLAG_VALUE' and its negation in the same number of
24522      instructions.  On those machines, you should also define a pattern
24523      for those cases, e.g., one matching
24524
24525           (set A (neg:M (ne:M B C)))
24526
24527      Some machines can also perform `and' or `plus' operations on
24528      condition code values with less instructions than the corresponding
24529      `sCOND' insn followed by `and' or `plus'.  On those machines,
24530      define the appropriate patterns.  Use the names `incscc' and
24531      `decscc', respectively, for the patterns which perform `plus' or
24532      `minus' operations on condition code values.  See `rs6000.md' for
24533      some examples.  The GNU Superoptizer can be used to find such
24534      instruction sequences on other machines.
24535
24536      If this macro is not defined, the default value, 1, is used.  You
24537      need not define `STORE_FLAG_VALUE' if the machine has no store-flag
24538      instructions, or if the value generated by these instructions is 1.
24539
24540  -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
24541      A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is
24542      returned when comparison operators with floating-point results are
24543      true.  Define this macro on machines that have comparison
24544      operations that return floating-point values.  If there are no
24545      such operations, do not define this macro.
24546
24547  -- Macro: VECTOR_STORE_FLAG_VALUE (MODE)
24548      A C expression that gives a rtx representing the non-zero true
24549      element for vector comparisons.  The returned rtx should be valid
24550      for the inner mode of MODE which is guaranteed to be a vector
24551      mode.  Define this macro on machines that have vector comparison
24552      operations that return a vector result.  If there are no such
24553      operations, do not define this macro.  Typically, this macro is
24554      defined as `const1_rtx' or `constm1_rtx'.  This macro may return
24555      `NULL_RTX' to prevent the compiler optimizing such vector
24556      comparison operations for the given mode.
24557
24558  -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
24559  -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
24560      A C expression that evaluates to true if the architecture defines
24561      a value for `clz' or `ctz' with a zero operand.  If so, VALUE
24562      should be set to this value.  If this macro is not defined, the
24563      value of `clz' or `ctz' is assumed to be undefined.
24564
24565      This macro must be defined if the target's expansion for `ffs'
24566      relies on a particular value to get correct results.  Otherwise it
24567      is not necessary, though it may be used to optimize some corner
24568      cases.
24569
24570      Note that regardless of this macro the "definedness" of `clz' and
24571      `ctz' at zero do _not_ extend to the builtin functions visible to
24572      the user.  Thus one may be free to adjust the value at will to
24573      match the target expansion of these operations without fear of
24574      breaking the API.
24575
24576  -- Macro: Pmode
24577      An alias for the machine mode for pointers.  On most machines,
24578      define this to be the integer mode corresponding to the width of a
24579      hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit
24580      machines.  On some machines you must define this to be one of the
24581      partial integer modes, such as `PSImode'.
24582
24583      The width of `Pmode' must be at least as large as the value of
24584      `POINTER_SIZE'.  If it is not equal, you must define the macro
24585      `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
24586      `Pmode'.
24587
24588  -- Macro: FUNCTION_MODE
24589      An alias for the machine mode used for memory references to
24590      functions being called, in `call' RTL expressions.  On most
24591      machines this should be `QImode'.
24592
24593  -- Macro: STDC_0_IN_SYSTEM_HEADERS
24594      In normal operation, the preprocessor expands `__STDC__' to the
24595      constant 1, to signify that GCC conforms to ISO Standard C.  On
24596      some hosts, like Solaris, the system compiler uses a different
24597      convention, where `__STDC__' is normally 0, but is 1 if the user
24598      specifies strict conformance to the C Standard.
24599
24600      Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
24601      convention when processing system header files, but when
24602      processing user files `__STDC__' will always expand to 1.
24603
24604  -- Macro: NO_IMPLICIT_EXTERN_C
24605      Define this macro if the system header files support C++ as well
24606      as C.  This macro inhibits the usual method of using system header
24607      files in C++, which is to pretend that the file's contents are
24608      enclosed in `extern "C" {...}'.
24609
24610  -- Macro: REGISTER_TARGET_PRAGMAS ()
24611      Define this macro if you want to implement any target-specific
24612      pragmas.  If defined, it is a C expression which makes a series of
24613      calls to `c_register_pragma' or `c_register_pragma_with_expansion'
24614      for each pragma.  The macro may also do any setup required for the
24615      pragmas.
24616
24617      The primary reason to define this macro is to provide
24618      compatibility with other compilers for the same target.  In
24619      general, we discourage definition of target-specific pragmas for
24620      GCC.
24621
24622      If the pragma can be implemented by attributes then you should
24623      consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as
24624      well.
24625
24626      Preprocessor macros that appear on pragma lines are not expanded.
24627      All `#pragma' directives that do not match any registered pragma
24628      are silently ignored, unless the user specifies
24629      `-Wunknown-pragmas'.
24630
24631  -- Function: void c_register_pragma (const char *SPACE, const char
24632           *NAME, void (*CALLBACK) (struct cpp_reader *))
24633  -- Function: void c_register_pragma_with_expansion (const char *SPACE,
24634           const char *NAME, void (*CALLBACK) (struct cpp_reader *))
24635      Each call to `c_register_pragma' or
24636      `c_register_pragma_with_expansion' establishes one pragma.  The
24637      CALLBACK routine will be called when the preprocessor encounters a
24638      pragma of the form
24639
24640           #pragma [SPACE] NAME ...
24641
24642      SPACE is the case-sensitive namespace of the pragma, or `NULL' to
24643      put the pragma in the global namespace.  The callback routine
24644      receives PFILE as its first argument, which can be passed on to
24645      cpplib's functions if necessary.  You can lex tokens after the
24646      NAME by calling `c_lex'.  Tokens that are not read by the callback
24647      will be silently ignored.  The end of the line is indicated by a
24648      token of type `CPP_EOF'.  Macro expansion occurs on the arguments
24649      of pragmas registered with `c_register_pragma_with_expansion' but
24650      not on the arguments of pragmas registered with
24651      `c_register_pragma'.
24652
24653      For an example use of this routine, see `c4x.h' and the callback
24654      routines defined in `c4x-c.c'.
24655
24656      Note that the use of `c_lex' is specific to the C and C++
24657      compilers.  It will not work in the Java or Fortran compilers, or
24658      any other language compilers for that matter.  Thus if `c_lex' is
24659      going to be called from target-specific code, it must only be done
24660      so when building the C and C++ compilers.  This can be done by
24661      defining the variables `c_target_objs' and `cxx_target_objs' in the
24662      target entry in the `config.gcc' file.  These variables should name
24663      the target-specific, language-specific object file which contains
24664      the code that uses `c_lex'.  Note it will also be necessary to add
24665      a rule to the makefile fragment pointed to by `tmake_file' that
24666      shows how to build this object file.
24667
24668  -- Macro: HANDLE_SYSV_PRAGMA
24669      Define this macro (to a value of 1) if you want the System V style
24670      pragmas `#pragma pack(<n>)' and `#pragma weak <name> [=<value>]'
24671      to be supported by gcc.
24672
24673      The pack pragma specifies the maximum alignment (in bytes) of
24674      fields within a structure, in much the same way as the
24675      `__aligned__' and `__packed__' `__attribute__'s do.  A pack value
24676      of zero resets the behavior to the default.
24677
24678      A subtlety for Microsoft Visual C/C++ style bit-field packing
24679      (e.g. -mms-bitfields) for targets that support it: When a
24680      bit-field is inserted into a packed record, the whole size of the
24681      underlying type is used by one or more same-size adjacent
24682      bit-fields (that is, if its long:3, 32 bits is used in the record,
24683      and any additional adjacent long bit-fields are packed into the
24684      same chunk of 32 bits.  However, if the size changes, a new field
24685      of that size is allocated).
24686
24687      If both MS bit-fields and `__attribute__((packed))' are used, the
24688      latter will take precedence.  If `__attribute__((packed))' is used
24689      on a single field when MS bit-fields are in use, it will take
24690      precedence for that field, but the alignment of the rest of the
24691      structure may affect its placement.
24692
24693      The weak pragma only works if `SUPPORTS_WEAK' and
24694      `ASM_WEAKEN_LABEL' are defined.  If enabled it allows the creation
24695      of specifically named weak labels, optionally with a value.
24696
24697  -- Macro: HANDLE_PRAGMA_PACK_PUSH_POP
24698      Define this macro (to a value of 1) if you want to support the
24699      Win32 style pragmas `#pragma pack(push[,N])' and `#pragma
24700      pack(pop)'.  The `pack(push,[N])' pragma specifies the maximum
24701      alignment (in bytes) of fields within a structure, in much the
24702      same way as the `__aligned__' and `__packed__' `__attribute__'s
24703      do.  A pack value of zero resets the behavior to the default.
24704      Successive invocations of this pragma cause the previous values to
24705      be stacked, so that invocations of `#pragma pack(pop)' will return
24706      to the previous value.
24707
24708  -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
24709      Define this macro, as well as `HANDLE_SYSV_PRAGMA', if macros
24710      should be expanded in the arguments of `#pragma pack'.
24711
24712  -- Macro: TARGET_DEFAULT_PACK_STRUCT
24713      If your target requires a structure packing default other than 0
24714      (meaning the machine default), define this macro to the necessary
24715      value (in bytes).  This must be a value that would also valid to
24716      be used with `#pragma pack()' (that is, a small power of two).
24717
24718  -- Macro: DOLLARS_IN_IDENTIFIERS
24719      Define this macro to control use of the character `$' in
24720      identifier names for the C family of languages.  0 means `$' is
24721      not allowed by default; 1 means it is allowed.  1 is the default;
24722      there is no need to define this macro in that case.
24723
24724  -- Macro: NO_DOLLAR_IN_LABEL
24725      Define this macro if the assembler does not accept the character
24726      `$' in label names.  By default constructors and destructors in
24727      G++ have `$' in the identifiers.  If this macro is defined, `.' is
24728      used instead.
24729
24730  -- Macro: NO_DOT_IN_LABEL
24731      Define this macro if the assembler does not accept the character
24732      `.' in label names.  By default constructors and destructors in G++
24733      have names that use `.'.  If this macro is defined, these names
24734      are rewritten to avoid `.'.
24735
24736  -- Macro: INSN_SETS_ARE_DELAYED (INSN)
24737      Define this macro as a C expression that is nonzero if it is safe
24738      for the delay slot scheduler to place instructions in the delay
24739      slot of INSN, even if they appear to use a resource set or
24740      clobbered in INSN.  INSN is always a `jump_insn' or an `insn'; GCC
24741      knows that every `call_insn' has this behavior.  On machines where
24742      some `insn' or `jump_insn' is really a function call and hence has
24743      this behavior, you should define this macro.
24744
24745      You need not define this macro if it would always return zero.
24746
24747  -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN)
24748      Define this macro as a C expression that is nonzero if it is safe
24749      for the delay slot scheduler to place instructions in the delay
24750      slot of INSN, even if they appear to set or clobber a resource
24751      referenced in INSN.  INSN is always a `jump_insn' or an `insn'.
24752      On machines where some `insn' or `jump_insn' is really a function
24753      call and its operands are registers whose use is actually in the
24754      subroutine it calls, you should define this macro.  Doing so
24755      allows the delay slot scheduler to move instructions which copy
24756      arguments into the argument registers into the delay slot of INSN.
24757
24758      You need not define this macro if it would always return zero.
24759
24760  -- Macro: MULTIPLE_SYMBOL_SPACES
24761      Define this macro as a C expression that is nonzero if, in some
24762      cases, global symbols from one translation unit may not be bound
24763      to undefined symbols in another translation unit without user
24764      intervention.  For instance, under Microsoft Windows symbols must
24765      be explicitly imported from shared libraries (DLLs).
24766
24767      You need not define this macro if it would always evaluate to zero.
24768
24769  -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree CLOBBERS)
24770      This target hook should add to CLOBBERS `STRING_CST' trees for any
24771      hard regs the port wishes to automatically clobber for all asms.
24772      It should return the result of the last `tree_cons' used to add a
24773      clobber.
24774
24775  -- Macro: MATH_LIBRARY
24776      Define this macro as a C string constant for the linker argument
24777      to link in the system math library, or `""' if the target does not
24778      have a separate math library.
24779
24780      You need only define this macro if the default of `"-lm"' is wrong.
24781
24782  -- Macro: LIBRARY_PATH_ENV
24783      Define this macro as a C string constant for the environment
24784      variable that specifies where the linker should look for libraries.
24785
24786      You need only define this macro if the default of `"LIBRARY_PATH"'
24787      is wrong.
24788
24789  -- Macro: TARGET_HAS_F_SETLKW
24790      Define this macro if the target supports file locking with fcntl /
24791      F_SETLKW.  Note that this functionality is part of POSIX.
24792      Defining `TARGET_HAS_F_SETLKW' will enable the test coverage code
24793      to use file locking when exiting a program, which avoids race
24794      conditions if the program has forked.
24795
24796  -- Macro: MAX_CONDITIONAL_EXECUTE
24797      A C expression for the maximum number of instructions to execute
24798      via conditional execution instructions instead of a branch.  A
24799      value of `BRANCH_COST'+1 is the default if the machine does not
24800      use cc0, and 1 if it does use cc0.
24801
24802  -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
24803      Used if the target needs to perform machine-dependent
24804      modifications on the conditionals used for turning basic blocks
24805      into conditionally executed code.  CE_INFO points to a data
24806      structure, `struct ce_if_block', which contains information about
24807      the currently processed blocks.  TRUE_EXPR and FALSE_EXPR are the
24808      tests that are used for converting the then-block and the
24809      else-block, respectively.  Set either TRUE_EXPR or FALSE_EXPR to a
24810      null pointer if the tests cannot be converted.
24811
24812  -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
24813           FALSE_EXPR)
24814      Like `IFCVT_MODIFY_TESTS', but used when converting more
24815      complicated if-statements into conditions combined by `and' and
24816      `or' operations.  BB contains the basic block that contains the
24817      test that is currently being processed and about to be turned into
24818      a condition.
24819
24820  -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
24821      A C expression to modify the PATTERN of an INSN that is to be
24822      converted to conditional execution format.  CE_INFO points to a
24823      data structure, `struct ce_if_block', which contains information
24824      about the currently processed blocks.
24825
24826  -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
24827      A C expression to perform any final machine dependent
24828      modifications in converting code to conditional execution.  The
24829      involved basic blocks can be found in the `struct ce_if_block'
24830      structure that is pointed to by CE_INFO.
24831
24832  -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
24833      A C expression to cancel any machine dependent modifications in
24834      converting code to conditional execution.  The involved basic
24835      blocks can be found in the `struct ce_if_block' structure that is
24836      pointed to by CE_INFO.
24837
24838  -- Macro: IFCVT_INIT_EXTRA_FIELDS (CE_INFO)
24839      A C expression to initialize any extra fields in a `struct
24840      ce_if_block' structure, which are defined by the
24841      `IFCVT_EXTRA_FIELDS' macro.
24842
24843  -- Macro: IFCVT_EXTRA_FIELDS
24844      If defined, it should expand to a set of field declarations that
24845      will be added to the `struct ce_if_block' structure.  These should
24846      be initialized by the `IFCVT_INIT_EXTRA_FIELDS' macro.
24847
24848  -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG ()
24849      If non-null, this hook performs a target-specific pass over the
24850      instruction stream.  The compiler will run it at all optimization
24851      levels, just before the point at which it normally does
24852      delayed-branch scheduling.
24853
24854      The exact purpose of the hook varies from target to target.  Some
24855      use it to do transformations that are necessary for correctness,
24856      such as laying out in-function constant pools or avoiding hardware
24857      hazards.  Others use it as an opportunity to do some
24858      machine-dependent optimizations.
24859
24860      You need not implement the hook if it has nothing to do.  The
24861      default definition is null.
24862
24863  -- Target Hook: void TARGET_INIT_BUILTINS ()
24864      Define this hook if you have any machine-specific built-in
24865      functions that need to be defined.  It should be a function that
24866      performs the necessary setup.
24867
24868      Machine specific built-in functions can be useful to expand
24869      special machine instructions that would otherwise not normally be
24870      generated because they have no equivalent in the source language
24871      (for example, SIMD vector instructions or prefetch instructions).
24872
24873      To create a built-in function, call the function
24874      `lang_hooks.builtin_function' which is defined by the language
24875      front end.  You can use any type nodes set up by
24876      `build_common_tree_nodes' and `build_common_tree_nodes_2'; only
24877      language front ends that use those two functions will call
24878      `TARGET_INIT_BUILTINS'.
24879
24880  -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
24881           SUBTARGET, enum machine_mode MODE, int IGNORE)
24882      Expand a call to a machine specific built-in function that was set
24883      up by `TARGET_INIT_BUILTINS'.  EXP is the expression for the
24884      function call; the result should go to TARGET if that is
24885      convenient, and have mode MODE if that is convenient.  SUBTARGET
24886      may be used as the target for computing one of EXP's operands.
24887      IGNORE is nonzero if the value is to be ignored.  This function
24888      should return the result of the call to the built-in function.
24889
24890  -- Target Hook: tree TARGET_FOLD_BUILTIN (tree EXP, bool IGNORE)
24891      Expand a call to a machine specific built-in function that was set
24892      up by `TARGET_INIT_BUILTINS'.  EXP is the expression for the
24893      function call; the result is another tree containing a simplified
24894      expression for the call's result.  If IGNORE is true the value
24895      will be ignored.
24896
24897  -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2)
24898      Take a branch insn in BRANCH1 and another in BRANCH2.  Return true
24899      if redirecting BRANCH1 to the destination of BRANCH2 is possible.
24900
24901      On some targets, branches may have a limited range.  Optimizing the
24902      filling of delay slots can result in branches being redirected,
24903      and this may in turn cause a branch offset to overflow.
24904
24905  -- Macro: ALLOCATE_INITIAL_VALUE (HARD_REG)
24906      When the initial value of a hard register has been copied in a
24907      pseudo register, it is often not necessary to actually allocate
24908      another register to this pseudo register, because the original
24909      hard register or a stack slot it has been saved into can be used.
24910      `ALLOCATE_INITIAL_VALUE', if defined, is called at the start of
24911      register allocation once for each hard register that had its
24912      initial value copied by using `get_func_hard_reg_initial_val' or
24913      `get_hard_reg_initial_val'.  Possible values are `NULL_RTX', if
24914      you don't want to do any special allocation, a `REG' rtx--that
24915      would typically be the hard register itself, if it is known not to
24916      be clobbered--or a `MEM'.  If you are returning a `MEM', this is
24917      only a hint for the allocator; it might decide to use another
24918      register anyways.  You may use `current_function_leaf_function' in
24919      the definition of the macro, functions that use `REG_N_SETS', to
24920      determine if the hard register in question will not be clobbered.
24921
24922  -- Macro: TARGET_OBJECT_SUFFIX
24923      Define this macro to be a C string representing the suffix for
24924      object files on your target machine.  If you do not define this
24925      macro, GCC will use `.o' as the suffix for object files.
24926
24927  -- Macro: TARGET_EXECUTABLE_SUFFIX
24928      Define this macro to be a C string representing the suffix to be
24929      automatically added to executable files on your target machine.
24930      If you do not define this macro, GCC will use the null string as
24931      the suffix for executable files.
24932
24933  -- Macro: COLLECT_EXPORT_LIST
24934      If defined, `collect2' will scan the individual object files
24935      specified on its command line and create an export list for the
24936      linker.  Define this macro for systems like AIX, where the linker
24937      discards object files that are not referenced from `main' and uses
24938      export lists.
24939
24940  -- Macro: MODIFY_JNI_METHOD_CALL (MDECL)
24941      Define this macro to a C expression representing a variant of the
24942      method call MDECL, if Java Native Interface (JNI) methods must be
24943      invoked differently from other methods on your target.  For
24944      example, on 32-bit Microsoft Windows, JNI methods must be invoked
24945      using the `stdcall' calling convention and this macro is then
24946      defined as this expression:
24947
24948           build_type_attribute_variant (MDECL,
24949                                         build_tree_list
24950                                         (get_identifier ("stdcall"),
24951                                          NULL))
24952
24953  -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
24954      This target hook returns `true' past the point in which new jump
24955      instructions could be created.  On machines that require a
24956      register for every jump such as the SHmedia ISA of SH5, this point
24957      would typically be reload, so this target hook should be defined
24958      to a function such as:
24959
24960           static bool
24961           cannot_modify_jumps_past_reload_p ()
24962           {
24963             return (reload_completed || reload_in_progress);
24964           }
24965
24966  -- Target Hook: int TARGET_BRANCH_TARGET_REGISTER_CLASS (void)
24967      This target hook returns a register class for which branch target
24968      register optimizations should be applied.  All registers in this
24969      class should be usable interchangeably.  After reload, registers
24970      in this class will be re-allocated and loads will be hoisted out
24971      of loops and be subjected to inter-block scheduling.
24972
24973  -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool
24974           AFTER_PROLOGUE_EPILOGUE_GEN)
24975      Branch target register optimization will by default exclude
24976      callee-saved registers that are not already live during the
24977      current function; if this target hook returns true, they will be
24978      included.  The target code must than make sure that all target
24979      registers in the class returned by
24980      `TARGET_BRANCH_TARGET_REGISTER_CLASS' that might need saving are
24981      saved.  AFTER_PROLOGUE_EPILOGUE_GEN indicates if prologues and
24982      epilogues have already been generated.  Note, even if you only
24983      return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, you still
24984      are likely to have to make special provisions in
24985      `INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved
24986      target registers.
24987
24988  -- Macro: POWI_MAX_MULTS
24989      If defined, this macro is interpreted as a signed integer C
24990      expression that specifies the maximum number of floating point
24991      multiplications that should be emitted when expanding
24992      exponentiation by an integer constant inline.  When this value is
24993      defined, exponentiation requiring more than this number of
24994      multiplications is implemented by calling the system library's
24995      `pow', `powf' or `powl' routines.  The default value places no
24996      upper bound on the multiplication count.
24997
24998  -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
24999           *IPREFIX, int STDINC)
25000      This target hook should register any extra include files for the
25001      target.  The parameter STDINC indicates if normal include files
25002      are present.  The parameter SYSROOT is the system root directory.
25003      The parameter IPREFIX is the prefix for the gcc directory.
25004
25005  -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const
25006           char *IPREFIX, int STDINC)
25007      This target hook should register any extra include files for the
25008      target before any standard headers.  The parameter STDINC
25009      indicates if normal include files are present.  The parameter
25010      SYSROOT is the system root directory.  The parameter IPREFIX is
25011      the prefix for the gcc directory.
25012
25013  -- Macro: void TARGET_OPTF (char *PATH)
25014      This target hook should register special include paths for the
25015      target.  The parameter PATH is the include to register.  On Darwin
25016      systems, this is used for Framework includes, which have semantics
25017      that are different from `-I'.
25018
25019  -- Target Hook: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
25020      This target hook returns `true' if it is safe to use a local alias
25021      for a virtual function FNDECL when constructing thunks, `false'
25022      otherwise.  By default, the hook returns `true' for all functions,
25023      if a target supports aliases (i.e. defines `ASM_OUTPUT_DEF'),
25024      `false' otherwise,
25025
25026  -- Macro: TARGET_FORMAT_TYPES
25027      If defined, this macro is the name of a global variable containing
25028      target-specific format checking information for the `-Wformat'
25029      option.  The default is to have no target-specific format checks.
25030
25031  -- Macro: TARGET_N_FORMAT_TYPES
25032      If defined, this macro is the number of entries in
25033      `TARGET_FORMAT_TYPES'.
25034
25035  -- Target Hook: bool TARGET_RELAXED_ORDERING
25036      If set to `true', means that the target's memory model does not
25037      guarantee that loads which do not depend on one another will access
25038      main memory in the order of the instruction stream; if ordering is
25039      important, an explicit memory barrier must be used.  This is true
25040      of many recent processors which implement a policy of "relaxed,"
25041      "weak," or "release" memory consistency, such as Alpha, PowerPC,
25042      and ia64.  The default is `false'.
25043
25044  -- Macro: TARGET_USE_JCR_SECTION
25045      This macro determines whether to use the JCR section to register
25046      Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1
25047      if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true,
25048      else 0.
25049
25050 \1f
25051 File: gccint.info,  Node: Host Config,  Next: Fragments,  Prev: Target Macros,  Up: Top
25052
25053 14 Host Configuration
25054 *********************
25055
25056 Most details about the machine and system on which the compiler is
25057 actually running are detected by the `configure' script.  Some things
25058 are impossible for `configure' to detect; these are described in two
25059 ways, either by macros defined in a file named `xm-MACHINE.h' or by
25060 hook functions in the file specified by the OUT_HOST_HOOK_OBJ variable
25061 in `config.gcc'.  (The intention is that very few hosts will need a
25062 header file but nearly every fully supported host will need to override
25063 some hooks.)
25064
25065  If you need to define only a few macros, and they have simple
25066 definitions, consider using the `xm_defines' variable in your
25067 `config.gcc' entry instead of creating a host configuration header.
25068 *Note System Config::.
25069
25070 * Menu:
25071
25072 * Host Common::         Things every host probably needs implemented.
25073 * Filesystem::          Your host can't have the letter `a' in filenames?
25074 * Host Misc::           Rare configuration options for hosts.
25075
25076 \1f
25077 File: gccint.info,  Node: Host Common,  Next: Filesystem,  Up: Host Config
25078
25079 14.1 Host Common
25080 ================
25081
25082 Some things are just not portable, even between similar operating
25083 systems, and are too difficult for autoconf to detect.  They get
25084 implemented using hook functions in the file specified by the
25085 HOST_HOOK_OBJ variable in `config.gcc'.
25086
25087  -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
25088      This host hook is used to set up handling for extra signals.  The
25089      most common thing to do in this hook is to detect stack overflow.
25090
25091  -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
25092           FD)
25093      This host hook returns the address of some space that is likely to
25094      be free in some subsequent invocation of the compiler.  We intend
25095      to load the PCH data at this address such that the data need not
25096      be relocated.  The area should be able to hold SIZE bytes.  If the
25097      host uses `mmap', FD is an open file descriptor that can be used
25098      for probing.
25099
25100  -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS,
25101           size_t SIZE, int FD, size_t OFFSET)
25102      This host hook is called when a PCH file is about to be loaded.
25103      We want to load SIZE bytes from FD at OFFSET into memory at
25104      ADDRESS.  The given address will be the result of a previous
25105      invocation of `HOST_HOOKS_GT_PCH_GET_ADDRESS'.  Return -1 if we
25106      couldn't allocate SIZE bytes at ADDRESS.  Return 0 if the memory
25107      is allocated but the data is not loaded.  Return 1 if the hook has
25108      performed everything.
25109
25110      If the implementation uses reserved address space, free any
25111      reserved space beyond SIZE, regardless of the return value.  If no
25112      PCH will be loaded, this hook may be called with SIZE zero, in
25113      which case all reserved address space should be freed.
25114
25115      Do not try to handle values of ADDRESS that could not have been
25116      returned by this executable; just return -1.  Such values usually
25117      indicate an out-of-date PCH file (built by some other GCC
25118      executable), and such a PCH file won't work.
25119
25120  -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);
25121      This host hook returns the alignment required for allocating
25122      virtual memory.  Usually this is the same as getpagesize, but on
25123      some hosts the alignment for reserving memory differs from the
25124      pagesize for committing memory.
25125
25126 \1f
25127 File: gccint.info,  Node: Filesystem,  Next: Host Misc,  Prev: Host Common,  Up: Host Config
25128
25129 14.2 Host Filesystem
25130 ====================
25131
25132 GCC needs to know a number of things about the semantics of the host
25133 machine's filesystem.  Filesystems with Unix and MS-DOS semantics are
25134 automatically detected.  For other systems, you can define the
25135 following macros in `xm-MACHINE.h'.
25136
25137 `HAVE_DOS_BASED_FILE_SYSTEM'
25138      This macro is automatically defined by `system.h' if the host file
25139      system obeys the semantics defined by MS-DOS instead of Unix.  DOS
25140      file systems are case insensitive, file specifications may begin
25141      with a drive letter, and both forward slash and backslash (`/' and
25142      `\') are directory separators.
25143
25144 `DIR_SEPARATOR'
25145 `DIR_SEPARATOR_2'
25146      If defined, these macros expand to character constants specifying
25147      separators for directory names within a file specification.
25148      `system.h' will automatically give them appropriate values on Unix
25149      and MS-DOS file systems.  If your file system is neither of these,
25150      define one or both appropriately in `xm-MACHINE.h'.
25151
25152      However, operating systems like VMS, where constructing a pathname
25153      is more complicated than just stringing together directory names
25154      separated by a special character, should not define either of these
25155      macros.
25156
25157 `PATH_SEPARATOR'
25158      If defined, this macro should expand to a character constant
25159      specifying the separator for elements of search paths.  The default
25160      value is a colon (`:').  DOS-based systems usually, but not
25161      always, use semicolon (`;').
25162
25163 `VMS'
25164      Define this macro if the host system is VMS.
25165
25166 `HOST_OBJECT_SUFFIX'
25167      Define this macro to be a C string representing the suffix for
25168      object files on your host machine.  If you do not define this
25169      macro, GCC will use `.o' as the suffix for object files.
25170
25171 `HOST_EXECUTABLE_SUFFIX'
25172      Define this macro to be a C string representing the suffix for
25173      executable files on your host machine.  If you do not define this
25174      macro, GCC will use the null string as the suffix for executable
25175      files.
25176
25177 `HOST_BIT_BUCKET'
25178      A pathname defined by the host operating system, which can be
25179      opened as a file and written to, but all the information written
25180      is discarded.  This is commonly known as a "bit bucket" or "null
25181      device".  If you do not define this macro, GCC will use
25182      `/dev/null' as the bit bucket.  If the host does not support a bit
25183      bucket, define this macro to an invalid filename.
25184
25185 `UPDATE_PATH_HOST_CANONICALIZE (PATH)'
25186      If defined, a C statement (sans semicolon) that performs
25187      host-dependent canonicalization when a path used in a compilation
25188      driver or preprocessor is canonicalized.  PATH is a malloc-ed path
25189      to be canonicalized.  If the C statement does canonicalize PATH
25190      into a different buffer, the old path should be freed and the new
25191      buffer should have been allocated with malloc.
25192
25193 `DUMPFILE_FORMAT'
25194      Define this macro to be a C string representing the format to use
25195      for constructing the index part of debugging dump file names.  The
25196      resultant string must fit in fifteen bytes.  The full filename
25197      will be the concatenation of: the prefix of the assembler file
25198      name, the string resulting from applying this format to an index
25199      number, and a string unique to each dump file kind, e.g. `rtl'.
25200
25201      If you do not define this macro, GCC will use `.%02d.'.  You should
25202      define this macro if using the default will create an invalid file
25203      name.
25204
25205 `DELETE_IF_ORDINARY'
25206      Define this macro to be a C statement (sans semicolon) that
25207      performs host-dependent removal of ordinary temp files in the
25208      compilation driver.
25209
25210      If you do not define this macro, GCC will use the default version.
25211      You should define this macro if the default version does not
25212      reliably remove the temp file as, for example, on VMS which allows
25213      multiple versions of a file.
25214
25215 `HOST_LACKS_INODE_NUMBERS'
25216      Define this macro if the host filesystem does not report
25217      meaningful inode numbers in struct stat.
25218
25219 \1f
25220 File: gccint.info,  Node: Host Misc,  Prev: Filesystem,  Up: Host Config
25221
25222 14.3 Host Misc
25223 ==============
25224
25225 `FATAL_EXIT_CODE'
25226      A C expression for the status code to be returned when the compiler
25227      exits after serious errors.  The default is the system-provided
25228      macro `EXIT_FAILURE', or `1' if the system doesn't define that
25229      macro.  Define this macro only if these defaults are incorrect.
25230
25231 `SUCCESS_EXIT_CODE'
25232      A C expression for the status code to be returned when the compiler
25233      exits without serious errors.  (Warnings are not serious errors.)
25234      The default is the system-provided macro `EXIT_SUCCESS', or `0' if
25235      the system doesn't define that macro.  Define this macro only if
25236      these defaults are incorrect.
25237
25238 `USE_C_ALLOCA'
25239      Define this macro if GCC should use the C implementation of
25240      `alloca' provided by `libiberty.a'.  This only affects how some
25241      parts of the compiler itself allocate memory.  It does not change
25242      code generation.
25243
25244      When GCC is built with a compiler other than itself, the C `alloca'
25245      is always used.  This is because most other implementations have
25246      serious bugs.  You should define this macro only on a system where
25247      no stack-based `alloca' can possibly work.  For instance, if a
25248      system has a small limit on the size of the stack, GCC's builtin
25249      `alloca' will not work reliably.
25250
25251 `COLLECT2_HOST_INITIALIZATION'
25252      If defined, a C statement (sans semicolon) that performs
25253      host-dependent initialization when `collect2' is being initialized.
25254
25255 `GCC_DRIVER_HOST_INITIALIZATION'
25256      If defined, a C statement (sans semicolon) that performs
25257      host-dependent initialization when a compilation driver is being
25258      initialized.
25259
25260 `SMALL_ARG_MAX'
25261      Define this macro if the host system has a small limit on the total
25262      size of an argument vector.  This causes the driver to take more
25263      care not to pass unnecessary arguments to subprocesses.
25264
25265 `HOST_LONG_LONG_FORMAT'
25266      If defined, the string used to indicate an argument of type `long
25267      long' to functions like `printf'.  The default value is `"ll"'.
25268
25269  In addition, if `configure' generates an incorrect definition of any
25270 of the macros in `auto-host.h', you can override that definition in a
25271 host configuration header.  If you need to do this, first see if it is
25272 possible to fix `configure'.
25273
25274 \1f
25275 File: gccint.info,  Node: Fragments,  Next: Collect2,  Prev: Host Config,  Up: Top
25276
25277 15 Makefile Fragments
25278 *********************
25279
25280 When you configure GCC using the `configure' script, it will construct
25281 the file `Makefile' from the template file `Makefile.in'.  When it does
25282 this, it can incorporate makefile fragments from the `config'
25283 directory.  These are used to set Makefile parameters that are not
25284 amenable to being calculated by autoconf.  The list of fragments to
25285 incorporate is set by `config.gcc' (and occasionally `config.build' and
25286 `config.host'); *Note System Config::.
25287
25288  Fragments are named either `t-TARGET' or `x-HOST', depending on
25289 whether they are relevant to configuring GCC to produce code for a
25290 particular target, or to configuring GCC to run on a particular host.
25291 Here TARGET and HOST are mnemonics which usually have some relationship
25292 to the canonical system name, but no formal connection.
25293
25294  If these files do not exist, it means nothing needs to be added for a
25295 given target or host.  Most targets need a few `t-TARGET' fragments,
25296 but needing `x-HOST' fragments is rare.
25297
25298 * Menu:
25299
25300 * Target Fragment:: Writing `t-TARGET' files.
25301 * Host Fragment::   Writing `x-HOST' files.
25302
25303 \1f
25304 File: gccint.info,  Node: Target Fragment,  Next: Host Fragment,  Up: Fragments
25305
25306 15.1 Target Makefile Fragments
25307 ==============================
25308
25309 Target makefile fragments can set these Makefile variables.
25310
25311 `LIBGCC2_CFLAGS'
25312      Compiler flags to use when compiling `libgcc2.c'.
25313
25314 `LIB2FUNCS_EXTRA'
25315      A list of source file names to be compiled or assembled and
25316      inserted into `libgcc.a'.
25317
25318 `Floating Point Emulation'
25319      To have GCC include software floating point libraries in `libgcc.a'
25320      define `FPBIT' and `DPBIT' along with a few rules as follows:
25321           # We want fine grained libraries, so use the new code
25322           # to build the floating point emulation libraries.
25323           FPBIT = fp-bit.c
25324           DPBIT = dp-bit.c
25325
25326
25327           fp-bit.c: $(srcdir)/config/fp-bit.c
25328                   echo '#define FLOAT' > fp-bit.c
25329                   cat $(srcdir)/config/fp-bit.c >> fp-bit.c
25330
25331           dp-bit.c: $(srcdir)/config/fp-bit.c
25332                   cat $(srcdir)/config/fp-bit.c > dp-bit.c
25333
25334      You may need to provide additional #defines at the beginning of
25335      `fp-bit.c' and `dp-bit.c' to control target endianness and other
25336      options.
25337
25338 `CRTSTUFF_T_CFLAGS'
25339      Special flags used when compiling `crtstuff.c'.  *Note
25340      Initialization::.
25341
25342 `CRTSTUFF_T_CFLAGS_S'
25343      Special flags used when compiling `crtstuff.c' for shared linking.
25344      Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'.
25345      *Note Initialization::.
25346
25347 `MULTILIB_OPTIONS'
25348      For some targets, invoking GCC in different ways produces objects
25349      that can not be linked together.  For example, for some targets GCC
25350      produces both big and little endian code.  For these targets, you
25351      must arrange for multiple versions of `libgcc.a' to be compiled,
25352      one for each set of incompatible options.  When GCC invokes the
25353      linker, it arranges to link in the right version of `libgcc.a',
25354      based on the command line options used.
25355
25356      The `MULTILIB_OPTIONS' macro lists the set of options for which
25357      special versions of `libgcc.a' must be built.  Write options that
25358      are mutually incompatible side by side, separated by a slash.
25359      Write options that may be used together separated by a space.  The
25360      build procedure will build all combinations of compatible options.
25361
25362      For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020
25363      msoft-float', `Makefile' will build special versions of `libgcc.a'
25364      using the following sets of options:  `-m68000', `-m68020',
25365      `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'.
25366
25367 `MULTILIB_DIRNAMES'
25368      If `MULTILIB_OPTIONS' is used, this variable specifies the
25369      directory names that should be used to hold the various libraries.
25370      Write one element in `MULTILIB_DIRNAMES' for each element in
25371      `MULTILIB_OPTIONS'.  If `MULTILIB_DIRNAMES' is not used, the
25372      default value will be `MULTILIB_OPTIONS', with all slashes treated
25373      as spaces.
25374
25375      For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020
25376      msoft-float', then the default value of `MULTILIB_DIRNAMES' is
25377      `m68000 m68020 msoft-float'.  You may specify a different value if
25378      you desire a different set of directory names.
25379
25380 `MULTILIB_MATCHES'
25381      Sometimes the same option may be written in two different ways.
25382      If an option is listed in `MULTILIB_OPTIONS', GCC needs to know
25383      about any synonyms.  In that case, set `MULTILIB_MATCHES' to a
25384      list of items of the form `option=option' to describe all relevant
25385      synonyms.  For example, `m68000=mc68000 m68020=mc68020'.
25386
25387 `MULTILIB_EXCEPTIONS'
25388      Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being
25389      specified, there are combinations that should not be built.  In
25390      that case, set `MULTILIB_EXCEPTIONS' to be all of the switch
25391      exceptions in shell case syntax that should not be built.
25392
25393      For example the ARM processor cannot execute both hardware floating
25394      point instructions and the reduced size THUMB instructions at the
25395      same time, so there is no need to build libraries with both of
25396      these options enabled.  Therefore `MULTILIB_EXCEPTIONS' is set to:
25397           *mthumb/*mhard-float*
25398
25399 `MULTILIB_EXTRA_OPTS'
25400      Sometimes it is desirable that when building multiple versions of
25401      `libgcc.a' certain options should always be passed on to the
25402      compiler.  In that case, set `MULTILIB_EXTRA_OPTS' to be the list
25403      of options to be used for all builds.  If you set this, you should
25404      probably set `CRTSTUFF_T_CFLAGS' to a dash followed by it.
25405
25406 `SPECS'
25407      Unfortunately, setting `MULTILIB_EXTRA_OPTS' is not enough, since
25408      it does not affect the build of target libraries, at least not the
25409      build of the default multilib.  One possible work-around is to use
25410      `DRIVER_SELF_SPECS' to bring options from the `specs' file as if
25411      they had been passed in the compiler driver command line.
25412      However, you don't want to be adding these options after the
25413      toolchain is installed, so you can instead tweak the `specs' file
25414      that will be used during the toolchain build, while you still
25415      install the original, built-in `specs'.  The trick is to set
25416      `SPECS' to some other filename (say `specs.install'), that will
25417      then be created out of the built-in specs, and introduce a
25418      `Makefile' rule to generate the `specs' file that's going to be
25419      used at build time out of your `specs.install'.
25420
25421 \1f
25422 File: gccint.info,  Node: Host Fragment,  Prev: Target Fragment,  Up: Fragments
25423
25424 15.2 Host Makefile Fragments
25425 ============================
25426
25427 The use of `x-HOST' fragments is discouraged.  You should do so only if
25428 there is no other mechanism to get the behavior desired.  Host
25429 fragments should never forcibly override variables set by the configure
25430 script, as they may have been adjusted by the user.
25431
25432  Variables provided for host fragments to set include:
25433
25434 `X_CFLAGS'
25435 `X_CPPFLAGS'
25436      These are extra flags to pass to the C compiler and preprocessor,
25437      respectively.  They are used both when building GCC, and when
25438      compiling things with the just-built GCC.
25439
25440 `XCFLAGS'
25441      These are extra flags to use when building the compiler.  They are
25442      not used when compiling `libgcc.a'.  However, they _are_ used when
25443      recompiling the compiler with itself in later stages of a
25444      bootstrap.
25445
25446 `BOOT_LDFLAGS'
25447      Flags to be passed to the linker when recompiling the compiler with
25448      itself in later stages of a bootstrap.  You might need to use this
25449      if, for instance, one of the front ends needs more text space than
25450      the linker provides by default.
25451
25452 `EXTRA_PROGRAMS'
25453      A list of additional programs required to use the compiler on this
25454      host, which should be compiled with GCC and installed alongside
25455      the front ends.  If you set this variable, you must also provide
25456      rules to build the extra programs.
25457
25458
25459 \1f
25460 File: gccint.info,  Node: Collect2,  Next: Header Dirs,  Prev: Fragments,  Up: Top
25461
25462 16 `collect2'
25463 *************
25464
25465 GCC uses a utility called `collect2' on nearly all systems to arrange
25466 to call various initialization functions at start time.
25467
25468  The program `collect2' works by linking the program once and looking
25469 through the linker output file for symbols with particular names
25470 indicating they are constructor functions.  If it finds any, it creates
25471 a new temporary `.c' file containing a table of them, compiles it, and
25472 links the program a second time including that file.
25473
25474  The actual calls to the constructors are carried out by a subroutine
25475 called `__main', which is called (automatically) at the beginning of
25476 the body of `main' (provided `main' was compiled with GNU CC).  Calling
25477 `__main' is necessary, even when compiling C code, to allow linking C
25478 and C++ object code together.  (If you use `-nostdlib', you get an
25479 unresolved reference to `__main', since it's defined in the standard
25480 GCC library.  Include `-lgcc' at the end of your compiler command line
25481 to resolve this reference.)
25482
25483  The program `collect2' is installed as `ld' in the directory where the
25484 passes of the compiler are installed.  When `collect2' needs to find
25485 the _real_ `ld', it tries the following file names:
25486
25487    * `real-ld' in the directories listed in the compiler's search
25488      directories.
25489
25490    * `real-ld' in the directories listed in the environment variable
25491      `PATH'.
25492
25493    * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
25494      if specified.
25495
25496    * `ld' in the compiler's search directories, except that `collect2'
25497      will not execute itself recursively.
25498
25499    * `ld' in `PATH'.
25500
25501  "The compiler's search directories" means all the directories where
25502 `gcc' searches for passes of the compiler.  This includes directories
25503 that you specify with `-B'.
25504
25505  Cross-compilers search a little differently:
25506
25507    * `real-ld' in the compiler's search directories.
25508
25509    * `TARGET-real-ld' in `PATH'.
25510
25511    * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
25512      if specified.
25513
25514    * `ld' in the compiler's search directories.
25515
25516    * `TARGET-ld' in `PATH'.
25517
25518  `collect2' explicitly avoids running `ld' using the file name under
25519 which `collect2' itself was invoked.  In fact, it remembers up a list
25520 of such names--in case one copy of `collect2' finds another copy (or
25521 version) of `collect2' installed as `ld' in a second place in the
25522 search path.
25523
25524  `collect2' searches for the utilities `nm' and `strip' using the same
25525 algorithm as above for `ld'.
25526
25527 \1f
25528 File: gccint.info,  Node: Header Dirs,  Next: Type Information,  Prev: Collect2,  Up: Top
25529
25530 17 Standard Header File Directories
25531 ***********************************
25532
25533 `GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
25534 where GCC stores its private include files, and also where GCC stores
25535 the fixed include files.  A cross compiled GCC runs `fixincludes' on
25536 the header files in `$(tooldir)/include'.  (If the cross compilation
25537 header files need to be fixed, they must be installed before GCC is
25538 built.  If the cross compilation header files are already suitable for
25539 GCC, nothing special need be done).
25540
25541  `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
25542 is where `g++' looks first for header files.  The C++ library installs
25543 only target independent header files in that directory.
25544
25545  `LOCAL_INCLUDE_DIR' is used only by native compilers.  GCC doesn't
25546 install anything there.  It is normally `/usr/local/include'.  This is
25547 where local additions to a packaged system should place header files.
25548
25549  `CROSS_INCLUDE_DIR' is used only by cross compilers.  GCC doesn't
25550 install anything there.
25551
25552  `TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It is
25553 the place for other packages to install header files that GCC will use.
25554 For a cross-compiler, this is the equivalent of `/usr/include'.  When
25555 you build a cross-compiler, `fixincludes' processes any header files in
25556 this directory.
25557
25558 \1f
25559 File: gccint.info,  Node: Type Information,  Next: Funding,  Prev: Header Dirs,  Up: Top
25560
25561 18 Memory Management and Type Information
25562 *****************************************
25563
25564 GCC uses some fairly sophisticated memory management techniques, which
25565 involve determining information about GCC's data structures from GCC's
25566 source code and using this information to perform garbage collection and
25567 implement precompiled headers.
25568
25569  A full C parser would be too complicated for this task, so a limited
25570 subset of C is interpreted and special markers are used to determine
25571 what parts of the source to look at.  All `struct' and `union'
25572 declarations that define data structures that are allocated under
25573 control of the garbage collector must be marked.  All global variables
25574 that hold pointers to garbage-collected memory must also be marked.
25575 Finally, all global variables that need to be saved and restored by a
25576 precompiled header must be marked.  (The precompiled header mechanism
25577 can only save static variables if they're scalar.  Complex data
25578 structures must be allocated in garbage-collected memory to be saved in
25579 a precompiled header.)
25580
25581  The full format of a marker is
25582      GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
25583  but in most cases no options are needed.  The outer double parentheses
25584 are still necessary, though: `GTY(())'.  Markers can appear:
25585
25586    * In a structure definition, before the open brace;
25587
25588    * In a global variable declaration, after the keyword `static' or
25589      `extern'; and
25590
25591    * In a structure field definition, before the name of the field.
25592
25593  Here are some examples of marking simple data structures and globals.
25594
25595      struct TAG GTY(())
25596      {
25597        FIELDS...
25598      };
25599
25600      typedef struct TAG GTY(())
25601      {
25602        FIELDS...
25603      } *TYPENAME;
25604
25605      static GTY(()) struct TAG *LIST;   /* points to GC memory */
25606      static GTY(()) int COUNTER;        /* save counter in a PCH */
25607
25608  The parser understands simple typedefs such as `typedef struct TAG
25609 *NAME;' and `typedef int NAME;'.  These don't need to be marked.
25610
25611 * Menu:
25612
25613 * GTY Options::         What goes inside a `GTY(())'.
25614 * GGC Roots::           Making global variables GGC roots.
25615 * Files::               How the generated files work.
25616
25617 \1f
25618 File: gccint.info,  Node: GTY Options,  Next: GGC Roots,  Up: Type Information
25619
25620 18.1 The Inside of a `GTY(())'
25621 ==============================
25622
25623 Sometimes the C code is not enough to fully describe the type
25624 structure.  Extra information can be provided with `GTY' options and
25625 additional markers.  Some options take a parameter, which may be either
25626 a string or a type name, depending on the parameter.  If an option
25627 takes no parameter, it is acceptable either to omit the parameter
25628 entirely, or to provide an empty string as a parameter.  For example,
25629 `GTY ((skip))' and `GTY ((skip ("")))' are equivalent.
25630
25631  When the parameter is a string, often it is a fragment of C code.  Four
25632 special escapes may be used in these strings, to refer to pieces of the
25633 data structure being marked:
25634
25635 `%h'
25636      The current structure.
25637
25638 `%1'
25639      The structure that immediately contains the current structure.
25640
25641 `%0'
25642      The outermost structure that contains the current structure.
25643
25644 `%a'
25645      A partial expression of the form `[i1][i2]...' that indexes the
25646      array item currently being marked.
25647
25648  For instance, suppose that you have a structure of the form
25649      struct A {
25650        ...
25651      };
25652      struct B {
25653        struct A foo[12];
25654      };
25655  and `b' is a variable of type `struct B'.  When marking `b.foo[11]',
25656 `%h' would expand to `b.foo[11]', `%0' and `%1' would both expand to
25657 `b', and `%a' would expand to `[11]'.
25658
25659  As in ordinary C, adjacent strings will be concatenated; this is
25660 helpful when you have a complicated expression.
25661      GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
25662                        " ? TYPE_NEXT_VARIANT (&%h.generic)"
25663                        " : TREE_CHAIN (&%h.generic)")))
25664
25665  The available options are:
25666
25667 `length ("EXPRESSION")'
25668      There are two places the type machinery will need to be explicitly
25669      told the length of an array.  The first case is when a structure
25670      ends in a variable-length array, like this:
25671           struct rtvec_def GTY(()) {
25672             int num_elem;               /* number of elements */
25673             rtx GTY ((length ("%h.num_elem"))) elem[1];
25674           };
25675
25676      In this case, the `length' option is used to override the specified
25677      array length (which should usually be `1').  The parameter of the
25678      option is a fragment of C code that calculates the length.
25679
25680      The second case is when a structure or a global variable contains a
25681      pointer to an array, like this:
25682           tree *
25683             GTY ((length ("%h.regno_pointer_align_length"))) regno_decl;
25684      In this case, `regno_decl' has been allocated by writing something
25685      like
25686             x->regno_decl =
25687               ggc_alloc (x->regno_pointer_align_length * sizeof (tree));
25688      and the `length' provides the length of the field.
25689
25690      This second use of `length' also works on global variables, like:
25691        static GTY((length ("reg_base_value_size")))
25692          rtx *reg_base_value;
25693
25694 `skip'
25695      If `skip' is applied to a field, the type machinery will ignore it.
25696      This is somewhat dangerous; the only safe use is in a union when
25697      one field really isn't ever used.
25698
25699 `desc ("EXPRESSION")'
25700 `tag ("CONSTANT")'
25701 `default'
25702      The type machinery needs to be told which field of a `union' is
25703      currently active.  This is done by giving each field a constant
25704      `tag' value, and then specifying a discriminator using `desc'.
25705      The value of the expression given by `desc' is compared against
25706      each `tag' value, each of which should be different.  If no `tag'
25707      is matched, the field marked with `default' is used if there is
25708      one, otherwise no field in the union will be marked.
25709
25710      In the `desc' option, the "current structure" is the union that it
25711      discriminates.  Use `%1' to mean the structure containing it.
25712      There are no escapes available to the `tag' option, since it is a
25713      constant.
25714
25715      For example,
25716           struct tree_binding GTY(())
25717           {
25718             struct tree_common common;
25719             union tree_binding_u {
25720               tree GTY ((tag ("0"))) scope;
25721               struct cp_binding_level * GTY ((tag ("1"))) level;
25722             } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
25723             tree value;
25724           };
25725
25726      In this example, the value of BINDING_HAS_LEVEL_P when applied to a
25727      `struct tree_binding *' is presumed to be 0 or 1.  If 1, the type
25728      mechanism will treat the field `level' as being present and if 0,
25729      will treat the field `scope' as being present.
25730
25731 `param_is (TYPE)'
25732 `use_param'
25733      Sometimes it's convenient to define some data structure to work on
25734      generic pointers (that is, `PTR') and then use it with a specific
25735      type.  `param_is' specifies the real type pointed to, and
25736      `use_param' says where in the generic data structure that type
25737      should be put.
25738
25739      For instance, to have a `htab_t' that points to trees, one would
25740      write the definition of `htab_t' like this:
25741           typedef struct GTY(()) {
25742             ...
25743             void ** GTY ((use_param, ...)) entries;
25744             ...
25745           } htab_t;
25746      and then declare variables like this:
25747             static htab_t GTY ((param_is (union tree_node))) ict;
25748
25749 `paramN_is (TYPE)'
25750 `use_paramN'
25751      In more complicated cases, the data structure might need to work on
25752      several different types, which might not necessarily all be
25753      pointers.  For this, `param1_is' through `param9_is' may be used to
25754      specify the real type of a field identified by `use_param1' through
25755      `use_param9'.
25756
25757 `use_params'
25758      When a structure contains another structure that is parameterized,
25759      there's no need to do anything special, the inner structure
25760      inherits the parameters of the outer one.  When a structure
25761      contains a pointer to a parameterized structure, the type
25762      machinery won't automatically detect this (it could, it just
25763      doesn't yet), so it's necessary to tell it that the pointed-to
25764      structure should use the same parameters as the outer structure.
25765      This is done by marking the pointer with the `use_params' option.
25766
25767 `deletable'
25768      `deletable', when applied to a global variable, indicates that when
25769      garbage collection runs, there's no need to mark anything pointed
25770      to by this variable, it can just be set to `NULL' instead.  This
25771      is used to keep a list of free structures around for re-use.
25772
25773 `if_marked ("EXPRESSION")'
25774      Suppose you want some kinds of object to be unique, and so you put
25775      them in a hash table.  If garbage collection marks the hash table,
25776      these objects will never be freed, even if the last other
25777      reference to them goes away.  GGC has special handling to deal
25778      with this: if you use the `if_marked' option on a global hash
25779      table, GGC will call the routine whose name is the parameter to
25780      the option on each hash table entry.  If the routine returns
25781      nonzero, the hash table entry will be marked as usual.  If the
25782      routine returns zero, the hash table entry will be deleted.
25783
25784      The routine `ggc_marked_p' can be used to determine if an element
25785      has been marked already; in fact, the usual case is to use
25786      `if_marked ("ggc_marked_p")'.
25787
25788 `maybe_undef'
25789      When applied to a field, `maybe_undef' indicates that it's OK if
25790      the structure that this fields points to is never defined, so long
25791      as this field is always `NULL'.  This is used to avoid requiring
25792      backends to define certain optional structures.  It doesn't work
25793      with language frontends.
25794
25795 `nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'
25796      The type machinery expects all pointers to point to the start of an
25797      object.  Sometimes for abstraction purposes it's convenient to have
25798      a pointer which points inside an object.  So long as it's possible
25799      to convert the original object to and from the pointer, such
25800      pointers can still be used.  TYPE is the type of the original
25801      object, the TO EXPRESSION returns the pointer given the original
25802      object, and the FROM EXPRESSION returns the original object given
25803      the pointer.  The pointer will be available using the `%h' escape.
25804
25805 `chain_next ("EXPRESSION")'
25806 `chain_prev ("EXPRESSION")'
25807      It's helpful for the type machinery to know if objects are often
25808      chained together in long lists; this lets it generate code that
25809      uses less stack space by iterating along the list instead of
25810      recursing down it.  `chain_next' is an expression for the next
25811      item in the list, `chain_prev' is an expression for the previous
25812      item.  For singly linked lists, use only `chain_next'; for doubly
25813      linked lists, use both.  The machinery requires that taking the
25814      next item of the previous item gives the original item.
25815
25816 `reorder ("FUNCTION NAME")'
25817      Some data structures depend on the relative ordering of pointers.
25818      If the precompiled header machinery needs to change that ordering,
25819      it will call the function referenced by the `reorder' option,
25820      before changing the pointers in the object that's pointed to by
25821      the field the option applies to.  The function must take four
25822      arguments, with the signature
25823      `void *, void *, gt_pointer_operator, void *'.  The first
25824      parameter is a pointer to the structure that contains the object
25825      being updated, or the object itself if there is no containing
25826      structure.  The second parameter is a cookie that should be
25827      ignored.  The third parameter is a routine that, given a pointer,
25828      will update it to its correct new value.  The fourth parameter is
25829      a cookie that must be passed to the second parameter.
25830
25831      PCH cannot handle data structures that depend on the absolute
25832      values of pointers.  `reorder' functions can be expensive.  When
25833      possible, it is better to depend on properties of the data, like
25834      an ID number or the hash of a string instead.
25835
25836 `special ("NAME")'
25837      The `special' option is used to mark types that have to be dealt
25838      with by special case machinery.  The parameter is the name of the
25839      special case.  See `gengtype.c' for further details.  Avoid adding
25840      new special cases unless there is no other alternative.
25841
25842 \1f
25843 File: gccint.info,  Node: GGC Roots,  Next: Files,  Prev: GTY Options,  Up: Type Information
25844
25845 18.2 Marking Roots for the Garbage Collector
25846 ============================================
25847
25848 In addition to keeping track of types, the type machinery also locates
25849 the global variables ("roots") that the garbage collector starts at.
25850 Roots must be declared using one of the following syntaxes:
25851
25852    * `extern GTY(([OPTIONS])) TYPE NAME;'
25853
25854    * `static GTY(([OPTIONS])) TYPE NAME;'
25855  The syntax
25856    * `GTY(([OPTIONS])) TYPE NAME;'
25857  is _not_ accepted.  There should be an `extern' declaration of such a
25858 variable in a header somewhere--mark that, not the definition.  Or, if
25859 the variable is only used in one file, make it `static'.
25860
25861 \1f
25862 File: gccint.info,  Node: Files,  Prev: GGC Roots,  Up: Type Information
25863
25864 18.3 Source Files Containing Type Information
25865 =============================================
25866
25867 Whenever you add `GTY' markers to a source file that previously had
25868 none, or create a new source file containing `GTY' markers, there are
25869 three things you need to do:
25870
25871   1. You need to add the file to the list of source files the type
25872      machinery scans.  There are four cases:
25873
25874        a. For a back-end file, this is usually done automatically; if
25875           not, you should add it to `target_gtfiles' in the appropriate
25876           port's entries in `config.gcc'.
25877
25878        b. For files shared by all front ends, add the filename to the
25879           `GTFILES' variable in `Makefile.in'.
25880
25881        c. For files that are part of one front end, add the filename to
25882           the `gtfiles' variable defined in the appropriate
25883           `config-lang.in'.  For C, the file is `c-config-lang.in'.
25884
25885        d. For files that are part of some but not all front ends, add
25886           the filename to the `gtfiles' variable of _all_ the front ends
25887           that use it.
25888
25889   2. If the file was a header file, you'll need to check that it's
25890      included in the right place to be visible to the generated files.
25891      For a back-end header file, this should be done automatically.
25892      For a front-end header file, it needs to be included by the same
25893      file that includes `gtype-LANG.h'.  For other header files, it
25894      needs to be included in `gtype-desc.c', which is a generated file,
25895      so add it to `ifiles' in `open_base_file' in `gengtype.c'.
25896
25897      For source files that aren't header files, the machinery will
25898      generate a header file that should be included in the source file
25899      you just changed.  The file will be called `gt-PATH.h' where PATH
25900      is the pathname relative to the `gcc' directory with slashes
25901      replaced by -, so for example the header file to be included in
25902      `cp/parser.c' is called `gt-cp-parser.c'.  The generated header
25903      file should be included after everything else in the source file.
25904      Don't forget to mention this file as a dependency in the
25905      `Makefile'!
25906
25907   3. If a new `gt-PATH.h' file is needed, you need to arrange to add a
25908      `Makefile' rule that will ensure this file can be built.  This is
25909      done by making it a dependency of `s-gtype', like this:
25910      gt-path.h : s-gtype ; @true
25911
25912  For language frontends, there is another file that needs to be included
25913 somewhere.  It will be called `gtype-LANG.h', where LANG is the name of
25914 the subdirectory the language is contained in.  It will need `Makefile'
25915 rules just like the other generated files.
25916
25917 \1f
25918 File: gccint.info,  Node: Funding,  Next: GNU Project,  Prev: Type Information,  Up: Top
25919
25920 Funding Free Software
25921 *********************
25922
25923 If you want to have more free software a few years from now, it makes
25924 sense for you to help encourage people to contribute funds for its
25925 development.  The most effective approach known is to encourage
25926 commercial redistributors to donate.
25927
25928  Users of free software systems can boost the pace of development by
25929 encouraging for-a-fee distributors to donate part of their selling price
25930 to free software developers--the Free Software Foundation, and others.
25931
25932  The way to convince distributors to do this is to demand it and expect
25933 it from them.  So when you compare distributors, judge them partly by
25934 how much they give to free software development.  Show distributors
25935 they must compete to be the one who gives the most.
25936
25937  To make this approach work, you must insist on numbers that you can
25938 compare, such as, "We will donate ten dollars to the Frobnitz project
25939 for each disk sold."  Don't be satisfied with a vague promise, such as
25940 "A portion of the profits are donated," since it doesn't give a basis
25941 for comparison.
25942
25943  Even a precise fraction "of the profits from this disk" is not very
25944 meaningful, since creative accounting and unrelated business decisions
25945 can greatly alter what fraction of the sales price counts as profit.
25946 If the price you pay is $50, ten percent of the profit is probably less
25947 than a dollar; it might be a few cents, or nothing at all.
25948
25949  Some redistributors do development work themselves.  This is useful
25950 too; but to keep everyone honest, you need to inquire how much they do,
25951 and what kind.  Some kinds of development make much more long-term
25952 difference than others.  For example, maintaining a separate version of
25953 a program contributes very little; maintaining the standard version of a
25954 program for the whole community contributes much.  Easy new ports
25955 contribute little, since someone else would surely do them; difficult
25956 ports such as adding a new CPU to the GNU Compiler Collection
25957 contribute more; major new features or packages contribute the most.
25958
25959  By establishing the idea that supporting further development is "the
25960 proper thing to do" when distributing free software for a fee, we can
25961 assure a steady flow of resources into making more free software.
25962
25963      Copyright (C) 1994 Free Software Foundation, Inc.
25964      Verbatim copying and redistribution of this section is permitted
25965      without royalty; alteration is not permitted.
25966
25967 \1f
25968 File: gccint.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
25969
25970 The GNU Project and GNU/Linux
25971 *****************************
25972
25973 The GNU Project was launched in 1984 to develop a complete Unix-like
25974 operating system which is free software: the GNU system.  (GNU is a
25975 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
25976 Variants of the GNU operating system, which use the kernel Linux, are
25977 now widely used; though these systems are often referred to as "Linux",
25978 they are more accurately called GNU/Linux systems.
25979
25980  For more information, see:
25981      `http://www.gnu.org/'
25982      `http://www.gnu.org/gnu/linux-and-gnu.html'
25983
25984 \1f
25985 File: gccint.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
25986
25987 GNU GENERAL PUBLIC LICENSE
25988 **************************
25989
25990                          Version 2, June 1991
25991
25992      Copyright (C) 1989, 1991 Free Software Foundation, Inc.
25993      59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
25994
25995      Everyone is permitted to copy and distribute verbatim copies
25996      of this license document, but changing it is not allowed.
25997
25998 Preamble
25999 ========
26000
26001 The licenses for most software are designed to take away your freedom
26002 to share and change it.  By contrast, the GNU General Public License is
26003 intended to guarantee your freedom to share and change free
26004 software--to make sure the software is free for all its users.  This
26005 General Public License applies to most of the Free Software
26006 Foundation's software and to any other program whose authors commit to
26007 using it.  (Some other Free Software Foundation software is covered by
26008 the GNU Library General Public License instead.)  You can apply it to
26009 your programs, too.
26010
26011  When we speak of free software, we are referring to freedom, not
26012 price.  Our General Public Licenses are designed to make sure that you
26013 have the freedom to distribute copies of free software (and charge for
26014 this service if you wish), that you receive source code or can get it
26015 if you want it, that you can change the software or use pieces of it in
26016 new free programs; and that you know you can do these things.
26017
26018  To protect your rights, we need to make restrictions that forbid
26019 anyone to deny you these rights or to ask you to surrender the rights.
26020 These restrictions translate to certain responsibilities for you if you
26021 distribute copies of the software, or if you modify it.
26022
26023  For example, if you distribute copies of such a program, whether
26024 gratis or for a fee, you must give the recipients all the rights that
26025 you have.  You must make sure that they, too, receive or can get the
26026 source code.  And you must show them these terms so they know their
26027 rights.
26028
26029  We protect your rights with two steps: (1) copyright the software, and
26030 (2) offer you this license which gives you legal permission to copy,
26031 distribute and/or modify the software.
26032
26033  Also, for each author's protection and ours, we want to make certain
26034 that everyone understands that there is no warranty for this free
26035 software.  If the software is modified by someone else and passed on, we
26036 want its recipients to know that what they have is not the original, so
26037 that any problems introduced by others will not reflect on the original
26038 authors' reputations.
26039
26040  Finally, any free program is threatened constantly by software
26041 patents.  We wish to avoid the danger that redistributors of a free
26042 program will individually obtain patent licenses, in effect making the
26043 program proprietary.  To prevent this, we have made it clear that any
26044 patent must be licensed for everyone's free use or not licensed at all.
26045
26046  The precise terms and conditions for copying, distribution and
26047 modification follow.
26048
26049     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
26050   0. This License applies to any program or other work which contains a
26051      notice placed by the copyright holder saying it may be distributed
26052      under the terms of this General Public License.  The "Program",
26053      below, refers to any such program or work, and a "work based on
26054      the Program" means either the Program or any derivative work under
26055      copyright law: that is to say, a work containing the Program or a
26056      portion of it, either verbatim or with modifications and/or
26057      translated into another language.  (Hereinafter, translation is
26058      included without limitation in the term "modification".)  Each
26059      licensee is addressed as "you".
26060
26061      Activities other than copying, distribution and modification are
26062      not covered by this License; they are outside its scope.  The act
26063      of running the Program is not restricted, and the output from the
26064      Program is covered only if its contents constitute a work based on
26065      the Program (independent of having been made by running the
26066      Program).  Whether that is true depends on what the Program does.
26067
26068   1. You may copy and distribute verbatim copies of the Program's
26069      source code as you receive it, in any medium, provided that you
26070      conspicuously and appropriately publish on each copy an appropriate
26071      copyright notice and disclaimer of warranty; keep intact all the
26072      notices that refer to this License and to the absence of any
26073      warranty; and give any other recipients of the Program a copy of
26074      this License along with the Program.
26075
26076      You may charge a fee for the physical act of transferring a copy,
26077      and you may at your option offer warranty protection in exchange
26078      for a fee.
26079
26080   2. You may modify your copy or copies of the Program or any portion
26081      of it, thus forming a work based on the Program, and copy and
26082      distribute such modifications or work under the terms of Section 1
26083      above, provided that you also meet all of these conditions:
26084
26085        a. You must cause the modified files to carry prominent notices
26086           stating that you changed the files and the date of any change.
26087
26088        b. You must cause any work that you distribute or publish, that
26089           in whole or in part contains or is derived from the Program
26090           or any part thereof, to be licensed as a whole at no charge
26091           to all third parties under the terms of this License.
26092
26093        c. If the modified program normally reads commands interactively
26094           when run, you must cause it, when started running for such
26095           interactive use in the most ordinary way, to print or display
26096           an announcement including an appropriate copyright notice and
26097           a notice that there is no warranty (or else, saying that you
26098           provide a warranty) and that users may redistribute the
26099           program under these conditions, and telling the user how to
26100           view a copy of this License.  (Exception: if the Program
26101           itself is interactive but does not normally print such an
26102           announcement, your work based on the Program is not required
26103           to print an announcement.)
26104
26105      These requirements apply to the modified work as a whole.  If
26106      identifiable sections of that work are not derived from the
26107      Program, and can be reasonably considered independent and separate
26108      works in themselves, then this License, and its terms, do not
26109      apply to those sections when you distribute them as separate
26110      works.  But when you distribute the same sections as part of a
26111      whole which is a work based on the Program, the distribution of
26112      the whole must be on the terms of this License, whose permissions
26113      for other licensees extend to the entire whole, and thus to each
26114      and every part regardless of who wrote it.
26115
26116      Thus, it is not the intent of this section to claim rights or
26117      contest your rights to work written entirely by you; rather, the
26118      intent is to exercise the right to control the distribution of
26119      derivative or collective works based on the Program.
26120
26121      In addition, mere aggregation of another work not based on the
26122      Program with the Program (or with a work based on the Program) on
26123      a volume of a storage or distribution medium does not bring the
26124      other work under the scope of this License.
26125
26126   3. You may copy and distribute the Program (or a work based on it,
26127      under Section 2) in object code or executable form under the terms
26128      of Sections 1 and 2 above provided that you also do one of the
26129      following:
26130
26131        a. Accompany it with the complete corresponding machine-readable
26132           source code, which must be distributed under the terms of
26133           Sections 1 and 2 above on a medium customarily used for
26134           software interchange; or,
26135
26136        b. Accompany it with a written offer, valid for at least three
26137           years, to give any third party, for a charge no more than your
26138           cost of physically performing source distribution, a complete
26139           machine-readable copy of the corresponding source code, to be
26140           distributed under the terms of Sections 1 and 2 above on a
26141           medium customarily used for software interchange; or,
26142
26143        c. Accompany it with the information you received as to the offer
26144           to distribute corresponding source code.  (This alternative is
26145           allowed only for noncommercial distribution and only if you
26146           received the program in object code or executable form with
26147           such an offer, in accord with Subsection b above.)
26148
26149      The source code for a work means the preferred form of the work for
26150      making modifications to it.  For an executable work, complete
26151      source code means all the source code for all modules it contains,
26152      plus any associated interface definition files, plus the scripts
26153      used to control compilation and installation of the executable.
26154      However, as a special exception, the source code distributed need
26155      not include anything that is normally distributed (in either
26156      source or binary form) with the major components (compiler,
26157      kernel, and so on) of the operating system on which the executable
26158      runs, unless that component itself accompanies the executable.
26159
26160      If distribution of executable or object code is made by offering
26161      access to copy from a designated place, then offering equivalent
26162      access to copy the source code from the same place counts as
26163      distribution of the source code, even though third parties are not
26164      compelled to copy the source along with the object code.
26165
26166   4. You may not copy, modify, sublicense, or distribute the Program
26167      except as expressly provided under this License.  Any attempt
26168      otherwise to copy, modify, sublicense or distribute the Program is
26169      void, and will automatically terminate your rights under this
26170      License.  However, parties who have received copies, or rights,
26171      from you under this License will not have their licenses
26172      terminated so long as such parties remain in full compliance.
26173
26174   5. You are not required to accept this License, since you have not
26175      signed it.  However, nothing else grants you permission to modify
26176      or distribute the Program or its derivative works.  These actions
26177      are prohibited by law if you do not accept this License.
26178      Therefore, by modifying or distributing the Program (or any work
26179      based on the Program), you indicate your acceptance of this
26180      License to do so, and all its terms and conditions for copying,
26181      distributing or modifying the Program or works based on it.
26182
26183   6. Each time you redistribute the Program (or any work based on the
26184      Program), the recipient automatically receives a license from the
26185      original licensor to copy, distribute or modify the Program
26186      subject to these terms and conditions.  You may not impose any
26187      further restrictions on the recipients' exercise of the rights
26188      granted herein.  You are not responsible for enforcing compliance
26189      by third parties to this License.
26190
26191   7. If, as a consequence of a court judgment or allegation of patent
26192      infringement or for any other reason (not limited to patent
26193      issues), conditions are imposed on you (whether by court order,
26194      agreement or otherwise) that contradict the conditions of this
26195      License, they do not excuse you from the conditions of this
26196      License.  If you cannot distribute so as to satisfy simultaneously
26197      your obligations under this License and any other pertinent
26198      obligations, then as a consequence you may not distribute the
26199      Program at all.  For example, if a patent license would not permit
26200      royalty-free redistribution of the Program by all those who
26201      receive copies directly or indirectly through you, then the only
26202      way you could satisfy both it and this License would be to refrain
26203      entirely from distribution of the Program.
26204
26205      If any portion of this section is held invalid or unenforceable
26206      under any particular circumstance, the balance of the section is
26207      intended to apply and the section as a whole is intended to apply
26208      in other circumstances.
26209
26210      It is not the purpose of this section to induce you to infringe any
26211      patents or other property right claims or to contest validity of
26212      any such claims; this section has the sole purpose of protecting
26213      the integrity of the free software distribution system, which is
26214      implemented by public license practices.  Many people have made
26215      generous contributions to the wide range of software distributed
26216      through that system in reliance on consistent application of that
26217      system; it is up to the author/donor to decide if he or she is
26218      willing to distribute software through any other system and a
26219      licensee cannot impose that choice.
26220
26221      This section is intended to make thoroughly clear what is believed
26222      to be a consequence of the rest of this License.
26223
26224   8. If the distribution and/or use of the Program is restricted in
26225      certain countries either by patents or by copyrighted interfaces,
26226      the original copyright holder who places the Program under this
26227      License may add an explicit geographical distribution limitation
26228      excluding those countries, so that distribution is permitted only
26229      in or among countries not thus excluded.  In such case, this
26230      License incorporates the limitation as if written in the body of
26231      this License.
26232
26233   9. The Free Software Foundation may publish revised and/or new
26234      versions of the General Public License from time to time.  Such
26235      new versions will be similar in spirit to the present version, but
26236      may differ in detail to address new problems or concerns.
26237
26238      Each version is given a distinguishing version number.  If the
26239      Program specifies a version number of this License which applies
26240      to it and "any later version", you have the option of following
26241      the terms and conditions either of that version or of any later
26242      version published by the Free Software Foundation.  If the Program
26243      does not specify a version number of this License, you may choose
26244      any version ever published by the Free Software Foundation.
26245
26246  10. If you wish to incorporate parts of the Program into other free
26247      programs whose distribution conditions are different, write to the
26248      author to ask for permission.  For software which is copyrighted
26249      by the Free Software Foundation, write to the Free Software
26250      Foundation; we sometimes make exceptions for this.  Our decision
26251      will be guided by the two goals of preserving the free status of
26252      all derivatives of our free software and of promoting the sharing
26253      and reuse of software generally.
26254
26255                                 NO WARRANTY
26256  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
26257      WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
26258      LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
26259      HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
26260      WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
26261      NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
26262      FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
26263      QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
26264      PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
26265      SERVICING, REPAIR OR CORRECTION.
26266
26267  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
26268      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
26269      MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
26270      LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
26271      INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
26272      INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
26273      DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
26274      OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
26275      OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
26276      ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
26277
26278                       END OF TERMS AND CONDITIONS
26279 How to Apply These Terms to Your New Programs
26280 =============================================
26281
26282 If you develop a new program, and you want it to be of the greatest
26283 possible use to the public, the best way to achieve this is to make it
26284 free software which everyone can redistribute and change under these
26285 terms.
26286
26287  To do so, attach the following notices to the program.  It is safest
26288 to attach them to the start of each source file to most effectively
26289 convey the exclusion of warranty; and each file should have at least
26290 the "copyright" line and a pointer to where the full notice is found.
26291
26292      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
26293      Copyright (C) YEAR  NAME OF AUTHOR
26294
26295      This program is free software; you can redistribute it and/or modify
26296      it under the terms of the GNU General Public License as published by
26297      the Free Software Foundation; either version 2 of the License, or
26298      (at your option) any later version.
26299
26300      This program is distributed in the hope that it will be useful,
26301      but WITHOUT ANY WARRANTY; without even the implied warranty of
26302      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26303      GNU General Public License for more details.
26304
26305      You should have received a copy of the GNU General Public License
26306      along with this program; if not, write to the Free Software Foundation,
26307      Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26308
26309  Also add information on how to contact you by electronic and paper
26310 mail.
26311
26312  If the program is interactive, make it output a short notice like this
26313 when it starts in an interactive mode:
26314
26315      Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
26316      Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
26317      type `show w'.
26318      This is free software, and you are welcome to redistribute it
26319      under certain conditions; type `show c' for details.
26320
26321  The hypothetical commands `show w' and `show c' should show the
26322 appropriate parts of the General Public License.  Of course, the
26323 commands you use may be called something other than `show w' and `show
26324 c'; they could even be mouse-clicks or menu items--whatever suits your
26325 program.
26326
26327  You should also get your employer (if you work as a programmer) or your
26328 school, if any, to sign a "copyright disclaimer" for the program, if
26329 necessary.  Here is a sample; alter the names:
26330
26331      Yoyodyne, Inc., hereby disclaims all copyright interest in the program
26332      `Gnomovision' (which makes passes at compilers) written by James Hacker.
26333
26334      SIGNATURE OF TY COON, 1 April 1989
26335      Ty Coon, President of Vice
26336
26337  This General Public License does not permit incorporating your program
26338 into proprietary programs.  If your program is a subroutine library,
26339 you may consider it more useful to permit linking proprietary
26340 applications with the library.  If this is what you want to do, use the
26341 GNU Library General Public License instead of this License.
26342
26343 \1f
26344 File: gccint.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
26345
26346 GNU Free Documentation License
26347 ******************************
26348
26349                       Version 1.2, November 2002
26350
26351      Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
26352      59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
26353
26354      Everyone is permitted to copy and distribute verbatim copies
26355      of this license document, but changing it is not allowed.
26356
26357   0. PREAMBLE
26358
26359      The purpose of this License is to make a manual, textbook, or other
26360      functional and useful document "free" in the sense of freedom: to
26361      assure everyone the effective freedom to copy and redistribute it,
26362      with or without modifying it, either commercially or
26363      noncommercially.  Secondarily, this License preserves for the
26364      author and publisher a way to get credit for their work, while not
26365      being considered responsible for modifications made by others.
26366
26367      This License is a kind of "copyleft", which means that derivative
26368      works of the document must themselves be free in the same sense.
26369      It complements the GNU General Public License, which is a copyleft
26370      license designed for free software.
26371
26372      We have designed this License in order to use it for manuals for
26373      free software, because free software needs free documentation: a
26374      free program should come with manuals providing the same freedoms
26375      that the software does.  But this License is not limited to
26376      software manuals; it can be used for any textual work, regardless
26377      of subject matter or whether it is published as a printed book.
26378      We recommend this License principally for works whose purpose is
26379      instruction or reference.
26380
26381   1. APPLICABILITY AND DEFINITIONS
26382
26383      This License applies to any manual or other work, in any medium,
26384      that contains a notice placed by the copyright holder saying it
26385      can be distributed under the terms of this License.  Such a notice
26386      grants a world-wide, royalty-free license, unlimited in duration,
26387      to use that work under the conditions stated herein.  The
26388      "Document", below, refers to any such manual or work.  Any member
26389      of the public is a licensee, and is addressed as "you".  You
26390      accept the license if you copy, modify or distribute the work in a
26391      way requiring permission under copyright law.
26392
26393      A "Modified Version" of the Document means any work containing the
26394      Document or a portion of it, either copied verbatim, or with
26395      modifications and/or translated into another language.
26396
26397      A "Secondary Section" is a named appendix or a front-matter section
26398      of the Document that deals exclusively with the relationship of the
26399      publishers or authors of the Document to the Document's overall
26400      subject (or to related matters) and contains nothing that could
26401      fall directly within that overall subject.  (Thus, if the Document
26402      is in part a textbook of mathematics, a Secondary Section may not
26403      explain any mathematics.)  The relationship could be a matter of
26404      historical connection with the subject or with related matters, or
26405      of legal, commercial, philosophical, ethical or political position
26406      regarding them.
26407
26408      The "Invariant Sections" are certain Secondary Sections whose
26409      titles are designated, as being those of Invariant Sections, in
26410      the notice that says that the Document is released under this
26411      License.  If a section does not fit the above definition of
26412      Secondary then it is not allowed to be designated as Invariant.
26413      The Document may contain zero Invariant Sections.  If the Document
26414      does not identify any Invariant Sections then there are none.
26415
26416      The "Cover Texts" are certain short passages of text that are
26417      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
26418      that says that the Document is released under this License.  A
26419      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
26420      be at most 25 words.
26421
26422      A "Transparent" copy of the Document means a machine-readable copy,
26423      represented in a format whose specification is available to the
26424      general public, that is suitable for revising the document
26425      straightforwardly with generic text editors or (for images
26426      composed of pixels) generic paint programs or (for drawings) some
26427      widely available drawing editor, and that is suitable for input to
26428      text formatters or for automatic translation to a variety of
26429      formats suitable for input to text formatters.  A copy made in an
26430      otherwise Transparent file format whose markup, or absence of
26431      markup, has been arranged to thwart or discourage subsequent
26432      modification by readers is not Transparent.  An image format is
26433      not Transparent if used for any substantial amount of text.  A
26434      copy that is not "Transparent" is called "Opaque".
26435
26436      Examples of suitable formats for Transparent copies include plain
26437      ASCII without markup, Texinfo input format, LaTeX input format,
26438      SGML or XML using a publicly available DTD, and
26439      standard-conforming simple HTML, PostScript or PDF designed for
26440      human modification.  Examples of transparent image formats include
26441      PNG, XCF and JPG.  Opaque formats include proprietary formats that
26442      can be read and edited only by proprietary word processors, SGML or
26443      XML for which the DTD and/or processing tools are not generally
26444      available, and the machine-generated HTML, PostScript or PDF
26445      produced by some word processors for output purposes only.
26446
26447      The "Title Page" means, for a printed book, the title page itself,
26448      plus such following pages as are needed to hold, legibly, the
26449      material this License requires to appear in the title page.  For
26450      works in formats which do not have any title page as such, "Title
26451      Page" means the text near the most prominent appearance of the
26452      work's title, preceding the beginning of the body of the text.
26453
26454      A section "Entitled XYZ" means a named subunit of the Document
26455      whose title either is precisely XYZ or contains XYZ in parentheses
26456      following text that translates XYZ in another language.  (Here XYZ
26457      stands for a specific section name mentioned below, such as
26458      "Acknowledgements", "Dedications", "Endorsements", or "History".)
26459      To "Preserve the Title" of such a section when you modify the
26460      Document means that it remains a section "Entitled XYZ" according
26461      to this definition.
26462
26463      The Document may include Warranty Disclaimers next to the notice
26464      which states that this License applies to the Document.  These
26465      Warranty Disclaimers are considered to be included by reference in
26466      this License, but only as regards disclaiming warranties: any other
26467      implication that these Warranty Disclaimers may have is void and
26468      has no effect on the meaning of this License.
26469
26470   2. VERBATIM COPYING
26471
26472      You may copy and distribute the Document in any medium, either
26473      commercially or noncommercially, provided that this License, the
26474      copyright notices, and the license notice saying this License
26475      applies to the Document are reproduced in all copies, and that you
26476      add no other conditions whatsoever to those of this License.  You
26477      may not use technical measures to obstruct or control the reading
26478      or further copying of the copies you make or distribute.  However,
26479      you may accept compensation in exchange for copies.  If you
26480      distribute a large enough number of copies you must also follow
26481      the conditions in section 3.
26482
26483      You may also lend copies, under the same conditions stated above,
26484      and you may publicly display copies.
26485
26486   3. COPYING IN QUANTITY
26487
26488      If you publish printed copies (or copies in media that commonly
26489      have printed covers) of the Document, numbering more than 100, and
26490      the Document's license notice requires Cover Texts, you must
26491      enclose the copies in covers that carry, clearly and legibly, all
26492      these Cover Texts: Front-Cover Texts on the front cover, and
26493      Back-Cover Texts on the back cover.  Both covers must also clearly
26494      and legibly identify you as the publisher of these copies.  The
26495      front cover must present the full title with all words of the
26496      title equally prominent and visible.  You may add other material
26497      on the covers in addition.  Copying with changes limited to the
26498      covers, as long as they preserve the title of the Document and
26499      satisfy these conditions, can be treated as verbatim copying in
26500      other respects.
26501
26502      If the required texts for either cover are too voluminous to fit
26503      legibly, you should put the first ones listed (as many as fit
26504      reasonably) on the actual cover, and continue the rest onto
26505      adjacent pages.
26506
26507      If you publish or distribute Opaque copies of the Document
26508      numbering more than 100, you must either include a
26509      machine-readable Transparent copy along with each Opaque copy, or
26510      state in or with each Opaque copy a computer-network location from
26511      which the general network-using public has access to download
26512      using public-standard network protocols a complete Transparent
26513      copy of the Document, free of added material.  If you use the
26514      latter option, you must take reasonably prudent steps, when you
26515      begin distribution of Opaque copies in quantity, to ensure that
26516      this Transparent copy will remain thus accessible at the stated
26517      location until at least one year after the last time you
26518      distribute an Opaque copy (directly or through your agents or
26519      retailers) of that edition to the public.
26520
26521      It is requested, but not required, that you contact the authors of
26522      the Document well before redistributing any large number of
26523      copies, to give them a chance to provide you with an updated
26524      version of the Document.
26525
26526   4. MODIFICATIONS
26527
26528      You may copy and distribute a Modified Version of the Document
26529      under the conditions of sections 2 and 3 above, provided that you
26530      release the Modified Version under precisely this License, with
26531      the Modified Version filling the role of the Document, thus
26532      licensing distribution and modification of the Modified Version to
26533      whoever possesses a copy of it.  In addition, you must do these
26534      things in the Modified Version:
26535
26536        A. Use in the Title Page (and on the covers, if any) a title
26537           distinct from that of the Document, and from those of
26538           previous versions (which should, if there were any, be listed
26539           in the History section of the Document).  You may use the
26540           same title as a previous version if the original publisher of
26541           that version gives permission.
26542
26543        B. List on the Title Page, as authors, one or more persons or
26544           entities responsible for authorship of the modifications in
26545           the Modified Version, together with at least five of the
26546           principal authors of the Document (all of its principal
26547           authors, if it has fewer than five), unless they release you
26548           from this requirement.
26549
26550        C. State on the Title page the name of the publisher of the
26551           Modified Version, as the publisher.
26552
26553        D. Preserve all the copyright notices of the Document.
26554
26555        E. Add an appropriate copyright notice for your modifications
26556           adjacent to the other copyright notices.
26557
26558        F. Include, immediately after the copyright notices, a license
26559           notice giving the public permission to use the Modified
26560           Version under the terms of this License, in the form shown in
26561           the Addendum below.
26562
26563        G. Preserve in that license notice the full lists of Invariant
26564           Sections and required Cover Texts given in the Document's
26565           license notice.
26566
26567        H. Include an unaltered copy of this License.
26568
26569        I. Preserve the section Entitled "History", Preserve its Title,
26570           and add to it an item stating at least the title, year, new
26571           authors, and publisher of the Modified Version as given on
26572           the Title Page.  If there is no section Entitled "History" in
26573           the Document, create one stating the title, year, authors,
26574           and publisher of the Document as given on its Title Page,
26575           then add an item describing the Modified Version as stated in
26576           the previous sentence.
26577
26578        J. Preserve the network location, if any, given in the Document
26579           for public access to a Transparent copy of the Document, and
26580           likewise the network locations given in the Document for
26581           previous versions it was based on.  These may be placed in
26582           the "History" section.  You may omit a network location for a
26583           work that was published at least four years before the
26584           Document itself, or if the original publisher of the version
26585           it refers to gives permission.
26586
26587        K. For any section Entitled "Acknowledgements" or "Dedications",
26588           Preserve the Title of the section, and preserve in the
26589           section all the substance and tone of each of the contributor
26590           acknowledgements and/or dedications given therein.
26591
26592        L. Preserve all the Invariant Sections of the Document,
26593           unaltered in their text and in their titles.  Section numbers
26594           or the equivalent are not considered part of the section
26595           titles.
26596
26597        M. Delete any section Entitled "Endorsements".  Such a section
26598           may not be included in the Modified Version.
26599
26600        N. Do not retitle any existing section to be Entitled
26601           "Endorsements" or to conflict in title with any Invariant
26602           Section.
26603
26604        O. Preserve any Warranty Disclaimers.
26605
26606      If the Modified Version includes new front-matter sections or
26607      appendices that qualify as Secondary Sections and contain no
26608      material copied from the Document, you may at your option
26609      designate some or all of these sections as invariant.  To do this,
26610      add their titles to the list of Invariant Sections in the Modified
26611      Version's license notice.  These titles must be distinct from any
26612      other section titles.
26613
26614      You may add a section Entitled "Endorsements", provided it contains
26615      nothing but endorsements of your Modified Version by various
26616      parties--for example, statements of peer review or that the text
26617      has been approved by an organization as the authoritative
26618      definition of a standard.
26619
26620      You may add a passage of up to five words as a Front-Cover Text,
26621      and a passage of up to 25 words as a Back-Cover Text, to the end
26622      of the list of Cover Texts in the Modified Version.  Only one
26623      passage of Front-Cover Text and one of Back-Cover Text may be
26624      added by (or through arrangements made by) any one entity.  If the
26625      Document already includes a cover text for the same cover,
26626      previously added by you or by arrangement made by the same entity
26627      you are acting on behalf of, you may not add another; but you may
26628      replace the old one, on explicit permission from the previous
26629      publisher that added the old one.
26630
26631      The author(s) and publisher(s) of the Document do not by this
26632      License give permission to use their names for publicity for or to
26633      assert or imply endorsement of any Modified Version.
26634
26635   5. COMBINING DOCUMENTS
26636
26637      You may combine the Document with other documents released under
26638      this License, under the terms defined in section 4 above for
26639      modified versions, provided that you include in the combination
26640      all of the Invariant Sections of all of the original documents,
26641      unmodified, and list them all as Invariant Sections of your
26642      combined work in its license notice, and that you preserve all
26643      their Warranty Disclaimers.
26644
26645      The combined work need only contain one copy of this License, and
26646      multiple identical Invariant Sections may be replaced with a single
26647      copy.  If there are multiple Invariant Sections with the same name
26648      but different contents, make the title of each such section unique
26649      by adding at the end of it, in parentheses, the name of the
26650      original author or publisher of that section if known, or else a
26651      unique number.  Make the same adjustment to the section titles in
26652      the list of Invariant Sections in the license notice of the
26653      combined work.
26654
26655      In the combination, you must combine any sections Entitled
26656      "History" in the various original documents, forming one section
26657      Entitled "History"; likewise combine any sections Entitled
26658      "Acknowledgements", and any sections Entitled "Dedications".  You
26659      must delete all sections Entitled "Endorsements."
26660
26661   6. COLLECTIONS OF DOCUMENTS
26662
26663      You may make a collection consisting of the Document and other
26664      documents released under this License, and replace the individual
26665      copies of this License in the various documents with a single copy
26666      that is included in the collection, provided that you follow the
26667      rules of this License for verbatim copying of each of the
26668      documents in all other respects.
26669
26670      You may extract a single document from such a collection, and
26671      distribute it individually under this License, provided you insert
26672      a copy of this License into the extracted document, and follow
26673      this License in all other respects regarding verbatim copying of
26674      that document.
26675
26676   7. AGGREGATION WITH INDEPENDENT WORKS
26677
26678      A compilation of the Document or its derivatives with other
26679      separate and independent documents or works, in or on a volume of
26680      a storage or distribution medium, is called an "aggregate" if the
26681      copyright resulting from the compilation is not used to limit the
26682      legal rights of the compilation's users beyond what the individual
26683      works permit.  When the Document is included an aggregate, this
26684      License does not apply to the other works in the aggregate which
26685      are not themselves derivative works of the Document.
26686
26687      If the Cover Text requirement of section 3 is applicable to these
26688      copies of the Document, then if the Document is less than one half
26689      of the entire aggregate, the Document's Cover Texts may be placed
26690      on covers that bracket the Document within the aggregate, or the
26691      electronic equivalent of covers if the Document is in electronic
26692      form.  Otherwise they must appear on printed covers that bracket
26693      the whole aggregate.
26694
26695   8. TRANSLATION
26696
26697      Translation is considered a kind of modification, so you may
26698      distribute translations of the Document under the terms of section
26699      4.  Replacing Invariant Sections with translations requires special
26700      permission from their copyright holders, but you may include
26701      translations of some or all Invariant Sections in addition to the
26702      original versions of these Invariant Sections.  You may include a
26703      translation of this License, and all the license notices in the
26704      Document, and any Warrany Disclaimers, provided that you also
26705      include the original English version of this License and the
26706      original versions of those notices and disclaimers.  In case of a
26707      disagreement between the translation and the original version of
26708      this License or a notice or disclaimer, the original version will
26709      prevail.
26710
26711      If a section in the Document is Entitled "Acknowledgements",
26712      "Dedications", or "History", the requirement (section 4) to
26713      Preserve its Title (section 1) will typically require changing the
26714      actual title.
26715
26716   9. TERMINATION
26717
26718      You may not copy, modify, sublicense, or distribute the Document
26719      except as expressly provided for under this License.  Any other
26720      attempt to copy, modify, sublicense or distribute the Document is
26721      void, and will automatically terminate your rights under this
26722      License.  However, parties who have received copies, or rights,
26723      from you under this License will not have their licenses
26724      terminated so long as such parties remain in full compliance.
26725
26726  10. FUTURE REVISIONS OF THIS LICENSE
26727
26728      The Free Software Foundation may publish new, revised versions of
26729      the GNU Free Documentation License from time to time.  Such new
26730      versions will be similar in spirit to the present version, but may
26731      differ in detail to address new problems or concerns.  See
26732      `http://www.gnu.org/copyleft/'.
26733
26734      Each version of the License is given a distinguishing version
26735      number.  If the Document specifies that a particular numbered
26736      version of this License "or any later version" applies to it, you
26737      have the option of following the terms and conditions either of
26738      that specified version or of any later version that has been
26739      published (not as a draft) by the Free Software Foundation.  If
26740      the Document does not specify a version number of this License,
26741      you may choose any version ever published (not as a draft) by the
26742      Free Software Foundation.
26743
26744 ADDENDUM: How to use this License for your documents
26745 ====================================================
26746
26747 To use this License in a document you have written, include a copy of
26748 the License in the document and put the following copyright and license
26749 notices just after the title page:
26750
26751        Copyright (C)  YEAR  YOUR NAME.
26752        Permission is granted to copy, distribute and/or modify this document
26753        under the terms of the GNU Free Documentation License, Version 1.2
26754        or any later version published by the Free Software Foundation;
26755        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
26756        A copy of the license is included in the section entitled ``GNU
26757        Free Documentation License''.
26758
26759  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
26760 replace the "with...Texts." line with this:
26761
26762          with the Invariant Sections being LIST THEIR TITLES, with
26763          the Front-Cover Texts being LIST, and with the Back-Cover Texts
26764          being LIST.
26765
26766  If you have Invariant Sections without Cover Texts, or some other
26767 combination of the three, merge those two alternatives to suit the
26768 situation.
26769
26770  If your document contains nontrivial examples of program code, we
26771 recommend releasing these examples in parallel under your choice of
26772 free software license, such as the GNU General Public License, to
26773 permit their use in free software.
26774
26775 \1f
26776 File: gccint.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
26777
26778 Contributors to GCC
26779 *******************
26780
26781 The GCC project would like to thank its many contributors.  Without
26782 them the project would not have been nearly as successful as it has
26783 been.  Any omissions in this list are accidental.  Feel free to contact
26784 <law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
26785 some of your contributions are not listed.  Please keep this list in
26786 alphabetical order.
26787
26788    * Analog Devices helped implement the support for complex data types
26789      and iterators.
26790
26791    * John David Anglin for threading-related fixes and improvements to
26792      libstdc++-v3, and the HP-UX port.
26793
26794    * James van Artsdalen wrote the code that makes efficient use of the
26795      Intel 80387 register stack.
26796
26797    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
26798      Series port.
26799
26800    * Alasdair Baird for various bug fixes.
26801
26802    * Giovanni Bajo for analyzing lots of complicated C++ problem
26803      reports.
26804
26805    * Peter Barada for his work to improve code generation for new
26806      ColdFire cores.
26807
26808    * Gerald Baumgartner added the signature extension to the C++ front
26809      end.
26810
26811    * Godmar Back for his Java improvements and encouragement.
26812
26813    * Scott Bambrough for help porting the Java compiler.
26814
26815    * Wolfgang Bangerth for processing tons of bug reports.
26816
26817    * Jon Beniston for his Microsoft Windows port of Java.
26818
26819    * Daniel Berlin for better DWARF2 support, faster/better
26820      optimizations, improved alias analysis, plus migrating GCC to
26821      Bugzilla.
26822
26823    * Geoff Berry for his Java object serialization work and various
26824      patches.
26825
26826    * Eric Blake for helping to make GCJ and libgcj conform to the
26827      specifications.
26828
26829    * Janne Blomqvist for contributions to gfortran.
26830
26831    * Segher Boessenkool for various fixes.
26832
26833    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
26834      other Java work.
26835
26836    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
26837      miscellaneous clean-ups.
26838
26839    * Steven Bosscher for integrating the gfortran front end into GCC
26840      and for contributing to the tree-ssa branch.
26841
26842    * Eric Botcazou for fixing middle- and backend bugs left and right.
26843
26844    * Per Bothner for his direction via the steering committee and
26845      various improvements to the infrastructure for supporting new
26846      languages.  Chill front end implementation.  Initial
26847      implementations of cpplib, fix-header, config.guess, libio, and
26848      past C++ library (libg++) maintainer.  Dreaming up, designing and
26849      implementing much of GCJ.
26850
26851    * Devon Bowen helped port GCC to the Tahoe.
26852
26853    * Don Bowman for mips-vxworks contributions.
26854
26855    * Dave Brolley for work on cpplib and Chill.
26856
26857    * Paul Brook for work on the ARM architecture and maintaining
26858      gfortran.
26859
26860    * Robert Brown implemented the support for Encore 32000 systems.
26861
26862    * Christian Bruel for improvements to local store elimination.
26863
26864    * Herman A.J. ten Brugge for various fixes.
26865
26866    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
26867      FAQ.
26868
26869    * Joe Buck for his direction via the steering committee.
26870
26871    * Craig Burley for leadership of the G77 Fortran effort.
26872
26873    * Stephan Buys for contributing Doxygen notes for libstdc++.
26874
26875    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
26876      to the C++ strings, streambufs and formatted I/O, hard detective
26877      work on the frustrating localization issues, and keeping up with
26878      the problem reports.
26879
26880    * John Carr for his alias work, SPARC hacking, infrastructure
26881      improvements, previous contributions to the steering committee,
26882      loop optimizations, etc.
26883
26884    * Stephane Carrez for 68HC11 and 68HC12 ports.
26885
26886    * Steve Chamberlain for support for the Renesas SH and H8 processors
26887      and the PicoJava processor, and for GCJ config fixes.
26888
26889    * Glenn Chambers for help with the GCJ FAQ.
26890
26891    * John-Marc Chandonia for various libgcj patches.
26892
26893    * Scott Christley for his Objective-C contributions.
26894
26895    * Eric Christopher for his Java porting help and clean-ups.
26896
26897    * Branko Cibej for more warning contributions.
26898
26899    * The GNU Classpath project for all of their merged runtime code.
26900
26901    * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
26902      other random hacking.
26903
26904    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
26905
26906    * R. Kelley Cook for making GCC buildable from a read-only directory
26907      as well as other miscellaneous build process and documentation
26908      clean-ups.
26909
26910    * Ralf Corsepius for SH testing and minor bugfixing.
26911
26912    * Stan Cox for care and feeding of the x86 port and lots of behind
26913      the scenes hacking.
26914
26915    * Alex Crain provided changes for the 3b1.
26916
26917    * Ian Dall for major improvements to the NS32k port.
26918
26919    * Paul Dale for his work to add uClinux platform support to the m68k
26920      backend.
26921
26922    * Dario Dariol contributed the four varieties of sample programs
26923      that print a copy of their source.
26924
26925    * Russell Davidson for fstream and stringstream fixes in libstdc++.
26926
26927    * Bud Davis for work on the G77 and gfortran compilers.
26928
26929    * Mo DeJong for GCJ and libgcj bug fixes.
26930
26931    * DJ Delorie for the DJGPP port, build and libiberty maintenance, and
26932      various bug fixes.
26933
26934    * Arnaud Desitter for helping to debug gfortran.
26935
26936    * Gabriel Dos Reis for contributions to G++, contributions and
26937      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
26938      including `valarray<>', `complex<>', maintaining the numerics
26939      library (including that pesky `<limits>' :-) and keeping
26940      up-to-date anything to do with numbers.
26941
26942    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
26943      ISO C99 support, CFG dumping support, etc., plus support of the
26944      C++ runtime libraries including for all kinds of C interface
26945      issues, contributing and maintaining `complex<>', sanity checking
26946      and disbursement, configuration architecture, libio maintenance,
26947      and early math work.
26948
26949    * Zdenek Dvorak for a new loop unroller and various fixes.
26950
26951    * Richard Earnshaw for his ongoing work with the ARM.
26952
26953    * David Edelsohn for his direction via the steering committee,
26954      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
26955      loop changes, doing the entire AIX port of libstdc++ with his bare
26956      hands, and for ensuring GCC properly keeps working on AIX.
26957
26958    * Kevin Ediger for the floating point formatting of num_put::do_put
26959      in libstdc++.
26960
26961    * Phil Edwards for libstdc++ work including configuration hackery,
26962      documentation maintainer, chief breaker of the web pages, the
26963      occasional iostream bug fix, and work on shared library symbol
26964      versioning.
26965
26966    * Paul Eggert for random hacking all over GCC.
26967
26968    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
26969      configuration support for locales and fstream-related fixes.
26970
26971    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
26972      iostreams.
26973
26974    * Christian Ehrhardt for dealing with bug reports.
26975
26976    * Ben Elliston for his work to move the Objective-C runtime into its
26977      own subdirectory and for his work on autoconf.
26978
26979    * Marc Espie for OpenBSD support.
26980
26981    * Doug Evans for much of the global optimization framework, arc,
26982      m32r, and SPARC work.
26983
26984    * Christopher Faylor for his work on the Cygwin port and for caring
26985      and feeding the gcc.gnu.org box and saving its users tons of spam.
26986
26987    * Fred Fish for BeOS support and Ada fixes.
26988
26989    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
26990
26991    * Peter Gerwinski for various bug fixes and the Pascal front end.
26992
26993    * Kaveh Ghazi for his direction via the steering committee, amazing
26994      work to make `-W -Wall' useful, and continuously testing GCC on a
26995      plethora of platforms.
26996
26997    * John Gilmore for a donation to the FSF earmarked improving GNU
26998      Java.
26999
27000    * Judy Goldberg for c++ contributions.
27001
27002    * Torbjorn Granlund for various fixes and the c-torture testsuite,
27003      multiply- and divide-by-constant optimization, improved long long
27004      support, improved leaf function register allocation, and his
27005      direction via the steering committee.
27006
27007    * Anthony Green for his `-Os' contributions and Java front end work.
27008
27009    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
27010      Java code.
27011
27012    * Michael K. Gschwind contributed the port to the PDP-11.
27013
27014    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
27015      the support for Dwarf symbolic debugging information, and much of
27016      the support for System V Release 4.  He has also worked heavily on
27017      the Intel 386 and 860 support.
27018
27019    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
27020      GCSE.
27021
27022    * Bruno Haible for improvements in the runtime overhead for EH, new
27023      warnings and assorted bug fixes.
27024
27025    * Andrew Haley for his amazing Java compiler and library efforts.
27026
27027    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
27028      series 300.
27029
27030    * Michael Hayes for various thankless work he's done trying to get
27031      the c30/c40 ports functional.  Lots of loop and unroll
27032      improvements and fixes.
27033
27034    * Dara Hazeghi for wading through myriads of target-specific bug
27035      reports.
27036
27037    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
27038
27039    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
27040      work, loop opts, and generally fixing lots of old problems we've
27041      ignored for years, flow rewrite and lots of further stuff,
27042      including reviewing tons of patches.
27043
27044    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
27045      various fixes.
27046
27047    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
27048      contributed the support for the Sony NEWS machine.
27049
27050    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
27051      various fixes.
27052
27053    * Katherine Holcomb for work on gfortran.
27054
27055    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
27056      of testing and bug fixing, particularly of GCC configury code.
27057
27058    * Steve Holmgren for MachTen patches.
27059
27060    * Jan Hubicka for his x86 port improvements.
27061
27062    * Falk Hueffner for working on C and optimization bug reports.
27063
27064    * Bernardo Innocenti for his m68k work, including merging of
27065      ColdFire improvements and uClinux support.
27066
27067    * Christian Iseli for various bug fixes.
27068
27069    * Kamil Iskra for general m68k hacking.
27070
27071    * Lee Iverson for random fixes and MIPS testing.
27072
27073    * Andreas Jaeger for testing and benchmarking of GCC and various bug
27074      fixes.
27075
27076    * Jakub Jelinek for his SPARC work and sibling call optimizations as
27077      well as lots of bug fixes and test cases, and for improving the
27078      Java build system.
27079
27080    * Janis Johnson for ia64 testing and fixes, her quality improvement
27081      sidetracks, and web page maintenance.
27082
27083    * Kean Johnston for SCO OpenServer support and various fixes.
27084
27085    * Tim Josling for the sample language treelang based originally on
27086      Richard Kenner's "toy" language.
27087
27088    * Nicolai Josuttis for additional libstdc++ documentation.
27089
27090    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
27091      target.
27092
27093    * Steven G. Kargl for work on gfortran.
27094
27095    * David Kashtan of SRI adapted GCC to VMS.
27096
27097    * Ryszard Kabatek for many, many libstdc++ bug fixes and
27098      optimizations of strings, especially member functions, and for
27099      auto_ptr fixes.
27100
27101    * Geoffrey Keating for his ongoing work to make the PPC work for
27102      GNU/Linux and his automatic regression tester.
27103
27104    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
27105      work in just about every part of libstdc++.
27106
27107    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
27108      MIL-STD-1750A.
27109
27110    * Richard Kenner of the New York University Ultracomputer Research
27111      Laboratory wrote the machine descriptions for the AMD 29000, the
27112      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
27113      support for instruction attributes.  He also made changes to
27114      better support RISC processors including changes to common
27115      subexpression elimination, strength reduction, function calling
27116      sequence handling, and condition code support, in addition to
27117      generalizing the code for frame pointer elimination and delay slot
27118      scheduling.  Richard Kenner was also the head maintainer of GCC
27119      for several years.
27120
27121    * Mumit Khan for various contributions to the Cygwin and Mingw32
27122      ports and maintaining binary releases for Microsoft Windows hosts,
27123      and for massive libstdc++ porting work to Cygwin/Mingw32.
27124
27125    * Robin Kirkham for cpu32 support.
27126
27127    * Mark Klein for PA improvements.
27128
27129    * Thomas Koenig for various bug fixes.
27130
27131    * Bruce Korb for the new and improved fixincludes code.
27132
27133    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
27134      effort.
27135
27136    * Charles LaBrec contributed the support for the Integrated Solutions
27137      68020 system.
27138
27139    * Jeff Law for his direction via the steering committee,
27140      coordinating the entire egcs project and GCC 2.95, rolling out
27141      snapshots and releases, handling merges from GCC2, reviewing tons
27142      of patches that might have fallen through the cracks else, and
27143      random but extensive hacking.
27144
27145    * Marc Lehmann for his direction via the steering committee and
27146      helping with analysis and improvements of x86 performance.
27147
27148    * Victor Leikehman for work on gfortran.
27149
27150    * Ted Lemon wrote parts of the RTL reader and printer.
27151
27152    * Kriang Lerdsuwanakij for C++ improvements including template as
27153      template parameter support, and many C++ fixes.
27154
27155    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
27156      and random work on the Java front end.
27157
27158    * Alain Lichnewsky ported GCC to the MIPS CPU.
27159
27160    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
27161      and patches.
27162
27163    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
27164
27165    * Weiwen Liu for testing and various bug fixes.
27166
27167    * Dave Love for his ongoing work with the Fortran front end and
27168      runtime libraries.
27169
27170    * Martin von Lo"wis for internal consistency checking infrastructure,
27171      various C++ improvements including namespace support, and tons of
27172      assistance with libstdc++/compiler merges.
27173
27174    * H.J. Lu for his previous contributions to the steering committee,
27175      many x86 bug reports, prototype patches, and keeping the GNU/Linux
27176      ports working.
27177
27178    * Greg McGary for random fixes and (someday) bounded pointers.
27179
27180    * Andrew MacLeod for his ongoing work in building a real EH system,
27181      various code generation improvements, work on the global
27182      optimizer, etc.
27183
27184    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
27185      hacking improvements to compile-time performance, overall
27186      knowledge and direction in the area of instruction scheduling, and
27187      design and implementation of the automaton based instruction
27188      scheduler.
27189
27190    * Bob Manson for his behind the scenes work on dejagnu.
27191
27192    * Philip Martin for lots of libstdc++ string and vector iterator
27193      fixes and improvements, and string clean up and testsuites.
27194
27195    * All of the Mauve project contributors, for Java test code.
27196
27197    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
27198
27199    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
27200
27201    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
27202      powerpc, haifa, ECOFF debug support, and other assorted hacking.
27203
27204    * Jason Merrill for his direction via the steering committee and
27205      leading the G++ effort.
27206
27207    * David Miller for his direction via the steering committee, lots of
27208      SPARC work, improvements in jump.c and interfacing with the Linux
27209      kernel developers.
27210
27211    * Gary Miller ported GCC to Charles River Data Systems machines.
27212
27213    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
27214      the entire libstdc++ testsuite namespace-compatible.
27215
27216    * Mark Mitchell for his direction via the steering committee,
27217      mountains of C++ work, load/store hoisting out of loops, alias
27218      analysis improvements, ISO C `restrict' support, and serving as
27219      release manager for GCC 3.x.
27220
27221    * Alan Modra for various GNU/Linux bits and testing.
27222
27223    * Toon Moene for his direction via the steering committee, Fortran
27224      maintenance, and his ongoing work to make us make Fortran run fast.
27225
27226    * Jason Molenda for major help in the care and feeding of all the
27227      services on the gcc.gnu.org (formerly egcs.cygnus.com)
27228      machine--mail, web services, ftp services, etc etc.  Doing all
27229      this work on scrap paper and the backs of envelopes would have
27230      been... difficult.
27231
27232    * Catherine Moore for fixing various ugly problems we have sent her
27233      way, including the haifa bug which was killing the Alpha & PowerPC
27234      Linux kernels.
27235
27236    * Mike Moreton for his various Java patches.
27237
27238    * David Mosberger-Tang for various Alpha improvements, and for the
27239      initial IA-64 port.
27240
27241    * Stephen Moshier contributed the floating point emulator that
27242      assists in cross-compilation and permits support for floating
27243      point numbers wider than 64 bits and for ISO C99 support.
27244
27245    * Bill Moyer for his behind the scenes work on various issues.
27246
27247    * Philippe De Muyter for his work on the m68k port.
27248
27249    * Joseph S. Myers for his work on the PDP-11 port, format checking
27250      and ISO C99 support, and continuous emphasis on (and contributions
27251      to) documentation.
27252
27253    * Nathan Myers for his work on libstdc++-v3: architecture and
27254      authorship through the first three snapshots, including
27255      implementation of locale infrastructure, string, shadow C headers,
27256      and the initial project documentation (DESIGN, CHECKLIST, and so
27257      forth).  Later, more work on MT-safe string and shadow headers.
27258
27259    * Felix Natter for documentation on porting libstdc++.
27260
27261    * Nathanael Nerode for cleaning up the configuration/build process.
27262
27263    * NeXT, Inc. donated the front end that supports the Objective-C
27264      language.
27265
27266    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
27267      the search engine setup, various documentation fixes and other
27268      small fixes.
27269
27270    * Geoff Noer for his work on getting cygwin native builds working.
27271
27272    * Diego Novillo for his SPEC performance tracking web pages and
27273      assorted fixes in the middle end and various back ends.
27274
27275    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
27276      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
27277      related infrastructure improvements.
27278
27279    * Alexandre Oliva for various build infrastructure improvements,
27280      scripts and amazing testing work, including keeping libtool issues
27281      sane and happy.
27282
27283    * Stefan Olsson for work on mt_alloc.
27284
27285    * Melissa O'Neill for various NeXT fixes.
27286
27287    * Rainer Orth for random MIPS work, including improvements to GCC's
27288      o32 ABI support, improvements to dejagnu's MIPS support, Java
27289      configuration clean-ups and porting work, etc.
27290
27291    * Hartmut Penner for work on the s390 port.
27292
27293    * Paul Petersen wrote the machine description for the Alliant FX/8.
27294
27295    * Alexandre Petit-Bianco for implementing much of the Java compiler
27296      and continued Java maintainership.
27297
27298    * Matthias Pfaller for major improvements to the NS32k port.
27299
27300    * Gerald Pfeifer for his direction via the steering committee,
27301      pointing out lots of problems we need to solve, maintenance of the
27302      web pages, and taking care of documentation maintenance in general.
27303
27304    * Andrew Pinski for processing bug reports by the dozen.
27305
27306    * Ovidiu Predescu for his work on the Objective-C front end and
27307      runtime libraries.
27308
27309    * Jerry Quinn for major performance improvements in C++ formatted
27310      I/O.
27311
27312    * Ken Raeburn for various improvements to checker, MIPS ports and
27313      various cleanups in the compiler.
27314
27315    * Rolf W. Rasmussen for hacking on AWT.
27316
27317    * David Reese of Sun Microsystems contributed to the Solaris on
27318      PowerPC port.
27319
27320    * Volker Reichelt for keeping up with the problem reports.
27321
27322    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
27323      hacking.
27324
27325    * Loren J. Rittle for improvements to libstdc++-v3 including the
27326      FreeBSD port, threading fixes, thread-related configury changes,
27327      critical threading documentation, and solutions to really tricky
27328      I/O problems, as well as keeping GCC properly working on FreeBSD
27329      and continuous testing.
27330
27331    * Craig Rodrigues for processing tons of bug reports.
27332
27333    * Ola Ro"nnerup for work on mt_alloc.
27334
27335    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
27336
27337    * David Ronis inspired and encouraged Craig to rewrite the G77
27338      documentation in texinfo format by contributing a first pass at a
27339      translation of the old `g77-0.5.16/f/DOC' file.
27340
27341    * Ken Rose for fixes to GCC's delay slot filling code.
27342
27343    * Paul Rubin wrote most of the preprocessor.
27344
27345    * Pe'tur Runo'lfsson for major performance improvements in C++
27346      formatted I/O and large file support in C++ filebuf.
27347
27348    * Chip Salzenberg for libstdc++ patches and improvements to locales,
27349      traits, Makefiles, libio, libtool hackery, and "long long" support.
27350
27351    * Juha Sarlin for improvements to the H8 code generator.
27352
27353    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
27354      300.
27355
27356    * Roger Sayle for improvements to constant folding and GCC's RTL
27357      optimizers as well as for fixing numerous bugs.
27358
27359    * Bradley Schatz for his work on the GCJ FAQ.
27360
27361    * Peter Schauer wrote the code to allow debugging to work on the
27362      Alpha.
27363
27364    * William Schelter did most of the work on the Intel 80386 support.
27365
27366    * Tobias Schlu"ter for work on gfortran.
27367
27368    * Bernd Schmidt for various code generation improvements and major
27369      work in the reload pass as well a serving as release manager for
27370      GCC 2.95.3.
27371
27372    * Peter Schmid for constant testing of libstdc++--especially
27373      application testing, going above and beyond what was requested for
27374      the release criteria--and libstdc++ header file tweaks.
27375
27376    * Jason Schroeder for jcf-dump patches.
27377
27378    * Andreas Schwab for his work on the m68k port.
27379
27380    * Lars Segerlund for work on gfortran.
27381
27382    * Joel Sherrill for his direction via the steering committee, RTEMS
27383      contributions and RTEMS testing.
27384
27385    * Nathan Sidwell for many C++ fixes/improvements.
27386
27387    * Jeffrey Siegal for helping RMS with the original design of GCC,
27388      some code which handles the parse tree and RTL data structures,
27389      constant folding and help with the original VAX & m68k ports.
27390
27391    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
27392      from the LWG (thereby keeping GCC in line with updates from the
27393      ISO).
27394
27395    * Franz Sirl for his ongoing work with making the PPC port stable
27396      for GNU/Linux.
27397
27398    * Andrey Slepuhin for assorted AIX hacking.
27399
27400    * Christopher Smith did the port for Convex machines.
27401
27402    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
27403
27404    * Randy Smith finished the Sun FPA support.
27405
27406    * Scott Snyder for queue, iterator, istream, and string fixes and
27407      libstdc++ testsuite entries.  Also for providing the patch to G77
27408      to add rudimentary support for `INTEGER*1', `INTEGER*2', and
27409      `LOGICAL*1'.
27410
27411    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
27412
27413    * Richard Stallman, for writing the original GCC and launching the
27414      GNU project.
27415
27416    * Jan Stein of the Chalmers Computer Society provided support for
27417      Genix, as well as part of the 32000 machine description.
27418
27419    * Nigel Stephens for various mips16 related fixes/improvements.
27420
27421    * Jonathan Stone wrote the machine description for the Pyramid
27422      computer.
27423
27424    * Graham Stott for various infrastructure improvements.
27425
27426    * John Stracke for his Java HTTP protocol fixes.
27427
27428    * Mike Stump for his Elxsi port, G++ contributions over the years
27429      and more recently his vxworks contributions
27430
27431    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
27432
27433    * Shigeya Suzuki for this fixes for the bsdi platforms.
27434
27435    * Ian Lance Taylor for his mips16 work, general configury hacking,
27436      fixincludes, etc.
27437
27438    * Holger Teutsch provided the support for the Clipper CPU.
27439
27440    * Gary Thomas for his ongoing work to make the PPC work for
27441      GNU/Linux.
27442
27443    * Philipp Thomas for random bug fixes throughout the compiler
27444
27445    * Jason Thorpe for thread support in libstdc++ on NetBSD.
27446
27447    * Kresten Krab Thorup wrote the run time support for the Objective-C
27448      language and the fantastic Java bytecode interpreter.
27449
27450    * Michael Tiemann for random bug fixes, the first instruction
27451      scheduler, initial C++ support, function integration, NS32k, SPARC
27452      and M88k machine description work, delay slot scheduling.
27453
27454    * Andreas Tobler for his work porting libgcj to Darwin.
27455
27456    * Teemu Torma for thread safe exception handling support.
27457
27458    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
27459      definitions, and of the VAX machine description.
27460
27461    * Tom Tromey for internationalization support and for his many Java
27462      contributions and libgcj maintainership.
27463
27464    * Lassi Tuura for improvements to config.guess to determine HP
27465      processor types.
27466
27467    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
27468
27469    * Andy Vaught for the design and initial implementation of the
27470      gfortran front end.
27471
27472    * Brent Verner for work with the libstdc++ cshadow files and their
27473      associated configure steps.
27474
27475    * Todd Vierling for contributions for NetBSD ports.
27476
27477    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
27478      guidance.
27479
27480    * Dean Wakerley for converting the install documentation from HTML
27481      to texinfo in time for GCC 3.0.
27482
27483    * Krister Walfridsson for random bug fixes.
27484
27485    * Feng Wang for contributions to gfortran.
27486
27487    * Stephen M. Webb for time and effort on making libstdc++ shadow
27488      files work with the tricky Solaris 8+ headers, and for pushing the
27489      build-time header tree.
27490
27491    * John Wehle for various improvements for the x86 code generator,
27492      related infrastructure improvements to help x86 code generation,
27493      value range propagation and other work, WE32k port.
27494
27495    * Ulrich Weigand for work on the s390 port.
27496
27497    * Zack Weinberg for major work on cpplib and various other bug fixes.
27498
27499    * Matt Welsh for help with Linux Threads support in GCJ.
27500
27501    * Urban Widmark for help fixing java.io.
27502
27503    * Mark Wielaard for new Java library code and his work integrating
27504      with Classpath.
27505
27506    * Dale Wiles helped port GCC to the Tahoe.
27507
27508    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
27509
27510    * Jim Wilson for his direction via the steering committee, tackling
27511      hard problems in various places that nobody else wanted to work
27512      on, strength reduction and other loop optimizations.
27513
27514    * Carlo Wood for various fixes.
27515
27516    * Tom Wood for work on the m88k port.
27517
27518    * Canqun Yang for work on gfortran.
27519
27520    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
27521      description for the Tron architecture (specifically, the Gmicro).
27522
27523    * Kevin Zachmann helped port GCC to the Tahoe.
27524
27525    * Ayal Zaks for Swing Modulo Scheduling (SMS).
27526
27527    * Xiaoqiang Zhang for work on gfortran.
27528
27529    * Gilles Zunino for help porting Java to Irix.
27530
27531
27532  The following people are recognized for their contributions to GNAT,
27533 the Ada front end of GCC:
27534    * Bernard Banner
27535
27536    * Romain Berrendonner
27537
27538    * Geert Bosch
27539
27540    * Emmanuel Briot
27541
27542    * Joel Brobecker
27543
27544    * Ben Brosgol
27545
27546    * Vincent Celier
27547
27548    * Arnaud Charlet
27549
27550    * Chien Chieng
27551
27552    * Cyrille Comar
27553
27554    * Cyrille Crozes
27555
27556    * Robert Dewar
27557
27558    * Gary Dismukes
27559
27560    * Robert Duff
27561
27562    * Ed Falis
27563
27564    * Ramon Fernandez
27565
27566    * Sam Figueroa
27567
27568    * Vasiliy Fofanov
27569
27570    * Michael Friess
27571
27572    * Franco Gasperoni
27573
27574    * Ted Giering
27575
27576    * Matthew Gingell
27577
27578    * Laurent Guerby
27579
27580    * Jerome Guitton
27581
27582    * Olivier Hainque
27583
27584    * Jerome Hugues
27585
27586    * Hristian Kirtchev
27587
27588    * Jerome Lambourg
27589
27590    * Bruno Leclerc
27591
27592    * Albert Lee
27593
27594    * Sean McNeil
27595
27596    * Javier Miranda
27597
27598    * Laurent Nana
27599
27600    * Pascal Obry
27601
27602    * Dong-Ik Oh
27603
27604    * Laurent Pautet
27605
27606    * Brett Porter
27607
27608    * Thomas Quinot
27609
27610    * Nicolas Roche
27611
27612    * Pat Rogers
27613
27614    * Jose Ruiz
27615
27616    * Douglas Rupp
27617
27618    * Sergey Rybin
27619
27620    * Gail Schenker
27621
27622    * Ed Schonberg
27623
27624    * Nicolas Setton
27625
27626    * Samuel Tardieu
27627
27628
27629  In addition to the above, all of which also contributed time and
27630 energy in testing GCC, we would like to thank the following for their
27631 contributions to testing:
27632
27633    * Michael Abd-El-Malek
27634
27635    * Thomas Arend
27636
27637    * Bonzo Armstrong
27638
27639    * Steven Ashe
27640
27641    * Chris Baldwin
27642
27643    * David Billinghurst
27644
27645    * Jim Blandy
27646
27647    * Stephane Bortzmeyer
27648
27649    * Horst von Brand
27650
27651    * Frank Braun
27652
27653    * Rodney Brown
27654
27655    * Sidney Cadot
27656
27657    * Bradford Castalia
27658
27659    * Jonathan Corbet
27660
27661    * Ralph Doncaster
27662
27663    * Richard Emberson
27664
27665    * Levente Farkas
27666
27667    * Graham Fawcett
27668
27669    * Mark Fernyhough
27670
27671    * Robert A. French
27672
27673    * Jo"rgen Freyh
27674
27675    * Mark K. Gardner
27676
27677    * Charles-Antoine Gauthier
27678
27679    * Yung Shing Gene
27680
27681    * David Gilbert
27682
27683    * Simon Gornall
27684
27685    * Fred Gray
27686
27687    * John Griffin
27688
27689    * Patrik Hagglund
27690
27691    * Phil Hargett
27692
27693    * Amancio Hasty
27694
27695    * Takafumi Hayashi
27696
27697    * Bryan W. Headley
27698
27699    * Kevin B. Hendricks
27700
27701    * Joep Jansen
27702
27703    * Christian Joensson
27704
27705    * Michel Kern
27706
27707    * David Kidd
27708
27709    * Tobias Kuipers
27710
27711    * Anand Krishnaswamy
27712
27713    * A. O. V. Le Blanc
27714
27715    * llewelly
27716
27717    * Damon Love
27718
27719    * Brad Lucier
27720
27721    * Matthias Klose
27722
27723    * Martin Knoblauch
27724
27725    * Rick Lutowski
27726
27727    * Jesse Macnish
27728
27729    * Stefan Morrell
27730
27731    * Anon A. Mous
27732
27733    * Matthias Mueller
27734
27735    * Pekka Nikander
27736
27737    * Rick Niles
27738
27739    * Jon Olson
27740
27741    * Magnus Persson
27742
27743    * Chris Pollard
27744
27745    * Richard Polton
27746
27747    * Derk Reefman
27748
27749    * David Rees
27750
27751    * Paul Reilly
27752
27753    * Tom Reilly
27754
27755    * Torsten Rueger
27756
27757    * Danny Sadinoff
27758
27759    * Marc Schifer
27760
27761    * Erik Schnetter
27762
27763    * Wayne K. Schroll
27764
27765    * David Schuler
27766
27767    * Vin Shelton
27768
27769    * Tim Souder
27770
27771    * Adam Sulmicki
27772
27773    * Bill Thorson
27774
27775    * George Talbot
27776
27777    * Pedro A. M. Vazquez
27778
27779    * Gregory Warnes
27780
27781    * Ian Watson
27782
27783    * David E. Young
27784
27785    * And many others
27786
27787  And finally we'd like to thank everyone who uses the compiler, submits
27788 bug reports and generally reminds us why we're doing this work in the
27789 first place.
27790
27791 \1f
27792 File: gccint.info,  Node: Option Index,  Next: Concept Index,  Prev: Contributors,  Up: Top
27793
27794 Option Index
27795 ************
27796
27797 GCC's command line options are indexed here without any initial `-' or
27798 `--'.  Where an option has both positive and negative forms (such as
27799 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
27800 indexed under the most appropriate form; it may sometimes be useful to
27801 look up both forms.
27802
27803 \0\b[index\0\b]
27804 * Menu:
27805
27806 * msoft-float:                           Soft float library routines.
27807                                                                 (line 6)
27808
27809 \1f
27810 File: gccint.info,  Node: Concept Index,  Prev: Option Index,  Up: Top
27811
27812 Concept Index
27813 *************
27814
27815 \0\b[index\0\b]
27816 * Menu:
27817
27818 * ! in constraint:                       Multi-Alternative.  (line   47)
27819 * # in constraint:                       Modifiers.          (line   64)
27820 * # in template:                         Output Template.    (line   66)
27821 * #pragma:                               Misc.               (line  378)
27822 * % in constraint:                       Modifiers.          (line   45)
27823 * % in GTY option:                       GTY Options.        (line   18)
27824 * % in template:                         Output Template.    (line    6)
27825 * & in constraint:                       Modifiers.          (line   25)
27826 * (nil):                                 RTL Objects.        (line   73)
27827 * * <1>:                                 Host Common.        (line   17)
27828 * *:                                     PCH Target.         (line    7)
27829 * * in constraint:                       Modifiers.          (line   69)
27830 * * in template:                         Output Statement.   (line   29)
27831 * + in constraint:                       Modifiers.          (line   12)
27832 * /c in RTL dump:                        Flags.              (line  224)
27833 * /f in RTL dump:                        Flags.              (line  229)
27834 * /i in RTL dump:                        Flags.              (line  280)
27835 * /j in RTL dump:                        Flags.              (line  293)
27836 * /s in RTL dump:                        Flags.              (line  244)
27837 * /u in RTL dump:                        Flags.              (line  303)
27838 * /v in RTL dump:                        Flags.              (line  335)
27839 * 0 in constraint:                       Simple Constraints. (line  118)
27840 * < in constraint:                       Simple Constraints. (line   46)
27841 * = in constraint:                       Modifiers.          (line    8)
27842 * > in constraint:                       Simple Constraints. (line   50)
27843 * ? in constraint:                       Multi-Alternative.  (line   41)
27844 * \:                                     Output Template.    (line   46)
27845 * __absvdi2:                             Integer library routines.
27846                                                              (line  107)
27847 * __absvsi2:                             Integer library routines.
27848                                                              (line  106)
27849 * __adddf3:                              Soft float library routines.
27850                                                              (line   23)
27851 * __addsf3:                              Soft float library routines.
27852                                                              (line   22)
27853 * __addtf3:                              Soft float library routines.
27854                                                              (line   25)
27855 * __addvdi3:                             Integer library routines.
27856                                                              (line  111)
27857 * __addvsi3:                             Integer library routines.
27858                                                              (line  110)
27859 * __addxf3:                              Soft float library routines.
27860                                                              (line   27)
27861 * __ashldi3:                             Integer library routines.
27862                                                              (line   14)
27863 * __ashlsi3:                             Integer library routines.
27864                                                              (line   13)
27865 * __ashlti3:                             Integer library routines.
27866                                                              (line   15)
27867 * __ashrdi3:                             Integer library routines.
27868                                                              (line   19)
27869 * __ashrsi3:                             Integer library routines.
27870                                                              (line   18)
27871 * __ashrti3:                             Integer library routines.
27872                                                              (line   20)
27873 * __builtin_args_info:                   Varargs.            (line   42)
27874 * __builtin_classify_type:               Varargs.            (line   76)
27875 * __builtin_next_arg:                    Varargs.            (line   66)
27876 * __builtin_saveregs:                    Varargs.            (line   24)
27877 * __clear_cache:                         Miscellaneous routines.
27878                                                              (line   10)
27879 * __clzdi2:                              Integer library routines.
27880                                                              (line  131)
27881 * __clzsi2:                              Integer library routines.
27882                                                              (line  130)
27883 * __clzti2:                              Integer library routines.
27884                                                              (line  132)
27885 * __cmpdf2:                              Soft float library routines.
27886                                                              (line  145)
27887 * __cmpdi2:                              Integer library routines.
27888                                                              (line   87)
27889 * __cmpsf2:                              Soft float library routines.
27890                                                              (line  144)
27891 * __cmptf2:                              Soft float library routines.
27892                                                              (line  146)
27893 * __cmpti2:                              Integer library routines.
27894                                                              (line   88)
27895 * __CTOR_LIST__:                         Initialization.     (line   25)
27896 * __ctzdi2:                              Integer library routines.
27897                                                              (line  138)
27898 * __ctzsi2:                              Integer library routines.
27899                                                              (line  137)
27900 * __ctzti2:                              Integer library routines.
27901                                                              (line  139)
27902 * __divdf3:                              Soft float library routines.
27903                                                              (line   48)
27904 * __divdi3:                              Integer library routines.
27905                                                              (line   25)
27906 * __divsf3:                              Soft float library routines.
27907                                                              (line   47)
27908 * __divsi3:                              Integer library routines.
27909                                                              (line   24)
27910 * __divtf3:                              Soft float library routines.
27911                                                              (line   50)
27912 * __divti3:                              Integer library routines.
27913                                                              (line   26)
27914 * __divxf3:                              Soft float library routines.
27915                                                              (line   52)
27916 * __DTOR_LIST__:                         Initialization.     (line   25)
27917 * __eqdf2:                               Soft float library routines.
27918                                                              (line  175)
27919 * __eqsf2:                               Soft float library routines.
27920                                                              (line  174)
27921 * __eqtf2:                               Soft float library routines.
27922                                                              (line  176)
27923 * __extenddftf2:                         Soft float library routines.
27924                                                              (line   68)
27925 * __extenddfxf2:                         Soft float library routines.
27926                                                              (line   69)
27927 * __extendsfdf2:                         Soft float library routines.
27928                                                              (line   65)
27929 * __extendsftf2:                         Soft float library routines.
27930                                                              (line   66)
27931 * __extendsfxf2:                         Soft float library routines.
27932                                                              (line   67)
27933 * __ffsdi2:                              Integer library routines.
27934                                                              (line  144)
27935 * __ffsti2:                              Integer library routines.
27936                                                              (line  145)
27937 * __fixdfdi:                             Soft float library routines.
27938                                                              (line   88)
27939 * __fixdfsi:                             Soft float library routines.
27940                                                              (line   81)
27941 * __fixdfti:                             Soft float library routines.
27942                                                              (line   94)
27943 * __fixsfdi:                             Soft float library routines.
27944                                                              (line   87)
27945 * __fixsfsi:                             Soft float library routines.
27946                                                              (line   80)
27947 * __fixsfti:                             Soft float library routines.
27948                                                              (line   93)
27949 * __fixtfdi:                             Soft float library routines.
27950                                                              (line   89)
27951 * __fixtfsi:                             Soft float library routines.
27952                                                              (line   82)
27953 * __fixtfti:                             Soft float library routines.
27954                                                              (line   95)
27955 * __fixunsdfdi:                          Soft float library routines.
27956                                                              (line  108)
27957 * __fixunsdfsi:                          Soft float library routines.
27958                                                              (line  101)
27959 * __fixunsdfti:                          Soft float library routines.
27960                                                              (line  115)
27961 * __fixunssfdi:                          Soft float library routines.
27962                                                              (line  107)
27963 * __fixunssfsi:                          Soft float library routines.
27964                                                              (line  100)
27965 * __fixunssfti:                          Soft float library routines.
27966                                                              (line  114)
27967 * __fixunstfdi:                          Soft float library routines.
27968                                                              (line  109)
27969 * __fixunstfsi:                          Soft float library routines.
27970                                                              (line  102)
27971 * __fixunstfti:                          Soft float library routines.
27972                                                              (line  116)
27973 * __fixunsxfdi:                          Soft float library routines.
27974                                                              (line  110)
27975 * __fixunsxfsi:                          Soft float library routines.
27976                                                              (line  103)
27977 * __fixunsxfti:                          Soft float library routines.
27978                                                              (line  117)
27979 * __fixxfdi:                             Soft float library routines.
27980                                                              (line   90)
27981 * __fixxfsi:                             Soft float library routines.
27982                                                              (line   83)
27983 * __fixxfti:                             Soft float library routines.
27984                                                              (line   96)
27985 * __floatdidf:                           Soft float library routines.
27986                                                              (line  128)
27987 * __floatdisf:                           Soft float library routines.
27988                                                              (line  127)
27989 * __floatditf:                           Soft float library routines.
27990                                                              (line  129)
27991 * __floatdixf:                           Soft float library routines.
27992                                                              (line  130)
27993 * __floatsidf:                           Soft float library routines.
27994                                                              (line  122)
27995 * __floatsisf:                           Soft float library routines.
27996                                                              (line  121)
27997 * __floatsitf:                           Soft float library routines.
27998                                                              (line  123)
27999 * __floatsixf:                           Soft float library routines.
28000                                                              (line  124)
28001 * __floattidf:                           Soft float library routines.
28002                                                              (line  134)
28003 * __floattisf:                           Soft float library routines.
28004                                                              (line  133)
28005 * __floattitf:                           Soft float library routines.
28006                                                              (line  135)
28007 * __floattixf:                           Soft float library routines.
28008                                                              (line  136)
28009 * __gedf2:                               Soft float library routines.
28010                                                              (line  187)
28011 * __gesf2:                               Soft float library routines.
28012                                                              (line  186)
28013 * __getf2:                               Soft float library routines.
28014                                                              (line  188)
28015 * __gtdf2:                               Soft float library routines.
28016                                                              (line  205)
28017 * __gtsf2:                               Soft float library routines.
28018                                                              (line  204)
28019 * __gttf2:                               Soft float library routines.
28020                                                              (line  206)
28021 * __ledf2:                               Soft float library routines.
28022                                                              (line  199)
28023 * __lesf2:                               Soft float library routines.
28024                                                              (line  198)
28025 * __letf2:                               Soft float library routines.
28026                                                              (line  200)
28027 * __lshrdi3:                             Integer library routines.
28028                                                              (line   31)
28029 * __lshrsi3:                             Integer library routines.
28030                                                              (line   30)
28031 * __lshrti3:                             Integer library routines.
28032                                                              (line   32)
28033 * __ltdf2:                               Soft float library routines.
28034                                                              (line  193)
28035 * __ltsf2:                               Soft float library routines.
28036                                                              (line  192)
28037 * __lttf2:                               Soft float library routines.
28038                                                              (line  194)
28039 * __main:                                Collect2.           (line   15)
28040 * __moddi3:                              Integer library routines.
28041                                                              (line   37)
28042 * __modsi3:                              Integer library routines.
28043                                                              (line   36)
28044 * __modti3:                              Integer library routines.
28045                                                              (line   38)
28046 * __muldf3:                              Soft float library routines.
28047                                                              (line   40)
28048 * __muldi3:                              Integer library routines.
28049                                                              (line   43)
28050 * __mulsf3:                              Soft float library routines.
28051                                                              (line   39)
28052 * __mulsi3:                              Integer library routines.
28053                                                              (line   42)
28054 * __multf3:                              Soft float library routines.
28055                                                              (line   42)
28056 * __multi3:                              Integer library routines.
28057                                                              (line   44)
28058 * __mulvdi3:                             Integer library routines.
28059                                                              (line  115)
28060 * __mulvsi3:                             Integer library routines.
28061                                                              (line  114)
28062 * __mulxf3:                              Soft float library routines.
28063                                                              (line   44)
28064 * __nedf2:                               Soft float library routines.
28065                                                              (line  181)
28066 * __negdf2:                              Soft float library routines.
28067                                                              (line   56)
28068 * __negdi2:                              Integer library routines.
28069                                                              (line   47)
28070 * __negsf2:                              Soft float library routines.
28071                                                              (line   55)
28072 * __negtf2:                              Soft float library routines.
28073                                                              (line   57)
28074 * __negti2:                              Integer library routines.
28075                                                              (line   48)
28076 * __negvdi2:                             Integer library routines.
28077                                                              (line  119)
28078 * __negvsi2:                             Integer library routines.
28079                                                              (line  118)
28080 * __negxf2:                              Soft float library routines.
28081                                                              (line   58)
28082 * __nesf2:                               Soft float library routines.
28083                                                              (line  180)
28084 * __netf2:                               Soft float library routines.
28085                                                              (line  182)
28086 * __paritydi2:                           Integer library routines.
28087                                                              (line  151)
28088 * __paritysi2:                           Integer library routines.
28089                                                              (line  150)
28090 * __parityti2:                           Integer library routines.
28091                                                              (line  152)
28092 * __popcountdi2:                         Integer library routines.
28093                                                              (line  157)
28094 * __popcountsi2:                         Integer library routines.
28095                                                              (line  156)
28096 * __popcountti2:                         Integer library routines.
28097                                                              (line  158)
28098 * __subdf3:                              Soft float library routines.
28099                                                              (line   31)
28100 * __subsf3:                              Soft float library routines.
28101                                                              (line   30)
28102 * __subtf3:                              Soft float library routines.
28103                                                              (line   33)
28104 * __subvdi3:                             Integer library routines.
28105                                                              (line  123)
28106 * __subvsi3:                             Integer library routines.
28107                                                              (line  122)
28108 * __subxf3:                              Soft float library routines.
28109                                                              (line   35)
28110 * __truncdfsf2:                          Soft float library routines.
28111                                                              (line   76)
28112 * __trunctfdf2:                          Soft float library routines.
28113                                                              (line   73)
28114 * __trunctfsf2:                          Soft float library routines.
28115                                                              (line   75)
28116 * __truncxfdf2:                          Soft float library routines.
28117                                                              (line   72)
28118 * __truncxfsf2:                          Soft float library routines.
28119                                                              (line   74)
28120 * __ucmpdi2:                             Integer library routines.
28121                                                              (line   93)
28122 * __ucmpti2:                             Integer library routines.
28123                                                              (line   95)
28124 * __udivdi3:                             Integer library routines.
28125                                                              (line   54)
28126 * __udivmoddi3:                          Integer library routines.
28127                                                              (line   61)
28128 * __udivsi3:                             Integer library routines.
28129                                                              (line   52)
28130 * __udivti3:                             Integer library routines.
28131                                                              (line   56)
28132 * __umoddi3:                             Integer library routines.
28133                                                              (line   71)
28134 * __umodsi3:                             Integer library routines.
28135                                                              (line   69)
28136 * __umodti3:                             Integer library routines.
28137                                                              (line   73)
28138 * __unorddf2:                            Soft float library routines.
28139                                                              (line  154)
28140 * __unordsf2:                            Soft float library routines.
28141                                                              (line  153)
28142 * __unordtf2:                            Soft float library routines.
28143                                                              (line  155)
28144 * abort:                                 Portability.        (line   21)
28145 * abs:                                   Arithmetic.         (line  169)
28146 * abs and attributes:                    Expressions.        (line   64)
28147 * ABS_EXPR:                              Expression trees.   (line    6)
28148 * absence_set:                           Processor pipeline description.
28149                                                              (line  215)
28150 * absM2 instruction pattern:             Standard Names.     (line  262)
28151 * absolute value:                        Arithmetic.         (line  169)
28152 * access to operands:                    Accessors.          (line    6)
28153 * access to special operands:            Special Accessors.  (line    6)
28154 * accessors:                             Accessors.          (line    6)
28155 * ACCUMULATE_OUTGOING_ARGS:              Stack Arguments.    (line   46)
28156 * ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line  135)
28157 * ADA_LONG_TYPE_SIZE:                    Type Layout.        (line   26)
28158 * ADDITIONAL_REGISTER_NAMES:             Instruction Output. (line   15)
28159 * addM3 instruction pattern:             Standard Names.     (line  187)
28160 * addMODEcc instruction pattern:         Standard Names.     (line  588)
28161 * addr_diff_vec:                         Side Effects.       (line  299)
28162 * addr_diff_vec, length of:              Insn Lengths.       (line   26)
28163 * ADDR_EXPR:                             Expression trees.   (line    6)
28164 * addr_vec:                              Side Effects.       (line  294)
28165 * addr_vec, length of:                   Insn Lengths.       (line   26)
28166 * address constraints:                   Simple Constraints. (line  152)
28167 * address_operand <1>:                   Simple Constraints. (line  156)
28168 * address_operand:                       Machine-Independent Predicates.
28169                                                              (line   63)
28170 * addressing modes:                      Addressing Modes.   (line    6)
28171 * addressof:                             Regs and Memory.    (line  260)
28172 * ADJUST_FIELD_ALIGN:                    Storage Layout.     (line  188)
28173 * ADJUST_INSN_LENGTH:                    Insn Lengths.       (line   35)
28174 * AGGR_INIT_EXPR:                        Expression trees.   (line    6)
28175 * aggregates as return values:           Aggregate Return.   (line    6)
28176 * alias:                                 Alias analysis.     (line    6)
28177 * ALL_COP_ADDITIONAL_REGISTER_NAMES:     MIPS Coprocessors.  (line   32)
28178 * ALL_REGS:                              Register Classes.   (line   17)
28179 * ALLOCATE_INITIAL_VALUE:                Misc.               (line  674)
28180 * allocate_stack instruction pattern:    Standard Names.     (line  911)
28181 * alternate entry points:                Insns.              (line  145)
28182 * and:                                   Arithmetic.         (line  136)
28183 * and and attributes:                    Expressions.        (line   50)
28184 * and, canonicalization of:              Insn Canonicalizations.
28185                                                              (line   54)
28186 * andM3 instruction pattern:             Standard Names.     (line  193)
28187 * annotations:                           Annotations.        (line    6)
28188 * APPLY_RESULT_SIZE:                     Scalar Return.      (line   85)
28189 * ARG_POINTER_CFA_OFFSET:                Frame Layout.       (line  183)
28190 * ARG_POINTER_REGNUM:                    Frame Registers.    (line   41)
28191 * ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line   65)
28192 * arg_pointer_rtx:                       Frame Registers.    (line   85)
28193 * ARGS_GROW_DOWNWARD:                    Frame Layout.       (line   35)
28194 * argument passing:                      Interface.          (line   36)
28195 * arguments in registers:                Register Arguments. (line    6)
28196 * arguments on stack:                    Stack Arguments.    (line    6)
28197 * arithmetic library:                    Soft float library routines.
28198                                                              (line    6)
28199 * arithmetic shift:                      Arithmetic.         (line  151)
28200 * arithmetic, in RTL:                    Arithmetic.         (line    6)
28201 * ARITHMETIC_TYPE_P:                     Types.              (line   76)
28202 * array:                                 Types.              (line    6)
28203 * ARRAY_RANGE_REF:                       Expression trees.   (line    6)
28204 * ARRAY_REF:                             Expression trees.   (line    6)
28205 * ARRAY_TYPE:                            Types.              (line    6)
28206 * AS_NEEDS_DASH_FOR_PIPED_INPUT:         Driver.             (line  151)
28207 * ashift:                                Arithmetic.         (line  151)
28208 * ashift and attributes:                 Expressions.        (line   64)
28209 * ashiftrt:                              Arithmetic.         (line  159)
28210 * ashiftrt and attributes:               Expressions.        (line   64)
28211 * ashlM3 instruction pattern:            Standard Names.     (line  245)
28212 * ashrM3 instruction pattern:            Standard Names.     (line  255)
28213 * ASM_APP_OFF:                           File Framework.     (line   61)
28214 * ASM_APP_ON:                            File Framework.     (line   54)
28215 * ASM_COMMENT_START:                     File Framework.     (line   49)
28216 * ASM_DECLARE_CLASS_REFERENCE:           Label Output.       (line  422)
28217 * ASM_DECLARE_CONSTANT_NAME:             Label Output.       (line  128)
28218 * ASM_DECLARE_FUNCTION_NAME:             Label Output.       (line   87)
28219 * ASM_DECLARE_FUNCTION_SIZE:             Label Output.       (line  101)
28220 * ASM_DECLARE_OBJECT_NAME:               Label Output.       (line  114)
28221 * ASM_DECLARE_REGISTER_GLOBAL:           Label Output.       (line  143)
28222 * ASM_DECLARE_UNRESOLVED_REFERENCE:      Label Output.       (line  428)
28223 * ASM_FINAL_SPEC:                        Driver.             (line  144)
28224 * ASM_FINISH_DECLARE_OBJECT:             Label Output.       (line  151)
28225 * ASM_FORMAT_PRIVATE_NAME:               Label Output.       (line  340)
28226 * asm_fprintf:                           Instruction Output. (line  123)
28227 * ASM_FPRINTF_EXTENSIONS:                Instruction Output. (line  134)
28228 * ASM_GENERATE_INTERNAL_LABEL:           Label Output.       (line  324)
28229 * asm_input:                             Side Effects.       (line  281)
28230 * asm_input and /v:                      Flags.              (line   84)
28231 * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX:     Exception Handling. (line   82)
28232 * ASM_NO_SKIP_IN_TEXT:                   Alignment Output.   (line   72)
28233 * asm_noperands:                         Insns.              (line  279)
28234 * asm_operands and /v:                   Flags.              (line   84)
28235 * asm_operands, RTL sharing:             Sharing.            (line   45)
28236 * asm_operands, usage:                   Assembler.          (line    6)
28237 * ASM_OUTPUT_ADDR_DIFF_ELT:              Dispatch Tables.    (line    9)
28238 * ASM_OUTPUT_ADDR_VEC_ELT:               Dispatch Tables.    (line   26)
28239 * ASM_OUTPUT_ALIGN:                      Alignment Output.   (line   79)
28240 * ASM_OUTPUT_ALIGN_WITH_NOP:             Alignment Output.   (line   84)
28241 * ASM_OUTPUT_ALIGNED_BSS:                Uninitialized Data. (line   64)
28242 * ASM_OUTPUT_ALIGNED_COMMON:             Uninitialized Data. (line   23)
28243 * ASM_OUTPUT_ALIGNED_DECL_COMMON:        Uninitialized Data. (line   31)
28244 * ASM_OUTPUT_ALIGNED_DECL_LOCAL:         Uninitialized Data. (line  100)
28245 * ASM_OUTPUT_ALIGNED_LOCAL:              Uninitialized Data. (line   92)
28246 * ASM_OUTPUT_ASCII:                      Data Output.        (line   50)
28247 * ASM_OUTPUT_BSS:                        Uninitialized Data. (line   44)
28248 * ASM_OUTPUT_CASE_END:                   Dispatch Tables.    (line   51)
28249 * ASM_OUTPUT_CASE_LABEL:                 Dispatch Tables.    (line   38)
28250 * ASM_OUTPUT_COMMON:                     Uninitialized Data. (line   10)
28251 * ASM_OUTPUT_DEBUG_LABEL:                Label Output.       (line  312)
28252 * ASM_OUTPUT_DEF:                        Label Output.       (line  361)
28253 * ASM_OUTPUT_DEF_FROM_DECLS:             Label Output.       (line  369)
28254 * ASM_OUTPUT_DWARF_DELTA:                SDB and DWARF.      (line   42)
28255 * ASM_OUTPUT_DWARF_OFFSET:               SDB and DWARF.      (line   46)
28256 * ASM_OUTPUT_DWARF_PCREL:                SDB and DWARF.      (line   51)
28257 * ASM_OUTPUT_EXTERNAL:                   Label Output.       (line  250)
28258 * ASM_OUTPUT_FDESC:                      Data Output.        (line   59)
28259 * ASM_OUTPUT_IDENT:                      File Framework.     (line   83)
28260 * ASM_OUTPUT_INTERNAL_LABEL:             Label Output.       (line   17)
28261 * ASM_OUTPUT_LABEL:                      Label Output.       (line    9)
28262 * ASM_OUTPUT_LABEL_REF:                  Label Output.       (line  285)
28263 * ASM_OUTPUT_LABELREF:                   Label Output.       (line  271)
28264 * ASM_OUTPUT_LOCAL:                      Uninitialized Data. (line   79)
28265 * ASM_OUTPUT_MAX_SKIP_ALIGN:             Alignment Output.   (line   88)
28266 * ASM_OUTPUT_MEASURED_SIZE:              Label Output.       (line   41)
28267 * ASM_OUTPUT_OPCODE:                     Instruction Output. (line   21)
28268 * ASM_OUTPUT_POOL_EPILOGUE:              Data Output.        (line  109)
28269 * ASM_OUTPUT_POOL_PROLOGUE:              Data Output.        (line   72)
28270 * ASM_OUTPUT_REG_POP:                    Instruction Output. (line  178)
28271 * ASM_OUTPUT_REG_PUSH:                   Instruction Output. (line  173)
28272 * ASM_OUTPUT_SHARED_BSS:                 Uninitialized Data. (line   74)
28273 * ASM_OUTPUT_SHARED_COMMON:              Uninitialized Data. (line   39)
28274 * ASM_OUTPUT_SHARED_LOCAL:               Uninitialized Data. (line  108)
28275 * ASM_OUTPUT_SIZE_DIRECTIVE:             Label Output.       (line   35)
28276 * ASM_OUTPUT_SKIP:                       Alignment Output.   (line   66)
28277 * ASM_OUTPUT_SOURCE_FILENAME:            File Framework.     (line   68)
28278 * ASM_OUTPUT_SPECIAL_POOL_ENTRY:         Data Output.        (line   84)
28279 * ASM_OUTPUT_SYMBOL_REF:                 Label Output.       (line  278)
28280 * ASM_OUTPUT_TYPE_DIRECTIVE:             Label Output.       (line   77)
28281 * ASM_OUTPUT_WEAK_ALIAS:                 Label Output.       (line  387)
28282 * ASM_PREFERRED_EH_DATA_FORMAT:          Exception Handling. (line   67)
28283 * ASM_SPEC:                              Driver.             (line  136)
28284 * ASM_STABD_OP:                          DBX Options.        (line   36)
28285 * ASM_STABN_OP:                          DBX Options.        (line   43)
28286 * ASM_STABS_OP:                          DBX Options.        (line   29)
28287 * ASM_WEAKEN_DECL:                       Label Output.       (line  186)
28288 * ASM_WEAKEN_LABEL:                      Label Output.       (line  173)
28289 * assemble_name:                         Label Output.       (line    8)
28290 * assemble_name_raw:                     Label Output.       (line   16)
28291 * assembler format:                      File Framework.     (line    6)
28292 * assembler instructions in RTL:         Assembler.          (line    6)
28293 * ASSEMBLER_DIALECT:                     Instruction Output. (line  146)
28294 * assigning attribute values to insns:   Tagging Insns.      (line    6)
28295 * assignment operator:                   Function Basics.    (line    6)
28296 * asterisk in template:                  Output Statement.   (line   29)
28297 * atan2M3 instruction pattern:           Standard Names.     (line  314)
28298 * attr <1>:                              Tagging Insns.      (line   54)
28299 * attr:                                  Expressions.        (line  154)
28300 * attr_flag:                             Expressions.        (line  119)
28301 * attribute expressions:                 Expressions.        (line    6)
28302 * attribute specifications:              Attr Example.       (line    6)
28303 * attribute specifications example:      Attr Example.       (line    6)
28304 * attributes:                            Attributes.         (line    6)
28305 * attributes, defining:                  Defining Attributes.
28306                                                              (line    6)
28307 * attributes, target-specific:           Target Attributes.  (line    6)
28308 * autoincrement addressing, availability: Portability.       (line   21)
28309 * autoincrement/decrement addressing:    Simple Constraints. (line   28)
28310 * automata_option:                       Processor pipeline description.
28311                                                              (line  296)
28312 * automaton based pipeline description:  Processor pipeline description.
28313                                                              (line    6)
28314 * automaton based scheduler:             Processor pipeline description.
28315                                                              (line    6)
28316 * AVOID_CCMODE_COPIES:                   Values in Registers.
28317                                                              (line  117)
28318 * backslash:                             Output Template.    (line   46)
28319 * barrier:                               Insns.              (line  165)
28320 * barrier and /f:                        Flags.              (line  111)
28321 * barrier and /i:                        Flags.              (line  138)
28322 * barrier and /v:                        Flags.              (line   29)
28323 * BASE_REG_CLASS:                        Register Classes.   (line  107)
28324 * basic block:                           Basic Blocks.       (line    6)
28325 * basic-block.h:                         Control Flow.       (line    6)
28326 * BASIC_BLOCK:                           Basic Blocks.       (line   19)
28327 * basic_block:                           Basic Blocks.       (line    6)
28328 * BB_DIRTY, clear_bb_flags, update_life_info_in_dirty_blocks: Liveness information.
28329                                                              (line   29)
28330 * BB_HEAD, BB_END:                       Maintaining the CFG.
28331                                                              (line   88)
28332 * bCOND instruction pattern:             Standard Names.     (line  625)
28333 * BIGGEST_ALIGNMENT:                     Storage Layout.     (line  170)
28334 * BIGGEST_FIELD_ALIGNMENT:               Storage Layout.     (line  181)
28335 * BImode:                                Machine Modes.      (line   22)
28336 * BIND_EXPR:                             Expression trees.   (line    6)
28337 * BINFO_TYPE:                            Classes.            (line    6)
28338 * bit-fields:                            Bit-Fields.         (line    6)
28339 * BIT_AND_EXPR:                          Expression trees.   (line    6)
28340 * BIT_IOR_EXPR:                          Expression trees.   (line    6)
28341 * BIT_NOT_EXPR:                          Expression trees.   (line    6)
28342 * BIT_XOR_EXPR:                          Expression trees.   (line    6)
28343 * BITFIELD_NBYTES_LIMITED:               Storage Layout.     (line  326)
28344 * BITS_BIG_ENDIAN:                       Storage Layout.     (line   12)
28345 * BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields.       (line    8)
28346 * BITS_PER_UNIT:                         Storage Layout.     (line   52)
28347 * BITS_PER_WORD:                         Storage Layout.     (line   57)
28348 * bitwise complement:                    Arithmetic.         (line  132)
28349 * bitwise exclusive-or:                  Arithmetic.         (line  146)
28350 * bitwise inclusive-or:                  Arithmetic.         (line  141)
28351 * bitwise logical-and:                   Arithmetic.         (line  136)
28352 * BLKmode:                               Machine Modes.      (line   97)
28353 * BLKmode, and function return values:   Calls.              (line   23)
28354 * block statement iterators <1>:         Maintaining the CFG.
28355                                                              (line   45)
28356 * block statement iterators:             Basic Blocks.       (line   68)
28357 * BLOCK_FOR_INSN, bb_for_stmt:           Maintaining the CFG.
28358                                                              (line   40)
28359 * BLOCK_REG_PADDING:                     Register Arguments. (line  214)
28360 * Blocks:                                Blocks.             (line    6)
28361 * bool <1>:                              Exception Region Output.
28362                                                              (line   89)
28363 * bool:                                  Sections.           (line  214)
28364 * BOOL_TYPE_SIZE:                        Type Layout.        (line   44)
28365 * BOOLEAN_TYPE:                          Types.              (line    6)
28366 * branch prediction:                     Profile information.
28367                                                              (line   24)
28368 * BRANCH_COST:                           Costs.              (line   52)
28369 * break_out_memory_refs:                 Addressing Modes.   (line  157)
28370 * BREAK_STMT:                            Function Bodies.    (line    6)
28371 * bsi_commit_edge_inserts:               Maintaining the CFG.
28372                                                              (line  120)
28373 * bsi_end_p:                             Maintaining the CFG.
28374                                                              (line   60)
28375 * bsi_insert_after:                      Maintaining the CFG.
28376                                                              (line   72)
28377 * bsi_insert_before:                     Maintaining the CFG.
28378                                                              (line   78)
28379 * bsi_insert_on_edge:                    Maintaining the CFG.
28380                                                              (line  120)
28381 * bsi_last:                              Maintaining the CFG.
28382                                                              (line   56)
28383 * bsi_next:                              Maintaining the CFG.
28384                                                              (line   64)
28385 * bsi_prev:                              Maintaining the CFG.
28386                                                              (line   68)
28387 * bsi_remove:                            Maintaining the CFG.
28388                                                              (line   84)
28389 * bsi_start:                             Maintaining the CFG.
28390                                                              (line   52)
28391 * BSS_SECTION_ASM_OP:                    Sections.           (line   53)
28392 * builtin_longjmp instruction pattern:   Standard Names.     (line  997)
28393 * builtin_setjmp_receiver instruction pattern: Standard Names.
28394                                                              (line  987)
28395 * builtin_setjmp_setup instruction pattern: Standard Names.  (line  976)
28396 * byte_mode:                             Machine Modes.      (line  222)
28397 * BYTES_BIG_ENDIAN:                      Storage Layout.     (line   24)
28398 * BYTES_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  136)
28399 * C statements for assembler output:     Output Statement.   (line    6)
28400 * C/C++ Internal Representation:         Trees.              (line    6)
28401 * C4X_FLOAT_FORMAT:                      Storage Layout.     (line  402)
28402 * C99 math functions, implicit usage:    Library Calls.      (line   76)
28403 * c_register_pragma:                     Misc.               (line  401)
28404 * c_register_pragma_with_expansion:      Misc.               (line  403)
28405 * call <1>:                              Side Effects.       (line   86)
28406 * call:                                  Flags.              (line  224)
28407 * call instruction pattern:              Standard Names.     (line  658)
28408 * call usage:                            Calls.              (line   10)
28409 * call, in mem:                          Flags.              (line   89)
28410 * call-clobbered register:               Register Basics.    (line   35)
28411 * call-saved register:                   Register Basics.    (line   35)
28412 * call-used register:                    Register Basics.    (line   35)
28413 * CALL_EXPR:                             Expression trees.   (line    6)
28414 * call_insn:                             Insns.              (line   93)
28415 * call_insn and /f:                      Flags.              (line  111)
28416 * call_insn and /i:                      Flags.              (line  138)
28417 * call_insn and /j:                      Flags.              (line  169)
28418 * call_insn and /s:                      Flags.              (line   34)
28419 * call_insn and /u:                      Flags.              (line   19)
28420 * call_insn and /v:                      Flags.              (line   29)
28421 * CALL_INSN_FUNCTION_USAGE:              Insns.              (line   99)
28422 * call_pop instruction pattern:          Standard Names.     (line  686)
28423 * CALL_POPS_ARGS:                        Stack Arguments.    (line  127)
28424 * CALL_REALLY_USED_REGISTERS:            Register Basics.    (line   46)
28425 * CALL_USED_REGISTERS:                   Register Basics.    (line   35)
28426 * call_used_regs:                        Register Basics.    (line   59)
28427 * call_value instruction pattern:        Standard Names.     (line  678)
28428 * call_value_pop instruction pattern:    Standard Names.     (line  686)
28429 * CALLER_SAVE_PROFITABLE:                Caller Saves.       (line   11)
28430 * calling conventions:                   Stack and Calling.  (line    6)
28431 * calling functions in RTL:              Calls.              (line    6)
28432 * CAN_DEBUG_WITHOUT_FP:                  Run-time Target.    (line  222)
28433 * CAN_ELIMINATE:                         Elimination.        (line   71)
28434 * can_fallthru:                          Basic Blocks.       (line   57)
28435 * canadian:                              Configure Terms.    (line    6)
28436 * CANNOT_CHANGE_MODE_CLASS:              Register Classes.   (line  398)
28437 * canonicalization of instructions:      Insn Canonicalizations.
28438                                                              (line    6)
28439 * CANONICALIZE_COMPARISON:               Condition Code.     (line   84)
28440 * canonicalize_funcptr_for_compare instruction pattern: Standard Names.
28441                                                              (line  842)
28442 * CASE_USE_BIT_TESTS:                    Misc.               (line   98)
28443 * CASE_VALUES_THRESHOLD:                 Misc.               (line   91)
28444 * CASE_VECTOR_MODE:                      Misc.               (line   71)
28445 * CASE_VECTOR_PC_RELATIVE:               Misc.               (line   84)
28446 * CASE_VECTOR_SHORTEN_MODE:              Misc.               (line   75)
28447 * casesi instruction pattern:            Standard Names.     (line  766)
28448 * cbranchMODE4 instruction pattern:      Standard Names.     (line  647)
28449 * cc0:                                   Regs and Memory.    (line  182)
28450 * cc0, RTL sharing:                      Sharing.            (line   27)
28451 * cc0_rtx:                               Regs and Memory.    (line  208)
28452 * CC1_SPEC:                              Driver.             (line  118)
28453 * CC1PLUS_SPEC:                          Driver.             (line  126)
28454 * cc_status:                             Condition Code.     (line    8)
28455 * CC_STATUS_MDEP:                        Condition Code.     (line   19)
28456 * CC_STATUS_MDEP_INIT:                   Condition Code.     (line   25)
28457 * CCmode:                                Machine Modes.      (line   90)
28458 * CDImode:                               Machine Modes.      (line  116)
28459 * CEIL_DIV_EXPR:                         Expression trees.   (line    6)
28460 * CEIL_MOD_EXPR:                         Expression trees.   (line    6)
28461 * ceilM2 instruction pattern:            Standard Names.     (line  348)
28462 * CFG, Control Flow Graph:               Control Flow.       (line    6)
28463 * cfghooks.h:                            Maintaining the CFG.
28464                                                              (line    6)
28465 * cgraph_finalize_function:              Parsing pass.       (line   52)
28466 * chain_next:                            GTY Options.        (line  188)
28467 * chain_prev:                            GTY Options.        (line  188)
28468 * change_address:                        Standard Names.     (line   47)
28469 * char <1>:                              PCH Target.         (line   16)
28470 * char:                                  Sections.           (line  206)
28471 * CHAR_TYPE_SIZE:                        Type Layout.        (line   39)
28472 * check_stack instruction pattern:       Standard Names.     (line  929)
28473 * CHImode:                               Machine Modes.      (line  116)
28474 * class:                                 Classes.            (line    6)
28475 * class definitions, register:           Register Classes.   (line    6)
28476 * class preference constraints:          Class Preferences.  (line    6)
28477 * CLASS_LIKELY_SPILLED_P:                Register Classes.   (line  369)
28478 * CLASS_MAX_NREGS:                       Register Classes.   (line  386)
28479 * CLASS_TYPE_P:                          Types.              (line   80)
28480 * classes of RTX codes:                  RTL Classes.        (line    6)
28481 * CLASSTYPE_DECLARED_CLASS:              Classes.            (line    6)
28482 * CLASSTYPE_HAS_MUTABLE:                 Classes.            (line   80)
28483 * CLASSTYPE_NON_POD_P:                   Classes.            (line   85)
28484 * CLEANUP_DECL:                          Function Bodies.    (line    6)
28485 * CLEANUP_EXPR:                          Function Bodies.    (line    6)
28486 * CLEANUP_POINT_EXPR:                    Expression trees.   (line    6)
28487 * CLEANUP_STMT:                          Function Bodies.    (line    6)
28488 * Cleanups:                              Cleanups.           (line    6)
28489 * CLEAR_BY_PIECES_P:                     Costs.              (line  124)
28490 * CLEAR_INSN_CACHE:                      Trampolines.        (line  101)
28491 * CLEAR_RATIO:                           Costs.              (line  115)
28492 * clobber:                               Side Effects.       (line  100)
28493 * clrmemM instruction pattern:           Standard Names.     (line  457)
28494 * clz:                                   Arithmetic.         (line  182)
28495 * CLZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  327)
28496 * clzM2 instruction pattern:             Standard Names.     (line  374)
28497 * cmpM instruction pattern:              Standard Names.     (line  403)
28498 * cmpmemM instruction pattern:           Standard Names.     (line  482)
28499 * cmpstrM instruction pattern:           Standard Names.     (line  470)
28500 * code generation RTL sequences:         Expander Definitions.
28501                                                              (line    6)
28502 * code macros in .md files:              Code Macros.        (line    6)
28503 * code_label:                            Insns.              (line  124)
28504 * code_label and /i:                     Flags.              (line   49)
28505 * code_label and /v:                     Flags.              (line   29)
28506 * CODE_LABEL_NUMBER:                     Insns.              (line  124)
28507 * codes, RTL expression:                 RTL Objects.        (line   47)
28508 * COImode:                               Machine Modes.      (line  116)
28509 * COLLECT2_HOST_INITIALIZATION:          Host Misc.          (line   32)
28510 * COLLECT_EXPORT_LIST:                   Misc.               (line  702)
28511 * COLLECT_SHARED_FINI_FUNC:              Macros for Initialization.
28512                                                              (line   44)
28513 * COLLECT_SHARED_INIT_FUNC:              Macros for Initialization.
28514                                                              (line   33)
28515 * combiner pass:                         Regs and Memory.    (line  148)
28516 * commit_edge_insertions:                Maintaining the CFG.
28517                                                              (line  120)
28518 * compare:                               Arithmetic.         (line   43)
28519 * compare, canonicalization of:          Insn Canonicalizations.
28520                                                              (line   37)
28521 * comparison_operator:                   Machine-Independent Predicates.
28522                                                              (line  111)
28523 * compiler passes and files:             Passes.             (line    6)
28524 * complement, bitwise:                   Arithmetic.         (line  132)
28525 * COMPLEX_CST:                           Expression trees.   (line    6)
28526 * COMPLEX_EXPR:                          Expression trees.   (line    6)
28527 * COMPLEX_TYPE:                          Types.              (line    6)
28528 * COMPONENT_REF:                         Expression trees.   (line    6)
28529 * Compound Expressions:                  Compound Expressions.
28530                                                              (line    6)
28531 * Compound Lvalues:                      Compound Lvalues.   (line    6)
28532 * COMPOUND_EXPR:                         Expression trees.   (line    6)
28533 * COMPOUND_LITERAL_EXPR:                 Expression trees.   (line    6)
28534 * COMPOUND_LITERAL_EXPR_DECL:            Expression trees.   (line  544)
28535 * COMPOUND_LITERAL_EXPR_DECL_STMT:       Expression trees.   (line  544)
28536 * computed jump:                         Edges.              (line  128)
28537 * computing the length of an insn:       Insn Lengths.       (line    6)
28538 * cond:                                  Comparisons.        (line   90)
28539 * cond and attributes:                   Expressions.        (line   37)
28540 * cond_exec:                             Side Effects.       (line  245)
28541 * COND_EXPR:                             Expression trees.   (line    6)
28542 * condition code register:               Regs and Memory.    (line  182)
28543 * condition code status:                 Condition Code.     (line    6)
28544 * condition codes:                       Comparisons.        (line   20)
28545 * conditional execution:                 Conditional Execution.
28546                                                              (line    6)
28547 * Conditional Expressions:               Conditional Expressions.
28548                                                              (line    6)
28549 * CONDITIONAL_REGISTER_USAGE:            Register Basics.    (line   60)
28550 * conditional_trap instruction pattern:  Standard Names.     (line 1063)
28551 * conditions, in patterns:               Patterns.           (line   43)
28552 * configuration file <1>:                Host Misc.          (line    6)
28553 * configuration file:                    Filesystem.         (line    6)
28554 * configure terms:                       Configure Terms.    (line    6)
28555 * CONJ_EXPR:                             Expression trees.   (line    6)
28556 * const and /i:                          Flags.              (line  138)
28557 * CONST0_RTX:                            Constants.          (line   73)
28558 * const0_rtx:                            Constants.          (line   16)
28559 * CONST1_RTX:                            Constants.          (line   73)
28560 * const1_rtx:                            Constants.          (line   16)
28561 * CONST2_RTX:                            Constants.          (line   73)
28562 * const2_rtx:                            Constants.          (line   16)
28563 * CONST_DECL:                            Declarations.       (line    6)
28564 * const_double:                          Constants.          (line   32)
28565 * const_double, RTL sharing:             Sharing.            (line   29)
28566 * CONST_DOUBLE_CHAIN:                    Constants.          (line   51)
28567 * CONST_DOUBLE_LOW:                      Constants.          (line   60)
28568 * CONST_DOUBLE_MEM:                      Constants.          (line   51)
28569 * CONST_DOUBLE_OK_FOR_CONSTRAINT_P:      Register Classes.   (line  445)
28570 * CONST_DOUBLE_OK_FOR_LETTER_P:          Register Classes.   (line  430)
28571 * const_double_operand:                  Machine-Independent Predicates.
28572                                                              (line   21)
28573 * const_int:                             Constants.          (line    8)
28574 * const_int and attribute tests:         Expressions.        (line   47)
28575 * const_int and attributes:              Expressions.        (line   10)
28576 * const_int, RTL sharing:                Sharing.            (line   23)
28577 * const_int_operand:                     Machine-Independent Predicates.
28578                                                              (line   16)
28579 * CONST_OK_FOR_CONSTRAINT_P:             Register Classes.   (line  425)
28580 * CONST_OK_FOR_LETTER_P:                 Register Classes.   (line  416)
28581 * CONST_OR_PURE_CALL_P:                  Flags.              (line   19)
28582 * const_string:                          Constants.          (line   82)
28583 * const_string and attributes:           Expressions.        (line   20)
28584 * const_true_rtx:                        Constants.          (line   26)
28585 * const_vector:                          Constants.          (line   39)
28586 * const_vector, RTL sharing:             Sharing.            (line   32)
28587 * constant attributes:                   Constant Attributes.
28588                                                              (line    6)
28589 * constant definitions:                  Constant Definitions.
28590                                                              (line    6)
28591 * CONSTANT_ADDRESS_P:                    Addressing Modes.   (line   29)
28592 * CONSTANT_ALIGNMENT:                    Storage Layout.     (line  215)
28593 * CONSTANT_P:                            Addressing Modes.   (line   35)
28594 * CONSTANT_POOL_ADDRESS_P:               Flags.              (line   10)
28595 * CONSTANT_POOL_BEFORE_FUNCTION:         Data Output.        (line   64)
28596 * constants in constraints:              Simple Constraints. (line   58)
28597 * constm1_rtx:                           Constants.          (line   16)
28598 * constraint modifier characters:        Modifiers.          (line    6)
28599 * constraint, matching:                  Simple Constraints. (line  130)
28600 * CONSTRAINT_LEN:                        Register Classes.   (line  131)
28601 * constraints:                           Constraints.        (line    6)
28602 * constraints, machine specific:         Machine Constraints.
28603                                                              (line    6)
28604 * CONSTRUCTOR:                           Expression trees.   (line    6)
28605 * constructor:                           Function Basics.    (line    6)
28606 * constructors, automatic calls:         Collect2.           (line   15)
28607 * constructors, output of:               Initialization.     (line    6)
28608 * container:                             Containers.         (line    6)
28609 * CONTINUE_STMT:                         Function Bodies.    (line    6)
28610 * contributors:                          Contributors.       (line    6)
28611 * controlling register usage:            Register Basics.    (line   76)
28612 * controlling the compilation driver:    Driver.             (line    6)
28613 * conventions, run-time:                 Interface.          (line    6)
28614 * conversions:                           Conversions.        (line    6)
28615 * CONVERT_EXPR:                          Expression trees.   (line    6)
28616 * copy constructor:                      Function Basics.    (line    6)
28617 * copy_rtx:                              Addressing Modes.   (line  209)
28618 * copy_rtx_if_shared:                    Sharing.            (line   64)
28619 * cosM2 instruction pattern:             Standard Names.     (line  273)
28620 * costs of instructions:                 Costs.              (line    6)
28621 * CP_INTEGRAL_TYPE:                      Types.              (line   72)
28622 * cp_namespace_decls:                    Namespaces.         (line   44)
28623 * CP_TYPE_CONST_NON_VOLATILE_P:          Types.              (line   45)
28624 * CP_TYPE_CONST_P:                       Types.              (line   36)
28625 * CP_TYPE_QUALS:                         Types.              (line    6)
28626 * CP_TYPE_RESTRICT_P:                    Types.              (line   42)
28627 * CP_TYPE_VOLATILE_P:                    Types.              (line   39)
28628 * CPLUSPLUS_CPP_SPEC:                    Driver.             (line  113)
28629 * CPP_SPEC:                              Driver.             (line  106)
28630 * CQImode:                               Machine Modes.      (line  116)
28631 * cross compilation and floating point:  Floating Point.     (line    6)
28632 * CRT_CALL_STATIC_FUNCTION:              Sections.           (line   74)
28633 * CRTSTUFF_T_CFLAGS:                     Target Fragment.    (line   35)
28634 * CRTSTUFF_T_CFLAGS_S:                   Target Fragment.    (line   39)
28635 * CSImode:                               Machine Modes.      (line  116)
28636 * CTImode:                               Machine Modes.      (line  116)
28637 * ctz:                                   Arithmetic.         (line  190)
28638 * CTZ_DEFINED_VALUE_AT_ZERO:             Misc.               (line  328)
28639 * ctzM2 instruction pattern:             Standard Names.     (line  381)
28640 * CUMULATIVE_ARGS:                       Register Arguments. (line  127)
28641 * current_function_epilogue_delay_list:  Function Entry.     (line  181)
28642 * current_function_is_leaf:              Leaf Functions.     (line   51)
28643 * current_function_outgoing_args_size:   Stack Arguments.    (line   45)
28644 * current_function_pops_args:            Function Entry.     (line  106)
28645 * current_function_pretend_args_size:    Function Entry.     (line  112)
28646 * current_function_uses_only_leaf_regs:  Leaf Functions.     (line   51)
28647 * current_insn_predicate:                Conditional Execution.
28648                                                              (line   26)
28649 * data bypass:                           Processor pipeline description.
28650                                                              (line  106)
28651 * data dependence delays:                Processor pipeline description.
28652                                                              (line    6)
28653 * data structures:                       Per-Function Data.  (line    6)
28654 * DATA_ALIGNMENT:                        Storage Layout.     (line  202)
28655 * data_section:                          Sections.           (line   95)
28656 * DATA_SECTION_ASM_OP:                   Sections.           (line   33)
28657 * DBR_OUTPUT_SEQEND:                     Instruction Output. (line  107)
28658 * dbr_sequence_length:                   Instruction Output. (line  106)
28659 * DBX_BLOCKS_FUNCTION_RELATIVE:          DBX Options.        (line  103)
28660 * DBX_CONTIN_CHAR:                       DBX Options.        (line   66)
28661 * DBX_CONTIN_LENGTH:                     DBX Options.        (line   56)
28662 * DBX_DEBUGGING_INFO:                    DBX Options.        (line    9)
28663 * DBX_FUNCTION_FIRST:                    DBX Options.        (line   97)
28664 * DBX_LINES_FUNCTION_RELATIVE:           DBX Options.        (line  109)
28665 * DBX_NO_XREFS:                          DBX Options.        (line   50)
28666 * DBX_OUTPUT_LBRAC:                      DBX Hooks.          (line    9)
28667 * DBX_OUTPUT_MAIN_SOURCE_FILE_END:       File Names and DBX. (line   34)
28668 * DBX_OUTPUT_MAIN_SOURCE_FILENAME:       File Names and DBX. (line    9)
28669 * DBX_OUTPUT_NFUN:                       DBX Hooks.          (line   18)
28670 * DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX.
28671                                                              (line   42)
28672 * DBX_OUTPUT_RBRAC:                      DBX Hooks.          (line   15)
28673 * DBX_OUTPUT_SOURCE_LINE:                DBX Hooks.          (line   22)
28674 * DBX_REGISTER_NUMBER:                   All Debuggers.      (line    9)
28675 * DBX_REGPARM_STABS_CODE:                DBX Options.        (line   87)
28676 * DBX_REGPARM_STABS_LETTER:              DBX Options.        (line   92)
28677 * DBX_STATIC_CONST_VAR_CODE:             DBX Options.        (line   82)
28678 * DBX_STATIC_STAB_DATA_SECTION:          DBX Options.        (line   73)
28679 * DBX_TYPE_DECL_STABS_CODE:              DBX Options.        (line   78)
28680 * DBX_USE_BINCL:                         DBX Options.        (line  115)
28681 * DCmode:                                Machine Modes.      (line  111)
28682 * De Morgan's law:                       Insn Canonicalizations.
28683                                                              (line   54)
28684 * dead_or_set_p:                         define_peephole.    (line   65)
28685 * DEBUG_SYMS_TEXT:                       DBX Options.        (line   25)
28686 * DEBUGGER_ARG_OFFSET:                   All Debuggers.      (line   37)
28687 * DEBUGGER_AUTO_OFFSET:                  All Debuggers.      (line   28)
28688 * DECL_ALIGN:                            Declarations.       (line    6)
28689 * DECL_ANTICIPATED:                      Function Basics.    (line   48)
28690 * DECL_ARGUMENTS:                        Function Basics.    (line  163)
28691 * DECL_ARRAY_DELETE_OPERATOR_P:          Function Basics.    (line  184)
28692 * DECL_ARTIFICIAL <1>:                   Function Basics.    (line    6)
28693 * DECL_ARTIFICIAL:                       Declarations.       (line   29)
28694 * DECL_ASSEMBLER_NAME:                   Function Basics.    (line    6)
28695 * DECL_ATTRIBUTES:                       Attributes.         (line   22)
28696 * DECL_BASE_CONSTRUCTOR_P:               Function Basics.    (line   94)
28697 * DECL_CLASS_SCOPE_P:                    Declarations.       (line   46)
28698 * DECL_COMPLETE_CONSTRUCTOR_P:           Function Basics.    (line   90)
28699 * DECL_COMPLETE_DESTRUCTOR_P:            Function Basics.    (line  104)
28700 * DECL_CONST_MEMFUNC_P:                  Function Basics.    (line   77)
28701 * DECL_CONSTRUCTOR_P:                    Function Basics.    (line    6)
28702 * DECL_CONTEXT:                          Namespaces.         (line   26)
28703 * DECL_CONV_FN_P:                        Function Basics.    (line    6)
28704 * DECL_COPY_CONSTRUCTOR_P:               Function Basics.    (line   98)
28705 * DECL_DESTRUCTOR_P:                     Function Basics.    (line    6)
28706 * DECL_EXTERN_C_FUNCTION_P:              Function Basics.    (line   52)
28707 * DECL_EXTERNAL <1>:                     Function Basics.    (line   38)
28708 * DECL_EXTERNAL:                         Declarations.       (line    6)
28709 * DECL_FUNCTION_MEMBER_P:                Function Basics.    (line    6)
28710 * DECL_FUNCTION_SCOPE_P:                 Declarations.       (line   49)
28711 * DECL_GLOBAL_CTOR_P:                    Function Basics.    (line    6)
28712 * DECL_GLOBAL_DTOR_P:                    Function Basics.    (line    6)
28713 * DECL_INITIAL:                          Declarations.       (line    6)
28714 * DECL_LINKONCE_P:                       Function Basics.    (line    6)
28715 * DECL_LOCAL_FUNCTION_P:                 Function Basics.    (line   44)
28716 * DECL_MAIN_P:                           Function Basics.    (line    7)
28717 * DECL_NAME <1>:                         Function Basics.    (line    6)
28718 * DECL_NAME <2>:                         Declarations.       (line   12)
28719 * DECL_NAME:                             Namespaces.         (line   15)
28720 * DECL_NAMESPACE_ALIAS:                  Namespaces.         (line   30)
28721 * DECL_NAMESPACE_SCOPE_P:                Declarations.       (line   42)
28722 * DECL_NAMESPACE_STD_P:                  Namespaces.         (line   40)
28723 * DECL_NON_THUNK_FUNCTION_P:             Function Basics.    (line  144)
28724 * DECL_NONCONVERTING_P:                  Function Basics.    (line   86)
28725 * DECL_NONSTATIC_MEMBER_FUNCTION_P:      Function Basics.    (line   74)
28726 * DECL_OVERLOADED_OPERATOR_P:            Function Basics.    (line    6)
28727 * DECL_RESULT:                           Function Basics.    (line  168)
28728 * DECL_SIZE:                             Declarations.       (line    6)
28729 * DECL_STATIC_FUNCTION_P:                Function Basics.    (line   71)
28730 * DECL_STMT:                             Function Bodies.    (line    6)
28731 * DECL_STMT_DECL:                        Function Bodies.    (line    6)
28732 * DECL_THUNK_P:                          Function Basics.    (line  122)
28733 * DECL_VOLATILE_MEMFUNC_P:               Function Basics.    (line   80)
28734 * declaration:                           Declarations.       (line    6)
28735 * declarations, RTL:                     RTL Declarations.   (line    6)
28736 * DECLARE_LIBRARY_RENAMES:               Library Calls.      (line    9)
28737 * decrement_and_branch_until_zero instruction pattern: Standard Names.
28738                                                              (line  804)
28739 * default:                               GTY Options.        (line   82)
28740 * default_file_start:                    File Framework.     (line    9)
28741 * DEFAULT_GDB_EXTENSIONS:                DBX Options.        (line   18)
28742 * DEFAULT_PCC_STRUCT_RETURN:             Aggregate Return.   (line   34)
28743 * DEFAULT_SIGNED_CHAR:                   Type Layout.        (line  102)
28744 * define_asm_attributes:                 Tagging Insns.      (line   73)
28745 * define_attr:                           Defining Attributes.
28746                                                              (line    6)
28747 * define_automaton:                      Processor pipeline description.
28748                                                              (line   53)
28749 * define_bypass:                         Processor pipeline description.
28750                                                              (line  197)
28751 * define_code_attr:                      Code Macros.        (line    6)
28752 * define_code_macro:                     Code Macros.        (line    6)
28753 * define_cond_exec:                      Conditional Execution.
28754                                                              (line   13)
28755 * define_constants:                      Constant Definitions.
28756                                                              (line    6)
28757 * define_cpu_unit:                       Processor pipeline description.
28758                                                              (line   68)
28759 * define_delay:                          Delay Slots.        (line   25)
28760 * define_expand:                         Expander Definitions.
28761                                                              (line   11)
28762 * define_insn:                           Patterns.           (line    6)
28763 * define_insn example:                   Example.            (line    6)
28764 * define_insn_and_split:                 Insn Splitting.     (line  170)
28765 * define_insn_reservation:               Processor pipeline description.
28766                                                              (line  106)
28767 * define_mode_attr:                      String Substitutions.
28768                                                              (line    6)
28769 * define_mode_macro:                     Defining Mode Macros.
28770                                                              (line    6)
28771 * define_peephole:                       define_peephole.    (line    6)
28772 * define_peephole2:                      define_peephole2.   (line    6)
28773 * define_predicate:                      Defining Predicates.
28774                                                              (line    6)
28775 * define_query_cpu_unit:                 Processor pipeline description.
28776                                                              (line   90)
28777 * define_reservation:                    Processor pipeline description.
28778                                                              (line  186)
28779 * define_special_predicate:              Defining Predicates.
28780                                                              (line    6)
28781 * define_split:                          Insn Splitting.     (line   32)
28782 * defining attributes and their values:  Defining Attributes.
28783                                                              (line    6)
28784 * defining jump instruction patterns:    Jump Patterns.      (line    6)
28785 * defining looping instruction patterns: Looping Patterns.   (line    6)
28786 * defining peephole optimizers:          Peephole Definitions.
28787                                                              (line    6)
28788 * defining predicates:                   Defining Predicates.
28789                                                              (line    6)
28790 * defining RTL sequences for code generation: Expander Definitions.
28791                                                              (line    6)
28792 * delay slots, defining:                 Delay Slots.        (line    6)
28793 * DELAY_SLOTS_FOR_EPILOGUE:              Function Entry.     (line  163)
28794 * deletable:                             GTY Options.        (line  150)
28795 * DELETE_IF_ORDINARY:                    Filesystem.         (line   79)
28796 * Dependent Patterns:                    Dependent Patterns. (line    6)
28797 * desc:                                  GTY Options.        (line   82)
28798 * destructor:                            Function Basics.    (line    6)
28799 * destructors, output of:                Initialization.     (line    6)
28800 * deterministic finite state automaton:  Processor pipeline description.
28801                                                              (line    6)
28802 * DFmode:                                Machine Modes.      (line   73)
28803 * digits in constraint:                  Simple Constraints. (line  118)
28804 * DImode:                                Machine Modes.      (line   45)
28805 * DIR_SEPARATOR:                         Filesystem.         (line   18)
28806 * DIR_SEPARATOR_2:                       Filesystem.         (line   19)
28807 * directory options .md:                 Including Patterns. (line   44)
28808 * disabling certain registers:           Register Basics.    (line   76)
28809 * dispatch table:                        Dispatch Tables.    (line    8)
28810 * div:                                   Arithmetic.         (line  100)
28811 * div and attributes:                    Expressions.        (line   64)
28812 * division:                              Arithmetic.         (line  100)
28813 * divM3 instruction pattern:             Standard Names.     (line  193)
28814 * divmodM4 instruction pattern:          Standard Names.     (line  225)
28815 * DO_BODY:                               Function Bodies.    (line    6)
28816 * DO_COND:                               Function Bodies.    (line    6)
28817 * DO_STMT:                               Function Bodies.    (line    6)
28818 * DOLLARS_IN_IDENTIFIERS:                Misc.               (line  487)
28819 * doloop_begin instruction pattern:      Standard Names.     (line  835)
28820 * doloop_end instruction pattern:        Standard Names.     (line  814)
28821 * DONE:                                  Expander Definitions.
28822                                                              (line   74)
28823 * DOUBLE_TYPE_SIZE:                      Type Layout.        (line   53)
28824 * driver:                                Driver.             (line    6)
28825 * DRIVER_SELF_SPECS:                     Driver.             (line   71)
28826 * DUMPFILE_FORMAT:                       Filesystem.         (line   67)
28827 * DWARF2_ASM_LINE_DEBUG_INFO:            SDB and DWARF.      (line   36)
28828 * DWARF2_DEBUGGING_INFO:                 SDB and DWARF.      (line   13)
28829 * DWARF2_FRAME_INFO:                     SDB and DWARF.      (line   30)
28830 * DWARF2_FRAME_REG_OUT:                  Frame Registers.    (line  133)
28831 * DWARF2_UNWIND_INFO:                    Exception Region Output.
28832                                                              (line   40)
28833 * DWARF_ALT_FRAME_RETURN_COLUMN:         Frame Layout.       (line  145)
28834 * DWARF_CIE_DATA_ALIGNMENT:              Exception Region Output.
28835                                                              (line   65)
28836 * DWARF_FRAME_REGISTERS:                 Frame Registers.    (line   93)
28837 * DWARF_FRAME_REGNUM:                    Frame Registers.    (line  125)
28838 * DWARF_REG_TO_UNWIND_COLUMN:            Frame Registers.    (line  117)
28839 * DWARF_ZERO_REG:                        Frame Layout.       (line  152)
28840 * DYNAMIC_CHAIN_ADDRESS:                 Frame Layout.       (line   93)
28841 * E in constraint:                       Simple Constraints. (line   77)
28842 * earlyclobber operand:                  Modifiers.          (line   25)
28843 * edge:                                  Edges.              (line    6)
28844 * edge in the flow graph:                Edges.              (line    6)
28845 * edge iterators:                        Edges.              (line   15)
28846 * edge splitting:                        Maintaining the CFG.
28847                                                              (line  120)
28848 * EDGE_ABNORMAL:                         Edges.              (line  128)
28849 * EDGE_ABNORMAL, EDGE_ABNORMAL_CALL:     Edges.              (line  171)
28850 * EDGE_ABNORMAL, EDGE_EH:                Edges.              (line   96)
28851 * EDGE_ABNORMAL, EDGE_SIBCALL:           Edges.              (line  122)
28852 * EDGE_FALLTHRU, force_nonfallthru:      Edges.              (line   86)
28853 * EDOM, implicit usage:                  Library Calls.      (line   58)
28854 * EH_FRAME_IN_DATA_SECTION:              Exception Region Output.
28855                                                              (line   20)
28856 * EH_FRAME_SECTION_NAME:                 Exception Region Output.
28857                                                              (line   10)
28858 * eh_return instruction pattern:         Standard Names.     (line 1003)
28859 * EH_RETURN_DATA_REGNO:                  Exception Handling. (line    7)
28860 * EH_RETURN_HANDLER_RTX:                 Exception Handling. (line   39)
28861 * EH_RETURN_STACKADJ_RTX:                Exception Handling. (line   22)
28862 * EH_TABLES_CAN_BE_READ_ONLY:            Exception Region Output.
28863                                                              (line   29)
28864 * EH_USES:                               Function Entry.     (line  158)
28865 * ei_edge:                               Edges.              (line   43)
28866 * ei_end_p:                              Edges.              (line   27)
28867 * ei_last:                               Edges.              (line   23)
28868 * ei_next:                               Edges.              (line   35)
28869 * ei_one_before_end_p:                   Edges.              (line   31)
28870 * ei_prev:                               Edges.              (line   39)
28871 * ei_safe_safe:                          Edges.              (line   47)
28872 * ei_start:                              Edges.              (line   19)
28873 * ELIGIBLE_FOR_EPILOGUE_DELAY:           Function Entry.     (line  169)
28874 * ELIMINABLE_REGS:                       Elimination.        (line   44)
28875 * ELSE_CLAUSE:                           Function Bodies.    (line    6)
28876 * EMIT_MODE_SET:                         Mode Switching.     (line   74)
28877 * Empty Statements:                      Empty Statements.   (line    6)
28878 * EMPTY_CLASS_EXPR:                      Function Bodies.    (line    6)
28879 * EMPTY_FIELD_BOUNDARY:                  Storage Layout.     (line  239)
28880 * ENABLE_EXECUTE_STACK:                  Trampolines.        (line  111)
28881 * ENDFILE_SPEC:                          Driver.             (line  218)
28882 * endianness:                            Portability.        (line   21)
28883 * ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR:       Basic Blocks.       (line   28)
28884 * enum machine_mode:                     Machine Modes.      (line    6)
28885 * enum reg_class:                        Register Classes.   (line   65)
28886 * ENUMERAL_TYPE:                         Types.              (line    6)
28887 * epilogue:                              Function Entry.     (line    6)
28888 * epilogue instruction pattern:          Standard Names.     (line 1035)
28889 * EPILOGUE_USES:                         Function Entry.     (line  152)
28890 * eq:                                    Comparisons.        (line   52)
28891 * eq and attributes:                     Expressions.        (line   64)
28892 * eq_attr:                               Expressions.        (line   85)
28893 * EQ_EXPR:                               Expression trees.   (line    6)
28894 * equal:                                 Comparisons.        (line   52)
28895 * errno, implicit usage:                 Library Calls.      (line   70)
28896 * EXACT_DIV_EXPR:                        Expression trees.   (line    6)
28897 * examining SSA_NAMEs:                   SSA.                (line   90)
28898 * exception handling <1>:                Exception Handling. (line    6)
28899 * exception handling:                    Edges.              (line   96)
28900 * exception_receiver instruction pattern: Standard Names.    (line  967)
28901 * exclamation point:                     Multi-Alternative.  (line   47)
28902 * exclusion_set:                         Processor pipeline description.
28903                                                              (line  215)
28904 * exclusive-or, bitwise:                 Arithmetic.         (line  146)
28905 * EXIT_EXPR:                             Expression trees.   (line    6)
28906 * EXIT_IGNORE_STACK:                     Function Entry.     (line  140)
28907 * expander definitions:                  Expander Definitions.
28908                                                              (line    6)
28909 * expM2 instruction pattern:             Standard Names.     (line  289)
28910 * expr_list:                             Insns.              (line  543)
28911 * EXPR_STMT:                             Function Bodies.    (line    6)
28912 * EXPR_STMT_EXPR:                        Function Bodies.    (line    6)
28913 * expression:                            Expression trees.   (line    6)
28914 * expression codes:                      RTL Objects.        (line   47)
28915 * extendMN2 instruction pattern:         Standard Names.     (line  539)
28916 * extensible constraints:                Simple Constraints. (line  161)
28917 * EXTRA_ADDRESS_CONSTRAINT:              Register Classes.   (line  499)
28918 * EXTRA_CONSTRAINT:                      Register Classes.   (line  450)
28919 * EXTRA_CONSTRAINT_STR:                  Register Classes.   (line  471)
28920 * EXTRA_MEMORY_CONSTRAINT:               Register Classes.   (line  476)
28921 * EXTRA_SECTION_FUNCTIONS:               Sections.           (line   96)
28922 * EXTRA_SECTIONS:                        Sections.           (line   91)
28923 * EXTRA_SPECS:                           Driver.             (line  245)
28924 * extv instruction pattern:              Standard Names.     (line  548)
28925 * extzv instruction pattern:             Standard Names.     (line  562)
28926 * F in constraint:                       Simple Constraints. (line   82)
28927 * FAIL:                                  Expander Definitions.
28928                                                              (line   80)
28929 * fall-thru:                             Edges.              (line   69)
28930 * FATAL_EXIT_CODE:                       Host Misc.          (line    6)
28931 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
28932                                                              (line    6)
28933 * features, optional, in system conventions: Run-time Target.
28934                                                              (line   54)
28935 * ffs:                                   Arithmetic.         (line  176)
28936 * ffsM2 instruction pattern:             Standard Names.     (line  364)
28937 * FIELD_DECL:                            Declarations.       (line    6)
28938 * file_end_indicate_exec_stack:          File Framework.     (line   41)
28939 * files and passes of the compiler:      Passes.             (line    6)
28940 * files, generated:                      Files.              (line    6)
28941 * final_absence_set:                     Processor pipeline description.
28942                                                              (line  215)
28943 * FINAL_PRESCAN_INSN:                    Instruction Output. (line   46)
28944 * final_presence_set:                    Processor pipeline description.
28945                                                              (line  215)
28946 * final_scan_insn:                       Function Entry.     (line  181)
28947 * final_sequence:                        Instruction Output. (line  117)
28948 * FINALIZE_PIC:                          PIC.                (line   31)
28949 * FIND_BASE_TERM:                        Addressing Modes.   (line  139)
28950 * find_sub_basic_blocks, split_block:    Maintaining the CFG.
28951                                                              (line  110)
28952 * FINI_SECTION_ASM_OP:                   Sections.           (line   68)
28953 * finite state automaton minimization:   Processor pipeline description.
28954                                                              (line  296)
28955 * FIRST_PARM_OFFSET:                     Frame Layout.       (line   67)
28956 * FIRST_PARM_OFFSET and virtual registers: Regs and Memory.  (line   65)
28957 * FIRST_PSEUDO_REGISTER:                 Register Basics.    (line    9)
28958 * FIRST_STACK_REG:                       Stack Registers.    (line   23)
28959 * FIRST_VIRTUAL_REGISTER:                Regs and Memory.    (line   51)
28960 * fix:                                   Conversions.        (line   66)
28961 * FIX_TRUNC_EXPR:                        Expression trees.   (line    6)
28962 * fix_truncMN2 instruction pattern:      Standard Names.     (line  526)
28963 * fixed register:                        Register Basics.    (line   15)
28964 * FIXED_REGISTERS:                       Register Basics.    (line   15)
28965 * fixed_regs:                            Register Basics.    (line   59)
28966 * fixMN2 instruction pattern:            Standard Names.     (line  506)
28967 * FIXUNS_TRUNC_LIKE_FIX_TRUNC:           Misc.               (line  144)
28968 * fixuns_truncMN2 instruction pattern:   Standard Names.     (line  530)
28969 * fixunsMN2 instruction pattern:         Standard Names.     (line  515)
28970 * flags in RTL expression:               Flags.              (line    6)
28971 * float:                                 Conversions.        (line   58)
28972 * FLOAT_EXPR:                            Expression trees.   (line    6)
28973 * float_extend:                          Conversions.        (line   33)
28974 * FLOAT_LIB_COMPARE_RETURNS_BOOL:        Library Calls.      (line   25)
28975 * FLOAT_STORE_FLAG_VALUE:                Misc.               (line  309)
28976 * float_truncate:                        Conversions.        (line   53)
28977 * FLOAT_TYPE_SIZE:                       Type Layout.        (line   49)
28978 * FLOAT_WORDS_BIG_ENDIAN:                Storage Layout.     (line   43)
28979 * FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory.
28980                                                              (line  140)
28981 * floating point and cross compilation:  Floating Point.     (line    6)
28982 * Floating Point Emulation:              Target Fragment.    (line   15)
28983 * floating point emulation library, US Software GOFAST: Library Calls.
28984                                                              (line   44)
28985 * floatMN2 instruction pattern:          Standard Names.     (line  498)
28986 * floatunsMN2 instruction pattern:       Standard Names.     (line  502)
28987 * FLOOR_DIV_EXPR:                        Expression trees.   (line    6)
28988 * FLOOR_MOD_EXPR:                        Expression trees.   (line    6)
28989 * floorM2 instruction pattern:           Standard Names.     (line  324)
28990 * flow-insensitive alias analysis:       Alias analysis.     (line    6)
28991 * flow-sensitive alias analysis:         Alias analysis.     (line    6)
28992 * FOR_BODY:                              Function Bodies.    (line    6)
28993 * FOR_COND:                              Function Bodies.    (line    6)
28994 * FOR_EXPR:                              Function Bodies.    (line    6)
28995 * FOR_INIT_STMT:                         Function Bodies.    (line    6)
28996 * FOR_STMT:                              Function Bodies.    (line    6)
28997 * FORCE_CODE_SECTION_ALIGN:              Sections.           (line   85)
28998 * FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN: Storage Layout.    (line  157)
28999 * force_reg:                             Standard Names.     (line   36)
29000 * frame layout:                          Frame Layout.       (line    6)
29001 * FRAME_GROWS_DOWNWARD:                  Frame Layout.       (line   31)
29002 * FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory.
29003                                                              (line   69)
29004 * frame_pointer_needed:                  Function Entry.     (line   34)
29005 * FRAME_POINTER_REGNUM:                  Frame Registers.    (line   14)
29006 * FRAME_POINTER_REGNUM and virtual registers: Regs and Memory.
29007                                                              (line   74)
29008 * FRAME_POINTER_REQUIRED:                Elimination.        (line    9)
29009 * frame_pointer_rtx:                     Frame Registers.    (line   85)
29010 * frame_related:                         Flags.              (line  229)
29011 * frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags.
29012                                                              (line  111)
29013 * frame_related, in mem:                 Flags.              (line   75)
29014 * frame_related, in reg:                 Flags.              (line   98)
29015 * frame_related, in symbol_ref:          Flags.              (line  173)
29016 * frequency, count, BB_FREQ_BASE:        Profile information.
29017                                                              (line   30)
29018 * ftruncM2 instruction pattern:          Standard Names.     (line  521)
29019 * function:                              Functions.          (line    6)
29020 * function body:                         Function Bodies.    (line    6)
29021 * function call conventions:             Interface.          (line    6)
29022 * function entry and exit:               Function Entry.     (line    6)
29023 * function entry point, alternate function entry point: Edges.
29024                                                              (line  180)
29025 * function-call insns:                   Calls.              (line    6)
29026 * FUNCTION_ARG:                          Register Arguments. (line   11)
29027 * FUNCTION_ARG_ADVANCE:                  Register Arguments. (line  178)
29028 * FUNCTION_ARG_BOUNDARY:                 Register Arguments. (line  224)
29029 * FUNCTION_ARG_PADDING:                  Register Arguments. (line  189)
29030 * FUNCTION_ARG_REGNO_P:                  Register Arguments. (line  229)
29031 * FUNCTION_BOUNDARY:                     Storage Layout.     (line  167)
29032 * FUNCTION_DECL:                         Functions.          (line    6)
29033 * FUNCTION_INCOMING_ARG:                 Register Arguments. (line   68)
29034 * FUNCTION_MODE:                         Misc.               (line  357)
29035 * FUNCTION_OUTGOING_VALUE:               Scalar Return.      (line   36)
29036 * FUNCTION_PROFILER:                     Profiling.          (line    9)
29037 * FUNCTION_TYPE:                         Types.              (line    6)
29038 * FUNCTION_VALUE:                        Scalar Return.      (line   10)
29039 * FUNCTION_VALUE_REGNO_P:                Scalar Return.      (line   70)
29040 * functions, leaf:                       Leaf Functions.     (line    6)
29041 * fundamental type:                      Types.              (line    6)
29042 * g in constraint:                       Simple Constraints. (line  108)
29043 * G in constraint:                       Simple Constraints. (line   86)
29044 * GCC and portability:                   Portability.        (line    6)
29045 * GCC_DRIVER_HOST_INITIALIZATION:        Host Misc.          (line   36)
29046 * gcov_type:                             Profile information.
29047                                                              (line   41)
29048 * ge:                                    Comparisons.        (line   72)
29049 * ge and attributes:                     Expressions.        (line   64)
29050 * GE_EXPR:                               Expression trees.   (line    6)
29051 * GEN_ERRNO_RTX:                         Library Calls.      (line   71)
29052 * gencodes:                              RTL passes.         (line   18)
29053 * general_operand:                       Machine-Independent Predicates.
29054                                                              (line  105)
29055 * GENERAL_REGS:                          Register Classes.   (line   23)
29056 * generated files:                       Files.              (line    6)
29057 * generating assembler output:           Output Statement.   (line    6)
29058 * generating insns:                      RTL Template.       (line    6)
29059 * GENERIC <1>:                           GENERIC.            (line    6)
29060 * GENERIC <2>:                           Gimplification pass.
29061                                                              (line   12)
29062 * GENERIC:                               Parsing pass.       (line    6)
29063 * generic predicates:                    Machine-Independent Predicates.
29064                                                              (line    6)
29065 * genflags:                              RTL passes.         (line   18)
29066 * get_attr:                              Expressions.        (line   80)
29067 * get_attr_length:                       Insn Lengths.       (line   46)
29068 * GET_CLASS_NARROWEST_MODE:              Machine Modes.      (line  219)
29069 * GET_CODE:                              RTL Objects.        (line   47)
29070 * get_frame_size:                        Elimination.        (line   31)
29071 * get_insns:                             Insns.              (line   34)
29072 * get_last_insn:                         Insns.              (line   34)
29073 * GET_MODE:                              Machine Modes.      (line  174)
29074 * GET_MODE_ALIGNMENT:                    Machine Modes.      (line  206)
29075 * GET_MODE_BITSIZE:                      Machine Modes.      (line  198)
29076 * GET_MODE_CLASS:                        Machine Modes.      (line  188)
29077 * GET_MODE_MASK:                         Machine Modes.      (line  201)
29078 * GET_MODE_NAME:                         Machine Modes.      (line  185)
29079 * GET_MODE_NUNITS:                       Machine Modes.      (line  215)
29080 * GET_MODE_SIZE:                         Machine Modes.      (line  195)
29081 * GET_MODE_UNIT_SIZE:                    Machine Modes.      (line  209)
29082 * GET_MODE_WIDER_MODE:                   Machine Modes.      (line  191)
29083 * GET_RTX_CLASS:                         RTL Classes.        (line    6)
29084 * GET_RTX_FORMAT:                        RTL Classes.        (line  130)
29085 * GET_RTX_LENGTH:                        RTL Classes.        (line  127)
29086 * get_stmt_operands:                     Statement Operands. (line    6)
29087 * geu:                                   Comparisons.        (line   72)
29088 * geu and attributes:                    Expressions.        (line   64)
29089 * GGC:                                   Type Information.   (line    6)
29090 * GIMPLE <1>:                            GIMPLE.             (line    6)
29091 * GIMPLE <2>:                            Gimplification pass.
29092                                                              (line    6)
29093 * GIMPLE:                                Parsing pass.       (line   14)
29094 * GIMPLE Example:                        GIMPLE Example.     (line    6)
29095 * GIMPLE Exception Handling:             GIMPLE Exception Handling.
29096                                                              (line    6)
29097 * GIMPLE Expressions:                    GIMPLE Expressions. (line    6)
29098 * gimplification <1>:                    Interfaces.         (line    6)
29099 * gimplification <2>:                    Gimplification pass.
29100                                                              (line    6)
29101 * gimplification:                        Parsing pass.       (line   14)
29102 * gimplifier:                            Parsing pass.       (line   14)
29103 * gimplify_expr:                         Gimplification pass.
29104                                                              (line   18)
29105 * gimplify_function_tree:                Gimplification pass.
29106                                                              (line   18)
29107 * GLOBAL_INIT_PRIORITY:                  Function Basics.    (line    6)
29108 * global_live_at_start, global_live_at_end: Liveness information.
29109                                                              (line   22)
29110 * global_regs:                           Register Basics.    (line   59)
29111 * GO_IF_LEGITIMATE_ADDRESS:              Addressing Modes.   (line   48)
29112 * GO_IF_MODE_DEPENDENT_ADDRESS:          Addressing Modes.   (line  217)
29113 * GOFAST, floating point emulation library: Library Calls.   (line   44)
29114 * gofast_maybe_init_libfuncs:            Library Calls.      (line   44)
29115 * greater than:                          Comparisons.        (line   60)
29116 * gt:                                    Comparisons.        (line   60)
29117 * gt and attributes:                     Expressions.        (line   64)
29118 * GT_EXPR:                               Expression trees.   (line    6)
29119 * gtu:                                   Comparisons.        (line   64)
29120 * gtu and attributes:                    Expressions.        (line   64)
29121 * GTY:                                   Type Information.   (line    6)
29122 * H in constraint:                       Simple Constraints. (line   86)
29123 * HANDLE_PRAGMA_PACK_PUSH_POP:           Misc.               (line  466)
29124 * HANDLE_PRAGMA_PACK_WITH_EXPANSION:     Misc.               (line  477)
29125 * HANDLE_SYSV_PRAGMA:                    Misc.               (line  437)
29126 * HANDLER:                               Function Bodies.    (line    6)
29127 * HANDLER_BODY:                          Function Bodies.    (line    6)
29128 * HANDLER_PARMS:                         Function Bodies.    (line    6)
29129 * hard registers:                        Regs and Memory.    (line    9)
29130 * HARD_FRAME_POINTER_REGNUM:             Frame Registers.    (line   20)
29131 * HARD_REGNO_CALL_PART_CLOBBERED:        Register Basics.    (line   53)
29132 * HARD_REGNO_CALLER_SAVE_MODE:           Caller Saves.       (line   20)
29133 * HARD_REGNO_MODE_OK:                    Values in Registers.
29134                                                              (line   31)
29135 * HARD_REGNO_NREGS:                      Values in Registers.
29136                                                              (line   11)
29137 * HARD_REGNO_RENAME_OK:                  Values in Registers.
29138                                                              (line   92)
29139 * HAS_INIT_SECTION:                      Macros for Initialization.
29140                                                              (line   19)
29141 * HAS_LONG_COND_BRANCH:                  Misc.               (line   53)
29142 * HAS_LONG_UNCOND_BRANCH:                Misc.               (line   62)
29143 * HAVE_DOS_BASED_FILE_SYSTEM:            Filesystem.         (line   11)
29144 * HAVE_POST_DECREMENT:                   Addressing Modes.   (line   12)
29145 * HAVE_POST_INCREMENT:                   Addressing Modes.   (line   11)
29146 * HAVE_POST_MODIFY_DISP:                 Addressing Modes.   (line   18)
29147 * HAVE_POST_MODIFY_REG:                  Addressing Modes.   (line   24)
29148 * HAVE_PRE_DECREMENT:                    Addressing Modes.   (line   10)
29149 * HAVE_PRE_INCREMENT:                    Addressing Modes.   (line    9)
29150 * HAVE_PRE_MODIFY_DISP:                  Addressing Modes.   (line   17)
29151 * HAVE_PRE_MODIFY_REG:                   Addressing Modes.   (line   23)
29152 * HCmode:                                Machine Modes.      (line  111)
29153 * HFmode:                                Machine Modes.      (line   58)
29154 * high:                                  Constants.          (line  117)
29155 * HImode:                                Machine Modes.      (line   29)
29156 * HImode, in insn:                       Insns.              (line  244)
29157 * host configuration:                    Host Config.        (line    6)
29158 * host functions:                        Host Common.        (line    6)
29159 * host hooks:                            Host Common.        (line    6)
29160 * host makefile fragment:                Host Fragment.      (line    6)
29161 * HOST_BIT_BUCKET:                       Filesystem.         (line   51)
29162 * HOST_EXECUTABLE_SUFFIX:                Filesystem.         (line   45)
29163 * HOST_HOOKS_EXTRA_SIGNALS:              Host Common.        (line   12)
29164 * HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY:   Host Common.        (line   45)
29165 * HOST_HOOKS_GT_PCH_USE_ADDRESS:         Host Common.        (line   26)
29166 * HOST_LACKS_INODE_NUMBERS:              Filesystem.         (line   89)
29167 * HOST_LONG_LONG_FORMAT:                 Host Misc.          (line   46)
29168 * HOST_OBJECT_SUFFIX:                    Filesystem.         (line   40)
29169 * HOT_TEXT_SECTION_NAME:                 Sections.           (line   23)
29170 * I in constraint:                       Simple Constraints. (line   69)
29171 * i in constraint:                       Simple Constraints. (line   58)
29172 * IBM_FLOAT_FORMAT:                      Storage Layout.     (line  399)
29173 * identifier:                            Identifiers.        (line    6)
29174 * IDENTIFIER_LENGTH:                     Identifiers.        (line   20)
29175 * IDENTIFIER_NODE:                       Identifiers.        (line    6)
29176 * IDENTIFIER_OPNAME_P:                   Identifiers.        (line   25)
29177 * IDENTIFIER_POINTER:                    Identifiers.        (line   15)
29178 * IDENTIFIER_TYPENAME_P:                 Identifiers.        (line   31)
29179 * IEEE_FLOAT_FORMAT:                     Storage Layout.     (line  389)
29180 * IF_COND:                               Function Bodies.    (line    6)
29181 * if_marked:                             GTY Options.        (line  156)
29182 * IF_STMT:                               Function Bodies.    (line    6)
29183 * if_then_else:                          Comparisons.        (line   80)
29184 * if_then_else and attributes:           Expressions.        (line   32)
29185 * if_then_else usage:                    Side Effects.       (line   56)
29186 * IFCVT_EXTRA_FIELDS:                    Misc.               (line  612)
29187 * IFCVT_INIT_EXTRA_FIELDS:               Misc.               (line  607)
29188 * IFCVT_MODIFY_CANCEL:                   Misc.               (line  601)
29189 * IFCVT_MODIFY_FINAL:                    Misc.               (line  595)
29190 * IFCVT_MODIFY_INSN:                     Misc.               (line  589)
29191 * IFCVT_MODIFY_MULTIPLE_TESTS:           Misc.               (line  582)
29192 * IFCVT_MODIFY_TESTS:                    Misc.               (line  571)
29193 * IMAGPART_EXPR:                         Expression trees.   (line    6)
29194 * immediate_operand:                     Machine-Independent Predicates.
29195                                                              (line   11)
29196 * IMMEDIATE_PREFIX:                      Instruction Output. (line  127)
29197 * in_data:                               Sections.           (line   90)
29198 * in_struct:                             Flags.              (line  244)
29199 * in_struct, in code_label and note:     Flags.              (line   49)
29200 * in_struct, in insn and jump_insn and call_insn: Flags.     (line   34)
29201 * in_struct, in insn, jump_insn and call_insn: Flags.        (line  156)
29202 * in_struct, in label_ref:               Flags.              (line   44)
29203 * in_struct, in mem:                     Flags.              (line   60)
29204 * in_struct, in subreg:                  Flags.              (line  195)
29205 * in_text:                               Sections.           (line   90)
29206 * include:                               Including Patterns. (line    6)
29207 * INCLUDE_DEFAULTS:                      Driver.             (line  430)
29208 * inclusive-or, bitwise:                 Arithmetic.         (line  141)
29209 * INCOMING_FRAME_SP_OFFSET:              Frame Layout.       (line  172)
29210 * INCOMING_REGNO:                        Register Basics.    (line   91)
29211 * INCOMING_RETURN_ADDR_RTX:              Frame Layout.       (line  132)
29212 * INDEX_REG_CLASS:                       Register Classes.   (line  125)
29213 * indirect_jump instruction pattern:     Standard Names.     (line  762)
29214 * indirect_operand:                      Machine-Independent Predicates.
29215                                                              (line   71)
29216 * INDIRECT_REF:                          Expression trees.   (line    6)
29217 * INIT_CUMULATIVE_ARGS:                  Register Arguments. (line  141)
29218 * INIT_CUMULATIVE_INCOMING_ARGS:         Register Arguments. (line  169)
29219 * INIT_CUMULATIVE_LIBCALL_ARGS:          Register Arguments. (line  162)
29220 * INIT_ENVIRONMENT:                      Driver.             (line  369)
29221 * INIT_EXPANDERS:                        Per-Function Data.  (line   39)
29222 * INIT_EXPR:                             Expression trees.   (line    6)
29223 * init_machine_status:                   Per-Function Data.  (line   45)
29224 * init_one_libfunc:                      Library Calls.      (line   15)
29225 * INIT_SECTION_ASM_OP <1>:               Macros for Initialization.
29226                                                              (line   10)
29227 * INIT_SECTION_ASM_OP:                   Sections.           (line   62)
29228 * INITIAL_ELIMINATION_OFFSET:            Elimination.        (line   79)
29229 * INITIAL_FRAME_ADDRESS_RTX:             Frame Layout.       (line   83)
29230 * INITIAL_FRAME_POINTER_OFFSET:          Elimination.        (line   32)
29231 * initialization routines:               Initialization.     (line    6)
29232 * INITIALIZE_TRAMPOLINE:                 Trampolines.        (line   56)
29233 * inlining:                              Target Attributes.  (line   81)
29234 * insert_insn_on_edge:                   Maintaining the CFG.
29235                                                              (line  120)
29236 * insn:                                  Insns.              (line   63)
29237 * insn and /f:                           Flags.              (line  111)
29238 * insn and /i:                           Flags.              (line  138)
29239 * insn and /j:                           Flags.              (line  165)
29240 * insn and /s:                           Flags.              (line   34)
29241 * insn and /u:                           Flags.              (line   24)
29242 * insn and /v:                           Flags.              (line   29)
29243 * insn attributes:                       Insn Attributes.    (line    6)
29244 * insn canonicalization:                 Insn Canonicalizations.
29245                                                              (line    6)
29246 * insn includes:                         Including Patterns. (line    6)
29247 * insn lengths, computing:               Insn Lengths.       (line    6)
29248 * insn splitting:                        Insn Splitting.     (line    6)
29249 * insn-attr.h:                           Defining Attributes.
29250                                                              (line   24)
29251 * INSN_ANNULLED_BRANCH_P:                Flags.              (line   24)
29252 * INSN_CODE:                             Insns.              (line  270)
29253 * INSN_DELETED_P:                        Flags.              (line   29)
29254 * INSN_FROM_TARGET_P:                    Flags.              (line   34)
29255 * insn_list:                             Insns.              (line  543)
29256 * insn_list and /i:                      Flags.              (line  138)
29257 * INSN_REFERENCES_ARE_DELAYED:           Misc.               (line  516)
29258 * INSN_SETS_ARE_DELAYED:                 Misc.               (line  505)
29259 * INSN_UID:                              Insns.              (line   23)
29260 * insns:                                 Insns.              (line    6)
29261 * insns, generating:                     RTL Template.       (line    6)
29262 * insns, recognizing:                    RTL Template.       (line    6)
29263 * instruction attributes:                Insn Attributes.    (line    6)
29264 * instruction latency time:              Processor pipeline description.
29265                                                              (line    6)
29266 * instruction patterns:                  Patterns.           (line    6)
29267 * instruction splitting:                 Insn Splitting.     (line    6)
29268 * insv instruction pattern:              Standard Names.     (line  565)
29269 * INT_TYPE_SIZE:                         Type Layout.        (line   12)
29270 * INTEGER_CST:                           Expression trees.   (line    6)
29271 * INTEGER_TYPE:                          Types.              (line    6)
29272 * integrated:                            Flags.              (line  280)
29273 * integrated, in insn, call_insn, jump_insn, barrier, code_label, insn_list, const, and note: Flags.
29274                                                              (line  138)
29275 * integrated, in reg:                    Flags.              (line   93)
29276 * integrated, in symbol_ref:             Flags.              (line  210)
29277 * Interdependence of Patterns:           Dependent Patterns. (line    6)
29278 * interfacing to GCC output:             Interface.          (line    6)
29279 * interlock delays:                      Processor pipeline description.
29280                                                              (line    6)
29281 * intermediate representation lowering:  Parsing pass.       (line   14)
29282 * INTMAX_TYPE:                           Type Layout.        (line  161)
29283 * introduction:                          Top.                (line    6)
29284 * INVOKE__main:                          Macros for Initialization.
29285                                                              (line   51)
29286 * ior:                                   Arithmetic.         (line  141)
29287 * ior and attributes:                    Expressions.        (line   50)
29288 * ior, canonicalization of:              Insn Canonicalizations.
29289                                                              (line   54)
29290 * iorM3 instruction pattern:             Standard Names.     (line  193)
29291 * IS_ASM_LOGICAL_LINE_SEPARATOR:         Data Output.        (line  120)
29292 * jump:                                  Flags.              (line  293)
29293 * jump instruction pattern:              Standard Names.     (line  653)
29294 * jump instruction patterns:             Jump Patterns.      (line    6)
29295 * jump instructions and set:             Side Effects.       (line   56)
29296 * jump, in call_insn:                    Flags.              (line  169)
29297 * jump, in insn:                         Flags.              (line  165)
29298 * jump, in mem:                          Flags.              (line   69)
29299 * JUMP_ALIGN:                            Alignment Output.   (line    9)
29300 * jump_insn:                             Insns.              (line   73)
29301 * jump_insn and /f:                      Flags.              (line  111)
29302 * jump_insn and /i:                      Flags.              (line  138)
29303 * jump_insn and /s:                      Flags.              (line   34)
29304 * jump_insn and /u:                      Flags.              (line   24)
29305 * jump_insn and /v:                      Flags.              (line   29)
29306 * JUMP_LABEL:                            Insns.              (line   79)
29307 * JUMP_TABLES_IN_TEXT_SECTION:           Sections.           (line  102)
29308 * Jumps:                                 Jumps.              (line    6)
29309 * LABEL_ALIGN:                           Alignment Output.   (line   52)
29310 * LABEL_ALIGN_AFTER_BARRIER:             Alignment Output.   (line   22)
29311 * LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP:    Alignment Output.   (line   30)
29312 * LABEL_ALIGN_MAX_SKIP:                  Alignment Output.   (line   62)
29313 * LABEL_ALT_ENTRY_P:                     Insns.              (line  145)
29314 * LABEL_ALTERNATE_NAME:                  Edges.              (line  180)
29315 * LABEL_DECL:                            Declarations.       (line    6)
29316 * LABEL_KIND:                            Insns.              (line  145)
29317 * LABEL_NUSES:                           Insns.              (line  141)
29318 * LABEL_OUTSIDE_LOOP_P:                  Flags.              (line   44)
29319 * LABEL_PRESERVE_P:                      Flags.              (line   49)
29320 * label_ref:                             Constants.          (line   97)
29321 * label_ref and /s:                      Flags.              (line   44)
29322 * label_ref and /v:                      Flags.              (line   55)
29323 * label_ref, RTL sharing:                Sharing.            (line   35)
29324 * LABEL_REF_NONLOCAL_P:                  Flags.              (line   55)
29325 * lang_hooks.gimplify_expr:              Gimplification pass.
29326                                                              (line   18)
29327 * lang_hooks.parse_file:                 Parsing pass.       (line    6)
29328 * language-independent intermediate representation: Parsing pass.
29329                                                              (line   14)
29330 * large return values:                   Aggregate Return.   (line    6)
29331 * LARGEST_EXPONENT_IS_NORMAL:            Storage Layout.     (line  475)
29332 * LAST_STACK_REG:                        Stack Registers.    (line   27)
29333 * LAST_VIRTUAL_REGISTER:                 Regs and Memory.    (line   51)
29334 * LD_FINI_SWITCH:                        Macros for Initialization.
29335                                                              (line   29)
29336 * LD_INIT_SWITCH:                        Macros for Initialization.
29337                                                              (line   25)
29338 * LDD_SUFFIX:                            Macros for Initialization.
29339                                                              (line  116)
29340 * le:                                    Comparisons.        (line   76)
29341 * le and attributes:                     Expressions.        (line   64)
29342 * LE_EXPR:                               Expression trees.   (line    6)
29343 * leaf functions:                        Leaf Functions.     (line    6)
29344 * leaf_function_p:                       Standard Names.     (line  724)
29345 * LEAF_REG_REMAP:                        Leaf Functions.     (line   39)
29346 * LEAF_REGISTERS:                        Leaf Functions.     (line   25)
29347 * left rotate:                           Arithmetic.         (line  164)
29348 * left shift:                            Arithmetic.         (line  151)
29349 * LEGITIMATE_CONSTANT_P:                 Addressing Modes.   (line  232)
29350 * LEGITIMATE_PIC_OPERAND_P:              PIC.                (line   47)
29351 * LEGITIMIZE_ADDRESS:                    Addressing Modes.   (line  149)
29352 * LEGITIMIZE_RELOAD_ADDRESS:             Addressing Modes.   (line  172)
29353 * length:                                GTY Options.        (line   50)
29354 * less than:                             Comparisons.        (line   68)
29355 * less than or equal:                    Comparisons.        (line   76)
29356 * leu:                                   Comparisons.        (line   76)
29357 * leu and attributes:                    Expressions.        (line   64)
29358 * LIB2FUNCS_EXTRA:                       Target Fragment.    (line   11)
29359 * LIB_SPEC:                              Driver.             (line  170)
29360 * LIBCALL_VALUE:                         Scalar Return.      (line   53)
29361 * libgcc.a:                              Library Calls.      (line    6)
29362 * LIBGCC2_CFLAGS:                        Target Fragment.    (line    8)
29363 * LIBGCC2_HAS_DF_MODE:                   Type Layout.        (line   69)
29364 * LIBGCC2_HAS_TF_MODE:                   Type Layout.        (line   83)
29365 * LIBGCC2_HAS_XF_MODE:                   Type Layout.        (line   77)
29366 * LIBGCC2_LONG_DOUBLE_TYPE_SIZE:         Type Layout.        (line   63)
29367 * LIBGCC2_WORDS_BIG_ENDIAN:              Storage Layout.     (line   36)
29368 * LIBGCC_SPEC:                           Driver.             (line  178)
29369 * library subroutine names:              Library Calls.      (line    6)
29370 * LIBRARY_PATH_ENV:                      Misc.               (line  551)
29371 * LIMIT_RELOAD_CLASS:                    Register Classes.   (line  229)
29372 * LINK_COMMAND_SPEC:                     Driver.             (line  299)
29373 * LINK_EH_SPEC:                          Driver.             (line  205)
29374 * LINK_ELIMINATE_DUPLICATE_LDIRECTORIES: Driver.             (line  309)
29375 * LINK_GCC_C_SEQUENCE_SPEC:              Driver.             (line  295)
29376 * LINK_LIBGCC_SPECIAL_1:                 Driver.             (line  290)
29377 * LINK_SPEC:                             Driver.             (line  163)
29378 * linkage:                               Function Basics.    (line    6)
29379 * list:                                  Containers.         (line    6)
29380 * Liveness representation:               Liveness information.
29381                                                              (line    6)
29382 * lo_sum:                                Arithmetic.         (line   24)
29383 * load address instruction:              Simple Constraints. (line  152)
29384 * LOAD_EXTEND_OP:                        Misc.               (line  113)
29385 * load_multiple instruction pattern:     Standard Names.     (line  136)
29386 * LOCAL_ALIGNMENT:                       Storage Layout.     (line  228)
29387 * LOCAL_CLASS_P:                         Classes.            (line   68)
29388 * LOCAL_INCLUDE_DIR:                     Driver.             (line  376)
29389 * LOCAL_LABEL_PREFIX:                    Instruction Output. (line  125)
29390 * LOCAL_REGNO:                           Register Basics.    (line  105)
29391 * LOG_LINKS:                             Insns.              (line  289)
29392 * Logical Operators:                     Logical Operators.  (line    6)
29393 * logical-and, bitwise:                  Arithmetic.         (line  136)
29394 * logM2 instruction pattern:             Standard Names.     (line  297)
29395 * LONG_DOUBLE_TYPE_SIZE:                 Type Layout.        (line   58)
29396 * LONG_LONG_TYPE_SIZE:                   Type Layout.        (line   33)
29397 * LONG_TYPE_SIZE:                        Type Layout.        (line   22)
29398 * longjmp and automatic variables:       Interface.          (line   52)
29399 * LOOP_ALIGN:                            Alignment Output.   (line   35)
29400 * LOOP_ALIGN_MAX_SKIP:                   Alignment Output.   (line   48)
29401 * LOOP_EXPR:                             Expression trees.   (line    6)
29402 * looping instruction patterns:          Looping Patterns.   (line    6)
29403 * Loops:                                 Loops.              (line    6)
29404 * lowering, language-dependent intermediate representation: Parsing pass.
29405                                                              (line   14)
29406 * LSHIFT_EXPR:                           Expression trees.   (line    6)
29407 * lshiftrt:                              Arithmetic.         (line  159)
29408 * lshiftrt and attributes:               Expressions.        (line   64)
29409 * lshrM3 instruction pattern:            Standard Names.     (line  255)
29410 * lt:                                    Comparisons.        (line   68)
29411 * lt and attributes:                     Expressions.        (line   64)
29412 * LT_EXPR:                               Expression trees.   (line    6)
29413 * LTGT_EXPR:                             Expression trees.   (line    6)
29414 * ltu:                                   Comparisons.        (line   68)
29415 * m in constraint:                       Simple Constraints. (line   17)
29416 * machine attributes:                    Target Attributes.  (line    6)
29417 * machine description macros:            Target Macros.      (line    6)
29418 * machine descriptions:                  Machine Desc.       (line    6)
29419 * machine mode conversions:              Conversions.        (line    6)
29420 * machine modes:                         Machine Modes.      (line    6)
29421 * machine specific constraints:          Machine Constraints.
29422                                                              (line    6)
29423 * machine-independent predicates:        Machine-Independent Predicates.
29424                                                              (line    6)
29425 * machine_mode:                          Condition Code.     (line  157)
29426 * macros in .md files:                   Macros.             (line    6)
29427 * macros, target description:            Target Macros.      (line    6)
29428 * MAKE_DECL_ONE_ONLY:                    Label Output.       (line  204)
29429 * make_safe_from:                        Expander Definitions.
29430                                                              (line  148)
29431 * makefile fragment:                     Fragments.          (line    6)
29432 * makefile targets:                      Makefile.           (line    6)
29433 * marking roots:                         GGC Roots.          (line    6)
29434 * MASK_RETURN_ADDR:                      Exception Region Output.
29435                                                              (line   35)
29436 * match_dup <1>:                         define_peephole2.   (line   28)
29437 * match_dup:                             RTL Template.       (line   73)
29438 * match_dup and attributes:              Insn Lengths.       (line   16)
29439 * match_op_dup:                          RTL Template.       (line  163)
29440 * match_operand:                         RTL Template.       (line   16)
29441 * match_operand and attributes:          Expressions.        (line   55)
29442 * match_operator:                        RTL Template.       (line   95)
29443 * match_par_dup:                         RTL Template.       (line  219)
29444 * match_parallel:                        RTL Template.       (line  172)
29445 * match_scratch <1>:                     define_peephole2.   (line   28)
29446 * match_scratch:                         RTL Template.       (line   58)
29447 * matching constraint:                   Simple Constraints. (line  130)
29448 * matching operands:                     Output Template.    (line   49)
29449 * math library:                          Soft float library routines.
29450                                                              (line    6)
29451 * math, in RTL:                          Arithmetic.         (line    6)
29452 * MATH_LIBRARY:                          Misc.               (line  544)
29453 * matherr:                               Library Calls.      (line   58)
29454 * MAX_BITS_PER_WORD:                     Storage Layout.     (line   61)
29455 * MAX_CONDITIONAL_EXECUTE:               Misc.               (line  565)
29456 * MAX_DFA_ISSUE_RATE:                    Scheduling.         (line  235)
29457 * MAX_FIXED_MODE_SIZE:                   Storage Layout.     (line  358)
29458 * MAX_MOVE_MAX:                          Misc.               (line  154)
29459 * MAX_OFILE_ALIGNMENT:                   Storage Layout.     (line  196)
29460 * MAX_REGS_PER_ADDRESS:                  Addressing Modes.   (line   42)
29461 * maxM3 instruction pattern:             Standard Names.     (line  200)
29462 * may_trap_p, tree_could_trap_p:         Edges.              (line  115)
29463 * maybe_undef:                           GTY Options.        (line  171)
29464 * mcount:                                Profiling.          (line   12)
29465 * MD_CAN_REDIRECT_BRANCH:                Misc.               (line  666)
29466 * MD_EXEC_PREFIX:                        Driver.             (line  330)
29467 * MD_FALLBACK_FRAME_STATE_FOR:           Exception Handling. (line   98)
29468 * MD_HANDLE_UNWABI:                      Exception Handling. (line  117)
29469 * MD_STARTFILE_PREFIX:                   Driver.             (line  358)
29470 * MD_STARTFILE_PREFIX_1:                 Driver.             (line  364)
29471 * MD_UNWIND_SUPPORT:                     Exception Handling. (line   94)
29472 * mem:                                   Regs and Memory.    (line  249)
29473 * mem and /c:                            Flags.              (line   89)
29474 * mem and /f:                            Flags.              (line   75)
29475 * mem and /j:                            Flags.              (line   69)
29476 * mem and /s:                            Flags.              (line   60)
29477 * mem and /u:                            Flags.              (line  142)
29478 * mem and /v:                            Flags.              (line   84)
29479 * mem, RTL sharing:                      Sharing.            (line   40)
29480 * MEM_ALIAS_SET:                         Special Accessors.  (line    9)
29481 * MEM_ALIGN:                             Special Accessors.  (line   36)
29482 * MEM_EXPR:                              Special Accessors.  (line   20)
29483 * MEM_IN_STRUCT_P:                       Flags.              (line   60)
29484 * MEM_KEEP_ALIAS_SET_P:                  Flags.              (line   69)
29485 * MEM_NOTRAP_P:                          Flags.              (line   89)
29486 * MEM_OFFSET:                            Special Accessors.  (line   28)
29487 * MEM_READONLY_P:                        Flags.              (line  142)
29488 * MEM_SCALAR_P:                          Flags.              (line   75)
29489 * MEM_SIZE:                              Special Accessors.  (line   31)
29490 * MEM_VOLATILE_P:                        Flags.              (line   84)
29491 * MEMBER_TYPE_FORCES_BLK:                Storage Layout.     (line  336)
29492 * memory reference, nonoffsettable:      Simple Constraints. (line  251)
29493 * memory references in constraints:      Simple Constraints. (line   17)
29494 * MEMORY_MOVE_COST:                      Costs.              (line   29)
29495 * memory_operand:                        Machine-Independent Predicates.
29496                                                              (line   58)
29497 * METHOD_TYPE:                           Types.              (line    6)
29498 * MIN_UNITS_PER_WORD:                    Storage Layout.     (line   70)
29499 * MINIMUM_ATOMIC_ALIGNMENT:              Storage Layout.     (line  174)
29500 * minM3 instruction pattern:             Standard Names.     (line  200)
29501 * minus:                                 Arithmetic.         (line   36)
29502 * minus and attributes:                  Expressions.        (line   64)
29503 * minus, canonicalization of:            Insn Canonicalizations.
29504                                                              (line   27)
29505 * MINUS_EXPR:                            Expression trees.   (line    6)
29506 * MIPS coprocessor-definition macros:    MIPS Coprocessors.  (line    6)
29507 * mod:                                   Arithmetic.         (line  114)
29508 * mod and attributes:                    Expressions.        (line   64)
29509 * mode classes:                          Machine Modes.      (line  133)
29510 * mode macros in .md files:              Mode Macros.        (line    6)
29511 * mode switching:                        Mode Switching.     (line    6)
29512 * MODE_AFTER:                            Mode Switching.     (line   49)
29513 * MODE_BASE_REG_CLASS:                   Register Classes.   (line  112)
29514 * MODE_BASE_REG_REG_CLASS:               Register Classes.   (line  118)
29515 * MODE_CC:                               Machine Modes.      (line  162)
29516 * MODE_COMPLEX_FLOAT:                    Machine Modes.      (line  154)
29517 * MODE_COMPLEX_INT:                      Machine Modes.      (line  151)
29518 * MODE_ENTRY:                            Mode Switching.     (line   54)
29519 * MODE_EXIT:                             Mode Switching.     (line   60)
29520 * MODE_FLOAT:                            Machine Modes.      (line  147)
29521 * MODE_FUNCTION:                         Machine Modes.      (line  158)
29522 * MODE_HAS_INFINITIES:                   Storage Layout.     (line  423)
29523 * MODE_HAS_NANS:                         Storage Layout.     (line  413)
29524 * MODE_HAS_SIGN_DEPENDENT_ROUNDING:      Storage Layout.     (line  445)
29525 * MODE_HAS_SIGNED_ZEROS:                 Storage Layout.     (line  429)
29526 * MODE_INT:                              Machine Modes.      (line  139)
29527 * MODE_NEEDED:                           Mode Switching.     (line   42)
29528 * MODE_PARTIAL_INT:                      Machine Modes.      (line  143)
29529 * MODE_PRIORITY_TO_MODE:                 Mode Switching.     (line   66)
29530 * MODE_RANDOM:                           Machine Modes.      (line  167)
29531 * MODES_TIEABLE_P:                       Values in Registers.
29532                                                              (line  102)
29533 * modifiers in constraints:              Modifiers.          (line    6)
29534 * MODIFY_EXPR:                           Expression trees.   (line    6)
29535 * MODIFY_JNI_METHOD_CALL:                Misc.               (line  709)
29536 * modify_stmt:                           Statement Operands. (line    6)
29537 * MODIFY_TARGET_NAME:                    Driver.             (line  385)
29538 * modM3 instruction pattern:             Standard Names.     (line  193)
29539 * modulo scheduling:                     RTL passes.         (line  136)
29540 * MOVE_BY_PIECES_P:                      Costs.              (line  104)
29541 * MOVE_MAX:                              Misc.               (line  149)
29542 * MOVE_MAX_PIECES:                       Costs.              (line  110)
29543 * MOVE_RATIO:                            Costs.              (line   91)
29544 * movM instruction pattern:              Standard Names.     (line   11)
29545 * movmemM instruction pattern:           Standard Names.     (line  421)
29546 * movmisalignM instruction pattern:      Standard Names.     (line  125)
29547 * movMODEcc instruction pattern:         Standard Names.     (line  575)
29548 * movstr instruction pattern:            Standard Names.     (line  449)
29549 * movstrictM instruction pattern:        Standard Names.     (line  119)
29550 * mulhisi3 instruction pattern:          Standard Names.     (line  206)
29551 * mulM3 instruction pattern:             Standard Names.     (line  193)
29552 * mulqihi3 instruction pattern:          Standard Names.     (line  210)
29553 * mulsidi3 instruction pattern:          Standard Names.     (line  210)
29554 * mult:                                  Arithmetic.         (line   85)
29555 * mult and attributes:                   Expressions.        (line   64)
29556 * mult, canonicalization of:             Insn Canonicalizations.
29557                                                              (line   27)
29558 * MULT_EXPR:                             Expression trees.   (line    6)
29559 * MULTILIB_DEFAULTS:                     Driver.             (line  315)
29560 * MULTILIB_DIRNAMES:                     Target Fragment.    (line   64)
29561 * MULTILIB_EXCEPTIONS:                   Target Fragment.    (line   84)
29562 * MULTILIB_EXTRA_OPTS:                   Target Fragment.    (line   96)
29563 * MULTILIB_MATCHES:                      Target Fragment.    (line   77)
29564 * MULTILIB_OPTIONS:                      Target Fragment.    (line   44)
29565 * multiple alternative constraints:      Multi-Alternative.  (line    6)
29566 * MULTIPLE_SYMBOL_SPACES:                Misc.               (line  529)
29567 * multiplication:                        Arithmetic.         (line   85)
29568 * MUST_USE_SJLJ_EXCEPTIONS:              Exception Region Output.
29569                                                              (line   59)
29570 * n in constraint:                       Simple Constraints. (line   63)
29571 * N_REG_CLASSES:                         Register Classes.   (line   76)
29572 * name:                                  Identifiers.        (line    6)
29573 * named patterns and conditions:         Patterns.           (line   47)
29574 * names, pattern:                        Standard Names.     (line    6)
29575 * namespace:                             Namespaces.         (line    6)
29576 * namespace, class, scope:               Scopes.             (line    6)
29577 * NAMESPACE_DECL <1>:                    Declarations.       (line    6)
29578 * NAMESPACE_DECL:                        Namespaces.         (line    6)
29579 * ne:                                    Comparisons.        (line   56)
29580 * ne and attributes:                     Expressions.        (line   64)
29581 * NE_EXPR:                               Expression trees.   (line    6)
29582 * nearbyintM2 instruction pattern:       Standard Names.     (line  356)
29583 * neg:                                   Arithmetic.         (line   81)
29584 * neg and attributes:                    Expressions.        (line   64)
29585 * neg, canonicalization of:              Insn Canonicalizations.
29586                                                              (line   27)
29587 * NEGATE_EXPR:                           Expression trees.   (line    6)
29588 * negM2 instruction pattern:             Standard Names.     (line  259)
29589 * nested functions, trampolines for:     Trampolines.        (line    6)
29590 * nested_ptr:                            GTY Options.        (line  178)
29591 * next_bb, prev_bb, FOR_EACH_BB:         Basic Blocks.       (line   10)
29592 * next_cc0_user:                         Jump Patterns.      (line   64)
29593 * NEXT_INSN:                             Insns.              (line   30)
29594 * NEXT_OBJC_RUNTIME:                     Library Calls.      (line   85)
29595 * nil:                                   RTL Objects.        (line   73)
29596 * NO_DBX_BNSYM_ENSYM:                    DBX Hooks.          (line   39)
29597 * NO_DBX_FUNCTION_END:                   DBX Hooks.          (line   33)
29598 * NO_DBX_GCC_MARKER:                     File Names and DBX. (line   28)
29599 * NO_DBX_MAIN_SOURCE_DIRECTORY:          File Names and DBX. (line   23)
29600 * NO_DOLLAR_IN_LABEL:                    Misc.               (line  493)
29601 * NO_DOT_IN_LABEL:                       Misc.               (line  499)
29602 * NO_FUNCTION_CSE:                       Costs.              (line  178)
29603 * NO_IMPLICIT_EXTERN_C:                  Misc.               (line  373)
29604 * no_new_pseudos:                        Standard Names.     (line   77)
29605 * NO_PROFILE_COUNTERS:                   Profiling.          (line   28)
29606 * NO_REGS:                               Register Classes.   (line   17)
29607 * NON_LVALUE_EXPR:                       Expression trees.   (line    6)
29608 * nondeterministic finite state automaton: Processor pipeline description.
29609                                                              (line  296)
29610 * nonimmediate_operand:                  Machine-Independent Predicates.
29611                                                              (line  101)
29612 * nonlocal goto handler:                 Edges.              (line  171)
29613 * nonlocal_goto instruction pattern:     Standard Names.     (line  939)
29614 * nonlocal_goto_receiver instruction pattern: Standard Names.
29615                                                              (line  956)
29616 * nonmemory_operand:                     Machine-Independent Predicates.
29617                                                              (line   97)
29618 * nonoffsettable memory reference:       Simple Constraints. (line  251)
29619 * nop instruction pattern:               Standard Names.     (line  757)
29620 * NOP_EXPR:                              Expression trees.   (line    6)
29621 * normal predicates:                     Predicates.         (line   31)
29622 * not:                                   Arithmetic.         (line  132)
29623 * not and attributes:                    Expressions.        (line   50)
29624 * not equal:                             Comparisons.        (line   56)
29625 * not, canonicalization of:              Insn Canonicalizations.
29626                                                              (line   27)
29627 * note:                                  Insns.              (line  173)
29628 * note and /i:                           Flags.              (line   49)
29629 * note and /v:                           Flags.              (line   29)
29630 * NOTE_INSN_BASIC_BLOCK, CODE_LABEL, notes: Basic Blocks.    (line   41)
29631 * NOTE_INSN_BLOCK_BEG:                   Insns.              (line  198)
29632 * NOTE_INSN_BLOCK_END:                   Insns.              (line  198)
29633 * NOTE_INSN_DELETED:                     Insns.              (line  188)
29634 * NOTE_INSN_DELETED_LABEL:               Insns.              (line  193)
29635 * NOTE_INSN_EH_REGION_BEG:               Insns.              (line  204)
29636 * NOTE_INSN_EH_REGION_END:               Insns.              (line  204)
29637 * NOTE_INSN_FUNCTION_BEG:                Insns.              (line  228)
29638 * NOTE_INSN_FUNCTION_END:                Insns.              (line  232)
29639 * NOTE_INSN_LOOP_BEG:                    Insns.              (line  212)
29640 * NOTE_INSN_LOOP_CONT:                   Insns.              (line  218)
29641 * NOTE_INSN_LOOP_END:                    Insns.              (line  212)
29642 * NOTE_INSN_LOOP_VTOP:                   Insns.              (line  222)
29643 * NOTE_INSN_SETJMP:                      Insns.              (line  238)
29644 * NOTE_LINE_NUMBER:                      Insns.              (line  173)
29645 * NOTE_SOURCE_FILE:                      Insns.              (line  173)
29646 * NOTICE_UPDATE_CC:                      Condition Code.     (line   33)
29647 * NUM_MACHINE_MODES:                     Machine Modes.      (line  180)
29648 * NUM_MODES_FOR_MODE_SWITCHING:          Mode Switching.     (line   30)
29649 * NUM_USES:                              Statement Operands. (line  128)
29650 * o in constraint:                       Simple Constraints. (line   21)
29651 * OBJC_GEN_METHOD_LABEL:                 Label Output.       (line  397)
29652 * OBJECT_FORMAT_COFF:                    Macros for Initialization.
29653                                                              (line   97)
29654 * OFFSET_TYPE:                           Types.              (line    6)
29655 * offsettable address:                   Simple Constraints. (line   21)
29656 * OImode:                                Machine Modes.      (line   51)
29657 * one_cmplM2 instruction pattern:        Standard Names.     (line  400)
29658 * operand access:                        Accessors.          (line    6)
29659 * operand constraints:                   Constraints.        (line    6)
29660 * Operand Iterators:                     Statement Operands. (line  186)
29661 * operand predicates:                    Predicates.         (line    6)
29662 * operand substitution:                  Output Template.    (line    6)
29663 * operands <1>:                          Patterns.           (line   53)
29664 * operands:                              Statement Operands. (line    6)
29665 * operator predicates:                   Predicates.         (line    6)
29666 * Optimization infrastructure for GIMPLE: Tree SSA.          (line    6)
29667 * OPTIMIZATION_OPTIONS:                  Run-time Target.    (line  201)
29668 * OPTIMIZE_MODE_SWITCHING:               Mode Switching.     (line    9)
29669 * OPTION_DEFAULT_SPECS:                  Driver.             (line   88)
29670 * optional hardware or system features:  Run-time Target.    (line   54)
29671 * options, directory search:             Including Patterns. (line   44)
29672 * order of register allocation:          Allocation Order.   (line    6)
29673 * ORDER_REGS_FOR_LOCAL_ALLOC:            Allocation Order.   (line   23)
29674 * ORDERED_EXPR:                          Expression trees.   (line    6)
29675 * Ordering of Patterns:                  Pattern Ordering.   (line    6)
29676 * ORIGINAL_REGNO:                        Special Accessors.  (line   40)
29677 * other register constraints:            Simple Constraints. (line  161)
29678 * OUTGOING_REG_PARM_STACK_SPACE:         Stack Arguments.    (line   70)
29679 * OUTGOING_REGNO:                        Register Basics.    (line   98)
29680 * output of assembler code:              File Framework.     (line    6)
29681 * output statements:                     Output Statement.   (line    6)
29682 * output templates:                      Output Template.    (line    6)
29683 * OUTPUT_ADDR_CONST_EXTRA:               Data Output.        (line   39)
29684 * output_asm_insn:                       Output Statement.   (line   53)
29685 * OUTPUT_QUOTED_STRING:                  File Framework.     (line   76)
29686 * OVERLOAD:                              Functions.          (line    6)
29687 * OVERRIDE_OPTIONS:                      Run-time Target.    (line  191)
29688 * OVL_CURRENT:                           Functions.          (line    6)
29689 * OVL_NEXT:                              Functions.          (line    6)
29690 * p in constraint:                       Simple Constraints. (line  152)
29691 * PAD_VARARGS_DOWN:                      Register Arguments. (line  206)
29692 * parallel:                              Side Effects.       (line  201)
29693 * param_is:                              GTY Options.        (line  114)
29694 * parameters, c++ abi:                   C++ ABI.            (line    6)
29695 * parameters, miscellaneous:             Misc.               (line    6)
29696 * parameters, precompiled headers:       PCH Target.         (line    6)
29697 * paramN_is:                             GTY Options.        (line  132)
29698 * parity:                                Arithmetic.         (line  202)
29699 * parityM2 instruction pattern:          Standard Names.     (line  394)
29700 * PARM_BOUNDARY:                         Storage Layout.     (line  136)
29701 * PARM_DECL:                             Declarations.       (line    6)
29702 * PARSE_LDD_OUTPUT:                      Macros for Initialization.
29703                                                              (line  121)
29704 * passes and files of the compiler:      Passes.             (line    6)
29705 * passing arguments:                     Interface.          (line   36)
29706 * PATH_SEPARATOR:                        Filesystem.         (line   31)
29707 * PATTERN:                               Insns.              (line  260)
29708 * pattern conditions:                    Patterns.           (line   43)
29709 * pattern names:                         Standard Names.     (line    6)
29710 * Pattern Ordering:                      Pattern Ordering.   (line    6)
29711 * patterns:                              Patterns.           (line    6)
29712 * pc:                                    Regs and Memory.    (line  236)
29713 * pc and attributes:                     Insn Lengths.       (line   20)
29714 * pc, RTL sharing:                       Sharing.            (line   25)
29715 * PC_REGNUM:                             Register Basics.    (line  112)
29716 * pc_rtx:                                Regs and Memory.    (line  241)
29717 * PCC_BITFIELD_TYPE_MATTERS:             Storage Layout.     (line  258)
29718 * PCC_STATIC_STRUCT_RETURN:              Aggregate Return.   (line   61)
29719 * PDImode:                               Machine Modes.      (line   40)
29720 * peephole optimization, RTL representation: Side Effects.   (line  235)
29721 * peephole optimizer definitions:        Peephole Definitions.
29722                                                              (line    6)
29723 * per-function data:                     Per-Function Data.  (line    6)
29724 * percent sign:                          Output Template.    (line    6)
29725 * PHI_ARG_DEF:                           SSA.                (line   71)
29726 * PHI_ARG_EDGE:                          SSA.                (line   68)
29727 * PHI_ARG_ELT:                           SSA.                (line   63)
29728 * PHI_NUM_ARGS:                          SSA.                (line   59)
29729 * PHI_RESULT:                            SSA.                (line   56)
29730 * PIC:                                   PIC.                (line    6)
29731 * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED:   PIC.                (line   26)
29732 * PIC_OFFSET_TABLE_REGNUM:               PIC.                (line   16)
29733 * pipeline hazard recognizer:            Processor pipeline description.
29734                                                              (line    6)
29735 * plus:                                  Arithmetic.         (line   14)
29736 * plus and attributes:                   Expressions.        (line   64)
29737 * plus, canonicalization of:             Insn Canonicalizations.
29738                                                              (line   27)
29739 * PLUS_EXPR:                             Expression trees.   (line    6)
29740 * Pmode:                                 Misc.               (line  345)
29741 * pmode_register_operand:                Machine-Independent Predicates.
29742                                                              (line   35)
29743 * pointer:                               Types.              (line    6)
29744 * POINTER_SIZE:                          Storage Layout.     (line   76)
29745 * POINTER_TYPE:                          Types.              (line    6)
29746 * POINTERS_EXTEND_UNSIGNED:              Storage Layout.     (line   82)
29747 * pop_operand:                           Machine-Independent Predicates.
29748                                                              (line   88)
29749 * popcount:                              Arithmetic.         (line  198)
29750 * popcountM2 instruction pattern:        Standard Names.     (line  388)
29751 * portability:                           Portability.        (line    6)
29752 * position independent code:             PIC.                (line    6)
29753 * post_dec:                              Incdec.             (line   25)
29754 * post_inc:                              Incdec.             (line   30)
29755 * post_modify:                           Incdec.             (line   33)
29756 * POSTDECREMENT_EXPR:                    Expression trees.   (line    6)
29757 * POSTINCREMENT_EXPR:                    Expression trees.   (line    6)
29758 * POWI_MAX_MULTS:                        Misc.               (line  757)
29759 * powM3 instruction pattern:             Standard Names.     (line  305)
29760 * pragma:                                Misc.               (line  378)
29761 * pre_dec:                               Incdec.             (line    8)
29762 * PRE_GCC3_DWARF_FRAME_REGISTERS:        Frame Registers.    (line  110)
29763 * pre_inc:                               Incdec.             (line   22)
29764 * pre_modify:                            Incdec.             (line   51)
29765 * PREDECREMENT_EXPR:                     Expression trees.   (line    6)
29766 * predefined macros:                     Run-time Target.    (line    6)
29767 * PREDICATE_CODES:                       Misc.               (line    9)
29768 * predicates:                            Predicates.         (line    6)
29769 * predicates and machine modes:          Predicates.         (line   31)
29770 * predication:                           Conditional Execution.
29771                                                              (line    6)
29772 * predict.def:                           Profile information.
29773                                                              (line   24)
29774 * PREFERRED_DEBUGGING_TYPE:              All Debuggers.      (line   42)
29775 * PREFERRED_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  224)
29776 * PREFERRED_RELOAD_CLASS:                Register Classes.   (line  197)
29777 * PREFERRED_STACK_BOUNDARY:              Storage Layout.     (line  150)
29778 * prefetch:                              Side Effects.       (line  309)
29779 * prefetch instruction pattern:          Standard Names.     (line 1076)
29780 * PREINCREMENT_EXPR:                     Expression trees.   (line    6)
29781 * presence_set:                          Processor pipeline description.
29782                                                              (line  215)
29783 * preserving SSA form:                   SSA.                (line   76)
29784 * prev_active_insn:                      define_peephole.    (line   60)
29785 * prev_cc0_setter:                       Jump Patterns.      (line   64)
29786 * PREV_INSN:                             Insns.              (line   26)
29787 * PRINT_OPERAND:                         Instruction Output. (line   68)
29788 * PRINT_OPERAND_ADDRESS:                 Instruction Output. (line   96)
29789 * PRINT_OPERAND_PUNCT_VALID_P:           Instruction Output. (line   89)
29790 * processor functional units:            Processor pipeline description.
29791                                                              (line    6)
29792 * processor pipeline description:        Processor pipeline description.
29793                                                              (line    6)
29794 * product:                               Arithmetic.         (line   85)
29795 * profile feedback:                      Profile information.
29796                                                              (line   14)
29797 * profile representation:                Profile information.
29798                                                              (line    6)
29799 * PROFILE_BEFORE_PROLOGUE:               Profiling.          (line   35)
29800 * PROFILE_HOOK:                          Profiling.          (line   23)
29801 * profiling, code generation:            Profiling.          (line    6)
29802 * program counter:                       Regs and Memory.    (line  237)
29803 * prologue:                              Function Entry.     (line    6)
29804 * prologue instruction pattern:          Standard Names.     (line 1022)
29805 * PROMOTE_FUNCTION_MODE:                 Storage Layout.     (line  115)
29806 * PROMOTE_MODE:                          Storage Layout.     (line   92)
29807 * pseudo registers:                      Regs and Memory.    (line    9)
29808 * PSImode:                               Machine Modes.      (line   32)
29809 * PTRDIFF_TYPE:                          Type Layout.        (line  132)
29810 * PTRMEM_CST:                            Expression trees.   (line    6)
29811 * PTRMEM_CST_CLASS:                      Expression trees.   (line    6)
29812 * PTRMEM_CST_MEMBER:                     Expression trees.   (line    6)
29813 * purge_dead_edges <1>:                  Maintaining the CFG.
29814                                                              (line   93)
29815 * purge_dead_edges:                      Edges.              (line  104)
29816 * push address instruction:              Simple Constraints. (line  152)
29817 * PUSH_ARGS:                             Stack Arguments.    (line   18)
29818 * PUSH_ARGS_REVERSED:                    Stack Arguments.    (line   26)
29819 * push_operand:                          Machine-Independent Predicates.
29820                                                              (line   81)
29821 * push_reload:                           Addressing Modes.   (line  196)
29822 * PUSH_ROUNDING:                         Stack Arguments.    (line   32)
29823 * PUSH_ROUNDING, interaction with PREFERRED_STACK_BOUNDARY: Storage Layout.
29824                                                              (line  161)
29825 * pushM instruction pattern:             Standard Names.     (line  180)
29826 * PUT_CODE:                              RTL Objects.        (line   47)
29827 * PUT_MODE:                              Machine Modes.      (line  177)
29828 * PUT_REG_NOTE_KIND:                     Insns.              (line  326)
29829 * PUT_SDB_:                              SDB and DWARF.      (line   56)
29830 * QCmode:                                Machine Modes.      (line  111)
29831 * QFmode:                                Machine Modes.      (line   54)
29832 * QImode:                                Machine Modes.      (line   25)
29833 * QImode, in insn:                       Insns.              (line  244)
29834 * qualified type:                        Types.              (line    6)
29835 * querying function unit reservations:   Processor pipeline description.
29836                                                              (line   90)
29837 * question mark:                         Multi-Alternative.  (line   41)
29838 * quotient:                              Arithmetic.         (line  100)
29839 * r in constraint:                       Simple Constraints. (line   54)
29840 * RANGE_TEST_NON_SHORT_CIRCUIT:          Costs.              (line  182)
29841 * RDIV_EXPR:                             Expression trees.   (line    6)
29842 * READONLY_DATA_SECTION:                 Sections.           (line   43)
29843 * READONLY_DATA_SECTION_ASM_OP:          Sections.           (line   38)
29844 * real operands:                         Statement Operands. (line    6)
29845 * REAL_ARITHMETIC:                       Floating Point.     (line   66)
29846 * REAL_CST:                              Expression trees.   (line    6)
29847 * REAL_LIBGCC_SPEC:                      Driver.             (line  187)
29848 * REAL_NM_FILE_NAME:                     Macros for Initialization.
29849                                                              (line  106)
29850 * REAL_TYPE:                             Types.              (line    6)
29851 * REAL_VALUE_ABS:                        Floating Point.     (line   82)
29852 * REAL_VALUE_ATOF:                       Floating Point.     (line   50)
29853 * REAL_VALUE_FIX:                        Floating Point.     (line   41)
29854 * REAL_VALUE_FROM_INT:                   Floating Point.     (line   99)
29855 * REAL_VALUE_ISINF:                      Floating Point.     (line   59)
29856 * REAL_VALUE_ISNAN:                      Floating Point.     (line   62)
29857 * REAL_VALUE_NEGATE:                     Floating Point.     (line   79)
29858 * REAL_VALUE_NEGATIVE:                   Floating Point.     (line   56)
29859 * REAL_VALUE_TO_INT:                     Floating Point.     (line   93)
29860 * REAL_VALUE_TO_TARGET_DOUBLE:           Data Output.        (line  138)
29861 * REAL_VALUE_TO_TARGET_LONG_DOUBLE:      Data Output.        (line  139)
29862 * REAL_VALUE_TO_TARGET_SINGLE:           Data Output.        (line  137)
29863 * REAL_VALUE_TRUNCATE:                   Floating Point.     (line   86)
29864 * REAL_VALUE_TYPE:                       Floating Point.     (line   26)
29865 * REAL_VALUE_UNSIGNED_FIX:               Floating Point.     (line   45)
29866 * REAL_VALUES_EQUAL:                     Floating Point.     (line   32)
29867 * REAL_VALUES_LESS:                      Floating Point.     (line   38)
29868 * REALPART_EXPR:                         Expression trees.   (line    6)
29869 * recog_data.operand:                    Instruction Output. (line   39)
29870 * recognizing insns:                     RTL Template.       (line    6)
29871 * RECORD_TYPE <1>:                       Classes.            (line    6)
29872 * RECORD_TYPE:                           Types.              (line    6)
29873 * redirect_edge_and_branch:              Profile information.
29874                                                              (line   71)
29875 * redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
29876                                                              (line  103)
29877 * reference:                             Types.              (line    6)
29878 * REFERENCE_TYPE:                        Types.              (line    6)
29879 * reg:                                   Regs and Memory.    (line    9)
29880 * reg and /f:                            Flags.              (line   98)
29881 * reg and /i:                            Flags.              (line   93)
29882 * reg and /v:                            Flags.              (line  102)
29883 * reg, RTL sharing:                      Sharing.            (line   17)
29884 * REG_ALLOC_ORDER:                       Allocation Order.   (line    9)
29885 * REG_BR_PRED:                           Insns.              (line  529)
29886 * REG_BR_PROB:                           Insns.              (line  523)
29887 * REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information.
29888                                                              (line   82)
29889 * REG_BR_PROB_BASE, EDGE_FREQUENCY:      Profile information.
29890                                                              (line   52)
29891 * REG_CC_SETTER:                         Insns.              (line  498)
29892 * REG_CC_USER:                           Insns.              (line  498)
29893 * REG_CLASS_CONTENTS:                    Register Classes.   (line   86)
29894 * reg_class_contents:                    Register Basics.    (line   59)
29895 * REG_CLASS_FROM_CONSTRAINT:             Register Classes.   (line  154)
29896 * REG_CLASS_FROM_LETTER:                 Register Classes.   (line  146)
29897 * REG_CLASS_NAMES:                       Register Classes.   (line   81)
29898 * REG_CROSSING_JUMP:                     Insns.              (line  391)
29899 * REG_DEAD:                              Insns.              (line  337)
29900 * REG_DEAD, REG_UNUSED:                  Liveness information.
29901                                                              (line   14)
29902 * REG_DEP_ANTI:                          Insns.              (line  513)
29903 * REG_DEP_OUTPUT:                        Insns.              (line  516)
29904 * REG_EH_REGION, EDGE_ABNORMAL_CALL:     Edges.              (line  110)
29905 * REG_EQUAL:                             Insns.              (line  403)
29906 * REG_EQUIV:                             Insns.              (line  403)
29907 * REG_EXPR:                              Special Accessors.  (line   46)
29908 * REG_FRAME_RELATED_EXPR:                Insns.              (line  535)
29909 * REG_FUNCTION_VALUE_P:                  Flags.              (line   93)
29910 * REG_INC:                               Insns.              (line  353)
29911 * REG_LABEL:                             Insns.              (line  383)
29912 * reg_label and /v:                      Flags.              (line   55)
29913 * REG_LIBCALL:                           Insns.              (line  491)
29914 * REG_MODE_OK_FOR_BASE_P:                Addressing Modes.   (line  109)
29915 * REG_MODE_OK_FOR_REG_BASE_P:            Addressing Modes.   (line  117)
29916 * reg_names <1>:                         Instruction Output. (line   80)
29917 * reg_names:                             Register Basics.    (line   59)
29918 * REG_NO_CONFLICT:                       Insns.              (line  367)
29919 * REG_NONNEG:                            Insns.              (line  359)
29920 * REG_NOTE_KIND:                         Insns.              (line  326)
29921 * REG_NOTES:                             Insns.              (line  294)
29922 * REG_OFFSET:                            Special Accessors.  (line   50)
29923 * REG_OK_FOR_BASE_P:                     Addressing Modes.   (line  100)
29924 * REG_OK_FOR_INDEX_P:                    Addressing Modes.   (line  126)
29925 * REG_OK_STRICT:                         Addressing Modes.   (line   67)
29926 * REG_PARM_STACK_SPACE:                  Stack Arguments.    (line   56)
29927 * REG_PARM_STACK_SPACE, and FUNCTION_ARG: Register Arguments.
29928                                                              (line   52)
29929 * REG_POINTER:                           Flags.              (line   98)
29930 * REG_RETVAL:                            Insns.              (line  475)
29931 * REG_UNUSED:                            Insns.              (line  346)
29932 * REG_USERVAR_P:                         Flags.              (line  102)
29933 * register allocation order:             Allocation Order.   (line    6)
29934 * register class definitions:            Register Classes.   (line    6)
29935 * register class preference constraints: Class Preferences.  (line    6)
29936 * register pairs:                        Values in Registers.
29937                                                              (line   42)
29938 * Register Transfer Language (RTL):      RTL.                (line    6)
29939 * register usage:                        Registers.          (line    6)
29940 * REGISTER_MOVE_COST:                    Costs.              (line   10)
29941 * REGISTER_NAMES:                        Instruction Output. (line    9)
29942 * register_operand:                      Machine-Independent Predicates.
29943                                                              (line   30)
29944 * REGISTER_PREFIX:                       Instruction Output. (line  124)
29945 * REGISTER_TARGET_PRAGMAS:               Misc.               (line  379)
29946 * registers arguments:                   Register Arguments. (line    6)
29947 * registers in constraints:              Simple Constraints. (line   54)
29948 * REGMODE_NATURAL_SIZE:                  Values in Registers.
29949                                                              (line   23)
29950 * REGNO_MODE_OK_FOR_BASE_P:              Register Classes.   (line  165)
29951 * REGNO_MODE_OK_FOR_REG_BASE_P:          Register Classes.   (line  173)
29952 * REGNO_OK_FOR_BASE_P:                   Register Classes.   (line  159)
29953 * REGNO_OK_FOR_INDEX_P:                  Register Classes.   (line  182)
29954 * REGNO_REG_CLASS:                       Register Classes.   (line  101)
29955 * regs_ever_live:                        Function Entry.     (line   21)
29956 * regular expressions:                   Processor pipeline description.
29957                                                              (line    6)
29958 * relative costs:                        Costs.              (line    6)
29959 * RELATIVE_PREFIX_NOT_LINKDIR:           Driver.             (line  325)
29960 * reload pass:                           Regs and Memory.    (line  148)
29961 * reload_completed:                      Standard Names.     (line  724)
29962 * reload_in instruction pattern:         Standard Names.     (line  101)
29963 * reload_in_progress:                    Standard Names.     (line   57)
29964 * reload_out instruction pattern:        Standard Names.     (line  101)
29965 * reloading:                             RTL passes.         (line  177)
29966 * remainder:                             Arithmetic.         (line  114)
29967 * reorder:                               GTY Options.        (line  199)
29968 * representation of RTL:                 RTL.                (line    6)
29969 * reservation delays:                    Processor pipeline description.
29970                                                              (line    6)
29971 * rest_of_decl_compilation:              Parsing pass.       (line   52)
29972 * rest_of_type_compilation:              Parsing pass.       (line   52)
29973 * restore_stack_block instruction pattern: Standard Names.   (line  858)
29974 * restore_stack_function instruction pattern: Standard Names.
29975                                                              (line  858)
29976 * restore_stack_nonlocal instruction pattern: Standard Names.
29977                                                              (line  858)
29978 * RESULT_DECL:                           Declarations.       (line    6)
29979 * return:                                Side Effects.       (line   72)
29980 * return instruction pattern:            Standard Names.     (line  711)
29981 * return values in registers:            Scalar Return.      (line    6)
29982 * RETURN_ADDR_IN_PREVIOUS_FRAME:         Frame Layout.       (line  128)
29983 * RETURN_ADDR_OFFSET:                    Exception Handling. (line   60)
29984 * RETURN_ADDR_RTX:                       Frame Layout.       (line  117)
29985 * RETURN_ADDRESS_POINTER_REGNUM:         Frame Registers.    (line   51)
29986 * RETURN_EXPR:                           Function Bodies.    (line    6)
29987 * RETURN_INIT:                           Function Bodies.    (line    6)
29988 * RETURN_POPS_ARGS:                      Stack Arguments.    (line   87)
29989 * RETURN_STMT:                           Function Bodies.    (line    6)
29990 * returning aggregate values:            Aggregate Return.   (line    6)
29991 * returning structures and unions:       Interface.          (line   10)
29992 * reverse probability:                   Profile information.
29993                                                              (line   66)
29994 * REVERSE_CONDEXEC_PREDICATES_P:         Condition Code.     (line  129)
29995 * REVERSE_CONDITION:                     Condition Code.     (line  116)
29996 * REVERSIBLE_CC_MODE:                    Condition Code.     (line  102)
29997 * right rotate:                          Arithmetic.         (line  164)
29998 * right shift:                           Arithmetic.         (line  159)
29999 * RISC:                                  Processor pipeline description.
30000                                                              (line    6)
30001 * roots, marking:                        GGC Roots.          (line    6)
30002 * rotate:                                Arithmetic.         (line  164)
30003 * rotatert:                              Arithmetic.         (line  164)
30004 * rotlM3 instruction pattern:            Standard Names.     (line  255)
30005 * rotrM3 instruction pattern:            Standard Names.     (line  255)
30006 * Rough GIMPLE Grammar:                  Rough GIMPLE Grammar.
30007                                                              (line    6)
30008 * ROUND_DIV_EXPR:                        Expression trees.   (line    6)
30009 * ROUND_MOD_EXPR:                        Expression trees.   (line    6)
30010 * ROUND_TOWARDS_ZERO:                    Storage Layout.     (line  454)
30011 * ROUND_TYPE_ALIGN:                      Storage Layout.     (line  349)
30012 * roundM2 instruction pattern:           Standard Names.     (line  340)
30013 * RSHIFT_EXPR:                           Expression trees.   (line    6)
30014 * RTL addition:                          Arithmetic.         (line   14)
30015 * RTL addition with signed saturation:   Arithmetic.         (line   14)
30016 * RTL addition with unsigned saturation: Arithmetic.         (line   14)
30017 * RTL classes:                           RTL Classes.        (line    6)
30018 * RTL comparison:                        Arithmetic.         (line   43)
30019 * RTL comparison operations:             Comparisons.        (line    6)
30020 * RTL constant expression types:         Constants.          (line    6)
30021 * RTL constants:                         Constants.          (line    6)
30022 * RTL declarations:                      RTL Declarations.   (line    6)
30023 * RTL difference:                        Arithmetic.         (line   36)
30024 * RTL expression:                        RTL Objects.        (line    6)
30025 * RTL expressions for arithmetic:        Arithmetic.         (line    6)
30026 * RTL format:                            RTL Classes.        (line   71)
30027 * RTL format characters:                 RTL Classes.        (line   76)
30028 * RTL function-call insns:               Calls.              (line    6)
30029 * RTL insn template:                     RTL Template.       (line    6)
30030 * RTL integers:                          RTL Objects.        (line    6)
30031 * RTL memory expressions:                Regs and Memory.    (line    6)
30032 * RTL object types:                      RTL Objects.        (line    6)
30033 * RTL postdecrement:                     Incdec.             (line    6)
30034 * RTL postincrement:                     Incdec.             (line    6)
30035 * RTL predecrement:                      Incdec.             (line    6)
30036 * RTL preincrement:                      Incdec.             (line    6)
30037 * RTL register expressions:              Regs and Memory.    (line    6)
30038 * RTL representation:                    RTL.                (line    6)
30039 * RTL side effect expressions:           Side Effects.       (line    6)
30040 * RTL strings:                           RTL Objects.        (line    6)
30041 * RTL structure sharing assumptions:     Sharing.            (line    6)
30042 * RTL subtraction:                       Arithmetic.         (line   36)
30043 * RTL subtraction with signed saturation: Arithmetic.        (line   36)
30044 * RTL subtraction with unsigned saturation: Arithmetic.      (line   36)
30045 * RTL sum:                               Arithmetic.         (line   14)
30046 * RTL vectors:                           RTL Objects.        (line    6)
30047 * RTX (See RTL):                         RTL Objects.        (line    6)
30048 * RTX codes, classes of:                 RTL Classes.        (line    6)
30049 * RTX_FRAME_RELATED_P:                   Flags.              (line  111)
30050 * run-time conventions:                  Interface.          (line    6)
30051 * run-time target specification:         Run-time Target.    (line    6)
30052 * s in constraint:                       Simple Constraints. (line   90)
30053 * same_type_p:                           Types.              (line  102)
30054 * SAVE_EXPR:                             Expression trees.   (line    6)
30055 * save_stack_block instruction pattern:  Standard Names.     (line  858)
30056 * save_stack_function instruction pattern: Standard Names.   (line  858)
30057 * save_stack_nonlocal instruction pattern: Standard Names.   (line  858)
30058 * scalars, returned as values:           Scalar Return.      (line    6)
30059 * SCHED_GROUP_P:                         Flags.              (line  156)
30060 * SCmode:                                Machine Modes.      (line  111)
30061 * sCOND instruction pattern:             Standard Names.     (line  595)
30062 * scratch:                               Regs and Memory.    (line  173)
30063 * scratch operands:                      Regs and Memory.    (line  173)
30064 * scratch, RTL sharing:                  Sharing.            (line   35)
30065 * scratch_operand:                       Machine-Independent Predicates.
30066                                                              (line   50)
30067 * SDB_ALLOW_FORWARD_REFERENCES:          SDB and DWARF.      (line   74)
30068 * SDB_ALLOW_UNKNOWN_REFERENCES:          SDB and DWARF.      (line   69)
30069 * SDB_DEBUGGING_INFO:                    SDB and DWARF.      (line    9)
30070 * SDB_DELIM:                             SDB and DWARF.      (line   62)
30071 * SDB_OUTPUT_SOURCE_LINE:                SDB and DWARF.      (line   79)
30072 * search options:                        Including Patterns. (line   44)
30073 * SECONDARY_INPUT_RELOAD_CLASS:          Register Classes.   (line  246)
30074 * SECONDARY_MEMORY_NEEDED:               Register Classes.   (line  308)
30075 * SECONDARY_MEMORY_NEEDED_MODE:          Register Classes.   (line  327)
30076 * SECONDARY_MEMORY_NEEDED_RTX:           Register Classes.   (line  318)
30077 * SECONDARY_OUTPUT_RELOAD_CLASS:         Register Classes.   (line  247)
30078 * SECONDARY_RELOAD_CLASS:                Register Classes.   (line  245)
30079 * SELECT_CC_MODE:                        Condition Code.     (line   68)
30080 * Selection Statements:                  Selection Statements.
30081                                                              (line    6)
30082 * sequence:                              Side Effects.       (line  251)
30083 * set:                                   Side Effects.       (line   15)
30084 * set and /f:                            Flags.              (line  111)
30085 * SET_ASM_OP:                            Label Output.       (line  364)
30086 * set_attr:                              Tagging Insns.      (line   31)
30087 * set_attr_alternative:                  Tagging Insns.      (line   49)
30088 * SET_DEST:                              Side Effects.       (line   69)
30089 * SET_IS_RETURN_P:                       Flags.              (line  165)
30090 * SET_LABEL_KIND:                        Insns.              (line  145)
30091 * set_optab_libfunc:                     Library Calls.      (line   15)
30092 * SET_SRC:                               Side Effects.       (line   69)
30093 * SETUP_FRAME_ADDRESSES:                 Frame Layout.       (line  103)
30094 * SFmode:                                Machine Modes.      (line   66)
30095 * sharing of RTL components:             Sharing.            (line    6)
30096 * shift:                                 Arithmetic.         (line  151)
30097 * SHIFT_COUNT_TRUNCATED:                 Misc.               (line  161)
30098 * SHORT_IMMEDIATES_SIGN_EXTEND:          Misc.               (line  140)
30099 * SHORT_TYPE_SIZE:                       Type Layout.        (line   16)
30100 * sibcall_epilogue instruction pattern:  Standard Names.     (line 1048)
30101 * sibling call:                          Edges.              (line  122)
30102 * SIBLING_CALL_P:                        Flags.              (line  169)
30103 * sign_extend:                           Conversions.        (line   23)
30104 * sign_extract:                          Bit-Fields.         (line    8)
30105 * sign_extract, canonicalization of:     Insn Canonicalizations.
30106                                                              (line   93)
30107 * signed division:                       Arithmetic.         (line  100)
30108 * signed maximum:                        Arithmetic.         (line  119)
30109 * signed minimum:                        Arithmetic.         (line  119)
30110 * SImode:                                Machine Modes.      (line   37)
30111 * simple constraints:                    Simple Constraints. (line    6)
30112 * sinM2 instruction pattern:             Standard Names.     (line  281)
30113 * SIZE_ASM_OP:                           Label Output.       (line   23)
30114 * SIZE_TYPE:                             Type Layout.        (line  116)
30115 * skip:                                  GTY Options.        (line   77)
30116 * SLOW_BYTE_ACCESS:                      Costs.              (line   60)
30117 * SLOW_UNALIGNED_ACCESS:                 Costs.              (line   75)
30118 * SMALL_ARG_MAX:                         Host Misc.          (line   41)
30119 * SMALL_REGISTER_CLASSES:                Register Classes.   (line  350)
30120 * smax:                                  Arithmetic.         (line  119)
30121 * smin:                                  Arithmetic.         (line  119)
30122 * sms, swing, software pipelining:       RTL passes.         (line  136)
30123 * smulM3_highpart instruction pattern:   Standard Names.     (line  217)
30124 * soft float library:                    Soft float library routines.
30125                                                              (line    6)
30126 * special:                               GTY Options.        (line  219)
30127 * special predicates:                    Predicates.         (line   31)
30128 * SPECIAL_MODE_PREDICATES:               Misc.               (line   37)
30129 * SPECS:                                 Target Fragment.    (line  103)
30130 * speed of instructions:                 Costs.              (line    6)
30131 * splitting instructions:                Insn Splitting.     (line    6)
30132 * sqrt:                                  Arithmetic.         (line  172)
30133 * sqrtM2 instruction pattern:            Standard Names.     (line  265)
30134 * square root:                           Arithmetic.         (line  172)
30135 * ss_minus:                              Arithmetic.         (line   36)
30136 * ss_plus:                               Arithmetic.         (line   14)
30137 * ss_truncate:                           Conversions.        (line   43)
30138 * SSA:                                   SSA.                (line    6)
30139 * SSA_NAME_DEF_STMT:                     SSA.                (line   93)
30140 * SSA_NAME_VERSION:                      SSA.                (line   98)
30141 * stack arguments:                       Stack Arguments.    (line    6)
30142 * stack frame layout:                    Frame Layout.       (line    6)
30143 * STACK_ALIGNMENT_NEEDED:                Frame Layout.       (line   48)
30144 * STACK_BOUNDARY:                        Storage Layout.     (line  142)
30145 * STACK_CHECK_BUILTIN:                   Stack Checking.     (line   29)
30146 * STACK_CHECK_FIXED_FRAME_SIZE:          Stack Checking.     (line   64)
30147 * STACK_CHECK_MAX_FRAME_SIZE:            Stack Checking.     (line   55)
30148 * STACK_CHECK_MAX_VAR_SIZE:              Stack Checking.     (line   71)
30149 * STACK_CHECK_PROBE_INTERVAL:            Stack Checking.     (line   37)
30150 * STACK_CHECK_PROBE_LOAD:                Stack Checking.     (line   44)
30151 * STACK_CHECK_PROTECT:                   Stack Checking.     (line   50)
30152 * STACK_DYNAMIC_OFFSET:                  Frame Layout.       (line   75)
30153 * STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory.
30154                                                              (line   83)
30155 * STACK_GROWS_DOWNWARD:                  Frame Layout.       (line    9)
30156 * STACK_PARMS_IN_REG_PARM_AREA:          Stack Arguments.    (line   78)
30157 * STACK_POINTER_OFFSET:                  Frame Layout.       (line   58)
30158 * STACK_POINTER_OFFSET and virtual registers: Regs and Memory.
30159                                                              (line   93)
30160 * STACK_POINTER_REGNUM:                  Frame Registers.    (line    9)
30161 * STACK_POINTER_REGNUM and virtual registers: Regs and Memory.
30162                                                              (line   83)
30163 * stack_pointer_rtx:                     Frame Registers.    (line   85)
30164 * STACK_PUSH_CODE:                       Frame Layout.       (line   17)
30165 * STACK_REGS:                            Stack Registers.    (line   20)
30166 * STACK_SAVEAREA_MODE:                   Storage Layout.     (line  365)
30167 * STACK_SIZE_MODE:                       Storage Layout.     (line  377)
30168 * standard pattern names:                Standard Names.     (line    6)
30169 * STANDARD_INCLUDE_COMPONENT:            Driver.             (line  425)
30170 * STANDARD_INCLUDE_DIR:                  Driver.             (line  417)
30171 * STANDARD_STARTFILE_PREFIX:             Driver.             (line  337)
30172 * STANDARD_STARTFILE_PREFIX_1:           Driver.             (line  344)
30173 * STANDARD_STARTFILE_PREFIX_2:           Driver.             (line  351)
30174 * STARTFILE_SPEC:                        Driver.             (line  210)
30175 * STARTING_FRAME_OFFSET:                 Frame Layout.       (line   39)
30176 * STARTING_FRAME_OFFSET and virtual registers: Regs and Memory.
30177                                                              (line   74)
30178 * Statement Sequences:                   Statement Sequences.
30179                                                              (line    6)
30180 * Statements:                            Statements.         (line    6)
30181 * statements:                            Function Bodies.    (line    6)
30182 * Static profile estimation:             Profile information.
30183                                                              (line   24)
30184 * static single assignment:              SSA.                (line    6)
30185 * STATIC_CHAIN:                          Frame Registers.    (line   77)
30186 * STATIC_CHAIN_INCOMING:                 Frame Registers.    (line   78)
30187 * STATIC_CHAIN_INCOMING_REGNUM:          Frame Registers.    (line   64)
30188 * STATIC_CHAIN_REGNUM:                   Frame Registers.    (line   63)
30189 * stdarg.h and register arguments:       Register Arguments. (line   47)
30190 * STDC_0_IN_SYSTEM_HEADERS:              Misc.               (line  362)
30191 * STMT_EXPR:                             Expression trees.   (line    6)
30192 * STMT_IS_FULL_EXPR_P:                   Function Bodies.    (line   22)
30193 * STMT_USE_OPS:                          Statement Operands. (line  124)
30194 * storage layout:                        Storage Layout.     (line    6)
30195 * STORE_BY_PIECES_P:                     Costs.              (line  130)
30196 * STORE_FLAG_VALUE:                      Misc.               (line  224)
30197 * store_multiple instruction pattern:    Standard Names.     (line  159)
30198 * strcpy:                                Storage Layout.     (line  209)
30199 * STRICT_ALIGNMENT:                      Storage Layout.     (line  253)
30200 * strict_low_part:                       RTL Declarations.   (line    9)
30201 * strict_memory_address_p:               Addressing Modes.   (line  206)
30202 * STRING_CST:                            Expression trees.   (line    6)
30203 * STRING_POOL_ADDRESS_P:                 Flags.              (line  173)
30204 * strlenM instruction pattern:           Standard Names.     (line  491)
30205 * structure value address:               Aggregate Return.   (line    6)
30206 * STRUCTURE_SIZE_BOUNDARY:               Storage Layout.     (line  245)
30207 * structures, returning:                 Interface.          (line   10)
30208 * subM3 instruction pattern:             Standard Names.     (line  193)
30209 * SUBOBJECT:                             Function Bodies.    (line    6)
30210 * SUBOBJECT_CLEANUP:                     Function Bodies.    (line    6)
30211 * subreg:                                Regs and Memory.    (line   97)
30212 * subreg and /s:                         Flags.              (line  195)
30213 * subreg and /u:                         Flags.              (line  188)
30214 * subreg and /u and /v:                  Flags.              (line  178)
30215 * subreg, in strict_low_part:            RTL Declarations.   (line    9)
30216 * subreg, special reload handling:       Regs and Memory.    (line  148)
30217 * SUBREG_BYTE:                           Regs and Memory.    (line  169)
30218 * SUBREG_PROMOTED_UNSIGNED_P:            Flags.              (line  178)
30219 * SUBREG_PROMOTED_UNSIGNED_SET:          Flags.              (line  188)
30220 * SUBREG_PROMOTED_VAR_P:                 Flags.              (line  195)
30221 * SUBREG_REG:                            Regs and Memory.    (line  169)
30222 * SUCCESS_EXIT_CODE:                     Host Misc.          (line   12)
30223 * SUPPORTS_INIT_PRIORITY:                Macros for Initialization.
30224                                                              (line   58)
30225 * SUPPORTS_ONE_ONLY:                     Label Output.       (line  213)
30226 * SUPPORTS_WEAK:                         Label Output.       (line  194)
30227 * SWITCH_BODY:                           Function Bodies.    (line    6)
30228 * SWITCH_COND:                           Function Bodies.    (line    6)
30229 * SWITCH_CURTAILS_COMPILATION:           Driver.             (line   33)
30230 * SWITCH_STMT:                           Function Bodies.    (line    6)
30231 * SWITCH_TAKES_ARG:                      Driver.             (line    9)
30232 * SWITCHES_NEED_SPACES:                  Driver.             (line   47)
30233 * SYMBOL_FLAG_EXTERNAL:                  Special Accessors.  (line   80)
30234 * SYMBOL_FLAG_FUNCTION:                  Special Accessors.  (line   73)
30235 * SYMBOL_FLAG_LOCAL:                     Special Accessors.  (line   76)
30236 * SYMBOL_FLAG_SMALL:                     Special Accessors.  (line   85)
30237 * SYMBOL_FLAG_TLS_SHIFT:                 Special Accessors.  (line   89)
30238 * symbol_ref:                            Constants.          (line   87)
30239 * symbol_ref and /f:                     Flags.              (line  173)
30240 * symbol_ref and /i:                     Flags.              (line  210)
30241 * symbol_ref and /u:                     Flags.              (line   10)
30242 * symbol_ref and /v:                     Flags.              (line  214)
30243 * symbol_ref, RTL sharing:               Sharing.            (line   20)
30244 * SYMBOL_REF_DECL:                       Special Accessors.  (line   55)
30245 * SYMBOL_REF_EXTERNAL_P:                 Special Accessors.  (line   80)
30246 * SYMBOL_REF_FLAG:                       Flags.              (line  214)
30247 * SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections.  (line  193)
30248 * SYMBOL_REF_FLAGS:                      Special Accessors.  (line   67)
30249 * SYMBOL_REF_FUNCTION_P:                 Special Accessors.  (line   73)
30250 * SYMBOL_REF_LOCAL_P:                    Special Accessors.  (line   76)
30251 * SYMBOL_REF_SMALL_P:                    Special Accessors.  (line   85)
30252 * SYMBOL_REF_TLS_MODEL:                  Special Accessors.  (line   89)
30253 * SYMBOL_REF_USED:                       Flags.              (line  205)
30254 * SYMBOL_REF_WEAK:                       Flags.              (line  210)
30255 * symbolic label:                        Sharing.            (line   20)
30256 * SYSROOT_HEADERS_SUFFIX_SPEC:           Driver.             (line  239)
30257 * SYSROOT_SUFFIX_SPEC:                   Driver.             (line  234)
30258 * SYSTEM_INCLUDE_DIR:                    Driver.             (line  408)
30259 * t-TARGET:                              Target Fragment.    (line    6)
30260 * table jump:                            Basic Blocks.       (line   57)
30261 * tablejump instruction pattern:         Standard Names.     (line  786)
30262 * tag:                                   GTY Options.        (line   82)
30263 * tagging insns:                         Tagging Insns.      (line    6)
30264 * tail calls:                            Tail Calls.         (line    6)
30265 * target attributes:                     Target Attributes.  (line    6)
30266 * target description macros:             Target Macros.      (line    6)
30267 * target functions:                      Target Structure.   (line    6)
30268 * target hooks:                          Target Structure.   (line    6)
30269 * target makefile fragment:              Target Fragment.    (line    6)
30270 * target specifications:                 Run-time Target.    (line    6)
30271 * TARGET_:                               Run-time Target.    (line   55)
30272 * TARGET_ADDRESS_COST:                   Costs.              (line  214)
30273 * TARGET_ALIGN_ANON_BITFIELDS:           Storage Layout.     (line  330)
30274 * TARGET_ARG_PARTIAL_BYTES:              Register Arguments. (line   83)
30275 * TARGET_ASM_ALIGNED_DI_OP:              Data Output.        (line   10)
30276 * TARGET_ASM_ALIGNED_HI_OP:              Data Output.        (line    8)
30277 * TARGET_ASM_ALIGNED_SI_OP:              Data Output.        (line    9)
30278 * TARGET_ASM_ALIGNED_TI_OP:              Data Output.        (line   11)
30279 * TARGET_ASM_ASSEMBLE_VISIBILITY:        Label Output.       (line  225)
30280 * TARGET_ASM_BYTE_OP:                    Data Output.        (line    7)
30281 * TARGET_ASM_CAN_OUTPUT_MI_THUNK:        Function Entry.     (line  237)
30282 * TARGET_ASM_CLOSE_PAREN:                Data Output.        (line  128)
30283 * TARGET_ASM_CONSTRUCTOR:                Macros for Initialization.
30284                                                              (line   69)
30285 * TARGET_ASM_DESTRUCTOR:                 Macros for Initialization.
30286                                                              (line   83)
30287 * TARGET_ASM_EH_FRAME_SECTION:           Exception Region Output.
30288                                                              (line   82)
30289 * TARGET_ASM_EMIT_UNWIND_LABEL:          Dispatch Tables.    (line   63)
30290 * TARGET_ASM_EXCEPTION_SECTION:          Exception Region Output.
30291                                                              (line   74)
30292 * TARGET_ASM_EXTERNAL_LIBCALL:           Label Output.       (line  260)
30293 * TARGET_ASM_FILE_END:                   File Framework.     (line   37)
30294 * TARGET_ASM_FILE_START:                 File Framework.     (line    9)
30295 * TARGET_ASM_FILE_START_APP_OFF:         File Framework.     (line   17)
30296 * TARGET_ASM_FILE_START_FILE_DIRECTIVE:  File Framework.     (line   31)
30297 * TARGET_ASM_FUNCTION_BEGIN_EPILOGUE:    Function Entry.     (line   61)
30298 * TARGET_ASM_FUNCTION_END_PROLOGUE:      Function Entry.     (line   55)
30299 * TARGET_ASM_FUNCTION_EPILOGUE:          Function Entry.     (line   68)
30300 * TARGET_ASM_FUNCTION_EPILOGUE and trampolines: Trampolines. (line   71)
30301 * TARGET_ASM_FUNCTION_PROLOGUE:          Function Entry.     (line   11)
30302 * TARGET_ASM_FUNCTION_PROLOGUE and trampolines: Trampolines. (line   71)
30303 * TARGET_ASM_FUNCTION_RODATA_SECTION:    Sections.           (line  147)
30304 * TARGET_ASM_GLOBALIZE_LABEL:            Label Output.       (line  165)
30305 * TARGET_ASM_INTEGER:                    Data Output.        (line   27)
30306 * TARGET_ASM_INTERNAL_LABEL:             Label Output.       (line  295)
30307 * TARGET_ASM_MARK_DECL_PRESERVED:        Label Output.       (line  266)
30308 * TARGET_ASM_NAMED_SECTION:              File Framework.     (line   89)
30309 * TARGET_ASM_OPEN_PAREN:                 Data Output.        (line  127)
30310 * TARGET_ASM_OUTPUT_MI_THUNK:            Function Entry.     (line  195)
30311 * TARGET_ASM_SELECT_RTX_SECTION:         Sections.           (line  156)
30312 * TARGET_ASM_SELECT_SECTION:             Sections.           (line  112)
30313 * TARGET_ASM_UNALIGNED_DI_OP:            Data Output.        (line   14)
30314 * TARGET_ASM_UNALIGNED_HI_OP:            Data Output.        (line   12)
30315 * TARGET_ASM_UNALIGNED_SI_OP:            Data Output.        (line   13)
30316 * TARGET_ASM_UNALIGNED_TI_OP:            Data Output.        (line   15)
30317 * TARGET_ASM_UNIQUE_SECTION:             Sections.           (line  135)
30318 * TARGET_ATTRIBUTE_TABLE:                Target Attributes.  (line   11)
30319 * TARGET_BINDS_LOCAL_P:                  Sections.           (line  218)
30320 * TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc.          (line  743)
30321 * TARGET_BRANCH_TARGET_REGISTER_CLASS:   Misc.               (line  735)
30322 * TARGET_BUILD_BUILTIN_VA_LIST:          Register Arguments. (line  249)
30323 * TARGET_BUILTIN_SETJMP_FRAME_VALUE:     Frame Layout.       (line  110)
30324 * TARGET_C99_FUNCTIONS:                  Library Calls.      (line   77)
30325 * TARGET_CALLEE_COPIES:                  Register Arguments. (line  115)
30326 * TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  248)
30327 * TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  722)
30328 * TARGET_COMP_TYPE_ATTRIBUTES:           Target Attributes.  (line   19)
30329 * TARGET_CPU_CPP_BUILTINS:               Run-time Target.    (line    9)
30330 * TARGET_CXX_CDTOR_RETURNS_THIS:         C++ ABI.            (line   38)
30331 * TARGET_CXX_COOKIE_HAS_SIZE:            C++ ABI.            (line   25)
30332 * TARGET_CXX_EXPORT_CLASS_DATA:          C++ ABI.            (line   53)
30333 * TARGET_CXX_GET_COOKIE_SIZE:            C++ ABI.            (line   18)
30334 * TARGET_CXX_GUARD_MASK_BIT:             C++ ABI.            (line   12)
30335 * TARGET_CXX_GUARD_TYPE:                 C++ ABI.            (line    7)
30336 * TARGET_CXX_IMPORT_EXPORT_CLASS:        C++ ABI.            (line   30)
30337 * TARGET_CXX_KEY_METHOD_MAY_BE_INLINE:   C++ ABI.            (line   43)
30338 * TARGET_DECLSPEC:                       Target Attributes.  (line   59)
30339 * TARGET_DEFAULT_PACK_STRUCT:            Misc.               (line  481)
30340 * TARGET_DEFAULT_SHORT_ENUMS:            Type Layout.        (line  108)
30341 * TARGET_DEFERRED_OUTPUT_DEFS:           Label Output.       (line  379)
30342 * TARGET_DELEGITIMIZE_ADDRESS:           Addressing Modes.   (line  239)
30343 * TARGET_DLLIMPORT_DECL_ATTRIBUTES:      Target Attributes.  (line   47)
30344 * TARGET_DWARF_CALLING_CONVENTION:       SDB and DWARF.      (line   18)
30345 * TARGET_DWARF_HANDLE_FRAME_UNSPEC:      Frame Layout.       (line  161)
30346 * TARGET_DWARF_REGISTER_SPAN:            Exception Region Output.
30347                                                              (line   95)
30348 * TARGET_EDOM:                           Library Calls.      (line   59)
30349 * TARGET_ENCODE_SECTION_INFO:            Sections.           (line  169)
30350 * TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes.
30351                                                              (line   91)
30352 * TARGET_ENCODE_SECTION_INFO usage:      Instruction Output. (line  100)
30353 * TARGET_EXECUTABLE_SUFFIX:              Misc.               (line  696)
30354 * TARGET_EXPAND_BUILTIN:                 Misc.               (line  650)
30355 * TARGET_EXPAND_BUILTIN_SAVEREGS:        Varargs.            (line   92)
30356 * TARGET_EXPR:                           Expression trees.   (line    6)
30357 * TARGET_EXTRA_INCLUDES:                 Misc.               (line  768)
30358 * TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  775)
30359 * TARGET_FIXED_CONDITION_CODE_REGS:      Condition Code.     (line  142)
30360 * target_flags:                          Run-time Target.    (line   52)
30361 * TARGET_FLOAT_FORMAT:                   Storage Layout.     (line  386)
30362 * TARGET_FLT_EVAL_METHOD:                Type Layout.        (line   89)
30363 * TARGET_FOLD_BUILTIN:                   Misc.               (line  659)
30364 * TARGET_FORMAT_TYPES:                   Misc.               (line  795)
30365 * TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes.  (line   81)
30366 * TARGET_FUNCTION_OK_FOR_SIBCALL:        Tail Calls.         (line    8)
30367 * TARGET_GIMPLIFY_VA_ARG_EXPR:           Register Arguments. (line  254)
30368 * TARGET_HAS_F_SETLKW:                   Misc.               (line  558)
30369 * TARGET_HAVE_CTORS_DTORS:               Macros for Initialization.
30370                                                              (line   64)
30371 * TARGET_HAVE_NAMED_SECTIONS:            File Framework.     (line   99)
30372 * TARGET_IN_SMALL_DATA_P:                Sections.           (line  210)
30373 * TARGET_INIT_BUILTINS:                  Misc.               (line  632)
30374 * TARGET_INIT_LIBFUNCS:                  Library Calls.      (line   16)
30375 * TARGET_INSERT_ATTRIBUTES:              Target Attributes.  (line   68)
30376 * TARGET_LIB_INT_CMP_BIASED:             Library Calls.      (line   35)
30377 * TARGET_MACHINE_DEPENDENT_REORG:        Misc.               (line  617)
30378 * TARGET_MANGLE_FUNDAMENTAL_TYPE:        Storage Layout.     (line  521)
30379 * TARGET_MD_ASM_CLOBBERS:                Misc.               (line  538)
30380 * TARGET_MERGE_DECL_ATTRIBUTES:          Target Attributes.  (line   39)
30381 * TARGET_MERGE_TYPE_ATTRIBUTES:          Target Attributes.  (line   31)
30382 * TARGET_MS_BITFIELD_LAYOUT_P:           Storage Layout.     (line  494)
30383 * TARGET_MUST_PASS_IN_STACK:             Register Arguments. (line   62)
30384 * TARGET_MUST_PASS_IN_STACK, and FUNCTION_ARG: Register Arguments.
30385                                                              (line   52)
30386 * TARGET_N_FORMAT_TYPES:                 Misc.               (line  800)
30387 * TARGET_OBJECT_SUFFIX:                  Misc.               (line  691)
30388 * TARGET_OBJFMT_CPP_BUILTINS:            Run-time Target.    (line   46)
30389 * TARGET_OPTF:                           Misc.               (line  782)
30390 * TARGET_OPTION_TRANSLATE_TABLE:         Driver.             (line   53)
30391 * TARGET_OPTIONS:                        Run-time Target.    (line  115)
30392 * TARGET_OS_CPP_BUILTINS:                Run-time Target.    (line   42)
30393 * TARGET_PASS_BY_REFERENCE:              Register Arguments. (line  103)
30394 * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs.            (line  152)
30395 * TARGET_PROMOTE_FUNCTION_ARGS:          Storage Layout.     (line  123)
30396 * TARGET_PROMOTE_FUNCTION_RETURN:        Storage Layout.     (line  128)
30397 * TARGET_PROMOTE_PROTOTYPES:             Stack Arguments.    (line   11)
30398 * TARGET_PTRMEMFUNC_VBIT_LOCATION:       Type Layout.        (line  183)
30399 * TARGET_RELAXED_ORDERING:               Misc.               (line  804)
30400 * TARGET_RETURN_IN_MEMORY:               Aggregate Return.   (line   16)
30401 * TARGET_RETURN_IN_MSB:                  Scalar Return.      (line   90)
30402 * TARGET_RTX_COSTS:                      Costs.              (line  188)
30403 * TARGET_SCALAR_MODE_SUPPORTED_P:        Register Arguments. (line  266)
30404 * TARGET_SCHED_ADJUST_COST:              Scheduling.         (line   40)
30405 * TARGET_SCHED_ADJUST_PRIORITY:          Scheduling.         (line   55)
30406 * TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling.     (line   92)
30407 * TARGET_SCHED_DFA_NEW_CYCLE:            Scheduling.         (line  194)
30408 * TARGET_SCHED_DFA_POST_CYCLE_INSN:      Scheduling.         (line  147)
30409 * TARGET_SCHED_DFA_PRE_CYCLE_INSN:       Scheduling.         (line  135)
30410 * TARGET_SCHED_FINISH:                   Scheduling.         (line  112)
30411 * TARGET_SCHED_FINISH_GLOBAL:            Scheduling.         (line  129)
30412 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
30413                                                              (line  157)
30414 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
30415                                                              (line  185)
30416 * TARGET_SCHED_INIT:                     Scheduling.         (line  102)
30417 * TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling.         (line  152)
30418 * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN:  Scheduling.         (line  144)
30419 * TARGET_SCHED_INIT_GLOBAL:              Scheduling.         (line  121)
30420 * TARGET_SCHED_IS_COSTLY_DEPENDENCE:     Scheduling.         (line  208)
30421 * TARGET_SCHED_ISSUE_RATE:               Scheduling.         (line   12)
30422 * TARGET_SCHED_REORDER:                  Scheduling.         (line   63)
30423 * TARGET_SCHED_REORDER2:                 Scheduling.         (line   80)
30424 * TARGET_SCHED_VARIABLE_ISSUE:           Scheduling.         (line   27)
30425 * TARGET_SECTION_TYPE_FLAGS:             File Framework.     (line  104)
30426 * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES:    Target Attributes.  (line   26)
30427 * TARGET_SETUP_INCOMING_VARARGS:         Varargs.            (line  101)
30428 * TARGET_SHIFT_TRUNCATION_MASK:          Misc.               (line  188)
30429 * TARGET_SPLIT_COMPLEX_ARG:              Register Arguments. (line  237)
30430 * TARGET_STRICT_ARGUMENT_NAMING:         Varargs.            (line  137)
30431 * TARGET_STRUCT_VALUE_RTX:               Aggregate Return.   (line   44)
30432 * TARGET_SWITCHES:                       Run-time Target.    (line   79)
30433 * TARGET_UNWIND_EMIT:                    Dispatch Tables.    (line   74)
30434 * TARGET_UNWIND_INFO:                    Exception Region Output.
30435                                                              (line   55)
30436 * TARGET_USE_JCR_SECTION:                Misc.               (line  813)
30437 * TARGET_USE_LOCAL_THUNK_ALIAS_P:        Misc.               (line  788)
30438 * TARGET_USES_WEAK_UNWIND_INFO:          Exception Handling. (line  128)
30439 * TARGET_VALID_POINTER_MODE:             Register Arguments. (line  260)
30440 * TARGET_VECTOR_MODE_SUPPORTED_P:        Register Arguments. (line  278)
30441 * TARGET_VECTOR_OPAQUE_P:                Storage Layout.     (line  487)
30442 * TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes.  (line  259)
30443 * TARGET_VERSION:                        Run-time Target.    (line  178)
30444 * TARGET_VTABLE_DATA_ENTRY_DISTANCE:     Type Layout.        (line  236)
30445 * TARGET_VTABLE_ENTRY_ALIGN:             Type Layout.        (line  230)
30446 * TARGET_VTABLE_USES_DESCRIPTORS:        Type Layout.        (line  219)
30447 * TARGET_WEAK_NOT_IN_ARCHIVE_TOC:        Label Output.       (line  231)
30448 * targetm:                               Target Structure.   (line    7)
30449 * targets, makefile:                     Makefile.           (line    6)
30450 * TCmode:                                Machine Modes.      (line  111)
30451 * TEMPLATE_DECL:                         Declarations.       (line    6)
30452 * Temporaries:                           Temporaries.        (line    6)
30453 * termination routines:                  Initialization.     (line    6)
30454 * text_section:                          Sections.           (line   95)
30455 * TEXT_SECTION_ASM_OP:                   Sections.           (line   18)
30456 * TFmode:                                Machine Modes.      (line   85)
30457 * THEN_CLAUSE:                           Function Bodies.    (line    6)
30458 * THREAD_MODEL_SPEC:                     Driver.             (line  225)
30459 * THROW_EXPR:                            Expression trees.   (line    6)
30460 * THUNK_DECL:                            Declarations.       (line    6)
30461 * THUNK_DELTA:                           Declarations.       (line    6)
30462 * TImode:                                Machine Modes.      (line   48)
30463 * TImode, in insn:                       Insns.              (line  244)
30464 * tm.h macros:                           Target Macros.      (line    6)
30465 * TQFmode:                               Machine Modes.      (line   62)
30466 * TRAMPOLINE_ADJUST_ADDRESS:             Trampolines.        (line   63)
30467 * TRAMPOLINE_ALIGNMENT:                  Trampolines.        (line   50)
30468 * TRAMPOLINE_SECTION:                    Trampolines.        (line   40)
30469 * TRAMPOLINE_SIZE:                       Trampolines.        (line   46)
30470 * TRAMPOLINE_TEMPLATE:                   Trampolines.        (line   29)
30471 * trampolines for nested functions:      Trampolines.        (line    6)
30472 * TRANSFER_FROM_TRAMPOLINE:              Trampolines.        (line  125)
30473 * trap instruction pattern:              Standard Names.     (line 1058)
30474 * tree <1>:                              Macros and Functions.
30475                                                              (line    6)
30476 * tree:                                  Tree overview.      (line    6)
30477 * Tree SSA:                              Tree SSA.           (line    6)
30478 * TREE_CODE:                             Tree overview.      (line    6)
30479 * TREE_FILENAME:                         Declarations.       (line   19)
30480 * tree_int_cst_equal:                    Expression trees.   (line    6)
30481 * TREE_INT_CST_HIGH:                     Expression trees.   (line    6)
30482 * TREE_INT_CST_LOW:                      Expression trees.   (line    6)
30483 * tree_int_cst_lt:                       Expression trees.   (line    6)
30484 * TREE_LINENO:                           Declarations.       (line   25)
30485 * TREE_LIST:                             Containers.         (line    6)
30486 * TREE_OPERAND:                          Expression trees.   (line    6)
30487 * TREE_PUBLIC:                           Function Basics.    (line    6)
30488 * TREE_PURPOSE:                          Containers.         (line    6)
30489 * TREE_STRING_LENGTH:                    Expression trees.   (line    6)
30490 * TREE_STRING_POINTER:                   Expression trees.   (line    6)
30491 * TREE_TYPE <1>:                         Expression trees.   (line    6)
30492 * TREE_TYPE <2>:                         Function Basics.    (line  171)
30493 * TREE_TYPE <3>:                         Declarations.       (line   16)
30494 * TREE_TYPE:                             Types.              (line    6)
30495 * TREE_VALUE:                            Containers.         (line    6)
30496 * TREE_VEC:                              Containers.         (line    6)
30497 * TREE_VEC_ELT:                          Containers.         (line    6)
30498 * TREE_VEC_LENGTH:                       Containers.         (line    6)
30499 * Trees:                                 Trees.              (line    6)
30500 * TRULY_NOOP_TRUNCATION:                 Misc.               (line  211)
30501 * TRUNC_DIV_EXPR:                        Expression trees.   (line    6)
30502 * TRUNC_MOD_EXPR:                        Expression trees.   (line    6)
30503 * truncate:                              Conversions.        (line   38)
30504 * truncM2 instruction pattern:           Standard Names.     (line  332)
30505 * truncMN2 instruction pattern:          Standard Names.     (line  534)
30506 * TRUTH_AND_EXPR:                        Expression trees.   (line    6)
30507 * TRUTH_ANDIF_EXPR:                      Expression trees.   (line    6)
30508 * TRUTH_NOT_EXPR:                        Expression trees.   (line    6)
30509 * TRUTH_OR_EXPR:                         Expression trees.   (line    6)
30510 * TRUTH_ORIF_EXPR:                       Expression trees.   (line    6)
30511 * TRUTH_XOR_EXPR:                        Expression trees.   (line    6)
30512 * TRY_BLOCK:                             Function Bodies.    (line    6)
30513 * TRY_HANDLERS:                          Function Bodies.    (line    6)
30514 * TRY_STMTS:                             Function Bodies.    (line    6)
30515 * tstM instruction pattern:              Standard Names.     (line  410)
30516 * type:                                  Types.              (line    6)
30517 * type declaration:                      Declarations.       (line    6)
30518 * TYPE_ALIGN:                            Types.              (line    6)
30519 * TYPE_ARG_TYPES:                        Types.              (line    6)
30520 * TYPE_ASM_OP:                           Label Output.       (line   55)
30521 * TYPE_ATTRIBUTES:                       Attributes.         (line   25)
30522 * TYPE_BINFO:                            Classes.            (line    6)
30523 * TYPE_BUILT_IN:                         Types.              (line   83)
30524 * TYPE_CONTEXT:                          Types.              (line    6)
30525 * TYPE_DECL:                             Declarations.       (line    6)
30526 * TYPE_FIELDS <1>:                       Classes.            (line    6)
30527 * TYPE_FIELDS:                           Types.              (line    6)
30528 * TYPE_HAS_ARRAY_NEW_OPERATOR:           Classes.            (line   91)
30529 * TYPE_HAS_DEFAULT_CONSTRUCTOR:          Classes.            (line   76)
30530 * TYPE_HAS_MUTABLE_P:                    Classes.            (line   81)
30531 * TYPE_HAS_NEW_OPERATOR:                 Classes.            (line   88)
30532 * TYPE_MAIN_VARIANT:                     Types.              (line    6)
30533 * TYPE_MAX_VALUE:                        Types.              (line    6)
30534 * TYPE_METHOD_BASETYPE:                  Types.              (line    6)
30535 * TYPE_METHODS:                          Classes.            (line    6)
30536 * TYPE_MIN_VALUE:                        Types.              (line    6)
30537 * TYPE_NAME:                             Types.              (line    6)
30538 * TYPE_NOTHROW_P:                        Function Basics.    (line  180)
30539 * TYPE_OFFSET_BASETYPE:                  Types.              (line    6)
30540 * TYPE_OPERAND_FMT:                      Label Output.       (line   66)
30541 * TYPE_OVERLOADS_ARRAY_REF:              Classes.            (line   99)
30542 * TYPE_OVERLOADS_ARROW:                  Classes.            (line  102)
30543 * TYPE_OVERLOADS_CALL_EXPR:              Classes.            (line   95)
30544 * TYPE_POLYMORPHIC_P:                    Classes.            (line   72)
30545 * TYPE_PRECISION:                        Types.              (line    6)
30546 * TYPE_PTR_P:                            Types.              (line   89)
30547 * TYPE_PTRFN_P:                          Types.              (line   93)
30548 * TYPE_PTRMEM_P:                         Types.              (line    6)
30549 * TYPE_PTROB_P:                          Types.              (line   96)
30550 * TYPE_PTROBV_P:                         Types.              (line    6)
30551 * TYPE_QUAL_CONST:                       Types.              (line    6)
30552 * TYPE_QUAL_RESTRICT:                    Types.              (line    6)
30553 * TYPE_QUAL_VOLATILE:                    Types.              (line    6)
30554 * TYPE_RAISES_EXCEPTIONS:                Function Basics.    (line  175)
30555 * TYPE_SIZE:                             Types.              (line    6)
30556 * TYPE_UNQUALIFIED:                      Types.              (line    6)
30557 * TYPE_VFIELD:                           Classes.            (line    6)
30558 * TYPENAME_TYPE:                         Types.              (line    6)
30559 * TYPENAME_TYPE_FULLNAME:                Types.              (line    6)
30560 * TYPEOF_TYPE:                           Types.              (line    6)
30561 * udiv:                                  Arithmetic.         (line  111)
30562 * udivM3 instruction pattern:            Standard Names.     (line  193)
30563 * udivmodM4 instruction pattern:         Standard Names.     (line  242)
30564 * UINTMAX_TYPE:                          Type Layout.        (line  172)
30565 * umax:                                  Arithmetic.         (line  127)
30566 * umaxM3 instruction pattern:            Standard Names.     (line  193)
30567 * umin:                                  Arithmetic.         (line  127)
30568 * uminM3 instruction pattern:            Standard Names.     (line  193)
30569 * umod:                                  Arithmetic.         (line  114)
30570 * umodM3 instruction pattern:            Standard Names.     (line  193)
30571 * umulhisi3 instruction pattern:         Standard Names.     (line  213)
30572 * umulM3_highpart instruction pattern:   Standard Names.     (line  222)
30573 * umulqihi3 instruction pattern:         Standard Names.     (line  213)
30574 * umulsidi3 instruction pattern:         Standard Names.     (line  213)
30575 * unchanging:                            Flags.              (line  303)
30576 * unchanging, in call_insn:              Flags.              (line   19)
30577 * unchanging, in jump_insn, call_insn and insn: Flags.       (line   24)
30578 * unchanging, in mem:                    Flags.              (line  142)
30579 * unchanging, in subreg:                 Flags.              (line  178)
30580 * unchanging, in symbol_ref:             Flags.              (line   10)
30581 * UNEQ_EXPR:                             Expression trees.   (line    6)
30582 * UNGE_EXPR:                             Expression trees.   (line    6)
30583 * UNGT_EXPR:                             Expression trees.   (line    6)
30584 * UNION_TYPE <1>:                        Classes.            (line    6)
30585 * UNION_TYPE:                            Types.              (line    6)
30586 * unions, returning:                     Interface.          (line   10)
30587 * UNITS_PER_WORD:                        Storage Layout.     (line   67)
30588 * UNKNOWN_TYPE:                          Types.              (line    6)
30589 * UNLE_EXPR:                             Expression trees.   (line    6)
30590 * UNLIKELY_EXECUTED_TEXT_SECTION_NAME:   Sections.           (line   29)
30591 * UNLT_EXPR:                             Expression trees.   (line    6)
30592 * UNORDERED_EXPR:                        Expression trees.   (line    6)
30593 * unshare_all_rtl:                       Sharing.            (line   58)
30594 * unsigned division:                     Arithmetic.         (line  111)
30595 * unsigned greater than:                 Comparisons.        (line   64)
30596 * unsigned less than:                    Comparisons.        (line   68)
30597 * unsigned minimum and maximum:          Arithmetic.         (line  127)
30598 * unsigned_fix:                          Conversions.        (line   72)
30599 * unsigned_float:                        Conversions.        (line   62)
30600 * unspec:                                Side Effects.       (line  284)
30601 * unspec_volatile:                       Side Effects.       (line  284)
30602 * untyped_call instruction pattern:      Standard Names.     (line  696)
30603 * untyped_return instruction pattern:    Standard Names.     (line  746)
30604 * UPDATE_PATH_HOST_CANONICALIZE (PATH):  Filesystem.         (line   59)
30605 * US Software GOFAST, floating point emulation library: Library Calls.
30606                                                              (line   44)
30607 * us_minus:                              Arithmetic.         (line   36)
30608 * us_plus:                               Arithmetic.         (line   14)
30609 * US_SOFTWARE_GOFAST:                    Library Calls.      (line   45)
30610 * us_truncate:                           Conversions.        (line   48)
30611 * use:                                   Side Effects.       (line  159)
30612 * USE_C_ALLOCA:                          Host Misc.          (line   19)
30613 * USE_LD_AS_NEEDED:                      Driver.             (line  198)
30614 * USE_LOAD_POST_DECREMENT:               Costs.              (line  143)
30615 * USE_LOAD_POST_INCREMENT:               Costs.              (line  138)
30616 * USE_LOAD_PRE_DECREMENT:                Costs.              (line  153)
30617 * USE_LOAD_PRE_INCREMENT:                Costs.              (line  148)
30618 * USE_OP:                                Statement Operands. (line  134)
30619 * USE_OP_PTR:                            Statement Operands. (line  131)
30620 * USE_OPS:                               Statement Operands. (line  120)
30621 * use_param:                             GTY Options.        (line  114)
30622 * use_paramN:                            GTY Options.        (line  132)
30623 * use_params:                            GTY Options.        (line  140)
30624 * USE_SELECT_SECTION_FOR_FUNCTIONS:      Sections.           (line  127)
30625 * USE_STORE_POST_DECREMENT:              Costs.              (line  163)
30626 * USE_STORE_POST_INCREMENT:              Costs.              (line  158)
30627 * USE_STORE_PRE_DECREMENT:               Costs.              (line  173)
30628 * USE_STORE_PRE_INCREMENT:               Costs.              (line  168)
30629 * used:                                  Flags.              (line  321)
30630 * used, in symbol_ref:                   Flags.              (line  205)
30631 * USER_LABEL_PREFIX:                     Instruction Output. (line  126)
30632 * USING_DECL:                            Declarations.       (line    6)
30633 * USING_STMT:                            Function Bodies.    (line    6)
30634 * V in constraint:                       Simple Constraints. (line   41)
30635 * VA_ARG_EXPR:                           Expression trees.   (line    6)
30636 * values, returned by functions:         Scalar Return.      (line    6)
30637 * VAR_DECL <1>:                          Expression trees.   (line    6)
30638 * VAR_DECL:                              Declarations.       (line    6)
30639 * varargs implementation:                Varargs.            (line    6)
30640 * variable:                              Declarations.       (line    6)
30641 * vars_to_rename:                        SSA.                (line   76)
30642 * VAX_FLOAT_FORMAT:                      Storage Layout.     (line  394)
30643 * vec_concat:                            Vector Operations.  (line   25)
30644 * vec_duplicate:                         Vector Operations.  (line   30)
30645 * vec_extractM instruction pattern:      Standard Names.     (line  170)
30646 * vec_initM instruction pattern:         Standard Names.     (line  175)
30647 * vec_merge:                             Vector Operations.  (line   11)
30648 * vec_select:                            Vector Operations.  (line   19)
30649 * vec_setM instruction pattern:          Standard Names.     (line  165)
30650 * vector:                                Containers.         (line    6)
30651 * vector operations:                     Vector Operations.  (line    6)
30652 * VECTOR_CST:                            Expression trees.   (line    6)
30653 * VECTOR_STORE_FLAG_VALUE:               Misc.               (line  316)
30654 * virtual operands:                      Statement Operands. (line    6)
30655 * VIRTUAL_INCOMING_ARGS_REGNUM:          Regs and Memory.    (line   59)
30656 * VIRTUAL_OUTGOING_ARGS_REGNUM:          Regs and Memory.    (line   87)
30657 * VIRTUAL_STACK_DYNAMIC_REGNUM:          Regs and Memory.    (line   78)
30658 * VIRTUAL_STACK_VARS_REGNUM:             Regs and Memory.    (line   69)
30659 * VLIW:                                  Processor pipeline description.
30660                                                              (line    6)
30661 * VMS:                                   Filesystem.         (line   37)
30662 * VMS_DEBUGGING_INFO:                    VMS Debug.          (line    9)
30663 * VOID_TYPE:                             Types.              (line    6)
30664 * VOIDmode:                              Machine Modes.      (line  104)
30665 * volatil:                               Flags.              (line  335)
30666 * volatil, in insn, call_insn, jump_insn, code_label, barrier, and note: Flags.
30667                                                              (line   29)
30668 * volatil, in label_ref and reg_label:   Flags.              (line   55)
30669 * volatil, in mem, asm_operands, and asm_input: Flags.       (line   84)
30670 * volatil, in reg:                       Flags.              (line  102)
30671 * volatil, in subreg:                    Flags.              (line  178)
30672 * volatil, in symbol_ref:                Flags.              (line  214)
30673 * volatile memory references:            Flags.              (line  336)
30674 * voting between constraint alternatives: Class Preferences. (line    6)
30675 * walk_dominator_tree:                   SSA.                (line  128)
30676 * walk_use_def_chains:                   SSA.                (line  104)
30677 * WCHAR_TYPE:                            Type Layout.        (line  140)
30678 * WCHAR_TYPE_SIZE:                       Type Layout.        (line  148)
30679 * which_alternative:                     Output Statement.   (line   59)
30680 * WHILE_BODY:                            Function Bodies.    (line    6)
30681 * WHILE_COND:                            Function Bodies.    (line    6)
30682 * WHILE_STMT:                            Function Bodies.    (line    6)
30683 * WIDEST_HARDWARE_FP_SIZE:               Type Layout.        (line   95)
30684 * WINT_TYPE:                             Type Layout.        (line  153)
30685 * word_mode:                             Machine Modes.      (line  222)
30686 * WORD_REGISTER_OPERATIONS:              Misc.               (line  107)
30687 * WORD_SWITCH_TAKES_ARG:                 Driver.             (line   20)
30688 * WORDS_BIG_ENDIAN:                      Storage Layout.     (line   29)
30689 * WORDS_BIG_ENDIAN, effect on subreg:    Regs and Memory.    (line  132)
30690 * X in constraint:                       Simple Constraints. (line  112)
30691 * x-HOST:                                Host Fragment.      (line    6)
30692 * XCmode:                                Machine Modes.      (line  111)
30693 * XCOFF_DEBUGGING_INFO:                  DBX Options.        (line   13)
30694 * XEXP:                                  Accessors.          (line    6)
30695 * XFmode:                                Machine Modes.      (line   79)
30696 * XINT:                                  Accessors.          (line    6)
30697 * xm-MACHINE.h <1>:                      Host Misc.          (line    6)
30698 * xm-MACHINE.h:                          Filesystem.         (line    6)
30699 * xor:                                   Arithmetic.         (line  146)
30700 * xor, canonicalization of:              Insn Canonicalizations.
30701                                                              (line   81)
30702 * xorM3 instruction pattern:             Standard Names.     (line  193)
30703 * XSTR:                                  Accessors.          (line    6)
30704 * XVEC:                                  Accessors.          (line   41)
30705 * XVECEXP:                               Accessors.          (line   48)
30706 * XVECLEN:                               Accessors.          (line   44)
30707 * XWINT:                                 Accessors.          (line    6)
30708 * zero_extend:                           Conversions.        (line   28)
30709 * zero_extendMN2 instruction pattern:    Standard Names.     (line  544)
30710 * zero_extract:                          Bit-Fields.         (line   30)
30711 * zero_extract, canonicalization of:     Insn Canonicalizations.
30712                                                              (line   93)
30713
30714
30715 \1f
30716 Tag Table:
30717 Node: Top\7f2083
30718 Node: Contributing\7f4840
30719 Node: Portability\7f5581
30720 Node: Interface\7f7369
30721 Node: Libgcc\7f10409
30722 Node: Integer library routines\7f12155
30723 Node: Soft float library routines\7f18840
30724 Node: Exception handling routines\7f28298
30725 Node: Miscellaneous routines\7f29393
30726 Node: Languages\7f29776
30727 Node: Source Tree\7f31323
30728 Node: Configure Terms\7f31941
30729 Node: Top Level\7f34899
30730 Node: gcc Directory\7f37247
30731 Node: Subdirectories\7f38216
30732 Node: Configuration\7f40554
30733 Node: Config Fragments\7f41274
30734 Node: System Config\7f42618
30735 Node: Configuration Files\7f43554
30736 Node: Build\7f46240
30737 Node: Makefile\7f46652
30738 Node: Library Files\7f50890
30739 Node: Headers\7f51452
30740 Node: Documentation\7f53431
30741 Node: Texinfo Manuals\7f54281
30742 Node: Man Page Generation\7f56463
30743 Node: Miscellaneous Docs\7f58378
30744 Node: Front End\7f59733
30745 Node: Front End Directory\7f63500
30746 Node: Front End Config\7f68945
30747 Node: Back End\7f71863
30748 Node: Testsuites\7f75304
30749 Node: Test Idioms\7f76096
30750 Node: Test Directives\7f79496
30751 Node: Ada Tests\7f88607
30752 Node: C Tests\7f89899
30753 Node: libgcj Tests\7f94254
30754 Node: gcov Testing\7f95674
30755 Node: profopt Testing\7f98658
30756 Node: compat Testing\7f100101
30757 Node: Passes\7f104323
30758 Node: Parsing pass\7f105062
30759 Node: Gimplification pass\7f108590
30760 Node: Pass manager\7f110417
30761 Node: Tree-SSA passes\7f111745
30762 Node: RTL passes\7f127043
30763 Node: Trees\7f138705
30764 Node: Deficiencies\7f141431
30765 Node: Tree overview\7f141668
30766 Node: Macros and Functions\7f145791
30767 Node: Identifiers\7f145937
30768 Node: Containers\7f147462
30769 Node: Types\7f148617
30770 Node: Scopes\7f161225
30771 Node: Namespaces\7f161987
30772 Node: Classes\7f164799
30773 Node: Declarations\7f169556
30774 Node: Functions\7f175607
30775 Node: Function Basics\7f178010
30776 Node: Function Bodies\7f185175
30777 Node: Attributes\7f197151
30778 Node: Expression trees\7f198392
30779 Node: Tree SSA\7f227415
30780 Node: GENERIC\7f229270
30781 Node: GIMPLE\7f230878
30782 Node: Interfaces\7f232223
30783 Node: Temporaries\7f234099
30784 Ref: Temporaries-Footnote-1\7f235417
30785 Node: GIMPLE Expressions\7f235480
30786 Node: Compound Expressions\7f236250
30787 Node: Compound Lvalues\7f236496
30788 Node: Conditional Expressions\7f237274
30789 Node: Logical Operators\7f237949
30790 Node: Statements\7f238440
30791 Node: Blocks\7f239146
30792 Node: Statement Sequences\7f240561
30793 Node: Empty Statements\7f240896
30794 Node: Loops\7f241472
30795 Node: Selection Statements\7f241714
30796 Node: Jumps\7f242565
30797 Node: Cleanups\7f243208
30798 Node: GIMPLE Exception Handling\7f243858
30799 Node: GIMPLE Example\7f245027
30800 Node: Rough GIMPLE Grammar\7f246436
30801 Node: Annotations\7f251367
30802 Node: Statement Operands\7f252031
30803 Node: SSA\7f263238
30804 Node: Alias analysis\7f269734
30805 Node: RTL\7f275808
30806 Node: RTL Objects\7f277912
30807 Node: RTL Classes\7f281786
30808 Node: Accessors\7f286738
30809 Node: Special Accessors\7f289132
30810 Node: Flags\7f293002
30811 Node: Machine Modes\7f308456
30812 Node: Constants\7f317174
30813 Node: Regs and Memory\7f323287
30814 Node: Arithmetic\7f336342
30815 Node: Comparisons\7f344475
30816 Node: Bit-Fields\7f348767
30817 Node: Vector Operations\7f350319
30818 Node: Conversions\7f351945
30819 Node: RTL Declarations\7f355260
30820 Node: Side Effects\7f356081
30821 Node: Incdec\7f372197
30822 Node: Assembler\7f375537
30823 Node: Insns\7f377069
30824 Node: Calls\7f402896
30825 Node: Sharing\7f405489
30826 Node: Reading RTL\7f408599
30827 Node: Control Flow\7f409589
30828 Node: Basic Blocks\7f410560
30829 Node: Edges\7f415128
30830 Node: Profile information\7f423690
30831 Node: Maintaining the CFG\7f428376
30832 Node: Liveness information\7f435391
30833 Node: Machine Desc\7f437811
30834 Node: Overview\7f440266
30835 Node: Patterns\7f442307
30836 Node: Example\7f445745
30837 Node: RTL Template\7f447180
30838 Node: Output Template\7f457835
30839 Node: Output Statement\7f461801
30840 Node: Predicates\7f465763
30841 Node: Machine-Independent Predicates\7f468681
30842 Node: Defining Predicates\7f473313
30843 Node: Constraints\7f477962
30844 Node: Simple Constraints\7f478991
30845 Node: Multi-Alternative\7f491379
30846 Node: Class Preferences\7f494220
30847 Node: Modifiers\7f495112
30848 Node: Machine Constraints\7f499032
30849 Node: Standard Names\7f522963
30850 Ref: shift patterns\7f534169
30851 Ref: prologue instruction pattern\7f569259
30852 Ref: epilogue instruction pattern\7f569752
30853 Node: Pattern Ordering\7f572203
30854 Node: Dependent Patterns\7f573439
30855 Node: Jump Patterns\7f576253
30856 Node: Looping Patterns\7f581986
30857 Node: Insn Canonicalizations\7f586588
30858 Node: Expander Definitions\7f590750
30859 Node: Insn Splitting\7f598868
30860 Node: Including Patterns\7f608455
30861 Node: Peephole Definitions\7f610235
30862 Node: define_peephole\7f611488
30863 Node: define_peephole2\7f617819
30864 Node: Insn Attributes\7f620886
30865 Node: Defining Attributes\7f621992
30866 Node: Expressions\7f624009
30867 Node: Tagging Insns\7f630611
30868 Node: Attr Example\7f634964
30869 Node: Insn Lengths\7f637338
30870 Node: Constant Attributes\7f640397
30871 Node: Delay Slots\7f641566
30872 Node: Processor pipeline description\7f644790
30873 Ref: Processor pipeline description-Footnote-1\7f662127
30874 Node: Conditional Execution\7f662457
30875 Node: Constant Definitions\7f665310
30876 Node: Macros\7f666902
30877 Node: Mode Macros\7f667331
30878 Node: Defining Mode Macros\7f668283
30879 Node: String Substitutions\7f669768
30880 Node: Examples\7f671564
30881 Node: Code Macros\7f673007
30882 Node: Target Macros\7f675222
30883 Node: Target Structure\7f678028
30884 Node: Driver\7f679297
30885 Node: Run-time Target\7f701557
30886 Node: Per-Function Data\7f712147
30887 Node: Storage Layout\7f714910
30888 Node: Type Layout\7f739385
30889 Node: Registers\7f750261
30890 Node: Register Basics\7f751184
30891 Node: Allocation Order\7f756751
30892 Node: Values in Registers\7f758196
30893 Node: Leaf Functions\7f763872
30894 Node: Stack Registers\7f766730
30895 Node: Register Classes\7f767846
30896 Node: Stack and Calling\7f794019
30897 Node: Frame Layout\7f794522
30898 Node: Exception Handling\7f803705
30899 Node: Stack Checking\7f810053
30900 Node: Frame Registers\7f813682
30901 Node: Elimination\7f820286
30902 Node: Stack Arguments\7f824315
30903 Node: Register Arguments\7f830890
30904 Node: Scalar Return\7f845117
30905 Node: Aggregate Return\7f849888
30906 Node: Caller Saves\7f853339
30907 Node: Function Entry\7f854515
30908 Node: Profiling\7f867131
30909 Node: Tail Calls\7f868787
30910 Node: Varargs\7f869619
30911 Node: Trampolines\7f877579
30912 Node: Library Calls\7f884354
30913 Node: Addressing Modes\7f888774
30914 Node: Condition Code\7f902824
30915 Node: Costs\7f911111
30916 Node: Scheduling\7f923111
30917 Node: Sections\7f936166
30918 Node: PIC\7f947262
30919 Node: Assembler Format\7f950108
30920 Node: File Framework\7f951187
30921 Node: Data Output\7f956750
30922 Node: Uninitialized Data\7f964181
30923 Node: Label Output\7f969713
30924 Node: Initialization\7f990788
30925 Node: Macros for Initialization\7f996750
30926 Node: Instruction Output\7f1002813
30927 Node: Dispatch Tables\7f1011807
30928 Node: Exception Region Output\7f1015292
30929 Node: Alignment Output\7f1020339
30930 Node: Debugging Info\7f1024483
30931 Node: All Debuggers\7f1025153
30932 Node: DBX Options\7f1028008
30933 Node: DBX Hooks\7f1033457
30934 Node: File Names and DBX\7f1035383
30935 Node: SDB and DWARF\7f1037494
30936 Node: VMS Debug\7f1041191
30937 Node: Floating Point\7f1041761
30938 Node: Mode Switching\7f1046583
30939 Node: Target Attributes\7f1050509
30940 Node: MIPS Coprocessors\7f1054998
30941 Node: PCH Target\7f1056572
30942 Node: C++ ABI\7f1057833
30943 Node: Misc\7f1060708
30944 Ref: TARGET_SHIFT_TRUNCATION_MASK\7f1069611
30945 Node: Host Config\7f1101179
30946 Node: Host Common\7f1102239
30947 Node: Filesystem\7f1104618
30948 Node: Host Misc\7f1108733
30949 Node: Fragments\7f1111093
30950 Node: Target Fragment\7f1112288
30951 Node: Host Fragment\7f1117716
30952 Node: Collect2\7f1119158
30953 Node: Header Dirs\7f1121701
30954 Node: Type Information\7f1123124
30955 Node: GTY Options\7f1125312
30956 Node: GGC Roots\7f1135446
30957 Node: Files\7f1136166
30958 Node: Funding\7f1138830
30959 Node: GNU Project\7f1141326
30960 Node: Copying\7f1141975
30961 Node: GNU Free Documentation License\7f1161128
30962 Node: Contributors\7f1183527
30963 Node: Option Index\7f1213709
30964 Node: Concept Index\7f1214294
30965 \1f
30966 End Tag Table