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.
4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
5 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
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".
15 (a) The FSF's Front-Cover Text is:
19 (b) The FSF's Back-Cover Text is:
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.
25 INFO-DIR-SECTION Programming
27 * gccint: (gccint). Internals of the GNU Compiler Collection.
29 This file documents the internals of the GNU compilers.
31 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
32 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
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".
42 (a) The FSF's Front-Cover Text is:
46 (b) The FSF's Back-Cover Text is:
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.
54 File: gccint.info, Node: Top, Next: Contributing, Up: (DIR)
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.
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
75 Additional tutorial information is linked to from
76 `http://gcc.gnu.org/readings.html'.
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.
99 * Funding:: How to help assure funding for free software.
100 * GNU Project:: The GNU Project and GNU/Linux.
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.
107 * Option Index:: Index to command line options.
108 * Concept Index:: Index of concepts and symbol names.
111 File: gccint.info, Node: Contributing, Next: Portability, Prev: Top, Up: Top
113 1 Contributing to GCC Development
114 *********************************
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'.
121 If you would like to work on improvements to GCC, please read the
122 advice at these URLs:
124 `http://gcc.gnu.org/contribute.html'
125 `http://gcc.gnu.org/contributewhy.html'
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/'.
132 File: gccint.info, Node: Portability, Next: Interface, Prev: Contributing, Up: Top
134 2 GCC and Portability
135 *********************
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.
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
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.
167 File: gccint.info, Node: Interface, Next: Libgcc, Prev: Portability, Up: Top
169 3 Interfacing to GCC Output
170 ***************************
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::).
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.
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.
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.
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.
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.
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
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
226 File: gccint.info, Node: Libgcc, Next: Languages, Prev: Interface, Up: Top
228 4 The GCC low-level runtime library
229 ***********************************
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.
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.
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
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.
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'.
261 * Integer library routines::
262 * Soft float library routines::
263 * Exception handling routines::
264 * Miscellaneous routines::
267 File: gccint.info, Node: Integer library routines, Next: Soft float library routines, Up: Libgcc
269 4.1 Routines for integer arithmetic
270 ===================================
272 The integer arithmetic routines are used on platforms that don't provide
273 hardware support for arithmetic operations on some modes.
275 4.1.1 Arithmetic functions
276 --------------------------
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.
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
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
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
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
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.
312 -- Runtime Function: long __negdi2 (long A)
313 -- Runtime Function: long long __negti2 (long long A)
314 These functions return the negation of A.
316 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
318 -- Runtime Function: unsigned long __udivdi3 (unsigned long A,
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
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.
333 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
335 -- Runtime Function: unsigned long __umoddi3 (unsigned long A,
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
342 4.1.2 Comparison functions
343 --------------------------
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.
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.
358 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
359 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned
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.
365 4.1.3 Trapping arithmetic functions
366 -----------------------------------
368 The following functions implement trapping arithmetic. These functions
369 call the libc function `abort' upon signed arithmetic overflow.
371 -- Runtime Function: int __absvsi2 (int A)
372 -- Runtime Function: long __absvdi2 (long A)
373 These functions return the absolute value of A.
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'.
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'.
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'.
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
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
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
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
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.
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.
427 File: gccint.info, Node: Soft float library routines, Next: Exception handling routines, Prev: Integer library routines, Up: Libgcc
429 4.2 Routines for floating point emulation
430 =========================================
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.)
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.
441 Presently the library does not support `XFmode', which is used for
442 `long double' on some architectures.
444 4.2.1 Arithmetic functions
445 --------------------------
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
451 -- Runtime Function: long double __addxf3 (long double A, long double
453 These functions return the sum of A and B.
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
459 -- Runtime Function: long double __subxf3 (long double A, long double
461 These functions return the difference between B and A; that is,
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
468 -- Runtime Function: long double __mulxf3 (long double A, long double
470 These functions return the product of A and B.
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
476 -- Runtime Function: long double __divxf3 (long double A, long double
478 These functions return the quotient of A and B; that is, A / B.
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.
487 4.2.2 Conversion functions
488 --------------------------
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.
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.
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
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.
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
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.
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.
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.
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.
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.
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.
564 4.2.3 Comparison functions
565 --------------------------
567 There are two sets of basic comparison functions.
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.
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,
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
590 if (__unordXf2 (a, b))
592 return __cmpXf2 (a, b);
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
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
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.
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.
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.
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.
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.
636 File: gccint.info, Node: Exception handling routines, Next: Miscellaneous routines, Prev: Soft float library routines, Up: Libgcc
638 4.3 Language-independent routines for exception handling
639 ========================================================
643 _Unwind_DeleteException
648 _Unwind_GetLanguageSpecificData
649 _Unwind_GetRegionStart
650 _Unwind_GetTextRelBase
651 _Unwind_GetDataRelBase
652 _Unwind_RaiseException
656 _Unwind_FindEnclosingFunction
657 _Unwind_SjLj_Register
658 _Unwind_SjLj_Unregister
659 _Unwind_SjLj_RaiseException
660 _Unwind_SjLj_ForcedUnwind
663 __deregister_frame_info
664 __deregister_frame_info_bases
666 __register_frame_info
667 __register_frame_info_bases
668 __register_frame_info_table
669 __register_frame_info_table_bases
670 __register_frame_table
673 File: gccint.info, Node: Miscellaneous routines, Prev: Exception handling routines, Up: Libgcc
675 4.4 Miscellaneous runtime library routines
676 ==========================================
678 4.4.1 Cache control functions
679 -----------------------------
681 -- Runtime Function: void __clear_cache (char *BEG, char *END)
682 This function clears the instruction cache between BEG and END.
685 File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top
687 5 Language Front Ends in GCC
688 ****************************
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
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:
701 * GCC front ends benefit from the support for many different target
702 machines already present in GCC.
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
709 * Better debugging information is generated when compiling directly
710 from source code than when going via intermediate generated C code.
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.
720 File: gccint.info, Node: Source Tree, Next: Passes, Prev: Languages, Up: Top
722 6 Source Tree Structure and Build System
723 ****************************************
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.
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.
738 File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree
740 6.1 Configure Terms and History
741 ===============================
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
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=',
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.
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".
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
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.
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.
795 File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree
797 6.2 Top Level Source Directory
798 ==============================
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:
806 The Boehm conservative garbage collector, used as part of the Java
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.
815 An implementation of the `jar' command, used with the Java front
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.
825 Headers for the `libiberty' library.
828 The Ada runtime library.
831 The C preprocessor library.
834 The Fortran runtime library.
837 The `libffi' library, used as part of the Java runtime library.
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
846 The Java runtime library.
849 The `libmudflap' library, used for instrumenting pointer and array
850 dereferencing operations.
853 The Objective-C and Objective-C++ runtime library.
856 The C++ runtime library.
859 Scripts used by the `gccadmin' account on `gcc.gnu.org'.
862 The `zlib' compression library, used by the Java front end and as
863 part of the Java runtime library.
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,
872 File: gccint.info, Node: gcc Directory, Next: Testsuites, Prev: Top Level, Up: Source Tree
874 6.3 The `gcc' Subdirectory
875 ==========================
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.
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.
896 File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory
898 6.3.1 Subdirectories of `gcc'
899 -----------------------------
901 The `gcc' directory contains the following subdirectories:
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.
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.
918 Texinfo documentation for GCC, together with automatically
919 generated man pages and support for converting the installation
920 manual to HTML. *Note Documentation::.
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'.
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
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.
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
950 The GCC testsuites (except for those for runtime libraries).
954 File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory
956 6.3.2 Configuration in the `gcc' Directory
957 ------------------------------------------
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
967 * Config Fragments:: Scripts used by `configure'.
968 * System Config:: The `config.build', `config.host', and
970 * Configuration Files:: Files created by running `configure'.
973 File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration
975 6.3.2.1 Scripts Used by `configure'
976 ...................................
978 `configure' uses some other scripts to help in its work:
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
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
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
1000 * A helper script `configure.frag' is used as part of creating the
1001 output of `configure'.
1004 File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration
1006 6.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files
1007 .................................................................
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.
1013 The `config.host' file contains specific rules for particular systems
1014 which GCC will run on. This is rarely needed.
1016 The `config.gcc' file contains specific rules for particular systems
1017 which GCC will generate code for. This is usually needed.
1019 Each file has a list of the shell variables it sets, with
1020 descriptions, at the top of the file.
1022 FIXME: document the contents of these files, and what variables should
1023 be set to control build, host and target configuration.
1026 File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration
1028 6.3.2.3 Files Created by `configure'
1029 ....................................
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
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'.
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.
1046 * `config.status' is a script that may be run to recreate the
1047 current configuration.
1049 * `configargs.h' is a header containing details of the arguments
1050 passed to `configure' to configure GCC, and of the thread model
1053 * `cstamp-h' is used as a timestamp.
1055 * `fixinc/Makefile' is constructed from `fixinc/Makefile.in'.
1057 * `gccbug', a script for reporting bugs in GCC, is constructed from
1060 * `intl/Makefile' is constructed from `intl/Makefile.in'.
1062 * `mklibgcc', a shell script to create a Makefile to build libgcc,
1063 is constructed from `mklibgcc.in'.
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.
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',
1079 * `config.h', for use in programs that run on the host machine.
1081 * `bconfig.h', for use in programs that run on the build machine.
1083 * `tconfig.h', for use in programs and libraries for the target
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?
1091 File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory
1093 6.3.3 Build System in the `gcc' Directory
1094 -----------------------------------------
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::).
1102 File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory
1104 6.3.4 Makefile Targets
1105 ----------------------
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.
1113 Produce info-formatted documentation and man pages. Essentially it
1114 calls `make man' and `make info'.
1117 Produce DVI-formatted documentation.
1120 Produce HTML-formatted documentation.
1126 Generate info-formatted pages.
1129 Delete the files made while building the compiler.
1132 That, and all the other files built by `make all'.
1135 That, and all the files created by `configure'.
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.
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
1150 Copies the info-formatted and manpage documentation into the source
1151 directory usually for the purpose of generating a release tarball.
1157 Deletes installed files.
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:
1167 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
1169 Note that running the testsuite may require additional tools be
1170 installed, such as TCL or dejagnu.
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/'.
1181 Like `bootstrap', except that the various stages are removed once
1182 they're no longer needed. This saves disk space.
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.
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.
1198 Removed everything (`make clean') and rebuilds (`make bootstrap').
1201 Like `cleanstrap', except that the process starts from the first
1202 stage build, not from scratch.
1204 `stageN (N = 1...4)'
1205 For each stage, moves the appropriate files to the `stageN'
1208 `unstageN (N = 1...4)'
1209 Undoes the corresponding `stageN'.
1211 `restageN (N = 1...4)'
1212 Undoes the corresponding `stageN' and rebuilds it with the
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.
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
1229 File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory
1231 6.3.5 Library Source Files and Headers under the `gcc' Directory
1232 ----------------------------------------------------------------
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.
1241 File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory
1243 6.3.6 Headers Installed by GCC
1244 ------------------------------
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
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'.
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
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.
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.
1281 File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory
1283 6.3.7 Building Documentation
1284 ----------------------------
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.
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.
1301 File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation
1303 6.3.7.1 Texinfo Manuals
1304 .......................
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
1313 The GNU Free Documentation License.
1316 The section "Funding Free Software".
1319 Common definitions for manuals.
1322 The GNU General Public License.
1325 A copy of `texinfo.tex' known to work with the GCC manuals.
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.
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.
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'.
1354 File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation
1356 6.3.7.2 Man Page Generation
1357 ...........................
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.)
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.
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:
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.
1386 Use for summary lists of options in manuals.
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.
1393 FIXME: describe the `texi2pod.pl' input language and magic comments in
1397 File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation
1399 6.3.7.3 Miscellaneous Documentation
1400 ...................................
1402 In addition to the formal documentation that is installed by GCC, there
1403 are several other text files with miscellaneous documentation:
1406 Notes on GCC's Native Language Support. FIXME: this should be
1407 part of this manual rather than a separate file.
1410 Notes on the Free Translation Project.
1413 The GNU General Public License.
1416 The GNU Lesser General Public License.
1420 Change log files for various parts of GCC.
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.
1428 Information about new features in old versions of GCC. (For recent
1429 versions, the information is on the GCC web site.)
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
1437 A pointer to the GNU Service Directory.
1439 FIXME: document such files in subdirectories, at least `config', `cp',
1440 `objc', `testsuite'.
1443 File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory
1445 6.3.8 Anatomy of a Language Front End
1446 -------------------------------------
1448 A front end for a language in GCC has the following parts:
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.
1454 * A mention of the language in the list of supported languages in
1455 `gcc/doc/install.texi'.
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'.
1461 * A mention of any special prerequisites for building the front end
1462 in the documentation of prerequisites in `gcc/doc/install.texi'.
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
1469 * Information about support for that language in
1470 `gcc/doc/frontends.texi'.
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.
1476 * Details of source file suffixes for that language and `-x LANG'
1477 options supported, in `gcc/doc/invoke.texi'.
1479 * Entries in `default_compilers' in `gcc.c' for source file suffixes
1482 * Preferably testsuites, which may be under `gcc/testsuite' or
1483 runtime library directories. FIXME: document somewhere how to
1484 write testsuite harnesses.
1486 * Probably a runtime library for the language, outside the `gcc'
1487 directory. FIXME: document this further.
1489 * Details of the directories of any runtime libraries in
1490 `gcc/doc/sourcebuild.texi'.
1492 If the front end is added to the official GCC CVS repository, the
1493 following are also necessary:
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.
1499 * Normally, one or more maintainers of that front end listed in
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.)
1507 * A news item on `index.html', and possibly an announcement on the
1508 <gcc-announce@gcc.gnu.org> mailing list.
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'.
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/'.
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.
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.
1529 * `CVSROOT/modules' in the GCC CVS repository should be updated.
1533 * Front End Directory:: The front end `LANGUAGE' directory.
1534 * Front End Config:: The front end `config-lang.in' file.
1537 File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End
1539 6.3.8.1 The Front End `LANGUAGE' Directory
1540 ..........................................
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:
1549 This file is required in all language subdirectories. *Note The
1550 Front End `config-lang.in' File: Front End Config, for details of
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
1570 FIXME: exactly what goes in each of these targets?
1573 Build an `etags' `TAGS' file in the language subdirectory in
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.
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.
1589 Build HTML documentation for the front end, in the build
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.
1601 FIXME: what is this target for?
1604 Install everything that is part of the front end, apart from
1605 the compiler executables listed in `compilers' in
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.
1615 Install man pages for the front end. This target should
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
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
1635 Uninstall files installed by installing the compiler. This is
1636 currently documented not to be supported, so the hook need
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.
1656 Move to the stage directory files not included in
1657 `stagestuff' in `config-lang.in' or otherwise moved by the
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
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.
1672 This file, which need not exist, defines any language-specific tree
1676 File: gccint.info, Node: Front End Config, Prev: Front End Directory, Up: Front End
1678 6.3.8.2 The Front End `config-lang.in' File
1679 ...........................................
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:
1687 This definition must be present, and gives the name of the language
1688 for some purposes such as arguments to `--enable-languages'.
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++'.
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'.
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.
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).
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
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
1725 If defined, a space-separated list of files that should be moved to
1726 the `stageN' directories in each stage of bootstrap.
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.
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::.
1742 If defined to `yes', this frontend requires the GMP library.
1743 Enables configure tests for GMP, which set `GMPLIBS' and `GMPINC'
1748 File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory
1750 6.3.9 Anatomy of a Target Back End
1751 ----------------------------------
1753 A back end for a target architecture in GCC has the following parts:
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
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.
1769 * Entries in `config.gcc' (*note The `config.gcc' File: System
1770 Config.) for the systems with this target architecture.
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.
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.
1783 * Documentation in `gcc/doc/extend.texi' for any target-specific
1786 * Documentation in `gcc/doc/extend.texi' of any target-specific
1787 built-in functions supported.
1789 * Documentation in `gcc/doc/extend.texi' of any target-specific
1790 format checking styles supported.
1792 * Documentation in `gcc/doc/md.texi' of any target-specific
1793 constraint letters (*note Constraints for Particular Machines:
1794 Machine Constraints.).
1796 * A note in `gcc/doc/contrib.texi' under the person or people who
1797 contributed the target support.
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.
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.
1809 If the back end is added to the official GCC CVS repository, the
1810 following are also necessary:
1812 * An entry for the target architecture in `readings.html' on the GCC
1813 web site, with any relevant links.
1815 * Details of the properties of the back end and target architecture
1816 in `backends.html' on the GCC web site.
1818 * A news item about the contribution of support for that target
1819 architecture, in `index.html' on the GCC web site.
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.
1827 File: gccint.info, Node: Testsuites, Prev: gcc Directory, Up: Source Tree
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.
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.
1849 File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites
1851 6.4.1 Idioms Used in Testsuite Code
1852 -----------------------------------
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.
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,
1876 /* { dg-bogus "warning" "warning in place of error" } */
1877 /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
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:
1883 char x[((E) == (V) ? 1 : -1)];
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'.
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
1901 #ifndef __OPTIMIZE__
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
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.
1920 FIXME: discuss non-C testsuites here.
1923 File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites
1925 6.4.2 Directives used within DejaGnu tests
1926 ------------------------------------------
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.
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.
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
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.
1952 { target { ! "hppa*-*-* ia64*-*-*" } }
1953 { target { powerpc*-*-* && lp64 } }
1954 { xfail { lp64 || vect_no_align } }
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:
1961 Compile with `-E' to run only the preprocessor.
1964 Compile with `-S' to produce an assembly code file.
1967 Compile with `-c' to produce a relocatable object file.
1970 Compile, assemble, and link to produce an executable file.
1973 Produce and run an executable file, which is expected to
1974 return an exit code of 0.
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
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.
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
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.
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
2001 Use `"*"' for an empty INCLUDE-OPTS list and `""' for an empty
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.
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.
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.
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
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
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
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'.
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'.
2054 `{ dg-prune-output REGEXP }'
2055 Prune messages matching REGEXP from test output.
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.
2061 `{ dg-additional-sources "FILELIST" }'
2062 Specify additional source files to appear in the compile line
2063 following the main test file.
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.
2071 The GCC testsuite defines the following directives to be used
2074 `scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
2075 Passes if REGEXP matches text in FILENAME.
2077 `scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
2078 Passes if REGEXP does not match text in FILENAME.
2080 `scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
2081 Passes if SYMBOL is defined as a hidden symbol in the test's
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.
2088 `scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
2089 Passes if REGEX is matched exactly NUM times in the test's
2092 `scan-assembler REGEX [{ target/xfail SELECTOR }]'
2093 Passes if REGEX matches text in the test's assembler output.
2095 `scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
2096 Passes if REGEX does not match text in the test's assembler
2099 `scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
2100 Passes if REGEX matches text in the test's demangled
2103 `scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
2104 Passes if REGEX does not match text in the test's demangled
2107 `scan-tree-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
2108 Passes if REGEX is found exactly NUM times in the dump file
2111 `scan-tree-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
2112 Passes if REGEX matches text in the dump file with suffix
2115 `scan-tree-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
2116 Passes if REGEX does not match text in the dump file with
2119 `scan-tree-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
2120 Passes if REGEX matches demangled text in the dump file with
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.
2127 `run-gcov SOURCEFILE'
2128 Check line counts in `gcov' tests.
2130 `run-gcov [branches] [calls] { OPTS SOURCEFILE }'
2131 Check branch and/or call counts, in addition to line counts,
2135 File: gccint.info, Node: Ada Tests, Next: C Tests, Prev: Test Directives, Up: Testsuites
2137 6.4.3 Ada Language Testsuites
2138 -----------------------------
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'
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
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
2153 $ make check-ada CHAPTERS="c3 c9"
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.
2159 There is also an extra chapter called `gcc' containing a template for
2160 creating new executable tests.
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'.
2166 These tests are run using the build tree: they can be run without doing
2170 File: gccint.info, Node: C Tests, Next: libgcj Tests, Prev: Ada Tests, Up: Testsuites
2172 6.4.4 C Language Testsuites
2173 ---------------------------
2175 GCC contains the following C language testsuites, in the
2176 `gcc/testsuite' directory:
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.
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.
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.).
2197 This subdirectory contains tests of the preprocessor.
2200 This subdirectory contains tests for debug formats. Tests in this
2201 subdirectory are run for each debug format that the compiler
2205 This subdirectory contains tests of the `-Wformat' format
2206 checking. Tests in this directory are run with and without
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.
2216 FIXME: describe this.
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.
2227 `gcc.c-torture/compat'
2228 FIXME: describe this.
2230 This directory should probably not be used for new tests.
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.
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'
2248 `gcc.c-torture/execute/ieee'
2249 This contains tests which are specific to IEEE floating point.
2251 `gcc.c-torture/unsorted'
2252 FIXME: describe this.
2254 This directory should probably not be used for new tests.
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:
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
2268 Test the testsuite itself using `dg-test.exp'.
2271 Test `gcov' output using `gcov.exp', which in turn uses the
2272 language-independent support (*note Support for testing gcov:
2276 Test i386-specific support for data prefetch using
2277 `i386-prefetch.exp'.
2280 FIXME: merge in `testsuite/README.gcc' and discuss the format of test
2281 cases and magic comments more.
2284 File: gccint.info, Node: libgcj Tests, Next: gcov Testing, Prev: C Tests, Up: Testsuites
2286 6.4.5 The Java library testsuites.
2287 ----------------------------------
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.
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'.
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.
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'.
2311 We encourage developers to contribute test cases to Mauve and Jacks.
2314 File: gccint.info, Node: gcov Testing, Next: profopt Testing, Prev: libgcj Tests, Up: Testsuites
2316 6.4.6 Support for testing `gcov'
2317 --------------------------------
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:
2325 { dg-options "-fprofile-arcs -ftest-coverage" }
2326 { dg-do run { target native } }
2327 { dg-final { run-gcov sourcefile } }
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
2338 { dg-final { run-gcov branches calls { -b sourcefile } } }
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.
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.
2355 if (i > 10 && j > i && j < 20) /* branch(27 50 75) */
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.
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.
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.
2376 File: gccint.info, Node: profopt Testing, Next: compat Testing, Prev: gcov Testing, Up: Testsuites
2378 6.4.7 Support for testing profile-directed optimizations
2379 --------------------------------------------------------
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.
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.
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:
2399 tool being tested, e.g., `gcc'
2402 options used to generate profile data
2405 options used to optimize using that profile data
2408 suffix of profile data files
2411 list of options with which to run each test, similar to the lists
2415 File: gccint.info, Node: compat Testing, Prev: profopt Testing, Up: Testsuites
2417 6.4.8 Support for testing binary compatibility
2418 ----------------------------------------------
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.
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.
2430 `TESTNAME_main.SUFFIX'
2431 Contains the main program, which calls a function in file
2432 `TESTNAME_x.SUFFIX'.
2435 Contains at least one call to a function in `TESTNAME_y.SUFFIX'.
2438 Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'.
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.
2449 `compat.exp' defines default pairs of compiler options. These can be
2450 overridden by defining the environment variable `COMPAT_OPTIONS' as:
2452 COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
2453 ...[list {TSTN} {ALTN}]]"
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
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'.
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':
2479 ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
2480 COMPAT_OPTIONS="lists as shown above" \
2482 RUNTESTFLAGS="compat.exp"
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.
2491 The binary compatibility tests support a small number of test framework
2492 commands that appear within comments in a test file.
2495 These commands can be used in `TESTNAME_main.SUFFIX' to skip the
2496 test if specific support is not available on the target.
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.
2505 This command can be used in a secondary source file to specify that
2506 compilation is expected to fail for particular options on
2510 File: gccint.info, Node: Passes, Next: Trees, Prev: Source Tree, Up: Top
2512 7 Passes and Files of the Compiler
2513 **********************************
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.
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.
2529 File: gccint.info, Node: Parsing pass, Next: Gimplification pass, Up: Passes
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.
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.
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.
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.
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.
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.
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'.
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
2594 The middle-end will, at its option, emit the function and data
2595 definitions immediately or queue them for later processing.
2598 File: gccint.info, Node: Gimplification pass, Next: Pass manager, Prev: Parsing pass, Up: Passes
2600 7.2 Gimplification pass
2601 =======================
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
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.
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'
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'.
2634 File: gccint.info, Node: Pass manager, Next: Tree-SSA passes, Prev: Gimplification pass, Up: Passes
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
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.
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.
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...
2663 File: gccint.info, Node: Tree-SSA passes, Next: RTL passes, Prev: Pass manager, Up: Passes
2668 The following briefly describes the tree optimization passes that are
2669 run after gimplification and what source files they are located in.
2671 * Remove useless statements
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'.
2683 * Mudflap declaration registration
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'.
2697 * Lower control flow
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'.
2707 * Lower exception handling control flow
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'.
2720 * Build the control flow graph
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'.
2726 * Find all referenced variables
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'.
2735 * Enter static single assignment form
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'.
2744 * Warn for uninitialized variables
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'.
2755 * Dead code elimination
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'.
2763 * Dominator optimizations
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'.
2770 * Redundant phi elimination
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
2778 * Forward propagation of single-use variables
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'.
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'.
2794 * PHI node optimizations
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
2801 * May-alias optimization
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
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'.
2820 * Lower complex arithmetic
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'.
2826 * Scalar replacement of aggregates
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'.
2834 * Dead store elimination
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'.
2840 * Tail recursion elimination
2842 This pass transforms tail recursion into a loop. It is located in
2843 `tree-tailcall.c' and is described by `pass_tail_recursion'.
2845 * Partial redundancy elimination
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'.
2853 The main driver of the pass is placed in `tree-ssa-loop.c' and
2854 described by `pass_loop'.
2856 The optimizations performed by this pass are:
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'.
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'.
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'.
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
2887 The optimizations also use various utility functions contained in
2888 `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and
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'.
2906 * Tree level if-conversion for vectorizer
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
2916 * Conditional constant propagation
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
2923 * Folding builtin functions
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'.
2930 * Split critical edges
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'.
2936 * Partial redundancy elimination
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'.
2942 * Control dependence dead code elimination
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'.
2948 * Tail call elimination
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'.
2959 * Warn for function return without value
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'.
2968 * Mudflap statement annotation
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
2981 * Leave static single assignment form
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
2990 File: gccint.info, Node: RTL passes, Prev: Tree-SSA passes, Up: Passes
2995 The following briefly describes the rtl generation and optimization
2996 passes that are run after tree optimization.
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
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.
3012 * Generate exception handling landing pads
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'.
3020 * Cleanup control flow graph
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'
3029 * Common subexpression elimination
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'.
3035 * Global common subexpression elimination.
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
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.
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'.
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'.
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'.
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'.
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'.
3100 * Instruction combination
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
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'.
3117 * Optimize mode switching
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
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').
3132 * Instruction scheduling
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'.
3144 * Register allocation
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:
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'.
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'.
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'.
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.
3176 The reload pass also optionally eliminates the frame pointer
3177 and inserts instructions to save and restore call-clobbered
3178 registers around calls.
3180 Source files are `reload.c' and `reload1.c', plus the header
3181 `reload.h' used for communication between them.
3183 * Basic block reordering
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'.
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.
3200 * Delayed branch scheduling
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'.
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.
3215 * Register-to-stack conversion
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'.
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.
3233 * Debugging information output
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
3245 File: gccint.info, Node: Trees, Next: RTL, Prev: Passes, Up: Top
3247 8 Trees: The intermediate representation used by the C and C++ front ends
3248 *************************************************************************
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.
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
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.
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'.
3296 File: gccint.info, Node: Deficiencies, Next: Tree overview, Up: Trees
3301 There are many places in which this document is incomplet and incorrekt.
3302 It is, as of yet, only _preliminary_ documentation.
3305 File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: Trees
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'.
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.
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.
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))
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
3341 if (TEST_P (t) == 1)
3342 as this code is not guaranteed to work correctly in the future.
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
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.
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'.
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.
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.
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.
3388 File: gccint.info, Node: Macros and Functions, Next: Identifiers, Up: Tree overview
3393 This section is not here yet.
3396 File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview
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.
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'.
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.
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))'.
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'.
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
3434 File: gccint.info, Node: Containers, Prev: Identifiers, Up: Tree overview
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.
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.
3458 File: gccint.info, Node: Types, Next: Scopes, Prev: Tree overview, Up: Trees
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.
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'
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.
3484 The following functions and macros deal with cv-qualification of types:
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.
3494 This macro holds if the type is `const'-qualified.
3496 `CP_TYPE_VOLATILE_P'
3497 This macro holds if the type is `volatile'-qualified.
3499 `CP_TYPE_RESTRICT_P'
3500 This macro holds if the type is `restrict'-qualified.
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.
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.
3512 A few other macros and functions are usable with all types:
3514 The number of bits required to represent the type, represented as
3515 an `INTEGER_CST'. For an incomplete type, `TYPE_SIZE' will be
3519 The alignment of the type, in bits, represented as an `int'.
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.
3530 This predicate holds if the type is an integral type. Notice that
3531 in C++, enumerations are _not_ integral types.
3534 This predicate holds if the type is an integral type (in the C++
3535 sense) or a floating point type.
3538 This predicate holds for a class-type.
3541 This predicate holds for a built-in type.
3544 This predicate holds if the type is a pointer to data member.
3547 This predicate holds if the type is a pointer type, and the
3548 pointee is not a data member.
3551 This predicate holds for a pointer to function type.
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 *'.
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.
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.
3575 Used to represent the `void' 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
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.
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.
3602 Used to represent GCC built-in `__complex__' data types. The
3603 `TREE_TYPE' is the type of the real and imaginary parts.
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'.
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.
3623 Used to represent the `bool' 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'.
3634 Used to represent reference types. The `TREE_TYPE' gives the type
3635 to which this type refers.
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
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'.
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.
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
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::.
3687 Used to represent `union' types. Similar to `RECORD_TYPE' except
3688 that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position
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'.
3702 This node is used to represent a type the knowledge of which is
3703 insufficient for a sound processing.
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'.
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.
3720 Used to represent the `__typeof__' extension. The `TYPE_FIELDS'
3721 is the expression the type of which is being represented.
3723 There are variables whose values represent some of the basic types.
3731 `unsigned_type_node.'
3732 A node for `unsigned int'.
3736 It may sometimes be useful to compare one of these variables with a
3737 type in hand, using `same_type_p'.
3740 File: gccint.info, Node: Scopes, Next: Functions, Prev: Types, Up: Trees
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.
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.)
3757 * Namespaces:: Member functions, types, etc.
3758 * Classes:: Members, bases, friends, etc.
3761 File: gccint.info, Node: Namespaces, Next: Classes, Up: Scopes
3766 A namespace is represented by a `NAMESPACE_DECL' node.
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.
3773 The following macros and functions can be used on a `NAMESPACE_DECL':
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.
3787 This macro returns the enclosing namespace. The `DECL_CONTEXT' for
3788 the `global_namespace' is `NULL_TREE'.
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
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.
3800 `DECL_NAMESPACE_STD_P'
3801 This predicate holds if the namespace is the special `::std'
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.
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.
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.
3823 This function cannot be used with namespaces that have
3824 `DECL_NAMESPACE_ALIAS' set.
3828 File: gccint.info, Node: Classes, Prev: Namespaces, Up: Scopes
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.
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.
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.
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.
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'.
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'.
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.
3892 The following macros can be used on a tree node representing a
3896 This predicate holds if the class is local class _i.e._ declared
3897 inside a function body.
3899 `TYPE_POLYMORPHIC_P'
3900 This predicate holds if the class has at least one virtual function
3901 (declared or inherited).
3903 `TYPE_HAS_DEFAULT_CONSTRUCTOR'
3904 This predicate holds whenever its argument represents a class-type
3905 with default constructor.
3907 `CLASSTYPE_HAS_MUTABLE'
3908 `TYPE_HAS_MUTABLE_P'
3909 These predicates hold for a class-type having a mutable data
3912 `CLASSTYPE_NON_POD_P'
3913 This predicate holds only for class-types that are not PODs.
3915 `TYPE_HAS_NEW_OPERATOR'
3916 This predicate holds for a class-type that defines `operator new'.
3918 `TYPE_HAS_ARRAY_NEW_OPERATOR'
3919 This predicate holds for a class-type for which `operator new[]'
3922 `TYPE_OVERLOADS_CALL_EXPR'
3923 This predicate holds for class-type for which the function call
3924 `operator()' is overloaded.
3926 `TYPE_OVERLOADS_ARRAY_REF'
3927 This predicate holds for a class-type that overloads `operator[]'
3929 `TYPE_OVERLOADS_ARROW'
3930 This predicate holds for a class-type for which `operator->' is
3935 File: gccint.info, Node: Declarations, Next: Attributes, Prev: Functions, Up: Trees
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
3945 Some macros can be used with any kind of declaration. These include:
3947 This macro returns an `IDENTIFIER_NODE' giving the name of the
3951 This macro returns the type of the entity declared.
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
3960 This macro returns the line number at which the entity was
3961 declared, as an `int'.
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
3970 is roughly equivalent to C code like:
3973 The implicitly generated `typedef' declaration is represented by a
3974 `TYPE_DECL' for which `DECL_ARTIFICIAL' holds.
3976 `DECL_NAMESPACE_SCOPE_P'
3977 This predicate holds if the entity was declared at a namespace
3980 `DECL_CLASS_SCOPE_P'
3981 This predicate holds if the entity was declared at a class scope.
3983 `DECL_FUNCTION_SCOPE_P'
3984 This predicate holds if the entity was declared inside a function
3988 The various kinds of declarations include:
3990 These nodes are used to represent labels in function bodies. For
3991 more information, see *Note Functions::. These nodes only appear
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'.
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
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.
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
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.
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.
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'.
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'.
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.
4057 If `DECL_C_BIT_FIELD' holds, this field is a bit-field.
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'
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.
4079 Back ends can safely ignore these nodes.
4083 File: gccint.info, Node: Functions, Next: Declarations, Prev: Scopes, Up: Trees
4088 A function is represented by a `FUNCTION_DECL' node. A set of
4089 overloaded functions is sometimes represented by a `OVERLOAD' node.
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'.
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.
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'.
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.
4129 * Function Basics:: Function names, linkage, and so forth.
4130 * Function Bodies:: The statements that make up a function body.
4133 File: gccint.info, Node: Function Basics, Next: Function Bodies, Up: Functions
4135 8.6.1 Function Basics
4136 ---------------------
4138 The following macros and functions can be used on a `FUNCTION_DECL':
4140 This predicate holds for a function that is the program entry point
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.
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.)
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.
4171 This predicate holds if the function is undefined.
4174 This predicate holds if the function has external linkage.
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.
4181 This predicate holds if the function is a built-in function but its
4182 prototype is not yet explicitly declared.
4184 `DECL_EXTERN_C_FUNCTION_P'
4185 This predicate holds if the function is declared as an ``extern
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.
4197 FIXME: This macro is not yet implemented.
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.
4203 `DECL_STATIC_FUNCTION_P'
4204 This predicate holds if the function a static member function.
4206 `DECL_NONSTATIC_MEMBER_FUNCTION_P'
4207 This macro holds for a non-static member function.
4209 `DECL_CONST_MEMFUNC_P'
4210 This predicate holds for a `const'-member function.
4212 `DECL_VOLATILE_MEMFUNC_P'
4213 This predicate holds for a `volatile'-member function.
4215 `DECL_CONSTRUCTOR_P'
4216 This macro holds if the function is a constructor.
4218 `DECL_NONCONVERTING_P'
4219 This predicate holds if the constructor is a non-converting
4222 `DECL_COMPLETE_CONSTRUCTOR_P'
4223 This predicate holds for a function which is a constructor for an
4224 object of a complete type.
4226 `DECL_BASE_CONSTRUCTOR_P'
4227 This predicate holds for a function which is a constructor for a
4228 base class sub-object.
4230 `DECL_COPY_CONSTRUCTOR_P'
4231 This predicate holds for a function which is a copy-constructor.
4234 This macro holds if the function is a destructor.
4236 `DECL_COMPLETE_DESTRUCTOR_P'
4237 This predicate holds if the function is the destructor for an
4238 object a complete type.
4240 `DECL_OVERLOADED_OPERATOR_P'
4241 This macro holds if the function is an overloaded operator.
4244 This macro holds if the function is a type-conversion operator.
4246 `DECL_GLOBAL_CTOR_P'
4247 This predicate holds if the function is a file-scope initialization
4250 `DECL_GLOBAL_DTOR_P'
4251 This predicate holds if the function is a file-scope finalization
4255 This predicate holds if the function is a thunk.
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'.)
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:
4269 if (THUNK_VCALL_OFFSET)
4270 this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
4272 Finally, the thunk should jump to the location given by
4273 `DECL_INITIAL'; this will always be an expression for the address
4276 `DECL_NON_THUNK_FUNCTION_P'
4277 This predicate holds if the function is _not_ a thunk function.
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.
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
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.
4301 This macro returns the `RESULT_DECL' for the function.
4304 This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the
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.
4313 This predicate holds when the exception-specification of its
4314 arguments if of the form ``()''.
4316 `DECL_ARRAY_DELETE_OPERATOR_P'
4317 This predicate holds if the function an overloaded `operator
4322 File: gccint.info, Node: Function Bodies, Prev: Function Basics, Up: Functions
4324 8.6.2 Function Bodies
4325 ---------------------
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'.
4331 The `DECL_SAVED_TREE' macro will give the complete body of the
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:
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.
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.
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)
4371 switch (TREE_CODE (stmt))
4374 process_stmt (THEN_CLAUSE (stmt));
4375 /* More processing here. */
4381 stmt = TREE_CHAIN (stmt);
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.
4390 Used to represent an inline assembly statement. For an inline
4391 assembly statement like:
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.
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
4414 Used to represent a `break' statement. There are no additional
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.
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:
4430 The first value will be `CASE_LOW', while the second will be
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
4446 Used to represent a `continue' statement. There are no additional
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.
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::.
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
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.
4475 Used to represent an expression statement. Use `EXPR_STMT_EXPR' to
4476 obtain the expression.
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.
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.
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.
4502 Used to represent an `if' statement. The `IF_COND' is the
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:
4513 where there is a new local variable (or variables) declared within
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.
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'.
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.
4541 Used to represent a `return' statement. The `RETURN_EXPR' is the
4542 expression returned; it will be `NULL_TREE' if the statement was
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
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.
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
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.
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.
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
4590 The `WHILE_BODY' is the body of the loop.
4594 File: gccint.info, Node: Attributes, Next: Expression trees, Prev: Declarations, Up: Trees
4596 8.7 Attributes in trees
4597 =======================
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.
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.
4614 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
4615 This macro returns the attributes on the declaration DECL.
4617 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
4618 This macro returns the attributes on the type TYPE.
4621 File: gccint.info, Node: Expression trees, Prev: Attributes, Up: Trees
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.
4635 The following macros can be used with all expression nodes:
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
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
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:
4655 TREE_OPERAND (expr, 0)
4656 As this example indicates, the operands are zero-indexed.
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:
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
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.
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'.
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.
4696 FIXME: Talk about how to obtain representations of this constant,
4697 do comparisons, and so forth.
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.
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'.
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.
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'.
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
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 {};
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'.
4746 These nodes represent variables, including static data members.
4747 For more information, *note Declarations::.
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.
4754 The behavior of this operation on signed arithmetic overflow is
4755 controlled by the `flag_wrapv' and `flag_trapv' variables.
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.
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.
4771 These nodes represent bitwise complement, and will always have
4772 integral type. The only operand is the value to be complemented.
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'.
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
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.
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*'.
4803 If the object addressed is not an lvalue, a temporary is created,
4804 and the address of the temporary is used.
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.
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.
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
4823 FIXME: How is the operand supposed to be rounded? Is this
4824 dependent on `-mieee'?
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
4833 These nodes represent the conjugate of their operand.
4837 These nodes represent respectively the real and the imaginary parts
4838 of complex numbers (their sole argument).
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
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'.
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.
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.
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
4889 These nodes represent bitwise inclusive or, bitwise exclusive or,
4890 and bitwise and, respectively. Both operands will always have
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'.
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
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
4922 The behavior of these operations on signed arithmetic overflow is
4923 controlled by the `flag_wrapv' and `flag_trapv' variables.
4926 This node represents a floating point division operation.
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'.
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.
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'.
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
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.
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
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.
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.
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
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.
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
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'.
5042 These nodes are just like `MODIFY_EXPR', but are used only when a
5043 variable is initialized, rather than assigned to subsequently.
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.
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.
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.
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 <
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
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
5096 These nodes are used to represent GCC's statement-expression
5097 extension. The statement-expression extension allows code like
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
5109 the value is `3' while in:
5111 there is no value. If the `STMT_EXPR' does not yield a value,
5112 it's type will be `void'.
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
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.
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'.
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.
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.
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.
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
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.
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.
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.
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.
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.
5207 See `STMT_IS_FULL_EXPR_P' for more information about running these
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
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
5226 In either case, the expression is void.
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'.
5236 File: gccint.info, Node: Tree SSA, Next: Machine Desc, Prev: Control Flow, Up: Top
5238 9 Analysis and Optimization of GIMPLE Trees
5239 *******************************************
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.
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
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
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.
5275 File: gccint.info, Node: GENERIC, Next: GIMPLE, Up: Tree SSA
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.
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',
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.
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.
5309 File: gccint.info, Node: GIMPLE, Next: Annotations, Prev: GENERIC, Up: Tree SSA
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.
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
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
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.
5340 * GIMPLE Expressions::
5343 * Rough GIMPLE Grammar::
5346 File: gccint.info, Node: Interfaces, Next: Temporaries, Up: GIMPLE
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'.
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.
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
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.
5380 You can tell the compiler to dump a C-like representation of the GIMPLE
5381 form with the flag `-fdump-tree-gimple'.
5384 File: gccint.info, Node: Temporaries, Next: GIMPLE Expressions, Prev: Interfaces, Up: GIMPLE
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.
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'.
5402 Currently, an expression like `a = b + 5' is not reduced any further.
5403 We tried converting it to something like
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
5412 ---------- Footnotes ----------
5414 (1) These restrictions are derived from those in Morgan 4.8.
5417 File: gccint.info, Node: GIMPLE Expressions, Next: Statements, Prev: Temporaries, Up: GIMPLE
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
5432 The same rule holds for arguments to a `CALL_EXPR'.
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.
5439 * Compound Expressions::
5440 * Compound Lvalues::
5441 * Conditional Expressions::
5442 * Logical Operators::
5445 File: gccint.info, Node: Compound Expressions, Next: Compound Lvalues, Up: GIMPLE Expressions
5447 9.2.3.1 Compound Expressions
5448 ............................
5450 The left-hand side of a C comma expression is simply moved into a
5454 File: gccint.info, Node: Compound Lvalues, Next: Conditional Expressions, Prev: Compound Expressions, Up: GIMPLE Expressions
5456 9.2.3.2 Compound Lvalues
5457 ........................
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
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.
5474 File: gccint.info, Node: Conditional Expressions, Next: Logical Operators, Prev: Compound Lvalues, Up: GIMPLE Expressions
5476 9.2.3.3 Conditional Expressions
5477 ...............................
5479 A C `?:' expression is converted into an `if' statement with each
5480 branch assigning to the same temporary. So,
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.
5494 Note that in GIMPLE, `if' statements are also represented using
5495 `COND_EXPR', as described below.
5498 File: gccint.info, Node: Logical Operators, Prev: Conditional Expressions, Up: GIMPLE Expressions
5500 9.2.3.4 Logical Operators
5501 .........................
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 &&
5512 Note that `T1' in this example cannot be an expression temporary,
5513 because it has two different assignments.
5516 File: gccint.info, Node: Statements, Next: GIMPLE Example, Prev: GIMPLE Expressions, Up: GIMPLE
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
5528 There are also several varieties of complex statements.
5533 * Statement Sequences::
5534 * Empty Statements::
5536 * Selection Statements::
5539 * GIMPLE Exception Handling::
5542 File: gccint.info, Node: Blocks, Next: Statement Sequences, Up: Statements
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.
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'.
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.
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
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'.
5573 File: gccint.info, Node: Statement Sequences, Next: Empty Statements, Prev: Blocks, Up: Statements
5575 9.2.4.2 Statement Sequences
5576 ...........................
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'.
5583 File: gccint.info, Node: Empty Statements, Next: Loops, Prev: Statement Sequences, Up: Statements
5585 9.2.4.3 Empty Statements
5586 ........................
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
5595 An empty statement is represented as `(void)0'.
5598 File: gccint.info, Node: Loops, Next: Selection Statements, Prev: Empty Statements, Up: Statements
5603 At one time loops were expressed in GIMPLE using `LOOP_EXPR', but now
5604 they are lowered to explicit gotos.
5607 File: gccint.info, Node: Selection Statements, Next: Jumps, Prev: Loops, Up: Statements
5609 9.2.4.5 Selection Statements
5610 ............................
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.
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
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
5628 File: gccint.info, Node: Jumps, Next: Cleanups, Prev: Selection Statements, Up: Statements
5633 Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'.
5635 The operand of a `GOTO_EXPR' must be either a label or a variable
5636 containing the address to jump to.
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'.
5646 File: gccint.info, Node: Cleanups, Next: GIMPLE Exception Handling, Prev: Jumps, Up: Statements
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.
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.
5662 File: gccint.info, Node: GIMPLE Exception Handling, Prev: Cleanups, Up: Statements
5664 9.2.4.8 Exception Handling
5665 ..........................
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:
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.
5676 2. An `EH_FILTER_EXPR' executes its handler if the thrown exception
5677 does not match one of the allowed types.
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.
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
5690 File: gccint.info, Node: GIMPLE Example, Next: Rough GIMPLE Grammar, Prev: Statements, Up: GIMPLE
5692 9.2.5 GIMPLE Example
5693 --------------------
5695 struct A { A(); ~A(); };
5702 int j = (--i, i ? 0 : 1);
5704 for (int x = 42; x > 0; --x)
5769 File: gccint.info, Node: Rough GIMPLE Grammar, Prev: GIMPLE Example, Up: GIMPLE
5771 9.2.6 Rough GIMPLE Grammar
5772 --------------------------
5774 function : FUNCTION_DECL
5775 DECL_SAVED_TREE -> compound-stmt
5777 compound-stmt: STATEMENT_LIST
5792 BIND_EXPR_VARS -> chain of DECLs
5793 BIND_EXPR_BLOCK -> BLOCK
5794 BIND_EXPR_BODY -> compound-stmt
5798 op1 -> compound-stmt
5799 op2 -> compound-stmt
5801 switch-stmt : SWITCH_EXPR
5804 op2 -> TREE_VEC of CASE_LABEL_EXPRs
5805 The CASE_LABEL_EXPRs are sorted by CASE_LOW,
5806 and default is last.
5808 goto-stmt : GOTO_EXPR
5809 op0 -> LABEL_DECL | val
5811 return-stmt : RETURN_EXPR
5820 resx-stmt : RESX_EXPR
5822 label-stmt : LABEL_EXPR
5825 try-stmt : TRY_CATCH_EXPR
5826 op0 -> compound-stmt
5829 op0 -> compound-stmt
5830 op1 -> compound-stmt
5836 catch-seq : STATEMENT_LIST
5837 members -> CATCH_EXPR
5839 modify-stmt : MODIFY_EXPR
5843 call-stmt : CALL_EXPR
5844 op0 -> val | OBJ_TYPE_REF
5845 op1 -> call-arg-list
5847 call-arg-list: TREE_LIST
5848 members -> lhs | CONST
5853 addressable : addr-expr-arg
5856 with-size-arg: addressable
5859 indirectref : INDIRECT_REF
5865 op0 -> with-size-arg
5871 bitfieldref : BIT_FIELD_REF
5872 op0 -> inner-compref
5876 compref : inner-compref
5878 op0 -> inner-compref
5880 op0 -> inner-compref
5882 inner-compref: min-lval
5884 op0 -> inner-compref
5888 op0 -> inner-compref
5893 op0 -> inner-compref
5898 op0 -> inner-compref
5912 op0 -> addr-expr-arg
5923 File: gccint.info, Node: Annotations, Next: Statement Operands, Prev: GIMPLE, Up: Tree SSA
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
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'.
5940 File: gccint.info, Node: Statement Operands, Next: SSA, Prev: Annotations, Up: Tree SSA
5942 9.4 Statement Operands
5943 ======================
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.
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.
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
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
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'
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
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
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
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.
6058 -- Macro: USE_OPS (ANN)
6059 Returns the array of operands used by the statement with annotation
6062 -- Macro: STMT_USE_OPS (STMT)
6063 Alternate version of USE_OPS that takes the statement STMT as
6066 -- Macro: NUM_USES (OPS)
6067 Return the number of USE operands in array OPS.
6069 -- Macro: USE_OP_PTR (OPS, I)
6070 Return a pointer to the Ith operand in array OPS.
6072 -- Macro: USE_OP (OPS, I)
6073 Return the Ith operand in array OPS.
6075 The following function shows how to print all the operands of a given
6079 print_ops (tree stmt)
6082 v_may_def_optype v_may_defs;
6083 v_must_def_optype v_must_defs;
6089 get_stmt_operands (stmt);
6090 ann = stmt_ann (stmt);
6092 defs = DEF_OPS (ann);
6093 for (i = 0; i < NUM_DEFS (defs); i++)
6094 print_generic_expr (stderr, DEF_OP (defs, i), 0);
6096 uses = USE_OPS (ann);
6097 for (i = 0; i < NUM_USES (uses); i++)
6098 print_generic_expr (stderr, USE_OP (uses, i), 0);
6100 v_may_defs = V_MAY_DEF_OPS (ann);
6101 for (i = 0; i < NUM_V_MAY_DEFS (v_may_defs); i++)
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);
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);
6111 vuses = VUSE_OPS (ann);
6112 for (i = 0; i < NUM_VUSES (vuses); i++)
6113 print_generic_expr (stderr, VUSE_OP (vuses, i), 0);
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
6122 9.4.1 Operand Iterators
6123 -----------------------
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
6131 print_ops (tree stmt)
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);
6141 1. Determine whether you are need to see the operand pointers, or
6142 just the trees, and choose the appropriate macro:
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
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.
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':
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. */
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)
6172 So if you want to look at the use pointers for all the `USE' and
6173 `VUSE' operands, you would do something like:
6175 use_operand_p use_p;
6178 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
6180 process_use_ptr (use_p);
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.
6191 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE | SSA_OP_VMUSTDEF)
6193 print_generic_expr (stderr, var, TDF_SLIM);
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.
6203 use_operand_p use_p;
6204 def_operand_p def_p;
6207 FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
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
6220 use_operand_p kill_p;
6221 def_operand_p def_p;
6224 FOR_EACH_SSA_MUSTDEF_OPERAND (def_p, kill_p, stmt, iter)
6229 There are many examples in the code as well, as well as the
6230 documentation in `tree-ssa-operands.h'.
6233 File: gccint.info, Node: SSA, Next: Alias analysis, Prev: Statement Operands, Up: Tree SSA
6235 9.5 Static Single Assignment
6236 ============================
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'.
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
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.
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,
6276 # a_4 = PHI <a_1, a_2, a_3>
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".
6285 The following macros can be used to examine PHI nodes
6287 -- Macro: PHI_RESULT (PHI)
6288 Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
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.
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.
6299 -- Macro: PHI_ARG_EDGE (PHI, I)
6300 Returns the incoming edge for the Ith argument of PHI.
6302 -- Macro: PHI_ARG_DEF (PHI, I)
6303 Returns the `SSA_NAME' for the Ith argument of PHI.
6305 9.5.1 Preserving the SSA form
6306 -----------------------------
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
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.
6319 9.5.2 Examining `SSA_NAME' nodes
6320 --------------------------------
6322 The following macros can be used to examine `SSA_NAME' nodes
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.
6329 -- Macro: SSA_NAME_VERSION (VAR)
6330 Returns the version number of the `SSA_NAME' object VAR.
6332 9.5.3 Walking use-def chains
6333 ----------------------------
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'.
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
6348 1. Walk the use-def chains for ARG.
6350 2. Call `FN (ARG, PHI, DATA)'.
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).
6356 9.5.4 Walking the dominator tree
6357 --------------------------------
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:
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.
6370 2. Once before traversing all the statements in the BB.
6372 3. Once for every statement inside BB.
6374 4. Once after traversing all the statements and before recursing
6375 into BB's dominator children.
6377 5. It then recurses into all the dominator children of BB.
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).
6383 7. Once after walking the statements in BB and BB's
6384 dominator children. At this stage, the block local data stack
6388 File: gccint.info, Node: Alias analysis, Prev: SSA, Up: Tree SSA
6393 Alias analysis proceeds in 3 main phases:
6395 1. Points-to and escape analysis.
6397 This phase walks the use-def chains in the SSA web looking for
6403 * Assignments of the form `P_i = &VAR'
6405 * Assignments of the form P_i = malloc()
6407 * Pointers and ADDR_EXPR that escape the current function.
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
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.
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.
6425 2. Compute flow-sensitive aliases
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.
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.
6441 3. Compute flow-insensitive aliases
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.
6449 For instance, consider the following function:
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'.
6479 # p_1 = PHI <p_4(1), p_6(2)>;
6481 # a_7 = V_MAY_DEF <a_3>;
6482 # b_8 = V_MAY_DEF <b_5>;
6485 # a_9 = V_MAY_DEF <a_7>
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
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:
6505 1. Sort the list of pointers in decreasing number of contributed
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
6514 may-aliases(T) = { V1, V2, V3, ..., Vn }
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:
6521 may-aliases(V1) = { T }
6522 may-aliases(V2) = { T }
6524 may-aliases(Vn) = { T }
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
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:
6539 may-aliases(T) = { V1, V2, V3 }
6540 may-aliases(R) = { V2, V4 }
6542 In step (2) we would have reverted the aliases for T as:
6544 may-aliases(V1) = { T }
6545 may-aliases(V2) = { T }
6546 may-aliases(V3) = { T }
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
6553 may-aliases(V1) = { T }
6554 may-aliases(V2) = { T }
6555 may-aliases(V3) = { T }
6556 may-aliases(V4) = { T }
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).
6562 File: gccint.info, Node: RTL, Next: Control Flow, Prev: Trees, Up: Top
6564 10 RTL Representation
6565 *********************
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.
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
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.
6603 File: gccint.info, Node: RTL Objects, Next: RTL Classes, Up: RTL
6605 10.1 RTL Object Types
6606 =====================
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'.
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.
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.
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.
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.
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
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)'.
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.
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).
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'.
6675 In a few contexts a null pointer is valid where an expression is
6676 normally wanted. The written form of this is `(nil)'.
6679 File: gccint.info, Node: RTL Classes, Next: Accessors, Prev: RTL Objects, Up: RTL
6681 10.2 RTL Classes and Formats
6682 ============================
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:
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'.
6696 An RTX code that represents a constant object. `HIGH' is also
6697 included in this class.
6700 An RTX code for a non-symmetric comparison, such as `GEU' or `LT'.
6703 An RTX code for a symmetric (commutative) comparison, such as `EQ'
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.
6712 An RTX code for a commutative binary operation, such as `PLUS' or
6713 `AND'. `NE' and `EQ' are comparisons, so they have class `<'.
6716 An RTX code for a non-commutative binary operation, such as
6717 `MINUS', `DIV', or `ASHIFTRT'.
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
6726 An RTX code for other three input operations. Currently only
6727 `IF_THEN_ELSE' and `VEC_MERGE'.
6730 An RTX code for an entire instruction: `INSN', `JUMP_INSN', and
6731 `CALL_INSN'. *Note Insns::.
6734 An RTX code for something that matches in insns, such as
6735 `MATCH_DUP'. These only occur in machine descriptions.
6738 An RTX code for an auto-increment addressing mode, such as
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.
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'
6754 These are the most commonly used format characters:
6757 An expression (actually a pointer to an expression).
6769 A vector of expressions.
6771 A few other format characters are used occasionally:
6774 `u' is equivalent to `e' except that it is printed differently in
6775 debugging dumps. It is used for pointers to insns.
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
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.
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.
6795 `B' indicates a pointer to basic block structure.
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.
6802 There are macros to get the number of operands and the format of an
6805 `GET_RTX_LENGTH (CODE)'
6806 Number of operands of an RTX of code CODE.
6808 `GET_RTX_FORMAT (CODE)'
6809 The format of an RTX of code CODE, as a C string.
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'.
6815 All codes of this class have format `e'.
6820 All codes of these classes have format `ee'.
6824 All codes of these classes have format `eee'.
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'.
6834 You can make no assumptions about the format of these codes.
6837 File: gccint.info, Node: Accessors, Next: Special Accessors, Prev: RTL Classes, Up: RTL
6839 10.3 Access to Operands
6840 =======================
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).
6849 accesses operand 2 of expression X, as an expression.
6853 accesses the same operand as an integer. `XSTR', used in the same
6854 fashion, would access it as a string.
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.
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.
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.
6878 Access the vector-pointer which is operand number IDX in EXP.
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'.
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.
6888 It is up to you to make sure that ELTNUM is not negative and is
6889 less than `XVECLEN (EXP, IDX)'.
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.
6896 File: gccint.info, Node: Special Accessors, Next: Flags, Prev: Accessors, Up: RTL
6898 10.4 Access to Special Operands
6899 ===============================
6901 Some RTL nodes have special annotations associated with them.
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'.
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.
6924 The offset from the start of `MEM_EXPR' as a `CONST_INT' rtx.
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.
6932 The known alignment in bits of the memory reference.
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.
6942 If this register is known to hold the value of some user-level
6943 declaration, this is that tree node.
6946 If this register is known to hold the value of some user-level
6947 declaration, this is the offset into that logical storage.
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.
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.
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:
6968 `SYMBOL_FLAG_FUNCTION'
6969 Set if the symbol refers to a function.
6972 Set if the symbol is local to this "module". See
6973 `TARGET_BINDS_LOCAL_P'.
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'.
6981 Set if the symbol is located in the small data section.
6982 See `TARGET_IN_SMALL_DATA_P'.
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.
6989 Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for
6993 File: gccint.info, Node: Flags, Next: Machine Modes, Prev: Special Accessors, Up: RTL
6995 10.5 Flags in an RTL Expression
6996 ===============================
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.
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'.
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'.
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'.
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'.
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'.
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'.
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'.
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
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
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'.
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'.
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
7082 In `mem', nonzero for memory references that will not trap.
7083 Stored in the `call' field and printed as `/c'.
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'.
7091 Nonzero in a `reg' if the register holds a pointer. Stored in the
7092 `frame_related' field and printed as `/f'.
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'.
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.
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'.
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'.
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.
7127 This flag is required for exception handling support on targets
7130 `code_label', `insn_list', `const', or `note' if it resulted from
7131 an in-line function call. Stored in the `integrated' field and
7134 `MEM_READONLY_P (X)'
7135 Nonzero in a `mem', if the memory is statically allocated and
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.
7146 Stored in the `unchanging' field and printed as `/u'.
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'.
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'.
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'.
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'.
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.
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.
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'.
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.
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'.
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'.
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.
7214 These are the fields to which the above macros refer:
7217 In a `mem', 1 means that the memory reference will not trap.
7219 In an RTL dump, this flag is represented as `/c'.
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.
7227 In `reg' expressions, 1 means that the register holds a pointer.
7229 In `symbol_ref' expressions, 1 means that the reference addresses
7230 this function's string constant pool.
7232 In `mem' expressions, 1 means that the reference is to a scalar.
7234 In an RTL dump, this flag is represented as `/f'.
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
7244 In `reg' expressions, it is 1 if the register has its entire life
7245 contained within the test expression of some loop.
7247 In `subreg' expressions, 1 means that the `subreg' is accessing an
7248 object that has had its mode promoted from a wider mode.
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.
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'.
7259 In an `insn' during dead-code elimination, 1 means that the insn is
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
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
7270 In an RTL dump, this flag is represented as `/s'.
7273 In an `insn', `insn_list', or `const', 1 means the RTL was
7274 produced by procedure integration.
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.
7281 In `symbol_ref' expressions, 1 means the referenced symbol is weak.
7283 In an RTL dump, this flag is represented as `/i'.
7286 In a `mem' expression, 1 means we should keep the alias set for
7287 this mem unchanged when we access a component.
7289 In a `set', 1 means it is for a return.
7291 In a `call_insn', 1 means it is a sibling call.
7293 In an RTL dump, this flag is represented as `/j'.
7296 In `reg' and `mem' expressions, 1 means that the value of the
7297 expression never changes.
7299 In `subreg' expressions, it is 1 if the `subreg' references an
7300 unsigned object whose mode has been promoted to a wider mode.
7302 In an `insn' or `jump_insn' in the delay slot of a branch
7303 instruction, 1 means an annulling branch should be used.
7305 In a `symbol_ref' expression, 1 means that this symbol addresses
7306 something in the per-function constant pool.
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.
7311 In an RTL dump, this flag is represented as `/u'.
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
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
7324 In a `symbol_ref', it indicates that an external declaration for
7325 the symbol has already been written.
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.
7332 In a `symbol_ref' expression, it is used for machine-specific
7335 In a `reg' expression, it is 1 if the value is a user-level
7336 variable. 0 indicates an internal compiler temporary.
7338 In an `insn', 1 means the insn has been deleted.
7340 In `label_ref' and `reg_label' expressions, 1 means a reference to
7343 In an RTL dump, this flag is represented as `/v'.
7346 File: gccint.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL
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).
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
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::).
7368 "Bit" mode represents a single bit, for predicate registers.
7371 "Quarter-Integer" mode represents a single byte treated as an
7375 "Half-Integer" mode represents a two-byte integer.
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.
7383 "Single Integer" mode represents a four-byte integer.
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.
7391 "Double Integer" mode represents an eight-byte integer.
7394 "Tetra Integer" (?) mode represents a sixteen-byte integer.
7397 "Octa Integer" (?) mode represents a thirty-two-byte integer.
7400 "Quarter-Floating" mode represents a quarter-precision (single
7401 byte) floating point number.
7404 "Half-Floating" mode represents a half-precision (two byte)
7405 floating point number.
7408 "Three-Quarter-Floating" (?) mode represents a
7409 three-quarter-precision (three byte) floating point number.
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.
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
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.
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.
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::).
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.
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.
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.
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.
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.
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'.
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:
7485 Integer modes. By default these are `BImode', `QImode', `HImode',
7486 `SImode', `DImode', `TImode', and `OImode'.
7489 The "partial integer" modes, `PQImode', `PHImode', `PSImode' and
7493 Floating point modes. By default these are `QFmode', `HFmode',
7494 `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'.
7497 Complex integer modes. (These are not currently implemented).
7499 `MODE_COMPLEX_FLOAT'
7500 Complex floating point modes. By default these are `QCmode',
7501 `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'.
7504 Algol or Pascal function variables including a static chain.
7505 (These are not currently implemented).
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::.
7513 This is a catchall mode class for modes which don't fit into the
7514 above classes. Currently `VOIDmode' and `BLKmode' are in
7517 Here are some C macros that relate to machine modes:
7520 Returns the machine mode of the RTX X.
7522 `PUT_MODE (X, NEWMODE)'
7523 Alters the machine mode of the RTX X to be NEWMODE.
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
7531 Returns the name of mode M as a string.
7533 `GET_MODE_CLASS (M)'
7534 Returns the mode class of mode M.
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'.
7541 Returns the size in bytes of a datum of mode M.
7543 `GET_MODE_BITSIZE (M)'
7544 Returns the size in bits of a datum of mode 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'.
7551 `GET_MODE_ALIGNMENT (M)'
7552 Return the required alignment, in bits, for an object of mode M.
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
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'.
7564 `GET_CLASS_NARROWEST_MODE (C)'
7565 Returns the narrowest mode in mode class C.
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.
7573 File: gccint.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL
7575 10.7 Constant Expression Types
7576 ==============================
7578 The simplest RTL expressions are those that represent constant values.
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)'.
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').
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
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.
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'.
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.
7616 The number of units in a `const_vector' is obtained with the macro
7617 `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'.
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.
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'.
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'.
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
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.
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.
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
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.
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
7676 The reason for using a distinct expression type for code label
7677 references is so that jump optimization can distinguish them.
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.
7687 M should be `Pmode'.
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.
7697 M should be `Pmode'.
7700 File: gccint.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL
7702 10.8 Registers and Memory
7703 =========================
7705 Here are the RTL expression types for describing access to machine
7706 registers and to main memory.
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.
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.
7724 Even for a register that the machine can access in only one mode,
7725 the mode must always be specified.
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.
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'
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.
7747 Each pseudo register number used in a function's RTL code is
7748 represented by a unique `reg' expression.
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
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.
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'.
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.
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'.
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.
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'.
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').
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'.
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.
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.
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
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
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.
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'.
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.
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.
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'.
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.
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
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.
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.
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
7878 `scratch' is usually present inside a `clobber' operation (*note
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
7886 * To stand for a complete set of condition code flags. This is
7887 best on most machines, where each comparison sets the entire
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,
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.
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).
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'.
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)'.
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.
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'.
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.
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'.
7944 All instructions that do not jump alter the program counter
7945 implicitly by incrementing it, but there is no need to mention
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.
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.
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.
7967 File: gccint.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL
7969 10.9 RTL Expressions for Arithmetic
7970 ===================================
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
7977 For commutative binary operations, constants should be placed in the
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.
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.
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
8000 M should be `Pmode'.
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).
8010 Represents the result of subtracting Y from X for purposes of
8011 comparison. The result is computed without overflow, as if with
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
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
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
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.
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.
8048 Represents the negation (subtraction from zero) of the value
8049 represented by X, carried out in mode M.
8052 Represents the signed product of the values represented by X and Y
8053 carried out in machine mode M.
8055 Some machines support a multiplication that generates a product
8056 wider than the operands. Write the pattern for this as
8058 (mult:M (sign_extend:M X) (sign_extend:M Y))
8060 where M is wider than the modes of X and Y, which need not be the
8063 For unsigned widening multiplication, use the same idiom, but with
8064 `zero_extend' instead of `sign_extend'.
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.
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,
8075 (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
8078 Like `div' but represents unsigned division.
8082 Like `div' and `udiv' but represent the remainder instead of the
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.
8095 Like `smin' and `smax', but the values are interpreted as unsigned
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.
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
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
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
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.
8127 Like `ashift' but for right shift. Unlike the case for left shift,
8128 these two operations are distinct.
8132 Similar but represent left and right rotate. If C is a constant,
8136 Represents the absolute value of X, computed in mode M.
8139 Represents the square root of X, computed in mode M. Most often M
8140 will be a floating point mode.
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.
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.
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
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.
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.
8173 File: gccint.info, Node: Comparisons, Next: Bit-Fields, Prev: Arithmetic, Up: RTL
8175 10.10 Comparison Operations
8176 ===========================
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
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.
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
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.
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.
8220 The signed comparisons are also used for floating point values.
8221 Floating point comparisons are distinguished by the machine modes of
8225 `STORE_FLAG_VALUE' if the values represented by X and Y are equal,
8229 `STORE_FLAG_VALUE' if the values represented by X and Y are not
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.
8237 Like `gt' but does unsigned comparison, on fixed-point numbers
8242 Like `gt' and `gtu' but test for "less than".
8246 Like `gt' and `gtu' but test for "greater than or equal".
8250 Like `gt' and `gtu' but test for "less than or equal".
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.
8259 On most machines, `if_then_else' expressions are valid only to
8260 express conditional jumps.
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.
8268 This is currently not valid for instruction patterns and is
8269 supported only for insn attributes. *Note Insn Attributes::.
8272 File: gccint.info, Node: Bit-Fields, Next: Vector Operations, Prev: Comparisons, Up: RTL
8277 Special expression codes exist to represent bit-field instructions.
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
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
8292 The mode of POS is machine-specific and is also specified in the
8293 `insv' or `extv' pattern.
8295 The mode M is the same as the mode that would be used for LOC if
8298 A `sign_extract' can not appear as an lvalue, or part thereof, in
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.
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.
8311 File: gccint.info, Node: Vector Operations, Next: Conversions, Prev: Bit-Fields, Up: RTL
8313 10.12 Vector Operations
8314 =======================
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
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.
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.
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.
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
8349 File: gccint.info, Node: Conversions, Next: RTL Declarations, Prev: Vector Operations, Up: RTL
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
8361 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
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.
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.
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.
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.
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.
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
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.
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.
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
8407 Represents the result of converting fixed point value X, regarded
8408 as signed, to floating point mode M.
8410 `(unsigned_float:M X)'
8411 Represents the result of converting fixed point value X, regarded
8412 as unsigned, to floating point mode M.
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.
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
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
8432 File: gccint.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL
8437 Declaration expression codes do not represent arithmetic operations but
8438 rather state assertions about their operands.
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'
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.
8453 File: gccint.info, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL
8455 10.15 Side Effect Expressions
8456 =============================
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.
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
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'.
8473 If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then
8474 X must be valid for that mode.
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
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.
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.
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
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.
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.
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.
8521 LVAL is customarily accessed with the `SET_DEST' macro and X with
8522 the `SET_SRC' macro.
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.
8532 Inside an `if_then_else' expression, represents the value to be
8533 placed in `pc' to return to the caller.
8535 Note that an insn pattern of `(return)' is logically equivalent to
8536 `(set (pc) (return))', but the latter form is never used.
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.
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
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.
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
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
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'.
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.
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.
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.
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.
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
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.
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:
8625 (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
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.
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'
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.
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.
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',
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,
8664 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
8665 (set (mem:SI (reg:SI 1)) (reg:SI 1))])
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.
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:
8677 (parallel [(set (cc0) (reg:SI 34))
8678 (set (pc) (if_then_else
8679 (eq (cc0) (const_int 0))
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.
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.
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
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'.
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
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.
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::.
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
8734 Represents literal assembler code as described by the string S.
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.
8743 These codes may appear inside a `pattern' of an insn, inside a
8744 `parallel', or inside an expression.
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'.
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.
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
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.
8775 File: gccint.info, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL
8777 10.16 Embedded Side-Effects on Addresses
8778 ========================================
8780 Six special side-effect expression codes appear as memory addresses.
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:
8791 (mem:DF (pre_dec:SI (reg:SI 39)))
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.
8797 Similar, but specifies incrementing X instead of decrementing it.
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
8805 Similar, but specifies incrementing X instead of decrementing it.
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.
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.
8817 Here is an example of its use:
8819 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
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.
8825 `(pre_modify:M X EXPR)'
8826 Similar except side effects happen before the use.
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
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.
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.
8852 File: gccint.info, Node: Assembler, Next: Insns, Prev: Incdec, Up: RTL
8854 10.17 Assembler Instructions as Expressions
8855 ===========================================
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
8862 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
8864 is represented using a single `asm_operands' RTX which represents the
8865 value that is stored in `outputvar':
8867 (set RTX-FOR-OUTPUTVAR
8868 (asm_operands "foo %1,%2,%0" "a" 0
8869 [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
8871 (asm_input:M2 "di")]))
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'.
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.
8887 File: gccint.info, Node: Insns, Next: Calls, Prev: Assembler, Up: RTL
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
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:
8910 Accesses the unique id of insn I.
8913 Accesses the chain pointer to the insn preceding I. If I is the
8914 first insn, this is a null pointer.
8917 Accesses the chain pointer to the insn following I. If I is the
8918 last insn, this is a null pointer.
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,
8925 NEXT_INSN (PREV_INSN (INSN)) == INSN
8927 is always true and if INSN is not the last insn,
8929 PREV_INSN (NEXT_INSN (INSN)) == INSN
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'.
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.
8947 Every insn has one of the following six expression codes:
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.
8955 Insns with code `insn' have four additional fields beyond the three
8956 mandatory ones listed above. These four are described in a table
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'.
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.
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'.
8976 Return insns count as jumps, but since they do not refer to any
8977 labels, their `JUMP_LABEL' is `NULL_RTX'.
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.
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.
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.
9007 `CLOBBER'ed registers in this list augment registers specified in
9008 `CALL_USED_REGISTERS' (*note Register Basics::).
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
9020 When a `code_label' appears in an RTL expression, it normally
9021 appears within a `label_ref' which represents the address of the
9024 Besides as a `code_label', a label can also be represented as a
9025 `note' of type `NOTE_INSN_DELETED_LABEL'.
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.
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).
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'.
9049 To set the kind of a label, use the `SET_LABEL_KIND' macro.
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
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'.
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.
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):
9075 Such a note is completely ignorable. Some passes of the
9076 compiler delete insns by altering them into notes of this
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.
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.
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
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.
9104 `NOTE_INSN_LOOP_CONT'
9105 Appears at the place in a loop that `continue' statements
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.
9114 `NOTE_INSN_FUNCTION_END'
9115 Appears at the start of the function body, after the function
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.
9125 Appears following each call to `setjmp' or a related function.
9127 These codes are printed symbolically when they appear in debugging
9130 The machine mode of an insn is normally `VOIDmode', but some phases
9131 use the mode for various purposes.
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
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.
9143 Here is a table of the extra fields of `insn', `jump_insn' and
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.
9157 An integer that says which pattern in the machine description
9158 matches this insn, or -1 if the matching has not yet been
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.
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
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
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.
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.
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
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
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.
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.
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'.
9221 These register notes annotate inputs to an insn:
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.
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.
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
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.
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.
9250 The `REG_NONNEG' note is added to insns only if the machine
9251 description has a `decrement_and_branch_until_zero' pattern.
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
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.
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.
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.
9287 The following notes describe attributes of outputs of an insn:
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.
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.
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.
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
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.
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.
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.
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.
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.
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).
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.
9371 A `REG_EQUAL' note will also usually be attached to this insn to
9372 provide the expression being computed by the sequence.
9374 These notes will be deleted after reload, since they are no longer
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.
9381 These notes are deleted after reload, since they are no longer
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'.
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
9400 This indicates an anti dependence (a write after read dependence).
9403 This indicates an output dependence (a write after write
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'.
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.
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_*
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.
9426 For convenience, the machine mode in an `insn_list' or `expr_list' is
9427 printed using these symbolic codes in debugging dumps.
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
9436 File: gccint.info, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL
9438 10.19 RTL Representation of Function-Call Insns
9439 ===============================================
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'.
9445 A `call' expression has two operands, as follows:
9447 (call (mem:FM ADDR) NBYTES)
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.
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.
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:
9463 (call (mem:FM ADDR) NBYTES))
9465 This RTL expression makes it clear (to the optimizer passes) that the
9466 appropriate register receives a useful value in this insn.
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.
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
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.
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.
9495 File: gccint.info, Node: Sharing, Next: Reading RTL, Prev: Calls, Up: RTL
9497 10.20 Structure Sharing Assumptions
9498 ===================================
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.
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.
9511 * Each pseudo-register has only a single `reg' object to represent
9512 it, and therefore only a single machine mode.
9514 * For any symbolic label, there is only one `symbol_ref' object
9517 * All `const_int' expressions with equal values are shared.
9519 * There is only one `pc' expression.
9521 * There is only one `cc0' expression.
9523 * There is only one `const_double' expression with value 0 for each
9524 floating point mode. Likewise for values 1 and 2.
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.
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.
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.
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
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.
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
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'.
9564 File: gccint.info, Node: Reading RTL, Prev: Sharing, Up: RTL
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.
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.
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.
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
9589 File: gccint.info, Node: Control Flow, Next: Tree SSA, Prev: RTL, Up: Top
9591 11 Control Flow Graph
9592 *********************
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'.
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.
9611 File: gccint.info, Node: Basic Blocks, Next: Edges, Up: Control Flow
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.
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.
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'.
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.
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.
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.
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.
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.
9689 block_stmt_iterator si;
9691 for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
9693 tree stmt = bsi_stmt (si);
9694 print_generic_stmt (stderr, stmt, 0);
9699 File: gccint.info, Node: Edges, Next: Profile information, Prev: Basic Blocks, Up: Control Flow
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.
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:
9718 This function initializes an `edge_iterator' that points to the
9719 first edge in a vector of edges.
9722 This function initializes an `edge_iterator' that points to the
9723 last edge in a vector of edges.
9726 This predicate is `true' if an `edge_iterator' represents the last
9727 edge in an edge vector.
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.
9734 This function takes a pointer to an `edge_iterator' and makes it
9735 point to the next edge in the sequence.
9738 This function takes a pointer to an `edge_iterator' and makes it
9739 point to the previous edge in the sequence.
9742 This function returns the `edge' currently pointed to by an
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.
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:
9761 FOR_EACH_EDGE (e, ei, bb->succs)
9763 if (e->flags & EDGE_FALLTHRU)
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:
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
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.
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.
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.
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.
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.
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.
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,
9845 factoring the computed jumps results in the following code sequence
9846 which has a much simpler flow graph:
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
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.
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.
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.
9899 File: gccint.info, Node: Profile information, Next: Maintaining the CFG, Prev: Edges, Up: Control Flow
9901 11.3 Profile information
9902 ========================
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.
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.
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
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
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'.
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.
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.
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.
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
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.
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.
9987 File: gccint.info, Node: Maintaining the CFG, Next: Liveness information, Prev: Profile information, Up: Control Flow
9989 11.4 Maintaining the CFG
9990 ========================
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
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'
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.
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.
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:
10039 This function initializes a `block_stmt_iterator' that points to
10040 the first non-empty statement in a basic block.
10043 This function initializes a `block_stmt_iterator' that points to
10044 the last statement in a basic block.
10047 This predicate is `true' if a `block_stmt_iterator' represents the
10048 end of a basic block.
10051 This function takes a `block_stmt_iterator' and makes it point to
10055 This function takes a `block_stmt_iterator' and makes it point to
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.
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.
10071 This function removes the `block_stmt_iterator' passed in and
10072 rechains the remaining statements in a basic block, if any.
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::.
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,
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.
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.
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.
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.
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.
10127 File: gccint.info, Node: Liveness information, Prev: Maintaining the CFG, Up: Control Flow
10129 11.5 Liveness information
10130 =========================
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.
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.
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.
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'
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.
10174 File: gccint.info, Node: Machine Desc, Next: Target Macros, Prev: Tree SSA, Up: Top
10176 12 Machine Descriptions
10177 ***********************
10179 A machine description has two parts: a file of instruction patterns
10180 (`.md' file) and a C header file of macro definitions.
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.
10188 See the next chapter for information on the C header file.
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
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
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
10217 * Constant Definitions::Defining symbolic constants that can be used in the
10219 * Macros:: Using macros to generate patterns from a template.
10222 File: gccint.info, Node: Overview, Next: Patterns, Up: Machine Desc
10224 12.1 Overview of How the Machine Description is Used
10225 ====================================================
10227 There are three main conversions that happen in the compiler:
10229 1. The front end reads the source code and builds a parse tree.
10231 2. The parse tree is used to generate an RTL insn list based on named
10232 instruction patterns.
10234 3. The insn list is matched against the RTL templates to produce
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.
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'.
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.
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.
10266 File: gccint.info, Node: Patterns, Next: Example, Prev: Overview, Up: Machine Desc
10268 12.2 Everything about Instruction Patterns
10269 ==========================================
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.
10276 A `define_insn' is an RTL expression containing four or five operands:
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.
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.
10289 Names that are not thus known and used in RTL-generation have no
10290 effect; they are equivalent to no name at all.
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.
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.
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.
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
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.
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
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::.
10330 When simple substitution isn't general enough, you can specify a
10331 piece of C code to compute the output. *Note Output Statement::.
10333 5. Optionally, a vector containing the values of attributes for insns
10334 matching this pattern. *Note Insn Attributes::.
10337 File: gccint.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc
10339 12.3 Example of `define_insn'
10340 =============================
10342 Here is an actual example of an instruction pattern, for the
10345 (define_insn "tstsi"
10347 (match_operand:SI 0 "general_operand" "rm"))]
10351 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
10352 return \"tstl %0\";
10353 return \"cmpl #0,%0\";
10356 This can also be written using braced strings:
10358 (define_insn "tstsi"
10360 (match_operand:SI 0 "general_operand" "rm"))]
10363 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
10365 return "cmpl #0,%0";
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.
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.
10379 `"rm"' is an operand constraint. Its meaning is explained below.
10382 File: gccint.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc
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.
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.
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
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.
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.
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
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.
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.
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.
10443 When matching patterns, this is equivalent to
10445 (match_operand:M N "scratch_operand" PRED)
10447 but, when generating RTL, it produces a (`scratch':M) expression.
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::.
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.
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.
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.
10476 `(match_operator:M N PREDICATE [OPERANDS...])'
10477 This pattern is a kind of placeholder for a variable RTL expression
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.
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.
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:
10493 commutative_integer_operator (x, mode)
10495 enum machine_mode mode;
10497 enum rtx_code code = GET_CODE (x);
10498 if (GET_MODE (x) != mode)
10500 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
10501 || code == EQ || code == NE);
10504 Then the following pattern will match any RTL expression consisting
10505 of a commutative operator applied to two general operands:
10507 (match_operator:SI 3 "commutative_operator"
10508 [(match_operand:SI 1 "general_operand" "g")
10509 (match_operand:SI 2 "general_operand" "g")])
10511 Here the vector `[OPERANDS...]' contains two patterns because the
10512 expressions to be matched all contain two operands.
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.
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.
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.
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.
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.
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
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.
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
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,
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"))
10577 (clobber (reg:SI 179))])]
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.
10587 An insn that matches this pattern might look like:
10590 [(set (reg:SI 20) (mem:SI (reg:SI 100)))
10592 (clobber (reg:SI 179))
10594 (mem:SI (plus:SI (reg:SI 100)
10597 (mem:SI (plus:SI (reg:SI 100)
10600 `(match_par_dup N [SUBPAT...])'
10601 Like `match_op_dup', but for `match_parallel' instead of
10606 File: gccint.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc
10608 12.5 Output Templates and Operand Substitution
10609 ==============================================
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
10618 In the simplest case, a `%' followed by a digit N says to output
10619 operand N at that point in the string.
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.
10626 `%cDIGIT' can be used to substitute an operand that is a constant
10627 value without the syntax that normally indicates an immediate operand.
10629 `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
10630 negated before printing.
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.
10638 `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
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.
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.
10651 The template may generate multiple assembler instructions. Write the
10652 text for the instructions, with `\;' between them.
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.
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.
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
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
10686 File: gccint.info, Node: Output Statement, Next: Predicates, Prev: Output Template, Up: Machine Desc
10688 12.6 C Statements for Assembler Output
10689 ======================================
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.
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:
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")))]
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 `\'.
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.
10726 The operands may be found in the array `operands', whose C data type
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
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.
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.).
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:
10756 [(set (match_operand:SI 0 "general_operand" "=r,m")
10760 return (which_alternative == 0
10761 ? "clrreg %0" : "clrmem %0");
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 `@':
10769 [(set (match_operand:SI 0 "general_operand" "=r,m")
10777 File: gccint.info, Node: Predicates, Next: Constraints, Prev: Output Statement, Up: Machine Desc
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'.
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.
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
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.
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.
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.
10829 * Machine-Independent Predicates:: Predicates available to all back ends.
10830 * Defining Predicates:: How to write machine-specific predicate
10834 File: gccint.info, Node: Machine-Independent Predicates, Next: Defining Predicates, Up: Predicates
10836 12.7.1 Machine-Independent Predicates
10837 -------------------------------------
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.
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
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.
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
10859 The second category of predicates allow only some kind of machine
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.
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.
10871 (match_operand N "pmode_register_operand" CONSTRAINT)
10875 (match_operand:P N "register_operand" CONSTRAINT)
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.
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.
10887 The third category of predicates allow only some kind of memory
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::).
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.
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.
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::).
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.
10926 The fourth category of predicates allow some combination of the above
10929 -- Function: nonmemory_operand
10930 This predicate allows any immediate or register operand valid for
10933 -- Function: nonimmediate_operand
10934 This predicate allows any register or memory operand valid for
10937 -- Function: general_operand
10938 This predicate allows any immediate, register, or memory operand
10941 Finally, there is one generic operator predicate.
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
10949 File: gccint.info, Node: Defining Predicates, Prev: Machine-Independent Predicates, Up: Predicates
10951 12.7.2 Defining Machine-Specific Predicates
10952 -------------------------------------------
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
10960 * The name of the predicate, as it will be referred to in
10961 `match_operand' or `match_operator' expressions.
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:
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
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.
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
10992 The basic `MATCH_' expressions can be combined using these
10993 logical operators, which have the semantics of the C operators
10994 `&&', `||', `!', and `? :' respectively.
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.
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.
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'.
11012 Here is an example of a simple predicate definition, from the IA64
11013 machine description:
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)")))
11020 And here is another, showing the use of the C block.
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")
11026 unsigned int regno;
11027 if (GET_CODE (op) == SUBREG)
11028 op = SUBREG_REG (op);
11030 regno = REGNO (op);
11031 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
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'.
11045 Predicates written with `define_special_predicate' do not get any
11046 automatic mode checks, and are treated as having special mode handling
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'.
11055 File: gccint.info, Node: Constraints, Next: Standard Names, Prev: Predicates, Up: Machine Desc
11057 12.8 Operand Constraints
11058 ========================
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.
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.
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.
11079 File: gccint.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints
11081 12.8.1 Simple Constraints
11082 -------------------------
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:
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
11096 A memory operand is allowed, with any kind of address that the
11097 machine supports in general.
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
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.
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).
11120 A memory operand that is not offsettable. In other words,
11121 anything that would fit the `m' constraint but not the `o'
11125 A memory operand with autodecrement addressing (either
11126 predecrement or postdecrement) is allowed.
11129 A memory operand with autoincrement addressing (either
11130 preincrement or postincrement) is allowed.
11133 A register operand is allowed provided that it is in a general
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.
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'.
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
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).
11161 An immediate floating operand (expression code `const_double' or
11162 `const_vector') is allowed.
11165 `G' and `H' may be defined in a machine-dependent fashion to
11166 permit immediate floating operands in particular ranges of values.
11169 An immediate integer operand whose value is not an explicit
11170 integer is allowed.
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.
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.
11187 Any register, memory or immediate integer operand is allowed,
11188 except for registers that are not general registers.
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.
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.
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.
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:
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
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.
11231 An operand that is a valid memory address is allowed. This is for
11232 "load address" and "push address" instructions.
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.
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.
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.
11249 A typical use for `EXTRA_CONSTRAINT' would be to distinguish
11250 certain types of memory references that affect other insn operands.
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.
11258 Contrast, therefore, the two instruction patterns that follow:
11261 [(set (match_operand:SI 0 "general_operand" "=r")
11262 (plus:SI (match_dup 0)
11263 (match_operand:SI 1 "general_operand" "r")))]
11267 which has two operands, one of which must appear in two places, and
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")))]
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
11281 (plus:SI (reg:SI 6) (reg:SI 109)))
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:
11293 (set (reg:SI 3) (reg:SI 6))
11298 (plus:SI (reg:SI 3) (reg:SI 109)))
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.
11310 * If the constraint accepts whatever operands the predicate permits,
11311 there is no problem: reloading is never necessary for this operand.
11313 For example, an operand whose constraints permit everything except
11314 registers is safe provided its predicate rejects registers.
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
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
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.
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.
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
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.
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'.
11360 File: gccint.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints
11362 12.8.2 Multiple Alternative Constraints
11363 ---------------------------------------
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.
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
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")))]
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::).
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:
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
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.
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
11420 File: gccint.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints
11422 12.8.3 Register Class Preferences
11423 ---------------------------------
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.
11435 Of course, on some machines all registers are equivalent, and no
11436 register classes are defined. Then none of this complexity is relevant.
11439 File: gccint.info, Node: Modifiers, Next: Machine Constraints, Prev: Class Preferences, Up: Constraints
11441 12.8.4 Constraint Modifier Characters
11442 -------------------------------------
11444 Here are constraint modifier characters.
11447 Means that this operand is write-only for this instruction: the
11448 previous value is discarded and replaced by output data.
11451 Means that this operand is both read and written by the
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.
11460 If you specify `=' or `+' in a constraint, you put it in the first
11461 character of the constraint string.
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.
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'
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.
11481 `&' does not obviate the need to write `='.
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:
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")))]
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.
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.
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.
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.
11521 (define_insn "extendhisi2"
11522 [(set (match_operand:SI 0 "general_operand" "=*d,a")
11524 (match_operand:HI 1 "general_operand" "0,g")))]
11528 File: gccint.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints
11530 12.8.5 Constraints for Particular Machines
11531 ------------------------------------------
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
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
11549 `REG_CLASS_FROM_LETTER'
11550 Register class constraints (usually lowercase).
11552 `CONST_OK_FOR_LETTER_P'
11553 Immediate constant constraints, for non-floating point constants of
11554 word size or smaller precision (usually uppercase).
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
11562 Special cases of registers or memory. This macro is not required,
11563 and is only defined for some machines.
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.
11570 _ARM family--`arm.h'_
11573 Floating-point register
11576 VFP floating-point register
11579 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
11583 Floating-point constant that would satisfy the constraint `F'
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
11592 Integer in the range -4095 to 4095
11595 Integer that satisfies constraint `I' when inverted (ones
11599 Integer that satisfies constraint `I' when negated (twos
11603 Integer in the range 0 to 32
11606 A memory reference where the exact address is in a single
11607 register (``m'' is preferable for `asm' statements)
11610 An item in the constant pool
11613 A symbol in the text segment of the current file
11616 A memory reference suitable for VFP load/store insns (reg+constant
11620 A memory reference suitable for iWMMXt load/store instructions.
11623 A memory reference suitable for the ARMv4 ldrsb instruction.
11625 _AVR family--`avr.h'_
11628 Registers from r0 to r15
11631 Registers from r16 to r23
11634 Registers from r16 to r31
11637 Registers from r24 to r31. These registers can be used in
11641 Pointer register (r26-r31)
11644 Base pointer register (r28-r31)
11647 Stack pointer register (SPH:SPL)
11650 Temporary register r0
11653 Register pair X (r27:r26)
11656 Register pair Y (r29:r28)
11659 Register pair Z (r31:r30)
11662 Constant greater than -1, less than 64
11665 Constant greater than -64, less than 1
11674 Constant that fits in 8 bits
11677 Constant integer -1
11680 Constant integer 8, 16, or 24
11686 A floating point constant 0.0
11688 _PowerPC and IBM RS6000--`rs6000.h'_
11691 Address base register
11694 Floating point register
11700 `MQ', `CTR', or `LINK' register
11712 `CR' register (condition register) number 0
11715 `CR' register (condition register)
11718 `FPMEM' stack memory for FPR-GPR transfers
11721 Signed 16-bit constant
11724 Unsigned 16-bit constant shifted left 16 bits (use `L'
11725 instead for `SImode' constants)
11728 Unsigned 16-bit constant
11731 Signed 16-bit constant shifted left 16 bits
11734 Constant larger than 31
11743 Constant whose negation is a signed 16-bit constant
11746 Floating point constant that can be loaded into a register
11747 with one instruction per word
11750 Memory operand that is an offset from a register (`m' is
11751 preferable for `asm' statements)
11757 Constant suitable as a 64-bit mask operand
11760 Constant suitable as a 32-bit mask operand
11763 System V Release 4 small data area reference
11765 _Intel 386--`i386.h'_
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).
11773 `a', `b', `c', or `d' register (for 8-bit instructions, that
11774 do use upper halves).
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)
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
11789 Floating point register
11792 First (top of stack) floating point register
11795 Second floating point register
11807 Specifies constant that can be easily constructed in SSE
11808 register without loading it from memory.
11826 Constant in range 0 to 31 (for 32-bit shifts)
11829 Constant in range 0 to 63 (for 64-bit shifts)
11838 0, 1, 2, or 3 (shifts for `lea' instruction)
11841 Constant in range 0 to 255 (for `out' instruction)
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)
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)
11854 Standard 80387 floating point constant
11856 _Intel IA-64--`ia64.h'_
11859 General register `r0' to `r3' for `addl' instruction
11865 Predicate register (`c' as in "conditional")
11868 Application register residing in M-unit
11871 Application register residing in I-unit
11874 Floating-point register
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.
11882 Floating-point constant 0.0 or 1.0
11885 14-bit signed integer constant
11888 22-bit signed integer constant
11891 8-bit signed integer constant for logical instructions
11894 8-bit adjusted signed integer constant for compare pseudo-ops
11897 6-bit unsigned integer constant for shift counts
11900 9-bit signed integer constant for load and store
11907 0 or -1 for `dep' instruction
11910 Non-volatile memory for floating-point loads and stores
11913 Integer constant in the range 1 to 4 for `shladd' instruction
11916 Memory operand except postincrement and postdecrement
11921 Register in the class `ACC_REGS' (`acc0' to `acc7').
11924 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
11927 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
11931 Register in the class `GPR_REGS' (`gr0' to `gr63').
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.
11939 Register in the class `FPR_REGS' (`fr0' to `fr63').
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.
11947 Register in the class `LR_REG' (the `lr' register).
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
11956 Register in the class `ICC_REGS' (`icc0' to `icc3').
11959 Register in the class `FCC_REGS' (`fcc0' to `fcc3').
11962 Register in the class `ICR_REGS' (`cc4' to `cc7').
11965 Register in the class `FCR_REGS' (`cc0' to `cc3').
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
11974 Register in the class `SPR_REGS' (`lcr' and `lr').
11977 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
11980 Register in the class `ACCG_REGS' (`accg0' to `accg7').
11983 Register in the class `CR_REGS' (`cc0' to `cc7').
11986 Floating point constant zero
11989 6-bit signed integer constant
11992 10-bit signed integer constant
11995 16-bit signed integer constant
11998 16-bit unsigned integer constant
12001 12-bit signed integer constant that is negative--i.e. in the
12002 range of -2048 to -1
12008 12-bit signed integer constant that is greater than
12009 zero--i.e. in the range of 1 to 2047.
12012 _Blackfin family--`bfin.h'_
12021 A call clobbered P register.
12024 Even-numbered D register
12027 Odd-numbered D register
12030 Accumulator register.
12033 Even-numbered accumulator register.
12036 Odd-numbered accumulator register.
12048 Registers used for circular buffering, i.e. I, B, or L
12055 Any D, P, B, M, I or L register.
12058 Additional registers typically used only in prologues and
12059 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
12063 Any register except accumulators or CC.
12066 Signed 16 bit integer (in the range -32768 to 32767)
12069 Unsigned 16 bit integer (in the range 0 to 65535)
12072 Signed 7 bit integer (in the range -64 to 63)
12075 Unsigned 7 bit integer (in the range 0 to 127)
12078 Unsigned 5 bit integer (in the range 0 to 31)
12081 Signed 4 bit integer (in the range -8 to 7)
12084 Signed 3 bit integer (in the range -3 to 4)
12087 Unsigned 3 bit integer (in the range 0 to 7)
12090 Constant N, where N is a single-digit constant in the range 0
12100 An integer constant with exactly a single bit set.
12103 An integer constant with all bits set except exactly one.
12113 `DP' or `IP' registers (general address)
12137 `DP' or `SP' registers (offsettable address)
12140 Non-pointer registers (not `SP', `DP', `IP')
12143 Non-SP registers (everything except `SP')
12146 Indirect through `IP'--Avoid this except for `QImode', since
12147 we can't access extra bytes
12150 Indirect through `SP' or `DP' with short displacement (0..127)
12153 Data-section immediate value
12156 Integers from -255 to -1
12159 Integers from 0 to 7--valid bit number in a register
12162 Integers from 0 to 127--valid displacement for addressing mode
12165 Integers from 1 to 127
12177 Integers from 0 to 255
12182 General-purpose integer register
12185 Floating-point register (if available)
12194 `Hi' or `Lo' register
12197 General-purpose integer register
12200 Floating-point status register
12203 Signed 16-bit constant (for arithmetic instructions)
12209 Zero-extended 16-bit constant (for logic instructions)
12212 Constant with low 16 bits zero (can be loaded with `lui')
12215 32-bit constant which requires two instructions to load (a
12216 constant which is not `I', `K', or `L')
12219 Negative 16-bit constant
12225 Positive 16-bit constant
12228 Floating point zero
12231 Memory reference that can be loaded with more than one
12232 instruction (`m' is preferable for `asm' statements)
12235 Memory reference that can be loaded with one instruction (`m'
12236 is preferable for `asm' statements)
12239 Memory reference in external OSF/rose PIC format (`m' is
12240 preferable for `asm' statements)
12242 _Motorola 680x0--`m68k.h'_
12251 68881 floating-point register, if available
12254 Integer in the range 1 to 8
12257 16-bit signed number
12260 Signed number whose magnitude is greater than 0x80
12263 Integer in the range -8 to -1
12266 Signed number whose magnitude is greater than 0x100
12269 Floating point constant that is not a 68881 constant
12271 _Motorola 68HC11 & 68HC12 families--`m68hc11.h'_
12286 Temporary soft register _.tmp
12289 A soft register _.d1 to _.d31
12292 Stack pointer register
12301 Pseudo register `z' (replaced by `x' or `y' at the end)
12304 An address register: x, y or z
12307 An address register: x or y
12310 Register pair (x:d) to form a 32-bit value
12313 Constants in the range -65536 to 65535
12316 Constants whose 16-bit low part is zero
12319 Constant integer 1 or -1
12322 Constant integer 16
12325 Constants in the range -8 to 2
12331 Floating-point register on the SPARC-V8 architecture and
12332 lower floating-point register on the SPARC-V9 architecture.
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.
12340 Floating-point condition code register.
12343 Lower floating-point register. It is only valid on the
12344 SPARC-V9 architecture when the Visual Instruction Set is
12348 Floating-point register. It is only valid on the SPARC-V9
12349 architecture when the Visual Instruction Set is available.
12352 64-bit global or out register for the SPARC-V8+ architecture.
12355 Signed 13-bit constant
12361 32-bit constant with the low 12 bits clear (a constant that
12362 can be loaded with the `sethi' instruction)
12365 A constant in the range supported by `movcc' instructions
12368 A constant in the range supported by `movrcc' instructions
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'
12379 Floating-point zero
12382 Signed 13-bit constant, sign-extended to 32 or 64 bits
12385 Floating-point constant whose integral representation can be
12386 moved into an integer register using a single sethi
12390 Floating-point constant whose integral representation can be
12391 moved into an integer register using a single mov instruction
12394 Floating-point constant whose integral representation can be
12395 moved into an integer register using a high/lo_sum
12396 instruction sequence
12399 Memory address aligned to an 8-byte boundary
12405 Memory address for `e' constraint registers
12411 _TMS320C3x/C4x--`c4x.h'_
12414 Auxiliary (address) register (ar0-ar7)
12417 Stack pointer register (sp)
12420 Standard (32-bit) precision integer register
12423 Extended (40-bit) precision register (r0-r11)
12426 Block count register (bk)
12429 Extended (40-bit) precision low register (r0-r7)
12432 Extended (40-bit) precision register (r0-r1)
12435 Extended (40-bit) precision register (r2-r3)
12438 Repeat count register (rc)
12441 Index register (ir0-ir1)
12444 Status (condition code) register (st)
12447 Data page register (dp)
12450 Floating-point zero
12453 Immediate 16-bit floating-point constant
12456 Signed 16-bit constant
12459 Signed 8-bit constant
12462 Signed 5-bit constant
12465 Unsigned 16-bit constant
12468 Unsigned 8-bit constant
12471 Ones complement of unsigned 16-bit constant
12474 High 16-bit constant (32-bit constant with 16 LSBs zero)
12477 Indirect memory reference with signed 8-bit or index register
12481 Indirect memory reference with unsigned 5-bit displacement
12484 Indirect memory reference with 1 bit or index register
12488 Direct memory reference
12494 _S/390 and zSeries--`s390.h'_
12497 Address register (general purpose register except r0)
12500 Condition code register
12503 Data register (arbitrary general purpose register)
12506 Floating-point register
12509 Unsigned 8-bit constant (0-255)
12512 Unsigned 12-bit constant (0-4095)
12515 Signed 16-bit constant (-32768-32767)
12518 Value appropriate as displacement.
12520 for short displacement
12522 `(-524288..524287)'
12523 for long displacement
12526 Constant integer with a value of 0x7fffffff.
12529 Multiple letter constraint followed by 4 parameter letters.
12531 number of the part counting from most to least
12538 mode of the containing operand
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.
12546 Memory reference without index register and with short
12550 Memory reference with index register and short displacement.
12553 Memory reference without index register but with long
12557 Memory reference with index register and long displacement.
12560 Pointer with short displacement.
12563 Pointer with long displacement.
12566 Shift count operand.
12569 _Xstormy16--`stormy16.h'_
12584 Registers r0 through r7.
12587 Registers r0 and r1.
12590 The carry register.
12593 Registers r8 and r9.
12596 A constant between 0 and 3 inclusive.
12599 A constant that has exactly one bit set.
12602 A constant that has exactly one bit clear.
12605 A constant between 0 and 255 inclusive.
12608 A constant between -255 and 0 inclusive.
12611 A constant between -3 and 0 inclusive.
12614 A constant between 1 and 4 inclusive.
12617 A constant between -4 and -1 inclusive.
12620 A memory reference that is a stack push.
12623 A memory reference that is a stack pop.
12626 A memory reference that refers to a constant address of known
12630 The register indicated by Rx (not implemented yet).
12633 A constant that is not between 2 and 15 inclusive.
12639 _Xtensa--`xtensa.h'_
12642 General-purpose 32-bit register
12645 One-bit boolean register
12648 MAC16 40-bit accumulator register
12651 Signed 12-bit integer constant, for use in MOVI instructions
12654 Signed 8-bit integer constant, for use in ADDI instructions
12657 Integer constant valid for BccI instructions
12660 Unsigned constant valid for BccUI instructions
12665 File: gccint.info, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc
12667 12.9 Standard Pattern Names For Generation
12668 ==========================================
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.
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.
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.
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
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.
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.
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.
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
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.
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
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
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::.
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
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.
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
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.
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::.
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.
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.
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
12797 This pattern is used by the autovectorizer, and when expanding a
12798 `MISALIGNED_INDIRECT_REF' expression.
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.
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
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.
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.
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.
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
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
12840 Initialize the vector to given values. Operand 0 is the vector to
12841 initialize and operand 1 is parallel containing values for
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.
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
12861 `andM3', `iorM3', `xorM3'
12862 Similar, for other arithmetic operations.
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
12871 Multiply operands 1 and 2, which have mode `HImode', and store a
12872 `SImode' product in operand 0.
12874 `mulqihi3', `mulsidi3'
12875 Similar widening-multiplication instructions of other widths.
12877 `umulqihi3', `umulhisi3', `umulsidi3'
12878 Similar widening-multiplication instructions that do unsigned
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.
12887 Similar, but the multiplication is unsigned.
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.
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
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.
12907 Similar, but does unsigned division.
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::.
12919 `ashrM3', `lshrM3', `rotlM3', `rotrM3'
12920 Other shift and rotate instructions, analogous to the `ashlM3'
12924 Negate operand 1 and store the result in operand 0.
12927 Store the absolute value of operand 1 into operand 0.
12930 Store the square root of operand 1 into operand 0.
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
12938 Store the cosine of operand 1 into operand 0.
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
12946 Store the sine of operand 1 into operand 0.
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
12954 Store the exponential of operand 1 into operand 0.
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
12962 Store the natural logarithm of operand 1 into operand 0.
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
12970 Store the value of operand 1 raised to the exponent operand 2 into
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
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.
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
12989 Store the largest integral value not greater than argument.
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
12997 Store the argument rounded to integer towards zero.
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
13005 Store the argument rounded to integer away from zero.
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
13013 Store the argument rounded to integer away from zero.
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
13021 Store the argument rounded according to the default rounding mode
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
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.
13035 The `ffs' built-in function of C always uses the mode which
13036 corresponds to the C data type `int'.
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.
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.
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.
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.
13065 Store the bitwise-complement of operand 1 into operand 0.
13068 Compare operand 0 and operand 1, and set the condition codes. The
13069 RTL pattern should look like this:
13071 (set (cc0) (compare (match_operand:M 0 ...)
13072 (match_operand:M 1 ...)))
13075 Compare operand 0 against zero, and set the condition codes. The
13076 RTL pattern should look like this:
13078 (set (cc0) (match_operand:M 0 ...))
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.
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'.
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
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.
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.
13110 These patterns need not give special consideration to the
13111 possibility that the source and destination strings might overlap.
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.
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.
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
13132 The use for multiple `clrmemM' is as for `movmemM'.
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
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
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.
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).
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).
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.
13176 If the machine description defines this pattern, it also needs to
13177 define the `ftrunc' pattern.
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.
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).
13191 Like `fixMN2' but works for any floating point value of mode M by
13192 converting the value to an integer.
13195 Like `fixunsMN2' but works for any floating point value of mode M
13196 by converting the value to an integer.
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.
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.
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.
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'.
13220 The RTL generation pass generates this instruction only with
13221 constants for operands 2 and 3.
13223 The bit-field value is sign-extended to a full word integer before
13224 it is stored in operand 0.
13227 Like `extv' except that the bit-field value is zero-extended.
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'.
13236 The RTL generation pass generates this instruction only with
13237 constants for operands 1 and 2.
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.
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.
13249 If the machine does not have conditional move instructions, do not
13250 define these patterns.
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.
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'.
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.
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.
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.
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.
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
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.
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
13308 The above discussion also applies to the `movMODEcc' and `sCOND'
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.
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.
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
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.
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
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).
13348 Subroutines that return `BLKmode' objects use the `call' insn.
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.
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.
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.
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).
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.
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.
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.
13394 Machines that have conditional return instructions should define
13399 (if_then_else (match_operator
13400 0 "comparison_operator"
13401 [(cc0) (const_int 0)])
13407 where CONDITION would normally be the same condition specified on
13408 the named `return' pattern.
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.
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
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.
13427 An instruction to jump to an address which is operand zero. This
13428 pattern name is mandatory on all machines.
13431 Instruction to jump through a dispatch table, including bounds
13432 checking. This instruction takes five operands:
13434 1. The index to dispatch on, which has mode `SImode'.
13436 2. The lower bound for indices in the table, an integer constant.
13438 3. The total range of indices in the table--the largest index
13439 minus the smallest one (both inclusive).
13441 4. A label that precedes the table itself.
13443 5. A label to jump to if the index has a value outside the
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.
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.
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'.
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
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::.
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.
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
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.
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.
13506 `canonicalize_funcptr_for_compare'
13507 Canonicalize the function pointer in operand 1 and store the result
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
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.
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.
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
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:
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
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
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.
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.
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.
13576 Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1
13577 from the stack pointer to create space for dynamically allocated
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.
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.
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.
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.
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.
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
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
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.
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
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'.
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.
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
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.
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
13692 Using a prologue pattern is generally preferred over defining
13693 `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
13696 The `prologue' pattern is particularly useful for targets which
13697 perform instruction scheduling.
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.
13704 Using an epilogue pattern is generally preferred over defining
13705 `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
13708 The `epilogue' pattern is particularly useful for targets which
13709 perform instruction scheduling or which have delay slots for their
13710 return instruction.
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)
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.
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.
13728 Conditional trap instruction. Operand 0 is a piece of RTL which
13729 performs a comparison. Operand 1 is the trap code, an integer.
13731 A typical `conditional_trap' pattern looks like
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"))]
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
13753 Targets that do not support write prefetches or locality hints can
13754 ignore the values of operands 1 and 2.
13758 File: gccint.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc
13760 12.10 When the Order of Patterns Matters
13761 ========================================
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.
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
13782 File: gccint.info, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc
13784 12.11 Interdependence of Patterns
13785 =================================
13787 Every machine description must have a named pattern for each of the
13788 conditional branch names `bCOND'. The recognition template must always
13792 (if_then_else (COND (cc0) (const_int 0))
13793 (label_ref (match_operand 0 "" ""))
13796 In addition, every machine description must have an anonymous pattern
13797 for each of the possible reverse-conditional branches. Their templates
13801 (if_then_else (COND (cc0) (const_int 0))
13803 (label_ref (match_operand 0 "" ""))))
13805 They are necessary because jump optimization can turn direct-conditional
13806 branches into reverse-conditional branches.
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
13814 (if_then_else (match_operator 0 "comparison_operator"
13815 [(cc0) (const_int 0)])
13817 (label_ref (match_operand 1 "" ""))))]
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
13826 (set (match_operand:SI 0 ...)
13827 (extend:SI (match_operand:HI 1 ...)))
13829 (set (match_operand:SI 0 ...)
13830 (extend:SI (match_operand:QI 1 ...)))
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
13840 Such instructions to extend constants are rarely generated because
13841 they are optimized away, but they do occasionally happen in nonoptimized
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.
13853 File: gccint.info, Node: Jump Patterns, Next: Looping Patterns, Prev: Dependent Patterns, Up: Machine Desc
13855 12.12 Defining Jump Instruction Patterns
13856 ========================================
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
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
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
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.
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.
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.
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.
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.
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'.
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.
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.
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.
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
13952 [(set (reg:CC_NOOV 0)
13954 (plus:SI (match_operand:SI 0 "register_operand" "%r")
13955 (match_operand:SI 1 "arith_operand" "rI"))
13960 The `SELECT_CC_MODE' macro on the SPARC returns `CC_NOOVmode' for
13961 comparisons whose argument is a `plus'.
13964 File: gccint.info, Node: Looping Patterns, Next: Insn Canonicalizations, Prev: Jump Patterns, Up: Machine Desc
13966 12.13 Defining Looping Instruction Patterns
13967 ===========================================
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
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:
13993 (define_insn "decrement_and_branch_until_zero"
13996 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
13999 (label_ref (match_operand 1 "" ""))
14002 (plus:SI (match_dup 0)
14004 "find_reg_note (insn, REG_NONNEG, 0)"
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.
14015 (define_insn "decrement_and_branch_until_zero"
14018 (ge (match_operand:SI 0 "general_operand" "+d*am")
14020 (label_ref (match_operand 1 "" ""))
14023 (plus:SI (match_dup 0)
14025 "find_reg_note (insn, REG_NONNEG, 0)"
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.
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.
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
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
14060 File: gccint.info, Node: Insn Canonicalizations, Next: Expander Definitions, Prev: Looping Patterns, Up: Machine Desc
14062 12.14 Canonicalization of Instructions
14063 ======================================
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.
14072 In addition to algebraic simplifications, following canonicalizations
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.
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.
14086 * For these operators, if only one operand is a `neg', `not',
14087 `mult', `plus', or `minus' expression, it will be the first
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))'.
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.
14104 An operand of `neg', `not', `mult', `plus', or `minus' is made the
14105 first operand under the same conditions as above.
14107 * `(minus X (const_int N))' is converted to `(plus X (const_int
14110 * Within address computations (i.e., inside `mem'), a left shift is
14111 converted into the appropriate multiplication by a power of two.
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.
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
14122 [(set (match_operand:M 0 ...)
14123 (and:M (not:M (match_operand:M 1 ...))
14124 (match_operand:M 2 ...)))]
14128 Similarly, a pattern for a "NAND" instruction should be written
14131 [(set (match_operand:M 0 ...)
14132 (ior:M (not:M (match_operand:M 1 ...))
14133 (not:M (match_operand:M 2 ...))))]
14137 In both cases, it is not necessary to include patterns for the many
14138 logically equivalent RTL expressions.
14140 * The only possible RTL expressions involving both bitwise
14141 exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M
14144 * The sum of three items, one of which is a constant, will only
14147 (plus:M (plus:M X Y) CONSTANT)
14149 * On machines that do not use `cc0', `(compare X (const_int 0))'
14150 will be converted to X.
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.
14158 File: gccint.info, Node: Expander Definitions, Next: Insn Splitting, Prev: Insn Canonicalizations, Up: Machine Desc
14160 12.15 Defining RTL Sequences for Code Generation
14161 ================================================
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.
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.
14172 A `define_expand' RTX has four operands:
14174 * The name. Each `define_expand' must have a name, since the only
14175 use for it is to refer to it by name.
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'.
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.
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.
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.
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
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.
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'.
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.
14227 There are two special macros defined for use in the preparation
14228 statements: `DONE' and `FAIL'. Use them with a following semicolon, as
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.
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.
14243 Failure is currently supported only for binary (addition,
14244 multiplication, shifting, etc.) and bit-field (`extv', `extzv',
14245 and `insv') operations.
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.
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:
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" "")]
14263 handle_add (operands[0], operands[1], operands[2]);
14267 Here is an example, the definition of left-shift for the SPUR chip:
14269 (define_expand "ashlsi3"
14270 [(set (match_operand:SI 0 "register_operand" "")
14272 (match_operand:SI 1 "register_operand" "")
14273 (match_operand:SI 2 "nonmemory_operand" "")))]
14278 if (GET_CODE (operands[2]) != CONST_INT
14279 || (unsigned) INTVAL (operands[2]) > 3)
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).
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':
14294 (define_expand "zero_extendhisi2"
14295 [(set (match_operand:SI 0 "general_operand" "")
14297 (set (strict_low_part
14301 (match_operand:HI 1 "general_operand" ""))]
14303 "operands[1] = make_safe_from (operands[1], operands[0]);")
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.
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'.
14320 (define_expand "zero_extendhisi2"
14321 [(set (match_operand:SI 0 "register_operand" "")
14323 (match_operand:HI 1 "register_operand" "")
14328 = force_reg (SImode, GEN_INT (65535)); ")
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
14339 File: gccint.info, Node: Insn Splitting, Next: Including Patterns, Prev: Expander Definitions, Up: Machine Desc
14341 12.16 Defining How to Split Instructions
14342 ========================================
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.
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
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.
14370 The `define_split' definition tells the compiler how to split a
14371 complex insn into several simpler insns. It looks like this:
14376 [NEW-INSN-PATTERN-1
14379 "PREPARATION-STATEMENTS")
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.
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.
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.
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:
14409 [(set (match_operand:SI 0 "gen_reg_operand" "")
14410 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
14412 [(set (match_dup 0)
14413 (ashift:SI (match_dup 1)
14416 (ashiftrt:SI (match_dup 0)
14419 { operands[1] = gen_lowpart (SImode, operands[1]); }")
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).
14432 Here is an example of this use of `define_split', taken from
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" "")))]
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)))]
14444 int low = INTVAL (operands[2]) & 0xffff;
14445 int high = (unsigned) INTVAL (operands[2]) >> 16;
14448 high++, low |= 0xffff0000;
14450 operands[3] = GEN_INT (high << 16);
14451 operands[4] = GEN_INT (low);
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.
14459 An example that uses a scratch register, from the same file, generates
14460 an equality comparison of a register and a large constant:
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)))]
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. */
14478 int c = INTVAL (operands[2]);
14479 int sextc = (c << 16) >> 16;
14480 int xorv = c ^ sextc;
14482 operands[4] = GEN_INT (xorv);
14483 operands[5] = GEN_INT (sextc);
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.
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.
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
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
14512 (define_insn_and_split
14517 [NEW-INSN-PATTERN-1
14520 "PREPARATION-STATEMENTS"
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:
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"
14537 "&& reload_completed"
14538 [(parallel [(set (match_dup 0)
14539 (and:SI (match_dup 0) (const_int 65535)))
14540 (clobber (reg:CC 17))])]
14542 [(set_attr "type" "alu1")])
14544 In this case, the actual split condition will be
14545 `TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
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.
14553 File: gccint.info, Node: Including Patterns, Next: Peephole Definitions, Prev: Insn Splitting, Up: Machine Desc
14555 12.17 Including Patterns in Machine Descriptions.
14556 =================================================
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.
14571 (include "filestuff")
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.
14577 Machine descriptions may be split up into smaller more manageable
14578 subsections and placed into subdirectories.
14583 (include "BOGUS/filestuff")
14585 the include file is specified to be in
14586 `gcc/config/TARGET/BOGUS/filestuff'.
14588 Specifying an absolute path for the include file such as;
14590 (include "/u2/BOGUS/filestuff")
14591 is permitted but is not encouraged.
14593 12.17.1 RTL Generation Tool Options for Directory Search
14594 --------------------------------------------------------
14596 The `-IDIR' option specifies directories to search for machine
14597 descriptions. For example:
14600 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
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
14611 File: gccint.info, Node: Peephole Definitions, Next: Insn Attributes, Prev: Including Patterns, Up: Machine Desc
14613 12.18 Machine-Specific Peephole Optimizers
14614 ==========================================
14616 In addition to instruction patterns the `md' file may contain
14617 definitions of machine-specific peephole optimizations.
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.
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
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
14638 * define_peephole:: RTL to Text Peephole Optimizers
14639 * define_peephole2:: RTL to RTL Peephole Optimizers
14642 File: gccint.info, Node: define_peephole, Next: define_peephole2, Up: Peephole Definitions
14644 12.18.1 RTL to Text Peephole Optimizers
14645 ---------------------------------------
14647 A definition looks like this:
14655 "OPTIONAL-INSN-ATTRIBUTES")
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'.
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,
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
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.
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.
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
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
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.
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.
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]').
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.
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.
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.
14727 Here is an example, taken from the 68000 machine description:
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])"
14736 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
14738 output_asm_insn ("move.l %1,(sp)", xoperands);
14739 output_asm_insn ("move.l %1,-(sp)", operands);
14740 return "fmove.d (sp)+,%0";
14742 output_asm_insn ("movel %1,sp@", xoperands);
14743 output_asm_insn ("movel %1,sp@-", operands);
14744 return "fmoved sp@+,%0";
14748 The effect of this optimization is to change
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,
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)))]
14780 "divsl%.l %2,%3:%0")
14782 then the way to mention this insn in a peephole is as follows:
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)))])
14796 File: gccint.info, Node: define_peephole2, Prev: define_peephole, Up: Peephole Definitions
14798 12.18.2 RTL to RTL Peephole Optimizers
14799 --------------------------------------
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.
14810 [NEW-INSN-PATTERN-1
14813 "PREPARATION-STATEMENTS")
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.
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.
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.
14830 Here is an example from the IA-32 machine description:
14833 [(match_scratch:SI 2 "r")
14834 (parallel [(set (match_operand:SI 0 "register_operand" "")
14835 (match_operator:SI 3 "arith_or_logical_operator"
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))])]
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.
14851 A real example requiring extended scratch lifetimes is harder to come
14852 by, so here's a silly made-up example:
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))
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))]
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'.
14872 File: gccint.info, Node: Insn Attributes, Next: Conditional Execution, Prev: Peephole Definitions, Up: Machine Desc
14874 12.19 Instruction Attributes
14875 ============================
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.
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.
14896 File: gccint.info, Node: Defining Attributes, Next: Expressions, Up: Insn Attributes
14898 12.19.1 Defining Attributes and their Values
14899 --------------------------------------------
14901 The `define_attr' expression is used to define each attribute required
14902 by the target machine. It looks like:
14904 (define_attr NAME LIST-OF-VALUES DEFAULT)
14906 NAME is a string specifying the name of the attribute being defined.
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.
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
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:
14923 * A `#define' is written for the symbol `HAVE_ATTR_NAME'.
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.
14929 * A function `get_attr_NAME' is defined that is passed an insn and
14930 returns the attribute value for that insn.
14932 For example, if the following is present in the `md' file:
14934 (define_attr "type" "branch,fp,load,store,arith" ...)
14936 the following lines will be written to the file `insn-attr.h'.
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 ();
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'.
14947 File: gccint.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes
14949 12.19.2 Attribute Expressions
14950 -----------------------------
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:
14957 The integer I specifies the value of a numeric attribute. I must
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::).
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
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.
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.
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.
14991 TEST expressions can have one of the following forms:
14994 This test is true if I is nonzero and false otherwise.
14997 `(ior TEST1 TEST2)'
14998 `(and TEST1 TEST2)'
14999 These tests are true if the indicated logical function is true.
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).
15008 The CONSTRAINTS operand is ignored and should be the null string.
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'
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.
15031 `(eq_attr NAME VALUE)'
15032 NAME is a string specifying the name of an attribute.
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.
15043 (eq_attr "type" "load,store")
15047 (ior (eq_attr "type" "load") (eq_attr "type" "store"))
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,
15053 (eq_attr "alternative" "2,3")
15057 (ior (eq (symbol_ref "which_alternative") (const_int 2))
15058 (eq (symbol_ref "which_alternative") (const_int 3)))
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
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.
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.
15075 If the `very_likely' flag is true, then the `likely' flag is also
15076 true. Likewise for the `very_unlikely' and `unlikely' flags.
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).
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"))])
15089 The `forward' and `backward' flags are false if the current `insn'
15090 being scheduled is not a conditional branch.
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.
15097 `attr_flag' is only used during delay slot scheduling and has no
15098 meaning to other passes of the compiler.
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.
15106 File: gccint.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes
15108 12.19.3 Assigning Attribute Values to Insns
15109 -------------------------------------------
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
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
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
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.
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.
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.
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.
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.
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.
15164 The following shows three different ways of representing the same
15165 attribute value specification:
15167 (set_attr "type" "load,store,arith")
15169 (set_attr_alternative "type"
15170 [(const_string "load") (const_string "store")
15171 (const_string "arith")])
15174 (cond [(eq_attr "alternative" "1") (const_string "load")
15175 (eq_attr "alternative" "2") (const_string "store")]
15176 (const_string "arith")))
15178 The `define_asm_attributes' expression provides a mechanism to specify
15179 the attributes assigned to insns produced from an `asm' statement. It
15182 (define_asm_attributes [ATTR-SETS])
15184 where ATTR-SETS is specified the same as for both the `define_insn' and
15185 the `define_peephole' expressions.
15187 These values will typically be the "worst case" attribute values. For
15188 example, they might indicate that the condition code will be clobbered.
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.
15200 File: gccint.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes
15202 12.19.4 Example of Attribute Specifications
15203 -------------------------------------------
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.
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.
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
15223 Here is part of a sample `md' file for such a machine:
15225 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
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")))
15239 [(set (match_operand:SI 0 "general_operand" "=r,r,m")
15240 (match_operand:SI 1 "general_operand" "r,m,r"))]
15246 [(set_attr "type" "arith,load,store")])
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.
15254 File: gccint.info, Node: Insn Lengths, Next: Constant Attributes, Prev: Attr Example, Up: Insn Attributes
15256 12.19.5 Computing the Length of an Insn
15257 ---------------------------------------
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'.
15266 In the case of the `length' attribute, two additional forms of
15267 arithmetic terms are allowed in test expressions:
15270 This refers to the address of operand N of the current insn, which
15271 must be a `label_ref'.
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.
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.
15284 Lengths are measured in addressable storage units (bytes).
15286 The following macros can be used to refine the length computation:
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.
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.
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.
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
15310 On such a machine, a pattern for a branch instruction might be
15311 specified as follows:
15313 (define_insn "jump"
15315 (label_ref (match_operand 0 "" "")))]
15318 return (get_attr_length (insn) == 4
15319 ? "b %l0" : "l r15,=a(%l0); br r15");
15321 [(set (attr "length")
15322 (if_then_else (lt (match_dup 0) (const_int 4096))
15327 File: gccint.info, Node: Constant Attributes, Next: Delay Slots, Prev: Insn Lengths, Up: Insn Attributes
15329 12.19.6 Constant Attributes
15330 ---------------------------
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,
15337 (define_attr "cpu" "m88100,m88110,m88000"
15339 (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
15340 (symbol_ref "TARGET_88110") (const_string "m88110")]
15341 (const_string "m88000"))))
15343 (define_attr "memory" "fast,slow"
15345 (if_then_else (symbol_ref "TARGET_FAST_MEM")
15346 (const_string "fast")
15347 (const_string "slow"))))
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.
15356 File: gccint.info, Node: Delay Slots, Next: Processor pipeline description, Prev: Constant Attributes, Up: Insn Attributes
15358 12.19.7 Delay Slot Scheduling
15359 -----------------------------
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.
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.
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.
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:
15384 [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
15385 DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
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)'
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:
15402 (define_delay (eq_attr "type" "branch,call")
15403 [(eq_attr "type" "!branch,call") (nil) (nil)])
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
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:
15415 (define_delay (eq_attr "type" "branch")
15416 [(eq_attr "type" "!branch,call")
15417 (eq_attr "type" "!branch,call")
15420 (define_delay (eq_attr "type" "call")
15421 [(eq_attr "type" "!branch,call") (nil) (nil)
15422 (eq_attr "type" "!branch,call") (nil) (nil)])
15425 File: gccint.info, Node: Processor pipeline description, Prev: Delay Slots, Up: Insn Attributes
15427 12.19.8 Specifying processor pipeline description
15428 -------------------------------------------------
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
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.
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
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).
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.
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.
15485 (define_automaton AUTOMATA-NAMES)
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'.
15492 Each processor functional unit used in the description of instruction
15493 reservations should be described by the following construction.
15495 (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
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
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
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.
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
15522 (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
15524 UNIT-NAMES is a string giving names of the functional units separated
15527 AUTOMATON-NAME is a string giving the name of the automaton with which
15530 The following construction is the major one to describe pipeline
15531 characteristics of an instruction.
15533 (define_insn_reservation INSN-NAME DEFAULT_LATENCY
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::).
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.
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
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:
15569 regexp = regexp "," oneof
15572 oneof = oneof "|" allof
15575 allof = allof "+" repeat
15578 repeat = element "*" number
15581 element = cpu_function_unit_name
15587 * `,' is used for describing the start of the next cycle in the
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.
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.
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 `,').
15602 * `cpu_function_unit_name' denotes reservation of the named
15605 * `reservation_name' -- see description of construction
15606 `define_reservation'.
15608 * `nothing' denotes no unit reservations.
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
15614 (define_reservation RESERVATION-NAME REGEXP)
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'.
15621 The following construction is used to describe exceptions in the
15622 latency time for given instruction pair. This is so called bypasses.
15624 (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
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
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).
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
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)
15650 UNIT-NAMES is a string giving names of functional units separated by
15653 PATTERNS is a string giving patterns of functional units separated by
15654 comma. Currently pattern is one unit or units separated by
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.
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
15672 (presence_set "slot1" "slot0")
15674 Or `slot1' is reserved only after `slot0' and unit `b0' reservation.
15675 In this case we could write
15677 (presence_set "slot1" "slot0 b0")
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
15689 (presence_set "slot1" "slot0")
15691 the following insn will be never issued (because `slot1' requires
15692 `slot0' which is absent in the source state).
15694 (define_reservation "insn_and_nop" "slot0 + slot1")
15696 but it can be issued if we use analogous `final_presence_set'.
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
15706 (absence_set "slot2" "slot0, slot1")
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
15711 (absence_set "slot2" "slot0 b0, slot1 b1")
15713 All functional units mentioned in a set should belong to the same
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'.
15720 You can control the generator of the pipeline hazard recognizer with
15721 the following construction.
15723 (automata_option OPTIONS)
15725 OPTIONS is a string giving options which affect the generated code.
15726 Currently there are the following options:
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.
15732 * "time" means printing additional time statistics about generation
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.
15739 * "w" means a generation of warning instead of error for
15740 non-critical errors.
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
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.
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.
15763 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
15764 (define_cpu_unit "port0, port1")
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
15779 (define_cpu_unit "div")
15781 (define_insn_reservation "simple" 2 (eq_attr "type" "int")
15782 "(i0_pipeline | i1_pipeline), (port0 | port1)")
15784 (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
15785 "i1_pipeline, nothing*2, (port0 | port1)")
15787 (define_insn_reservation "div" 8 (eq_attr "type" "div")
15788 "i1_pipeline, div*7, div + (port0 | port1)")
15790 (define_insn_reservation "float" 3 (eq_attr "type" "float")
15791 "f_pipeline, nothing, (port0 | port1))
15793 (define_bypass 4 "float" "simple,mult,div")
15795 To simplify the description we could describe the following reservation
15797 (define_reservation "finish" "port0|port1")
15799 and use it in all `define_insn_reservation' as in the following
15802 (define_insn_reservation "simple" 2 (eq_attr "type" "int")
15803 "(i0_pipeline | i1_pipeline), finish")
15805 ---------- Footnotes ----------
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.
15814 File: gccint.info, Node: Conditional Execution, Next: Constant Definitions, Prev: Insn Attributes, Up: Machine Desc
15816 12.20 Conditional Execution
15817 ===========================
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.
15827 [PREDICATE-PATTERN]
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.
15836 CONDITION is a C expression that must be true for the generated
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'.
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.
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,
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")))]
15866 [(ne (match_operand:CC 0 "register_operand" "c")
15871 generates a new pattern
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")
15883 File: gccint.info, Node: Constant Definitions, Next: Macros, Prev: Conditional Execution, Up: Machine Desc
15885 12.21 Constant Definitions
15886 ==========================
15888 Using literal constants inside instruction patterns reduces legibility
15889 and can be a maintenance problem.
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
15899 To come back to the a29k load multiple example, instead of
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"))
15906 (clobber (reg:SI 179))])]
15912 (define_constants [
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))])]
15928 The constants that are defined with a define_constant are also output
15929 in the insn-codes.h header file as #defines.
15932 File: gccint.info, Node: Macros, Prev: Constant Definitions, Up: Machine Desc
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.
15943 * Mode Macros:: Generating variations of patterns for different modes.
15944 * Code Macros:: Doing the same for codes.
15947 File: gccint.info, Node: Mode Macros, Next: Code Macros, Up: Macros
15949 12.22.1 Mode Macros
15950 -------------------
15952 Ports often need to define similar patterns for two or more different
15953 modes. For example:
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.
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.
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'.
15969 * Defining Mode Macros:: Defining a new mode macro.
15970 * String Substitutions:: Combining mode macros with string substitutions
15971 * Examples:: Examples
15974 File: gccint.info, Node: Defining Mode Macros, Next: String Substitutions, Up: Mode Macros
15976 12.22.1.1 Defining Mode Macros
15977 ..............................
15979 The syntax for defining a mode macro is:
15981 (define_mode_macro NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
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.
15991 (define_mode_macro P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
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 ==
15999 As with other `.md' conditions, an empty string is treated as "always
16000 true". `(MODE "")' can also be abbreviated to `MODE'. For example:
16002 (define_mode_macro GPR [SI (DI "TARGET_64BIT")])
16004 means that the `:DI' expansion only applies if `TARGET_64BIT' but that
16005 the `:SI' expansion has no such constraint.
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::.
16012 File: gccint.info, Node: String Substitutions, Next: Examples, Prev: Defining Mode Macros, Up: Mode Macros
16014 12.22.1.2 String Substitution in Mode Macros
16015 ............................................
16017 If an `.md' file construct uses mode macros, each version of the
16018 construct will often need slightly different strings. For example:
16020 * When a `define_expand' defines several `addM3' patterns (*note
16021 Standard Names::), each expander will need to use the appropriate
16024 * When a `define_insn' defines several instruction patterns, each
16025 instruction will often use a different assembler mnemonic.
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:
16032 (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
16034 where NAME is the name of the attribute and VALUEI is the value
16035 associated with MODEI.
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
16043 For example, suppose an `.md' file has:
16045 (define_mode_macro P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
16046 (define_mode_attr load [(SI "lw") (DI "ld")])
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"'.
16052 The `MACRO:' prefix may be omitted, in which case the substitution
16053 will be attempted for every macro expansion.
16056 File: gccint.info, Node: Examples, Prev: String Substitutions, Up: Mode Macros
16058 12.22.1.3 Mode Macro Examples
16059 .............................
16061 Here is an example from the MIPS port. It defines the following modes
16062 and attributes (among others):
16064 (define_mode_macro GPR [SI (DI "TARGET_64BIT")])
16065 (define_mode_attr d [(SI "") (DI "d")])
16067 and uses the following template to define both `subsi3' and `subdi3':
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")))]
16074 "<d>subu\t%0,%1,%2"
16075 [(set_attr "type" "arith")
16076 (set_attr "mode" "<MODE>")])
16078 This is exactly equivalent to:
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")))]
16086 [(set_attr "type" "arith")
16087 (set_attr "mode" "SI")])
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")))]
16095 [(set_attr "type" "arith")
16096 (set_attr "mode" "DI")])
16099 File: gccint.info, Node: Code Macros, Prev: Mode Macros, Up: Macros
16101 12.22.2 Code Macros
16102 -------------------
16104 Code macros operate in a similar way to mode macros. *Note Mode
16109 (define_code_macro NAME [(CODE1 "COND1") ... (CODEN "CONDN")])
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::.
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::.
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:
16124 (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
16126 Here's an example of code macros in action, taken from the MIPS port:
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])
16131 (define_expand "b<code>"
16133 (if_then_else (any_cond:CC (cc0)
16135 (label_ref (match_operand 0 ""))
16139 gen_conditional_branch (operands, <CODE>);
16143 This is equivalent to:
16145 (define_expand "bunordered"
16147 (if_then_else (unordered:CC (cc0)
16149 (label_ref (match_operand 0 ""))
16153 gen_conditional_branch (operands, UNORDERED);
16157 (define_expand "bordered"
16159 (if_then_else (ordered:CC (cc0)
16161 (label_ref (match_operand 0 ""))
16165 gen_conditional_branch (operands, ORDERED);
16172 File: gccint.info, Node: Target Macros, Next: Host Config, Prev: Machine Desc, Up: Top
16174 13 Target Description Macros and Functions
16175 ******************************************
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'
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.
16221 File: gccint.info, Node: Target Structure, Next: Driver, Up: Target Macros
16223 13.1 The Global `targetm' Variable
16224 ==================================
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"
16238 /* Initialize the GCC target structure. */
16240 #undef TARGET_COMP_TYPE_ATTRIBUTES
16241 #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes
16243 struct gcc_target targetm = TARGET_INITIALIZER;
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.
16251 File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros
16253 13.2 Controlling the Compilation Driver, `gcc'
16254 ==============================================
16256 You can control the compilation driver.
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.
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.
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.
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.
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.
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.
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.
16300 If this macro is not defined, the default value is `""'.
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:
16316 #define TARGET_OPTION_TRANSLATE_TABLE \
16317 { "-fast", "-march=fast-foo -malt-abi -I/usr/fast-foo" }, \
16318 { "-compat", "-EB -malign=4 -mspoo" }
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.
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.
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.
16335 Do not define this macro if it does not need to do anything.
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.
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.
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'.
16353 Do not define this macro if it does not need to do anything.
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.
16360 Do not define this macro if it does not need to do anything.
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.
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.
16373 Do not define this macro if it does not need to do anything.
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'.
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
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.
16391 Do not define this macro if it does not need to do anything.
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.
16398 Do not define this macro if it does not need to do anything.
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.
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.
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.
16417 Do not define this macro if it does not need to do anything.
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.
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'.
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'.
16433 If this macro is not defined, the GCC driver provides a default
16434 that passes the string `-lgcc' to the linker.
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.
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'.
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'.
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.
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'.
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.
16472 Do not define this macro if it does not need to do anything.
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'.
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.
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.
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
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.
16503 Do not define this macro if it does not need to do anything.
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.
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
16515 The `config/rs6000/rs6000.h' target file defines:
16517 #define EXTRA_SPECS \
16518 { "cpp_sysv_default", CPP_SYSV_DEFAULT },
16520 #define CPP_SYS_DEFAULT ""
16522 The `config/rs6000/sysv.h' target file defines:
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}"
16530 #undef CPP_SYSV_DEFAULT
16531 #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
16533 while the `config/rs6000/eabiaix.h' target file defines
16534 `CPP_SYSV_DEFAULT' as:
16536 #undef CPP_SYSV_DEFAULT
16537 #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
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.
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'.
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.
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.
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'.
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::.
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.
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'.
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.
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.
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.
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
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.
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
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.
16631 Cross compilers do not search either `/usr/local/include' or its
16634 -- Macro: MODIFY_TARGET_NAME
16635 Define this macro if you wish to define command-line switches that
16636 modify the default target name.
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
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
16653 #define MODIFY_TARGET_NAME \
16654 { { "-32", DELETE, "64"}, \
16655 {"-64", ADD, "64"}}
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.
16663 Cross compilers do not use this macro and do not search the
16664 directory specified.
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.
16671 Cross compilers ignore this macro and do not search either
16672 `/usr/include' or its replacement.
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.
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++
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.
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'.
16702 For example, here is the definition used for VAX/VMS:
16704 #define INCLUDE_DEFAULTS \
16706 { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \
16707 { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \
16708 { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \
16713 Here is the order of prefixes tried for exec files:
16715 1. Any prefixes specified by the user with `-B'.
16717 2. The environment variable `GCC_EXEC_PREFIX', if any.
16719 3. The directories specified by the environment variable
16722 4. The macro `STANDARD_EXEC_PREFIX'.
16724 5. `/usr/lib/gcc/'.
16726 6. The macro `MD_EXEC_PREFIX', if any.
16728 Here is the order of prefixes tried for startfiles:
16730 1. Any prefixes specified by the user with `-B'.
16732 2. The environment variable `GCC_EXEC_PREFIX', if any.
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).
16738 4. The macro `STANDARD_EXEC_PREFIX'.
16740 5. `/usr/lib/gcc/'.
16742 6. The macro `MD_EXEC_PREFIX', if any.
16744 7. The macro `MD_STARTFILE_PREFIX', if any.
16746 8. The macro `STANDARD_STARTFILE_PREFIX'.
16753 File: gccint.info, Node: Run-time Target, Next: Per-Function Data, Prev: Driver, Up: Target Macros
16755 13.3 Run-time Target Specification
16756 ==================================
16758 Here are run-time target specifications.
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.
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.
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'.
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
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.
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
16803 -- Variable: extern int target_flags
16804 This declaration should be present.
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
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:
16821 #define TARGET_MASK_68020 1
16822 #define TARGET_68020 (target_flags & MASK_68020)
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.
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.
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.
16849 In addition to the description for `--help', more detailed
16850 documentation for each option should be added to `invoke.texi'.
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.
16856 Here is an example which defines `-m68000' and `-m68020' with
16857 opposite meanings, and picks the latter as the default:
16859 #define TARGET_SWITCHES \
16860 { { "68020", MASK_68020, "" }, \
16861 { "68000", -MASK_68020, \
16862 N_("Compile for the 68000") }, \
16863 { "", MASK_68020, "" }, \
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.
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.
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'.
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.
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"'.
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 } }
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.
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" },
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
16917 char *chip_alu = ""; /* Specify default here. */
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')
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:
16935 #define TARGET_VERSION \
16936 fprintf (stderr, " (68k, Motorola syntax)");
16938 #define TARGET_VERSION \
16939 fprintf (stderr, " (68k, MIT syntax)");
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
16949 Don't use this macro to turn on various extra optimizations for
16950 `-O'. That is what `OPTIMIZATION_OPTIONS' is for.
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.
16960 LEVEL is the optimization level specified; 2 if `-O2' is
16961 specified, 1 if `-O' is specified, and 0 if neither is specified.
16963 SIZE is nonzero if `-Os' is specified and zero otherwise.
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.
16970 *Do not examine `write_symbols' in this macro!* The debugging
16971 options are not supposed to alter the generated code.
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.
16979 File: gccint.info, Node: Per-Function Data, Next: Storage Layout, Prev: Run-time Target, Up: Target Macros
16981 13.4 Defining data structures for per-function information.
16982 ===========================================================
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.
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
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.
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.
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
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'.
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.
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.
17034 File: gccint.info, Node: Storage Layout, Next: Type Layout, Prev: Per-Function Data, Up: Target Macros
17036 13.5 Storage Layout
17037 ===================
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::.
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
17053 This macro does not affect the way structure fields are packed into
17054 bytes or words; that is controlled by `BYTES_BIG_ENDIAN'.
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
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.
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.
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.
17081 You need not define this macro if the ordering is the same as for
17082 multi-word integers.
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
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'.
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
17099 -- Macro: UNITS_PER_WORD
17100 Number of storage units in a word; normally 4.
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
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'.
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'.
17121 You need not define this macro if the `POINTER_SIZE' is equal to
17122 the width of `Pmode'.
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
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.
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
17145 Do not define this macro if it would never modify M.
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.
17153 The default is `PROMOTE_MODE'.
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
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
17165 If this target hook returns `true', `FUNCTION_VALUE' must perform
17166 the same promotions done by `PROMOTE_FUNCTION_MODE'.
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.
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
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'.
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'.
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.
17199 -- Macro: FUNCTION_BOUNDARY
17200 Alignment required for a function entry point, in bits.
17202 -- Macro: BIGGEST_ALIGNMENT
17203 Biggest alignment that any data type can require on this machine,
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
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
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)))'
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'.
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.
17240 If this macro is not defined, then BASIC-ALIGN is used.
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.
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
17254 If this macro is not defined, then BASIC-ALIGN is used.
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.
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.
17266 If this macro is not defined, then BASIC-ALIGN is used.
17268 One use of this macro is to increase alignment of medium-size data
17269 to make it all fit in fewer cache lines.
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;'.
17275 If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
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
17282 If you do not define this macro, the default is the same as
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.
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
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.
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
17308 An unnamed bit-field will not affect the alignment of the
17309 containing structure.
17311 If the macro is defined, its definition should be a C expression;
17312 a nonzero value for the expression enables this behavior.
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.
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.
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.
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
17348 printf ("Size of foo1 is %d\n",
17349 sizeof (struct foo1));
17350 printf ("Size of foo2 is %d\n",
17351 sizeof (struct foo2));
17355 If this prints 2 and 5, then the compiler's behavior is what you
17356 would get from `PCC_BITFIELD_TYPE_MATTERS'.
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.
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.
17368 -- Macro: MEMBER_TYPE_FORCES_BLK (FIELD, MODE)
17369 Return 1 if a structure or array containing FIELD should be
17370 accessed using `BLKMODE'.
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.
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.
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
17387 The default is to use SPECIFIED if it is larger; otherwise, use
17388 the smaller of COMPUTED and `BIGGEST_ALIGNMENT'
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.
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.
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.
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::).
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.
17418 -- Macro: TARGET_FLOAT_FORMAT
17419 A code distinguishing the floating point format of the target
17420 machine. There are four defined values:
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
17428 This code indicates the "F float" (for `float') and "D float"
17429 or "G float" formats (for `double') used on the VAX and
17433 This code indicates the format used on the IBM System/370.
17436 This code indicates the format used on the TMS320C3x/C4x.
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'.
17442 The ordering of the component words of floating point values
17443 stored in memory is controlled by `FLOAT_WORDS_BIG_ENDIAN'.
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
17452 By default, this macro is true if MODE is a floating-point mode
17453 and the target floating-point format is IEEE.
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.
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:
17465 * `x + x' has the same sign as `x'.
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.
17471 * The sign of a product or quotient is negative when exactly one
17472 of the operands is negative.
17474 The default definition is true if MODE is a floating-point mode
17475 and the target format is IEEE.
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
17483 The default definition of this macro is true if MODE is a
17484 floating-point mode and the target format is IEEE.
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:
17490 * `MODE_HAS_SIGN_DEPENDENT_ROUNDING' will be false for all
17493 * `libgcc.a''s floating-point emulator will round towards zero
17494 rather than towards nearest.
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.
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.
17505 Not defining this macro is equivalent to returning zero.
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.
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
17517 The default definition of this macro returns false for all sizes.
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
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.
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.
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.
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.
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
17575 The default version of this hook always returns `NULL', which is
17576 appropriate for a target that does not define any new fundamental
17580 File: gccint.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros
17582 13.6 Layout of Source Language Data Types
17583 =========================================
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.
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.
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
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.
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'.
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.
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
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'.
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.
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
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
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'.
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,
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.
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.
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.
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.
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
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'.
17692 The default is to return false.
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.
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
17707 If you don't define this macro, the default is `"long unsigned
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.
17716 If you don't define this macro, the default is `"long int"'.
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
17724 If you don't define this macro, the default is `"int"'.
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
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.
17737 If you don't define this macro, the default is `"unsigned int"'.
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
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'.
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
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'.
17761 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
17762 The C++ compiler represents a pointer-to-member-function with a
17763 struct that looks like:
17768 ptrdiff_t vtable_index;
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
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'.
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'.
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.
17805 If vtables are used, the value of this macro should be the number
17806 of words that the function descriptor occupies.
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. */
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.
17821 File: gccint.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros
17823 13.7 Register Usage
17824 ===================
17826 This section explains how to describe what registers the target machine
17827 has, and how (in general) they can be used.
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
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.
17845 File: gccint.info, Node: Register Basics, Next: Allocation Order, Up: Registers
17847 13.7.1 Basic Characteristics of Registers
17848 -----------------------------------------
17850 Registers have various characteristics.
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'.
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
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.
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'.
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.
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.
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'.
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.
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
17918 You need not define this macro if it has no work to do.
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
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
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.
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
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.
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.
17960 File: gccint.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers
17962 13.7.2 Order of Allocation of Registers
17963 ---------------------------------------
17965 Registers are allocated in order.
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).
17972 If this macro is not defined, registers are used lowest numbered
17973 first (all else being equal).
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.
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
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.
17990 The macro body should not assume anything about the contents of
17991 `reg_alloc_order' before execution of the macro.
17993 On most machines, it is not necessary to define this macro.
17996 File: gccint.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers
17998 13.7.3 How Values Fit in Registers
17999 ----------------------------------
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.
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
18010 On a machine where all registers are exactly one word, a suitable
18011 definition of this macro is
18013 #define HARD_REGNO_NREGS(REGNO, MODE) \
18014 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \
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.
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
18031 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
18033 You need not include code to check for the numbers of fixed
18034 registers, because the allocation mechanism considers them to be
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.
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.
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
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.
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
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.
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.
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.
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
18094 The default is always nonzero.
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.
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
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
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.
18117 File: gccint.info, Node: Leaf Functions, Next: Stack Registers, Prev: Values in Registers, Up: Registers
18119 13.7.4 Handling Leaf Functions
18120 ------------------------------
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.
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
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
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.
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.
18151 Define this macro only if the target machine offers a way to
18152 optimize the treatment of leaf functions.
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
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.
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.
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.
18179 File: gccint.info, Node: Stack Registers, Prev: Leaf Functions, Up: Registers
18181 13.7.5 Registers That Form a Stack
18182 ----------------------------------
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
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.
18197 -- Macro: STACK_REGS
18198 Define this if the machine has any stack-like registers.
18200 -- Macro: FIRST_STACK_REG
18201 The number of the first stack-like register. This one is the top
18204 -- Macro: LAST_STACK_REG
18205 The number of the last stack-like register. This one is the
18206 bottom of the stack.
18209 File: gccint.info, Node: Register Classes, Next: Stack and Calling, Prev: Registers, Up: Target Macros
18211 13.8 Register Classes
18212 =====================
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
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
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
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'.
18236 Order the classes so that if class X is contained in class Y then X
18237 has a lower class number than Y.
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.
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.
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
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'.
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
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.
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.
18283 -- Macro: N_REG_CLASSES
18284 The number of distinct register classes, defined as follows:
18286 #define N_REG_CLASSES (int) LIM_REG_CLASSES
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
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.
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
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.
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.
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
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
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).
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.
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.
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.
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.
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'.
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
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.
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.
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:
18411 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
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.
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'.
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.
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.
18442 Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when
18443 there are certain modes that simply can't go in certain reload
18446 The value is a register class; perhaps CLASS, or perhaps another,
18449 Don't define this macro unless the target machine has limitations
18450 which require the macro to do something nontrivial.
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
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.
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.
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'.
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.
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.
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.
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.
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.
18523 Do not define this macro if its value would always be zero.
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.
18531 Do not define this macro if you do not define
18532 `SECONDARY_MEMORY_NEEDED'.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
18602 This macro helps control the handling of multiple-word values in
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.
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:
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)
18620 Three other special macros describe which operands fit which constraint
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
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.
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').
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
18724 File: gccint.info, Node: Stack and Calling, Next: Varargs, Prev: Register Classes, Up: Target Macros
18726 13.9 Stack Layout and Calling Conventions
18727 =========================================
18729 This describes the stack layout and calling conventions.
18734 * Exception Handling::
18736 * Frame Registers::
18738 * Stack Arguments::
18739 * Register Arguments::
18741 * Aggregate Return::
18748 File: gccint.info, Node: Frame Layout, Next: Exception Handling, Up: Stack and Calling
18750 13.9.1 Basic Stack Layout
18751 -------------------------
18753 Here is the basic stack layout.
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.
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.
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))) ...)'
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.
18773 The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined,
18774 which is almost always right, and `PRE_INC' otherwise, which is
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.
18781 -- Macro: ARGS_GROW_DOWNWARD
18782 Define this macro if successive arguments to a function occupy
18783 decreasing addresses on the stack.
18785 -- Macro: STARTING_FRAME_OFFSET
18786 Offset from the frame pointer to the first local variable slot to
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'.
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
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.
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
18810 If `ARGS_GROW_DOWNWARD', this is the offset to the location above
18811 the first location at which outgoing arguments are placed.
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
18818 If `ARGS_GROW_DOWNWARD', this is the offset to the location above
18819 the first argument's address.
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'.
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.
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
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.
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.
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.
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.
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.
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.
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.
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
18885 You only need to define this macro if you want to support call
18886 frame debugging information like that provided by DWARF 2.
18888 If this RTL is a `REG', you should also define
18889 `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'.
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
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
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))
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'.
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
18926 You only need to define this macro if you want to support call
18927 frame debugging information like that provided by DWARF 2.
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.
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
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.
18948 File: gccint.info, Node: Exception Handling, Next: Stack Checking, Prev: Frame Layout, Up: Stack and Calling
18950 13.9.2 Exception Handling Support
18951 ---------------------------------
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.
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.
18965 You must define this macro if you want to support call frame
18966 exception handling like that provided by DWARF 2.
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
18975 Typically this is a call-clobbered hard register that is otherwise
18976 untouched by the epilogue, but could also be a stack slot.
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.
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
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
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.
19003 If you want to support call frame exception handling, you must
19004 define either this macro or the `eh_return' instruction pattern.
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
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.
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'.
19024 If this macro is not defined, pointers will not be encoded but
19025 represented directly.
19027 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
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.
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
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'.
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.
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'.
19059 For proper signal handling in Java this macro is accompanied by
19060 `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h'
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.
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.
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'.
19080 File: gccint.info, Node: Stack Checking, Next: Frame Registers, Prev: Exception Handling, Up: Stack and Calling
19082 13.9.3 Specifying How Stack Checking is Done
19083 --------------------------------------------
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:
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
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.
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.
19104 Normally, you will use the default values of these macros, so GCC will
19105 use the third approach.
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
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
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.
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.
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.
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.
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
19157 File: gccint.info, Node: Frame Registers, Next: Elimination, Prev: Stack Checking, Up: Stack and Calling
19159 13.9.4 Registers That Address the Stack Frame
19160 ---------------------------------------------
19162 This discusses registers that address the stack frame.
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.
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.
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.
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'.
19193 Do not define this macro if it would be the same as
19194 `FRAME_POINTER_REGNUM'.
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::).
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.
19215 Do not define this macro unless there is no other way to get the
19216 return address from the stack.
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.
19227 The static chain register need not be a fixed register.
19229 If the static chain is passed in memory, these macros should not be
19230 defined; instead, the next two macros should be defined.
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.
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.
19245 If the static chain is passed in a register, the two previous
19246 macros should be defined instead.
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.
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
19262 If this macro is not defined, it defaults to
19263 `FIRST_PSEUDO_REGISTER'.
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.
19269 If this macro is not defined, it defaults to
19270 `DWARF_FRAME_REGISTERS'.
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.
19278 See the PowerPC's SPE target for an example.
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)'.
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'.
19296 File: gccint.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling
19298 13.9.5 Eliminating Frame Pointer and Arg Pointer
19299 ------------------------------------------------
19301 This is about eliminating the frame pointer and arg pointer.
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.
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
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
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
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'.
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.
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
19345 The definition of this macro is a list of structure
19346 initializations, each of which specifies an original and
19347 replacement register.
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.
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}}
19362 Note that the elimination of the argument pointer with the stack
19363 pointer is specified first since that is the preferred elimination.
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.
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
19380 File: gccint.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling
19382 13.9.6 Passing Function Arguments on the Stack
19383 ----------------------------------------------
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.
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.
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.
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.
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.
19414 On some machines, the definition
19416 #define PUSH_ROUNDING(BYTES) (BYTES)
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
19422 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
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.
19431 Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not
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
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
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
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.
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'.
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.
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.
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.
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.
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).
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.
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
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.
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.
19510 CUM is the variable in which all arguments to the called function
19511 have been accumulated.
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.
19520 File: gccint.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling
19522 13.9.7 Passing Arguments in Registers
19523 -------------------------------------
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
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.
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.
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.
19545 For machines like the VAX and 68000, where normally all arguments
19546 are pushed, zero suffices as a definition.
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.
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.
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.
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.
19579 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode
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
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
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.
19597 If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves
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.
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
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.
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)'.
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.
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.
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
19643 The default version of this hook always returns false.
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.
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'.
19658 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
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.
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.
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
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.
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'.
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.
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.
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
19714 The _amount_ of padding is always just enough to reach the next
19715 multiple of `FUNCTION_ARG_BOUNDARY'; this macro does not control
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
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'
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.
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.
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
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.
19764 The default value of this hook is `NULL', which is treated as
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*'.
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'.
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'.
19783 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_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
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
19795 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_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.
19802 File: gccint.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling
19804 13.9.8 How Scalar Function Values Are Returned
19805 ----------------------------------------------
19807 This section discusses the macros that control returning scalars as
19808 values--values that can fit in registers.
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).
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.
19823 If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
19824 the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is
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.
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.
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.
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
19846 If `FUNCTION_OUTGOING_VALUE' is not defined, `FUNCTION_VALUE'
19847 serves both purposes.
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.
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.
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
19866 The definition of `LIBRARY_VALUE' need not be concerned aggregate
19867 data types, because none of the library functions returns such
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.
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
19879 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
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.
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.
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.
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.
19902 File: gccint.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling
19904 13.9.9 How Large Values Are Returned
19905 ------------------------------------
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".
19913 This section describes how to control returning structure values in
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
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
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.
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.
19942 If not defined, this defaults to the value 1.
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.
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.
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.
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
19967 Do not define this if the usual system convention is for the
19968 caller to pass an address to the subroutine.
19970 This macro has effect in `-fpcc-struct-return' mode, but it does
19971 nothing when you use `-freg-struct-return' mode.
19974 File: gccint.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling
19976 13.9.10 Caller-Saves Register Allocation
19977 ----------------------------------------
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.
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.
19989 If you don't define this macro, a default is used which is good on
19990 most machines: `4 * CALLS < REFS'.
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.
20000 File: gccint.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling
20002 13.9.11 Function Entry and Exit
20003 -------------------------------
20005 This section describes the macros that output function entry
20006 ("prologue") and exit ("epilogue") code.
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.
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.
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'.)
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.
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
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.
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::.
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::.
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
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.
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.
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.
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::.
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.
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::.
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>'.
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.
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
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::.
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
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'.
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
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.
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.
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.
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.
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
20188 You need not define this macro if you did not define
20189 `DELAY_SLOTS_FOR_EPILOGUE'.
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.
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.
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:
20211 p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
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'.
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'
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.
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.
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.
20243 File: gccint.info, Node: Profiling, Next: Tail Calls, Prev: Function Entry, Up: Stack and Calling
20245 13.9.12 Generating Code for Profiling
20246 -------------------------------------
20248 These macros will help you generate code for profiling.
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'.
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.
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'.
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.
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'.
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
20282 File: gccint.info, Node: Tail Calls, Prev: Profiling, Up: Stack and Calling
20284 13.9.13 Permitting tail calls
20285 -----------------------------
20287 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
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.
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.
20302 File: gccint.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros
20304 13.10 Implementing the Varargs Macros
20305 =====================================
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
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.
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
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.
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'.
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.
20342 -- Macro: __builtin_args_info (CATEGORY)
20343 Use this built-in function to find the first anonymous arguments in
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
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.
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'.
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.
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__'.
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.
20387 The file `typeclass.h' defines an enumeration that you can use to
20388 interpret the values of `__builtin_classify_type'.
20390 These machine description macros help implement varargs:
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'.
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.
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.
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
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.
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.
20436 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS
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
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.
20450 You need not define this hook if it always returns zero.
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.
20461 File: gccint.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros
20463 13.11 Trampolines for Nested Functions
20464 ======================================
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.
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
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
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
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.
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.
20505 -- Macro: TRAMPOLINE_SIZE
20506 A C expression for the size in bytes of the trampoline, as an
20509 -- Macro: TRAMPOLINE_ALIGNMENT
20510 Alignment required for trampolines, in bits.
20512 If you don't define this macro, the value of `BIGGEST_ALIGNMENT'
20513 is used for aligning trampolines.
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
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.
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'.
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.
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.
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.
20557 To clear the instruction cache when a trampoline is initialized, define
20558 the following macro.
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.
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.
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.
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.
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'.
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.
20598 File: gccint.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros
20600 13.12 Implicit Calls to Library Routines
20601 ========================================
20603 Here is an explanation of implicit calls to library routines.
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
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.
20618 The default is to do nothing. Most ports don't need to define
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
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
20687 The default calling convention passes just the object and the
20688 selector to the lookup function, which returns a pointer to the
20692 File: gccint.info, Node: Addressing Modes, Next: Condition Code, Prev: Library Calls, Up: Target Macros
20694 13.13 Addressing Modes
20695 ======================
20697 This is about addressing modes.
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.
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.
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
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.
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.
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'
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.
20743 It usually pays to define several simpler macros to serve as
20744 subroutines for this one. Otherwise it may be too complicated to
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.
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.
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.
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.
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.
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'.
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
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.
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'.
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.
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.
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.
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.
20833 It is always safe for this macro to not be defined. It exists so
20834 that alias analysis can understand machine-dependent addresses.
20836 The typical use of this macro is to handle addresses containing a
20837 label_ref or symbol_ref within an UNSPEC.
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
20844 GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN);
20846 to avoid further processing if the address has become legitimate.
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
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.
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.
20861 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
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.
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.
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.
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.
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'.
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
20897 The macro definition may use `strict_memory_address_p' to test if
20898 the address has become legitimate.
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.
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
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.
20920 You may assume that ADDR is a valid address for the machine.
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.
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.
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.
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.
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.
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.
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
20976 File: gccint.info, Node: Condition Code, Next: Costs, Prev: Addressing Modes, Up: Target Macros
20978 13.14 Condition Code Status
20979 ===========================
20981 This describes the condition code status.
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.
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'.
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'.
20997 This macro is not used on machines that do not use `cc0'.
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.
21005 This macro is not used on machines that do not use `cc0'.
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)'.
21014 This macro is not used on machines that do not use `cc0'.
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.
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
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'.
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)
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))
21055 You should define this macro if and only if you define extra CC
21056 modes in `MACHINE-modes.def'.
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.
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.
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
21073 You need not define this macro if it would never change the
21074 comparison code or operands.
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.
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
21088 #define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode)
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:
21099 #define REVERSE_CONDITION(CODE, MODE) \
21100 ((MODE) != CCFPmode ? reverse_condition (CODE) \
21101 : reverse_condition_maybe_unordered (CODE))
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:
21112 #define REVERSE_CONDEXEC_PREDICATES_P (x, y) \
21113 (GET_CODE ((x)) == reversed_comparison_code ((y), NULL))
21115 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (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'.
21128 The default version of this hook returns false.
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'.
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'.
21144 File: gccint.info, Node: Costs, Next: Scheduling, Prev: Condition Code, Up: Target Macros
21146 13.15 Describing Relative Costs of Operations
21147 =============================================
21149 These macros let you describe the relative speed of various operations
21150 on the target machine.
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
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.
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
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.
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.
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.
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.
21198 Here are additional macros which do not specify precise relative costs,
21199 but only that certain actions are more expensive than GCC would
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.
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.
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
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.
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.
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.
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.
21244 If you don't define this, a reasonable default is used.
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'.
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
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.
21264 If you don't define this, a reasonable default is used.
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'.
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'.
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'.
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'.
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'.
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'.
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'.
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'.
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'.
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'.
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.
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.
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.
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
21339 In implementing this hook, you can use the construct
21340 `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions.
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
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'.
21353 The hook returns true when all subexpressions of X have been
21354 processed, and false when `rtx_cost' should recurse.
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.
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.
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.
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.
21380 This hook is never called with an invalid address.
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
21393 File: gccint.info, Node: Scheduling, Next: Sections, Prev: Costs, Up: Target Macros
21395 13.16 Adjusting the Instruction Scheduler
21396 =========================================
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.
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'.
21414 You could define this hook to return the value of the macro
21415 `MAX_DFA_ISSUE_RATE'.
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.
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::.
21445 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int
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.
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'.
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
21482 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx
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
21492 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
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'.
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'.
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.
21519 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
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'.
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.
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.
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.
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.
21547 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
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.
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.
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.
21573 The default is no multipass scheduling.
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
21582 The default is that any ready insns can be chosen to be issued.
21584 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *, int, rtx, 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
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'
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
21623 Macros in the following table are generated by the program `genattr'
21624 and can be useful for writing the hooks.
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.
21634 File: gccint.info, Node: Sections, Next: PIC, Prev: Scheduling, Up: Target Macros
21636 13.17 Dividing the Output into Sections (Texts, Data, ...)
21637 ==========================================================
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
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.
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.
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.
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.
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.
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.
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
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.
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
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.
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.
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.
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.
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).
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'.
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.
21740 This macro is irrelevant if there is no separate readonly data
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
21754 The default version of this function takes care of putting
21755 read-only variables in `readonly_data_section'.
21757 See also USE_SELECT_SECTION_FOR_FUNCTIONS.
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.
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.
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.
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
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
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.
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'.
21800 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
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).
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.
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.)
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.
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'.
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.
21837 -- Target Hook: const char *TARGET_STRIP_NAME_ENCODING (const char
21839 Decode NAME and return the real name part, sans the characters
21840 that `TARGET_ENCODE_SECTION_INFO' may have added.
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.
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.
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).
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.
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.
21864 File: gccint.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros
21866 13.18 Position Independent Code
21867 ===============================
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.
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).
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.
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.
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.)
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.
21919 File: gccint.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros
21921 13.19 Defining the Output Assembler Language
21922 ============================================
21924 This section describes macros whose principal purpose is to describe how
21925 to write instructions in assembler language--rather than what the
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.
21945 File: gccint.info, Node: File Framework, Next: Data Output, Up: Assembler Format
21947 13.19.1 The Overall Framework of an Assembler File
21948 --------------------------------------------------
21950 This describes the overall framework of an assembly file.
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.
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.
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
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.
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.
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.
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.
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.
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
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.
22016 This macro need not be defined if the standard form of output for
22017 the file format in use is appropriate.
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.
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.
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'.
22042 -- Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
22043 This flag is true if the target supports
22044 `TARGET_ASM_NAMED_SECTION'.
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.
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__'.
22060 File: gccint.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format
22062 13.19.2 Output of Data
22063 ----------------------
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.
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.
22084 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
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.
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'.
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.
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.
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'.
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'.
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.
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.
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
22138 If no constant-pool prefix is required, the usual case, this macro
22139 need not be defined.
22141 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN,
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
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.
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:
22159 `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO);
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.
22165 You need not define this macro if it would do nothing.
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
22175 If no constant-pool epilogue is required, the usual case, you need
22176 not define this macro.
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.
22182 If you do not define this macro, the default is that only the
22183 character `;' is treated as a logical line separator.
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.
22192 These macros are provided by `real.h' for writing the definitions of
22193 `ASM_OUTPUT_DOUBLE' and the like:
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.
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
22213 File: gccint.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format
22215 13.19.3 Output of Uninitialized Variables
22216 -----------------------------------------
22218 Each of the macros in this section is used to do the whole job of
22219 outputting a single uninitialized variable.
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.
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.
22231 This macro controls how the assembler definitions of uninitialized
22232 common global variables are output.
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.
22241 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
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.
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'
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.
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
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.
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.
22282 Try to use function `asm_output_aligned_bss' defined in file
22283 `varasm.c' when defining this macro.
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
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.
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.
22300 This macro controls how the assembler definitions of uninitialized
22301 static variables are output.
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.
22310 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
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.
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
22325 File: gccint.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format
22327 13.19.4 Output and Generation of Labels
22328 ---------------------------------------
22330 This is about outputting labels.
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.
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
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.
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.
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.
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
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.
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.
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.
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.
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.
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
22407 If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default
22408 definition of this macro is provided.
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.
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').
22421 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
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.
22431 If this macro is not defined, then the function size is not
22434 You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition
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
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').
22448 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or
22449 `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
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.
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').
22463 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
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.
22471 If you don't define this macro, that is equivalent to defining it
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.
22481 If you don't define this macro, that is equivalent to defining it
22484 You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or
22485 `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
22487 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
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.
22493 The default implementation relies on a proper definition of
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,
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'
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.
22517 -- Macro: SUPPORTS_WEAK
22518 A C expression which evaluates to true if the target supports weak
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'.
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
22536 -- Macro: SUPPORTS_ONE_ONLY
22537 A C expression which evaluates to true if the target supports
22538 one-only semantics.
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.
22547 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, const
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
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'.
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
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.
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.
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
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
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.
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'.
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'.
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.
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.
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.
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.
22632 The default version of this function utilizes
22633 `ASM_GENERATE_INTERNAL_LABEL'.
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.
22644 If this macro is not defined, then
22645 `(*targetm.asm_out.internal_label)' will be used.
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.
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.
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.)
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.
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.
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.
22681 If this macro is not defined, a default definition will be provided
22682 which is correct for most systems.
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.
22688 If `SET_ASM_OP' is defined, a default definition is provided which
22689 is correct for most systems.
22691 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
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.
22699 If `SET_ASM_OP' is defined, a default definition is provided which
22700 is correct for most systems.
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'.
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
22716 Define this macro if the target only supports weak aliases; define
22717 `ASM_OUTPUT_DEF' instead if possible.
22719 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
22721 Define this macro to override the default assembler names used for
22722 Objective-C methods.
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.
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.
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.
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.
22742 On systems where the assembler can handle quoted names, you can
22743 use this macro to provide more human-readable names.
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.
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.
22758 File: gccint.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format
22760 13.19.5 How Initialization Functions Are Handled
22761 ------------------------------------------------
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
22769 Compiling some languages generates "destructors" (also called
22770 "termination routines") that should be called when the program
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.
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.
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__'.
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.
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.
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.
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.
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:
22818 ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
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.
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.
22833 To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
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.
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.
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'.
22869 The following section describes the specific macros that control and
22870 customize the handling of initialization and termination functions.
22873 File: gccint.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format
22875 13.19.6 Macros Controlling Initialization Routines
22876 --------------------------------------------------
22878 Here are the macros that control how the compiler handles initialization
22879 and termination functions:
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
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'.
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.
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.
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.
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.
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.
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
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.
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'.
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.
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'.
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'
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.
22958 If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
22959 generated for the generated object file will have static linkage.
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.
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):
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
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.
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
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:
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
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'.
23001 File: gccint.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format
23003 13.19.7 Output of Assembler Instructions
23004 ----------------------------------------
23006 This describes assembler instruction output.
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
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.
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.
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.
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.
23039 If you need to look at the operand values, they can be found as the
23040 elements of `recog_data.operand'.
23042 If the macro definition does nothing, the instruction is output in
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.
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.
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
23065 If this macro is not defined, it is equivalent to a null statement.
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
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
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'.
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.
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
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.
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
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.
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).
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.
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.
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.
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.
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.
23161 If you do not define this macro, the characters `{', `|' and `}'
23162 do not have any special meaning when used in templates or operands
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.
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.
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.
23183 File: gccint.info, Node: Dispatch Tables, Next: Exception Region Output, Prev: Instruction Output, Up: Assembler Format
23185 13.19.8 Output of Dispatch Tables
23186 ---------------------------------
23188 This concerns dispatch tables.
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,
23198 fprintf (STREAM, "\t.word L%d-L%d\n",
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.
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.
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,
23217 fprintf (STREAM, "\t.word L%d\n", VALUE)
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').
23226 This feature is used on system V to output a `swbeg' statement for
23229 If this macro is not defined, these labels are output with
23230 `(*targetm.asm_out.internal_label)'.
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
23240 If this macro is not defined, nothing special is output at the end
23243 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (STREAM, DECL,
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.
23253 The default is that FDEs are not given nonlocal labels.
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
23261 File: gccint.info, Node: Exception Region Output, Next: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format
23263 13.19.9 Assembler Commands for Exception Regions
23264 ------------------------------------------------
23266 This describes commands marking the start and the end of an exception
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.
23276 You should define this symbol if your target supports DWARF 2 frame
23277 unwind information and the default definition does not work.
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.
23285 Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also
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.
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
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.
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.
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.
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'.
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.
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.
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'.
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.
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.
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
23364 File: gccint.info, Node: Alignment Output, Prev: Exception Region Output, Up: Assembler Format
23366 13.19.10 Assembler Commands for Alignment
23367 -----------------------------------------
23369 This describes commands for alignment.
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.
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.
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.
23384 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
23385 The alignment (log base 2) to put in front of LABEL, which follows
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.
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.
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.
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.
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.
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.
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.
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.
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.
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'.
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.
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'.
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.
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'.
23458 File: gccint.info, Node: Debugging Info, Next: Floating Point, Prev: Assembler Format, Up: Target Macros
23460 13.20 Controlling Debugging Information Format
23461 ==============================================
23463 This describes how to specify debugging information.
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.
23475 File: gccint.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info
23477 13.20.1 Macros Affecting All Debugging Formats
23478 ----------------------------------------------
23480 These macros affect all debugging formats.
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.
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
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.
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.
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
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'.
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'.
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'.
23534 File: gccint.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info
23536 13.20.2 Specific Options for DBX Output
23537 ---------------------------------------
23539 These are specific options for DBX output.
23541 -- Macro: DBX_DEBUGGING_INFO
23542 Define this macro if GCC should produce debugging output for DBX
23543 in response to the `-g' option.
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
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.
23557 -- Macro: DEBUG_SYMS_TEXT
23558 Define this macro if all `.stabs' commands should be output while
23559 in the text section.
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
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.
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.
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.
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
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.
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
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'.
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'.
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'.
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''.
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.
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.
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
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.
23656 File: gccint.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info
23658 13.20.3 Open-Ended Hooks for DBX Format
23659 ---------------------------------------
23661 These are hooks for DBX format.
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.
23669 -- Macro: DBX_OUTPUT_RBRAC (STREAM, NAME)
23670 Like `DBX_OUTPUT_LBRAC', but for the end of a scope level.
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.
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.
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'.
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.
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.
23699 File: gccint.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info
23701 13.20.4 File Names in DBX Format
23702 --------------------------------
23704 This describes file names in DBX format.
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.
23712 This macro need not be defined if the standard form of output for
23713 DBX debugging information is appropriate.
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'.
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.
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.
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.
23736 If you don't define this macro, nothing special is output at the
23737 end of compilation, which is correct for most machines.
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.
23746 File: gccint.info, Node: SDB and DWARF, Next: VMS Debug, Prev: File Names and DBX, Up: Debugging Info
23748 13.20.5 Macros for SDB and DWARF Output
23749 ---------------------------------------
23751 Here are macros for SDB and DWARF output.
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.
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.
23761 -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (tree
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_'
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.
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'.
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
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.
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
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
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.
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
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.
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.
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.
23829 File: gccint.info, Node: VMS Debug, Prev: SDB and DWARF, Up: Debugging Info
23831 13.20.6 Macros for VMS Debug Format
23832 -----------------------------------
23834 Here are macros for VMS debug format.
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'.
23844 File: gccint.info, Node: Floating Point, Next: Mode Switching, Prev: Debugging Info, Up: Target Macros
23846 13.21 Cross Compilation and Floating Point
23847 ==========================================
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.
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.
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.
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
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.
23880 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
23881 Tests whether X is less than Y.
23883 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
23884 Truncates X to a signed integer, rounding toward zero.
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.
23891 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum
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.
23898 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
23899 Returns 1 if X is negative (including negative zero), 0 otherwise.
23901 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
23902 Determines whether X represents infinity (positive or negative).
23904 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
23905 Determines whether X represents a "NaN" (not-a-number).
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).
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'.
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::.
23921 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
23922 Returns the negative of the floating point value X.
23924 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
23925 Returns the absolute value of X.
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.
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.
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.
23947 File: gccint.info, Node: Mode Switching, Next: Target Attributes, Prev: Floating Point, Up: Target Macros
23949 13.22 Mode Switching Instructions
23950 =================================
23952 The following macros control mode switching optimizations:
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.
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'.
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.
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.
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.
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).
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.
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.
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'.
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.
24025 File: gccint.info, Node: Target Attributes, Next: MIPS Coprocessors, Prev: Mode Switching, Up: Target Macros
24027 13.23 Defining target-specific uses of `__attribute__'
24028 ======================================================
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'.
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.
24041 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (tree TYPE1, tree
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.
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.
24053 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
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.
24061 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
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.
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',
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.
24090 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
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.
24103 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (tree
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.
24111 File: gccint.info, Node: MIPS Coprocessors, Next: PCH Target, Prev: Target Attributes, Up: Target Macros
24113 13.24 Defining coprocessor specifics for MIPS targets.
24114 ======================================================
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:
24121 register unsigned int cp0count asm ("c0r1");
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'.)
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.
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.
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.
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
24145 { ALTERNATENAME, REGISTER_NUMBER}
24149 File: gccint.info, Node: PCH Target, Next: C++ ABI, Prev: MIPS Coprocessors, Up: Target Macros
24151 13.25 Parameters for Precompiled Header Validity Checking
24152 =========================================================
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
24162 -- Target Hook: const char * TARGET_PCH_VALID_P (const void * DATA,
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.
24174 File: gccint.info, Node: C++ ABI, Next: Misc, Prev: PCH Target, Up: Target Macros
24176 13.26 C++ ABI parameters
24177 ========================
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.
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
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.
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'.
24201 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
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.
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'.
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
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.
24233 File: gccint.info, Node: Misc, Prev: C++ ABI, Up: Target Macros
24235 13.27 Miscellaneous Parameters
24236 ==============================
24238 Here are several miscellaneous parameters.
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
24250 #define PREDICATE_CODES \
24251 {"gen_reg_rtx_operand", {SUBREG, REG}}, \
24252 {"reg_or_short_cint_operand", {SUBREG, REG, CONST_INT}},
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.
24262 For each predicate function named in `PREDICATE_CODES', a
24263 declaration will be generated in `insn-codes.h'.
24265 Use of this macro is deprecated; use `define_predicate' instead.
24266 *Note Defining Predicates::.
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.
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.).
24278 #define SPECIAL_MODE_PREDICATES \
24279 "ext_register_operand",
24281 Use of this macro is deprecated; use `define_special_predicate'
24282 instead. *Note Defining Predicates::.
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.
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
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.
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.
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
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
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.
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
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.
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
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'.
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'.
24371 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
24372 Define this macro if loading short immediate values into registers
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.
24381 The maximum number of bytes that a single instruction can move
24382 quickly between memory and registers or between two memory
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.
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.
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.
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.
24415 You need not define this macro if it would always have the value
24418 -- Target Hook: int TARGET_SHIFT_TRUNCATION_MASK (enum machine_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::.
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.
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.
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
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.
24448 On many machines, this expression can be 1.
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.
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.
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.
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
24481 (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
24483 can be converted to
24485 (ashift:SI X (const_int N))
24487 where N is the appropriate shift count to move the bit being
24488 tested into the sign bit.
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
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:
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
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.
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.
24518 * Otherwise, use a value of `0x80000000'.
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
24525 (set A (neg:M (ne:M B C)))
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.
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.
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.
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.
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.
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
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
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'.
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
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'.
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.
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.
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" {...}'.
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
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
24622 If the pragma can be implemented by attributes then you should
24623 consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as
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'.
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
24640 #pragma [SPACE] NAME ...
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'.
24653 For an example use of this routine, see `c4x.h' and the callback
24654 routines defined in `c4x-c.c'.
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.
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.
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.
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).
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.
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.
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.
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'.
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).
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.
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
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 `.'.
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.
24745 You need not define this macro if it would always return zero.
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.
24758 You need not define this macro if it would always return zero.
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).
24767 You need not define this macro if it would always evaluate to zero.
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
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.
24780 You need only define this macro if the default of `"-lm"' is wrong.
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.
24786 You need only define this macro if the default of `"LIBRARY_PATH"'
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.
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.
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.
24812 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_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
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.
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.
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.
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.
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.
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.
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.
24860 You need not implement the hook if it has nothing to do. The
24861 default definition is null.
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.
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).
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'.
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.
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
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.
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.
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.
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.
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.
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
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:
24948 build_type_attribute_variant (MDECL,
24950 (get_identifier ("stdcall"),
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:
24961 cannot_modify_jumps_past_reload_p ()
24963 return (reload_completed || reload_in_progress);
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.
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
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.
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.
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.
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'.
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'),
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.
25031 -- Macro: TARGET_N_FORMAT_TYPES
25032 If defined, this macro is the number of entries in
25033 `TARGET_FORMAT_TYPES'.
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'.
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,
25051 File: gccint.info, Node: Host Config, Next: Fragments, Prev: Target Macros, Up: Top
25053 14 Host Configuration
25054 *********************
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
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::.
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.
25077 File: gccint.info, Node: Host Common, Next: Filesystem, Up: Host Config
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'.
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.
25091 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
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
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.
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.
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.
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.
25127 File: gccint.info, Node: Filesystem, Next: Host Misc, Prev: Host Common, Up: Host Config
25129 14.2 Host Filesystem
25130 ====================
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'.
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.
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'.
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
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 (`;').
25164 Define this macro if the host system is VMS.
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.
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
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.
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.
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'.
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
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.
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.
25215 `HOST_LACKS_INODE_NUMBERS'
25216 Define this macro if the host filesystem does not report
25217 meaningful inode numbers in struct stat.
25220 File: gccint.info, Node: Host Misc, Prev: Filesystem, Up: Host Config
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.
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.
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
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.
25251 `COLLECT2_HOST_INITIALIZATION'
25252 If defined, a C statement (sans semicolon) that performs
25253 host-dependent initialization when `collect2' is being initialized.
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
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.
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"'.
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'.
25275 File: gccint.info, Node: Fragments, Next: Collect2, Prev: Host Config, Up: Top
25277 15 Makefile Fragments
25278 *********************
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::.
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.
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.
25300 * Target Fragment:: Writing `t-TARGET' files.
25301 * Host Fragment:: Writing `x-HOST' files.
25304 File: gccint.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments
25306 15.1 Target Makefile Fragments
25307 ==============================
25309 Target makefile fragments can set these Makefile variables.
25312 Compiler flags to use when compiling `libgcc2.c'.
25315 A list of source file names to be compiled or assembled and
25316 inserted into `libgcc.a'.
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.
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
25331 dp-bit.c: $(srcdir)/config/fp-bit.c
25332 cat $(srcdir)/config/fp-bit.c > dp-bit.c
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
25338 `CRTSTUFF_T_CFLAGS'
25339 Special flags used when compiling `crtstuff.c'. *Note
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::.
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.
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.
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'.
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
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.
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'.
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.
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*
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.
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'.
25422 File: gccint.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments
25424 15.2 Host Makefile Fragments
25425 ============================
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.
25432 Variables provided for host fragments to set include:
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.
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
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.
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.
25460 File: gccint.info, Node: Collect2, Next: Header Dirs, Prev: Fragments, Up: Top
25465 GCC uses a utility called `collect2' on nearly all systems to arrange
25466 to call various initialization functions at start time.
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.
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.)
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:
25487 * `real-ld' in the directories listed in the compiler's search
25490 * `real-ld' in the directories listed in the environment variable
25493 * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
25496 * `ld' in the compiler's search directories, except that `collect2'
25497 will not execute itself recursively.
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'.
25505 Cross-compilers search a little differently:
25507 * `real-ld' in the compiler's search directories.
25509 * `TARGET-real-ld' in `PATH'.
25511 * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
25514 * `ld' in the compiler's search directories.
25516 * `TARGET-ld' in `PATH'.
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
25524 `collect2' searches for the utilities `nm' and `strip' using the same
25525 algorithm as above for `ld'.
25528 File: gccint.info, Node: Header Dirs, Next: Type Information, Prev: Collect2, Up: Top
25530 17 Standard Header File Directories
25531 ***********************************
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).
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.
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.
25549 `CROSS_INCLUDE_DIR' is used only by cross compilers. GCC doesn't
25550 install anything there.
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
25559 File: gccint.info, Node: Type Information, Next: Funding, Prev: Header Dirs, Up: Top
25561 18 Memory Management and Type Information
25562 *****************************************
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.
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.)
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:
25586 * In a structure definition, before the open brace;
25588 * In a global variable declaration, after the keyword `static' or
25591 * In a structure field definition, before the name of the field.
25593 Here are some examples of marking simple data structures and globals.
25600 typedef struct TAG GTY(())
25605 static GTY(()) struct TAG *LIST; /* points to GC memory */
25606 static GTY(()) int COUNTER; /* save counter in a PCH */
25608 The parser understands simple typedefs such as `typedef struct TAG
25609 *NAME;' and `typedef int NAME;'. These don't need to be marked.
25613 * GTY Options:: What goes inside a `GTY(())'.
25614 * GGC Roots:: Making global variables GGC roots.
25615 * Files:: How the generated files work.
25618 File: gccint.info, Node: GTY Options, Next: GGC Roots, Up: Type Information
25620 18.1 The Inside of a `GTY(())'
25621 ==============================
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.
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:
25636 The current structure.
25639 The structure that immediately contains the current structure.
25642 The outermost structure that contains the current structure.
25645 A partial expression of the form `[i1][i2]...' that indexes the
25646 array item currently being marked.
25648 For instance, suppose that you have a structure of the form
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]'.
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)")))
25665 The available options are:
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];
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.
25680 The second case is when a structure or a global variable contains a
25681 pointer to an array, like this:
25683 GTY ((length ("%h.regno_pointer_align_length"))) regno_decl;
25684 In this case, `regno_decl' has been allocated by writing something
25687 ggc_alloc (x->regno_pointer_align_length * sizeof (tree));
25688 and the `length' provides the length of the field.
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;
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.
25699 `desc ("EXPRESSION")'
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.
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
25716 struct tree_binding GTY(())
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;
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.
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
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(()) {
25743 void ** GTY ((use_param, ...)) entries;
25746 and then declare variables like this:
25747 static htab_t GTY ((param_is (union tree_node))) ict;
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
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.
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.
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.
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")'.
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.
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.
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.
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.
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.
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.
25843 File: gccint.info, Node: GGC Roots, Next: Files, Prev: GTY Options, Up: Type Information
25845 18.2 Marking Roots for the Garbage Collector
25846 ============================================
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:
25852 * `extern GTY(([OPTIONS])) TYPE NAME;'
25854 * `static GTY(([OPTIONS])) TYPE NAME;'
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'.
25862 File: gccint.info, Node: Files, Prev: GGC Roots, Up: Type Information
25864 18.3 Source Files Containing Type Information
25865 =============================================
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:
25871 1. You need to add the file to the list of source files the type
25872 machinery scans. There are four cases:
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'.
25878 b. For files shared by all front ends, add the filename to the
25879 `GTFILES' variable in `Makefile.in'.
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'.
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
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'.
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
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
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.
25918 File: gccint.info, Node: Funding, Next: GNU Project, Prev: Type Information, Up: Top
25920 Funding Free Software
25921 *********************
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.
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.
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.
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
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.
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.
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.
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.
25968 File: gccint.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top
25970 The GNU Project and GNU/Linux
25971 *****************************
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.
25980 For more information, see:
25981 `http://www.gnu.org/'
25982 `http://www.gnu.org/gnu/linux-and-gnu.html'
25985 File: gccint.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top
25987 GNU GENERAL PUBLIC LICENSE
25988 **************************
25990 Version 2, June 1991
25992 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
25993 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
25995 Everyone is permitted to copy and distribute verbatim copies
25996 of this license document, but changing it is not allowed.
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.
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.
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.
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
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.
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.
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.
26046 The precise terms and conditions for copying, distribution and
26047 modification follow.
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".
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.
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.
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
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:
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.
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.
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.)
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.
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.
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.
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
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,
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,
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.)
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.
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.
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.
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.
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.
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.
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.
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.
26221 This section is intended to make thoroughly clear what is believed
26222 to be a consequence of the rest of this License.
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
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.
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.
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.
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.
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.
26278 END OF TERMS AND CONDITIONS
26279 How to Apply These Terms to Your New Programs
26280 =============================================
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
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.
26292 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
26293 Copyright (C) YEAR NAME OF AUTHOR
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.
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.
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.
26309 Also add information on how to contact you by electronic and paper
26312 If the program is interactive, make it output a short notice like this
26313 when it starts in an interactive mode:
26315 Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
26316 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
26318 This is free software, and you are welcome to redistribute it
26319 under certain conditions; type `show c' for details.
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
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:
26331 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
26332 `Gnomovision' (which makes passes at compilers) written by James Hacker.
26334 SIGNATURE OF TY COON, 1 April 1989
26335 Ty Coon, President of Vice
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.
26344 File: gccint.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top
26346 GNU Free Documentation License
26347 ******************************
26349 Version 1.2, November 2002
26351 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
26352 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
26354 Everyone is permitted to copy and distribute verbatim copies
26355 of this license document, but changing it is not allowed.
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.
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.
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.
26381 1. APPLICABILITY AND DEFINITIONS
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.
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.
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
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.
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.
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".
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.
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.
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.
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.
26470 2. VERBATIM COPYING
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.
26483 You may also lend copies, under the same conditions stated above,
26484 and you may publicly display copies.
26486 3. COPYING IN QUANTITY
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
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
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.
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.
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:
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.
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.
26550 C. State on the Title page the name of the publisher of the
26551 Modified Version, as the publisher.
26553 D. Preserve all the copyright notices of the Document.
26555 E. Add an appropriate copyright notice for your modifications
26556 adjacent to the other copyright notices.
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.
26563 G. Preserve in that license notice the full lists of Invariant
26564 Sections and required Cover Texts given in the Document's
26567 H. Include an unaltered copy of this License.
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.
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.
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.
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
26597 M. Delete any section Entitled "Endorsements". Such a section
26598 may not be included in the Modified Version.
26600 N. Do not retitle any existing section to be Entitled
26601 "Endorsements" or to conflict in title with any Invariant
26604 O. Preserve any Warranty Disclaimers.
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.
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.
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.
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.
26635 5. COMBINING DOCUMENTS
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.
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
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."
26661 6. COLLECTIONS OF DOCUMENTS
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.
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
26676 7. AGGREGATION WITH INDEPENDENT WORKS
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.
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.
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
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
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.
26726 10. FUTURE REVISIONS OF THIS LICENSE
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/'.
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.
26744 ADDENDUM: How to use this License for your documents
26745 ====================================================
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:
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''.
26759 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
26760 replace the "with...Texts." line with this:
26762 with the Invariant Sections being LIST THEIR TITLES, with
26763 the Front-Cover Texts being LIST, and with the Back-Cover Texts
26766 If you have Invariant Sections without Cover Texts, or some other
26767 combination of the three, merge those two alternatives to suit the
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.
26776 File: gccint.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top
26778 Contributors to GCC
26779 *******************
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.
26788 * Analog Devices helped implement the support for complex data types
26791 * John David Anglin for threading-related fixes and improvements to
26792 libstdc++-v3, and the HP-UX port.
26794 * James van Artsdalen wrote the code that makes efficient use of the
26795 Intel 80387 register stack.
26797 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
26800 * Alasdair Baird for various bug fixes.
26802 * Giovanni Bajo for analyzing lots of complicated C++ problem
26805 * Peter Barada for his work to improve code generation for new
26808 * Gerald Baumgartner added the signature extension to the C++ front
26811 * Godmar Back for his Java improvements and encouragement.
26813 * Scott Bambrough for help porting the Java compiler.
26815 * Wolfgang Bangerth for processing tons of bug reports.
26817 * Jon Beniston for his Microsoft Windows port of Java.
26819 * Daniel Berlin for better DWARF2 support, faster/better
26820 optimizations, improved alias analysis, plus migrating GCC to
26823 * Geoff Berry for his Java object serialization work and various
26826 * Eric Blake for helping to make GCJ and libgcj conform to the
26829 * Janne Blomqvist for contributions to gfortran.
26831 * Segher Boessenkool for various fixes.
26833 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
26836 * Neil Booth for work on cpplib, lang hooks, debug hooks and other
26837 miscellaneous clean-ups.
26839 * Steven Bosscher for integrating the gfortran front end into GCC
26840 and for contributing to the tree-ssa branch.
26842 * Eric Botcazou for fixing middle- and backend bugs left and right.
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.
26851 * Devon Bowen helped port GCC to the Tahoe.
26853 * Don Bowman for mips-vxworks contributions.
26855 * Dave Brolley for work on cpplib and Chill.
26857 * Paul Brook for work on the ARM architecture and maintaining
26860 * Robert Brown implemented the support for Encore 32000 systems.
26862 * Christian Bruel for improvements to local store elimination.
26864 * Herman A.J. ten Brugge for various fixes.
26866 * Joerg Brunsmann for Java compiler hacking and help with the GCJ
26869 * Joe Buck for his direction via the steering committee.
26871 * Craig Burley for leadership of the G77 Fortran effort.
26873 * Stephan Buys for contributing Doxygen notes for libstdc++.
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.
26880 * John Carr for his alias work, SPARC hacking, infrastructure
26881 improvements, previous contributions to the steering committee,
26882 loop optimizations, etc.
26884 * Stephane Carrez for 68HC11 and 68HC12 ports.
26886 * Steve Chamberlain for support for the Renesas SH and H8 processors
26887 and the PicoJava processor, and for GCJ config fixes.
26889 * Glenn Chambers for help with the GCJ FAQ.
26891 * John-Marc Chandonia for various libgcj patches.
26893 * Scott Christley for his Objective-C contributions.
26895 * Eric Christopher for his Java porting help and clean-ups.
26897 * Branko Cibej for more warning contributions.
26899 * The GNU Classpath project for all of their merged runtime code.
26901 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
26902 other random hacking.
26904 * Michael Cook for libstdc++ cleanup patches to reduce warnings.
26906 * R. Kelley Cook for making GCC buildable from a read-only directory
26907 as well as other miscellaneous build process and documentation
26910 * Ralf Corsepius for SH testing and minor bugfixing.
26912 * Stan Cox for care and feeding of the x86 port and lots of behind
26913 the scenes hacking.
26915 * Alex Crain provided changes for the 3b1.
26917 * Ian Dall for major improvements to the NS32k port.
26919 * Paul Dale for his work to add uClinux platform support to the m68k
26922 * Dario Dariol contributed the four varieties of sample programs
26923 that print a copy of their source.
26925 * Russell Davidson for fstream and stringstream fixes in libstdc++.
26927 * Bud Davis for work on the G77 and gfortran compilers.
26929 * Mo DeJong for GCJ and libgcj bug fixes.
26931 * DJ Delorie for the DJGPP port, build and libiberty maintenance, and
26934 * Arnaud Desitter for helping to debug gfortran.
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.
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.
26949 * Zdenek Dvorak for a new loop unroller and various fixes.
26951 * Richard Earnshaw for his ongoing work with the ARM.
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.
26958 * Kevin Ediger for the floating point formatting of num_put::do_put
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
26966 * Paul Eggert for random hacking all over GCC.
26968 * Mark Elbrecht for various DJGPP improvements, and for libstdc++
26969 configuration support for locales and fstream-related fixes.
26971 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
26974 * Christian Ehrhardt for dealing with bug reports.
26976 * Ben Elliston for his work to move the Objective-C runtime into its
26977 own subdirectory and for his work on autoconf.
26979 * Marc Espie for OpenBSD support.
26981 * Doug Evans for much of the global optimization framework, arc,
26982 m32r, and SPARC work.
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.
26987 * Fred Fish for BeOS support and Ada fixes.
26989 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
26991 * Peter Gerwinski for various bug fixes and the Pascal front end.
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.
26997 * John Gilmore for a donation to the FSF earmarked improving GNU
27000 * Judy Goldberg for c++ contributions.
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.
27007 * Anthony Green for his `-Os' contributions and Java front end work.
27009 * Stu Grossman for gdb hacking, allowing GCJ developers to debug
27012 * Michael K. Gschwind contributed the port to the PDP-11.
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.
27019 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
27022 * Bruno Haible for improvements in the runtime overhead for EH, new
27023 warnings and assorted bug fixes.
27025 * Andrew Haley for his amazing Java compiler and library efforts.
27027 * Chris Hanson assisted in making GCC work on HP-UX for the 9000
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.
27034 * Dara Hazeghi for wading through myriads of target-specific bug
27037 * Kate Hedstrom for staking the G77 folks with an initial testsuite.
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.
27044 * Aldy Hernandez for working on the PowerPC port, SIMD support, and
27047 * Nobuyuki Hikichi of Software Research Associates, Tokyo,
27048 contributed the support for the Sony NEWS machine.
27050 * Kazu Hirata for caring and feeding the Renesas H8/300 port and
27053 * Katherine Holcomb for work on gfortran.
27055 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
27056 of testing and bug fixing, particularly of GCC configury code.
27058 * Steve Holmgren for MachTen patches.
27060 * Jan Hubicka for his x86 port improvements.
27062 * Falk Hueffner for working on C and optimization bug reports.
27064 * Bernardo Innocenti for his m68k work, including merging of
27065 ColdFire improvements and uClinux support.
27067 * Christian Iseli for various bug fixes.
27069 * Kamil Iskra for general m68k hacking.
27071 * Lee Iverson for random fixes and MIPS testing.
27073 * Andreas Jaeger for testing and benchmarking of GCC and various bug
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
27080 * Janis Johnson for ia64 testing and fixes, her quality improvement
27081 sidetracks, and web page maintenance.
27083 * Kean Johnston for SCO OpenServer support and various fixes.
27085 * Tim Josling for the sample language treelang based originally on
27086 Richard Kenner's "toy" language.
27088 * Nicolai Josuttis for additional libstdc++ documentation.
27090 * Klaus Kaempf for his ongoing work to make alpha-vms a viable
27093 * Steven G. Kargl for work on gfortran.
27095 * David Kashtan of SRI adapted GCC to VMS.
27097 * Ryszard Kabatek for many, many libstdc++ bug fixes and
27098 optimizations of strings, especially member functions, and for
27101 * Geoffrey Keating for his ongoing work to make the PPC work for
27102 GNU/Linux and his automatic regression tester.
27104 * Brendan Kehoe for his ongoing work with G++ and for a lot of early
27105 work in just about every part of libstdc++.
27107 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
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
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.
27125 * Robin Kirkham for cpu32 support.
27127 * Mark Klein for PA improvements.
27129 * Thomas Koenig for various bug fixes.
27131 * Bruce Korb for the new and improved fixincludes code.
27133 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
27136 * Charles LaBrec contributed the support for the Integrated Solutions
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.
27145 * Marc Lehmann for his direction via the steering committee and
27146 helping with analysis and improvements of x86 performance.
27148 * Victor Leikehman for work on gfortran.
27150 * Ted Lemon wrote parts of the RTL reader and printer.
27152 * Kriang Lerdsuwanakij for C++ improvements including template as
27153 template parameter support, and many C++ fixes.
27155 * Warren Levy for tremendous work on libgcj (Java Runtime Library)
27156 and random work on the Java front end.
27158 * Alain Lichnewsky ported GCC to the MIPS CPU.
27160 * Oskar Liljeblad for hacking on AWT and his many Java bug reports
27163 * Robert Lipe for OpenServer support, new testsuites, testing, etc.
27165 * Weiwen Liu for testing and various bug fixes.
27167 * Dave Love for his ongoing work with the Fortran front end and
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.
27174 * H.J. Lu for his previous contributions to the steering committee,
27175 many x86 bug reports, prototype patches, and keeping the GNU/Linux
27178 * Greg McGary for random fixes and (someday) bounded pointers.
27180 * Andrew MacLeod for his ongoing work in building a real EH system,
27181 various code generation improvements, work on the global
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
27190 * Bob Manson for his behind the scenes work on dejagnu.
27192 * Philip Martin for lots of libstdc++ string and vector iterator
27193 fixes and improvements, and string clean up and testsuites.
27195 * All of the Mauve project contributors, for Java test code.
27197 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
27199 * Adam Megacz for his work on the Microsoft Windows port of GCJ.
27201 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
27202 powerpc, haifa, ECOFF debug support, and other assorted hacking.
27204 * Jason Merrill for his direction via the steering committee and
27205 leading the G++ effort.
27207 * David Miller for his direction via the steering committee, lots of
27208 SPARC work, improvements in jump.c and interfacing with the Linux
27211 * Gary Miller ported GCC to Charles River Data Systems machines.
27213 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
27214 the entire libstdc++ testsuite namespace-compatible.
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.
27221 * Alan Modra for various GNU/Linux bits and testing.
27223 * Toon Moene for his direction via the steering committee, Fortran
27224 maintenance, and his ongoing work to make us make Fortran run fast.
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
27232 * Catherine Moore for fixing various ugly problems we have sent her
27233 way, including the haifa bug which was killing the Alpha & PowerPC
27236 * Mike Moreton for his various Java patches.
27238 * David Mosberger-Tang for various Alpha improvements, and for the
27239 initial IA-64 port.
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.
27245 * Bill Moyer for his behind the scenes work on various issues.
27247 * Philippe De Muyter for his work on the m68k port.
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
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.
27259 * Felix Natter for documentation on porting libstdc++.
27261 * Nathanael Nerode for cleaning up the configuration/build process.
27263 * NeXT, Inc. donated the front end that supports the Objective-C
27266 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
27267 the search engine setup, various documentation fixes and other
27270 * Geoff Noer for his work on getting cygwin native builds working.
27272 * Diego Novillo for his SPEC performance tracking web pages and
27273 assorted fixes in the middle end and various back ends.
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.
27279 * Alexandre Oliva for various build infrastructure improvements,
27280 scripts and amazing testing work, including keeping libtool issues
27283 * Stefan Olsson for work on mt_alloc.
27285 * Melissa O'Neill for various NeXT fixes.
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.
27291 * Hartmut Penner for work on the s390 port.
27293 * Paul Petersen wrote the machine description for the Alliant FX/8.
27295 * Alexandre Petit-Bianco for implementing much of the Java compiler
27296 and continued Java maintainership.
27298 * Matthias Pfaller for major improvements to the NS32k port.
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.
27304 * Andrew Pinski for processing bug reports by the dozen.
27306 * Ovidiu Predescu for his work on the Objective-C front end and
27309 * Jerry Quinn for major performance improvements in C++ formatted
27312 * Ken Raeburn for various improvements to checker, MIPS ports and
27313 various cleanups in the compiler.
27315 * Rolf W. Rasmussen for hacking on AWT.
27317 * David Reese of Sun Microsystems contributed to the Solaris on
27320 * Volker Reichelt for keeping up with the problem reports.
27322 * Joern Rennecke for maintaining the sh port, loop, regmove & reload
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.
27331 * Craig Rodrigues for processing tons of bug reports.
27333 * Ola Ro"nnerup for work on mt_alloc.
27335 * Gavin Romig-Koch for lots of behind the scenes MIPS work.
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.
27341 * Ken Rose for fixes to GCC's delay slot filling code.
27343 * Paul Rubin wrote most of the preprocessor.
27345 * Pe'tur Runo'lfsson for major performance improvements in C++
27346 formatted I/O and large file support in C++ filebuf.
27348 * Chip Salzenberg for libstdc++ patches and improvements to locales,
27349 traits, Makefiles, libio, libtool hackery, and "long long" support.
27351 * Juha Sarlin for improvements to the H8 code generator.
27353 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
27356 * Roger Sayle for improvements to constant folding and GCC's RTL
27357 optimizers as well as for fixing numerous bugs.
27359 * Bradley Schatz for his work on the GCJ FAQ.
27361 * Peter Schauer wrote the code to allow debugging to work on the
27364 * William Schelter did most of the work on the Intel 80386 support.
27366 * Tobias Schlu"ter for work on gfortran.
27368 * Bernd Schmidt for various code generation improvements and major
27369 work in the reload pass as well a serving as release manager for
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.
27376 * Jason Schroeder for jcf-dump patches.
27378 * Andreas Schwab for his work on the m68k port.
27380 * Lars Segerlund for work on gfortran.
27382 * Joel Sherrill for his direction via the steering committee, RTEMS
27383 contributions and RTEMS testing.
27385 * Nathan Sidwell for many C++ fixes/improvements.
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.
27391 * Kenny Simpson for prompting libstdc++ fixes due to defect reports
27392 from the LWG (thereby keeping GCC in line with updates from the
27395 * Franz Sirl for his ongoing work with making the PPC port stable
27398 * Andrey Slepuhin for assorted AIX hacking.
27400 * Christopher Smith did the port for Convex machines.
27402 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
27404 * Randy Smith finished the Sun FPA support.
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
27411 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
27413 * Richard Stallman, for writing the original GCC and launching the
27416 * Jan Stein of the Chalmers Computer Society provided support for
27417 Genix, as well as part of the 32000 machine description.
27419 * Nigel Stephens for various mips16 related fixes/improvements.
27421 * Jonathan Stone wrote the machine description for the Pyramid
27424 * Graham Stott for various infrastructure improvements.
27426 * John Stracke for his Java HTTP protocol fixes.
27428 * Mike Stump for his Elxsi port, G++ contributions over the years
27429 and more recently his vxworks contributions
27431 * Jeff Sturm for Java porting help, bug fixes, and encouragement.
27433 * Shigeya Suzuki for this fixes for the bsdi platforms.
27435 * Ian Lance Taylor for his mips16 work, general configury hacking,
27438 * Holger Teutsch provided the support for the Clipper CPU.
27440 * Gary Thomas for his ongoing work to make the PPC work for
27443 * Philipp Thomas for random bug fixes throughout the compiler
27445 * Jason Thorpe for thread support in libstdc++ on NetBSD.
27447 * Kresten Krab Thorup wrote the run time support for the Objective-C
27448 language and the fantastic Java bytecode interpreter.
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.
27454 * Andreas Tobler for his work porting libgcj to Darwin.
27456 * Teemu Torma for thread safe exception handling support.
27458 * Leonard Tower wrote parts of the parser, RTL generator, and RTL
27459 definitions, and of the VAX machine description.
27461 * Tom Tromey for internationalization support and for his many Java
27462 contributions and libgcj maintainership.
27464 * Lassi Tuura for improvements to config.guess to determine HP
27467 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
27469 * Andy Vaught for the design and initial implementation of the
27470 gfortran front end.
27472 * Brent Verner for work with the libstdc++ cshadow files and their
27473 associated configure steps.
27475 * Todd Vierling for contributions for NetBSD ports.
27477 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
27480 * Dean Wakerley for converting the install documentation from HTML
27481 to texinfo in time for GCC 3.0.
27483 * Krister Walfridsson for random bug fixes.
27485 * Feng Wang for contributions to gfortran.
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.
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.
27495 * Ulrich Weigand for work on the s390 port.
27497 * Zack Weinberg for major work on cpplib and various other bug fixes.
27499 * Matt Welsh for help with Linux Threads support in GCJ.
27501 * Urban Widmark for help fixing java.io.
27503 * Mark Wielaard for new Java library code and his work integrating
27506 * Dale Wiles helped port GCC to the Tahoe.
27508 * Bob Wilson from Tensilica, Inc. for the Xtensa port.
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.
27514 * Carlo Wood for various fixes.
27516 * Tom Wood for work on the m88k port.
27518 * Canqun Yang for work on gfortran.
27520 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
27521 description for the Tron architecture (specifically, the Gmicro).
27523 * Kevin Zachmann helped port GCC to the Tahoe.
27525 * Ayal Zaks for Swing Modulo Scheduling (SMS).
27527 * Xiaoqiang Zhang for work on gfortran.
27529 * Gilles Zunino for help porting Java to Irix.
27532 The following people are recognized for their contributions to GNAT,
27533 the Ada front end of GCC:
27536 * Romain Berrendonner
27586 * Hristian Kirtchev
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:
27633 * Michael Abd-El-Malek
27643 * David Billinghurst
27647 * Stephane Bortzmeyer
27657 * Bradford Castalia
27677 * Charles-Antoine Gauthier
27699 * Kevin B. Hendricks
27703 * Christian Joensson
27711 * Anand Krishnaswamy
27713 * A. O. V. Le Blanc
27777 * Pedro A. M. Vazquez
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
27792 File: gccint.info, Node: Option Index, Next: Concept Index, Prev: Contributors, Up: Top
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.
27806 * msoft-float: Soft float library routines.
27810 File: gccint.info, Node: Concept Index, Prev: Option Index, Up: Top
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.
27847 * __absvsi2: Integer library routines.
27849 * __adddf3: Soft float library routines.
27851 * __addsf3: Soft float library routines.
27853 * __addtf3: Soft float library routines.
27855 * __addvdi3: Integer library routines.
27857 * __addvsi3: Integer library routines.
27859 * __addxf3: Soft float library routines.
27861 * __ashldi3: Integer library routines.
27863 * __ashlsi3: Integer library routines.
27865 * __ashlti3: Integer library routines.
27867 * __ashrdi3: Integer library routines.
27869 * __ashrsi3: Integer library routines.
27871 * __ashrti3: Integer library routines.
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.
27879 * __clzdi2: Integer library routines.
27881 * __clzsi2: Integer library routines.
27883 * __clzti2: Integer library routines.
27885 * __cmpdf2: Soft float library routines.
27887 * __cmpdi2: Integer library routines.
27889 * __cmpsf2: Soft float library routines.
27891 * __cmptf2: Soft float library routines.
27893 * __cmpti2: Integer library routines.
27895 * __CTOR_LIST__: Initialization. (line 25)
27896 * __ctzdi2: Integer library routines.
27898 * __ctzsi2: Integer library routines.
27900 * __ctzti2: Integer library routines.
27902 * __divdf3: Soft float library routines.
27904 * __divdi3: Integer library routines.
27906 * __divsf3: Soft float library routines.
27908 * __divsi3: Integer library routines.
27910 * __divtf3: Soft float library routines.
27912 * __divti3: Integer library routines.
27914 * __divxf3: Soft float library routines.
27916 * __DTOR_LIST__: Initialization. (line 25)
27917 * __eqdf2: Soft float library routines.
27919 * __eqsf2: Soft float library routines.
27921 * __eqtf2: Soft float library routines.
27923 * __extenddftf2: Soft float library routines.
27925 * __extenddfxf2: Soft float library routines.
27927 * __extendsfdf2: Soft float library routines.
27929 * __extendsftf2: Soft float library routines.
27931 * __extendsfxf2: Soft float library routines.
27933 * __ffsdi2: Integer library routines.
27935 * __ffsti2: Integer library routines.
27937 * __fixdfdi: Soft float library routines.
27939 * __fixdfsi: Soft float library routines.
27941 * __fixdfti: Soft float library routines.
27943 * __fixsfdi: Soft float library routines.
27945 * __fixsfsi: Soft float library routines.
27947 * __fixsfti: Soft float library routines.
27949 * __fixtfdi: Soft float library routines.
27951 * __fixtfsi: Soft float library routines.
27953 * __fixtfti: Soft float library routines.
27955 * __fixunsdfdi: Soft float library routines.
27957 * __fixunsdfsi: Soft float library routines.
27959 * __fixunsdfti: Soft float library routines.
27961 * __fixunssfdi: Soft float library routines.
27963 * __fixunssfsi: Soft float library routines.
27965 * __fixunssfti: Soft float library routines.
27967 * __fixunstfdi: Soft float library routines.
27969 * __fixunstfsi: Soft float library routines.
27971 * __fixunstfti: Soft float library routines.
27973 * __fixunsxfdi: Soft float library routines.
27975 * __fixunsxfsi: Soft float library routines.
27977 * __fixunsxfti: Soft float library routines.
27979 * __fixxfdi: Soft float library routines.
27981 * __fixxfsi: Soft float library routines.
27983 * __fixxfti: Soft float library routines.
27985 * __floatdidf: Soft float library routines.
27987 * __floatdisf: Soft float library routines.
27989 * __floatditf: Soft float library routines.
27991 * __floatdixf: Soft float library routines.
27993 * __floatsidf: Soft float library routines.
27995 * __floatsisf: Soft float library routines.
27997 * __floatsitf: Soft float library routines.
27999 * __floatsixf: Soft float library routines.
28001 * __floattidf: Soft float library routines.
28003 * __floattisf: Soft float library routines.
28005 * __floattitf: Soft float library routines.
28007 * __floattixf: Soft float library routines.
28009 * __gedf2: Soft float library routines.
28011 * __gesf2: Soft float library routines.
28013 * __getf2: Soft float library routines.
28015 * __gtdf2: Soft float library routines.
28017 * __gtsf2: Soft float library routines.
28019 * __gttf2: Soft float library routines.
28021 * __ledf2: Soft float library routines.
28023 * __lesf2: Soft float library routines.
28025 * __letf2: Soft float library routines.
28027 * __lshrdi3: Integer library routines.
28029 * __lshrsi3: Integer library routines.
28031 * __lshrti3: Integer library routines.
28033 * __ltdf2: Soft float library routines.
28035 * __ltsf2: Soft float library routines.
28037 * __lttf2: Soft float library routines.
28039 * __main: Collect2. (line 15)
28040 * __moddi3: Integer library routines.
28042 * __modsi3: Integer library routines.
28044 * __modti3: Integer library routines.
28046 * __muldf3: Soft float library routines.
28048 * __muldi3: Integer library routines.
28050 * __mulsf3: Soft float library routines.
28052 * __mulsi3: Integer library routines.
28054 * __multf3: Soft float library routines.
28056 * __multi3: Integer library routines.
28058 * __mulvdi3: Integer library routines.
28060 * __mulvsi3: Integer library routines.
28062 * __mulxf3: Soft float library routines.
28064 * __nedf2: Soft float library routines.
28066 * __negdf2: Soft float library routines.
28068 * __negdi2: Integer library routines.
28070 * __negsf2: Soft float library routines.
28072 * __negtf2: Soft float library routines.
28074 * __negti2: Integer library routines.
28076 * __negvdi2: Integer library routines.
28078 * __negvsi2: Integer library routines.
28080 * __negxf2: Soft float library routines.
28082 * __nesf2: Soft float library routines.
28084 * __netf2: Soft float library routines.
28086 * __paritydi2: Integer library routines.
28088 * __paritysi2: Integer library routines.
28090 * __parityti2: Integer library routines.
28092 * __popcountdi2: Integer library routines.
28094 * __popcountsi2: Integer library routines.
28096 * __popcountti2: Integer library routines.
28098 * __subdf3: Soft float library routines.
28100 * __subsf3: Soft float library routines.
28102 * __subtf3: Soft float library routines.
28104 * __subvdi3: Integer library routines.
28106 * __subvsi3: Integer library routines.
28108 * __subxf3: Soft float library routines.
28110 * __truncdfsf2: Soft float library routines.
28112 * __trunctfdf2: Soft float library routines.
28114 * __trunctfsf2: Soft float library routines.
28116 * __truncxfdf2: Soft float library routines.
28118 * __truncxfsf2: Soft float library routines.
28120 * __ucmpdi2: Integer library routines.
28122 * __ucmpti2: Integer library routines.
28124 * __udivdi3: Integer library routines.
28126 * __udivmoddi3: Integer library routines.
28128 * __udivsi3: Integer library routines.
28130 * __udivti3: Integer library routines.
28132 * __umoddi3: Integer library routines.
28134 * __umodsi3: Integer library routines.
28136 * __umodti3: Integer library routines.
28138 * __unorddf2: Soft float library routines.
28140 * __unordsf2: Soft float library routines.
28142 * __unordtf2: Soft float library routines.
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.
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.
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.
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.
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.
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.
28312 * automaton based pipeline description: Processor pipeline description.
28314 * automaton based scheduler: Processor pipeline description.
28316 * AVOID_CCMODE_COPIES: Values in Registers.
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.
28330 * BB_HEAD, BB_END: Maintaining the CFG.
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.
28356 * block statement iterators: Basic Blocks. (line 68)
28357 * BLOCK_FOR_INSN, bb_for_stmt: Maintaining the CFG.
28359 * BLOCK_REG_PADDING: Register Arguments. (line 214)
28360 * Blocks: Blocks. (line 6)
28361 * bool <1>: Exception Region Output.
28363 * bool: Sections. (line 214)
28364 * BOOL_TYPE_SIZE: Type Layout. (line 44)
28365 * BOOLEAN_TYPE: Types. (line 6)
28366 * branch prediction: Profile information.
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.
28373 * bsi_end_p: Maintaining the CFG.
28375 * bsi_insert_after: Maintaining the CFG.
28377 * bsi_insert_before: Maintaining the CFG.
28379 * bsi_insert_on_edge: Maintaining the CFG.
28381 * bsi_last: Maintaining the CFG.
28383 * bsi_next: Maintaining the CFG.
28385 * bsi_prev: Maintaining the CFG.
28387 * bsi_remove: Maintaining the CFG.
28389 * bsi_start: Maintaining the CFG.
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.
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.
28439 * CANONICALIZE_COMPARISON: Condition Code. (line 84)
28440 * canonicalize_funcptr_for_compare instruction pattern: Standard Names.
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.
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.
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.
28513 * COLLECT_SHARED_INIT_FUNC: Macros for Initialization.
28515 * combiner pass: Regs and Memory. (line 148)
28516 * commit_edge_insertions: Maintaining the CFG.
28518 * compare: Arithmetic. (line 43)
28519 * compare, canonicalization of: Insn Canonicalizations.
28521 * comparison_operator: Machine-Independent Predicates.
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.
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.
28547 * Conditional Expressions: Conditional Expressions.
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.
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.
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.
28589 * constant definitions: Constant Definitions.
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.
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.
28649 * data bypass: Processor pipeline description.
28651 * data dependence delays: Processor pipeline description.
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.
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.
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.
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.
28747 * define_automaton: Processor pipeline description.
28749 * define_bypass: Processor pipeline description.
28751 * define_code_attr: Code Macros. (line 6)
28752 * define_code_macro: Code Macros. (line 6)
28753 * define_cond_exec: Conditional Execution.
28755 * define_constants: Constant Definitions.
28757 * define_cpu_unit: Processor pipeline description.
28759 * define_delay: Delay Slots. (line 25)
28760 * define_expand: Expander Definitions.
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.
28767 * define_mode_attr: String Substitutions.
28769 * define_mode_macro: Defining Mode Macros.
28771 * define_peephole: define_peephole. (line 6)
28772 * define_peephole2: define_peephole2. (line 6)
28773 * define_predicate: Defining Predicates.
28775 * define_query_cpu_unit: Processor pipeline description.
28777 * define_reservation: Processor pipeline description.
28779 * define_special_predicate: Defining Predicates.
28781 * define_split: Insn Splitting. (line 32)
28782 * defining attributes and their values: Defining Attributes.
28784 * defining jump instruction patterns: Jump Patterns. (line 6)
28785 * defining looping instruction patterns: Looping Patterns. (line 6)
28786 * defining peephole optimizers: Peephole Definitions.
28788 * defining predicates: Defining Predicates.
28790 * defining RTL sequences for code generation: Expander Definitions.
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.
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.
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.
28833 * DWARF_ALT_FRAME_RETURN_COLUMN: Frame Layout. (line 145)
28834 * DWARF_CIE_DATA_ALIGNMENT: Exception Region Output.
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.
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.
28856 * EH_FRAME_SECTION_NAME: Exception Region Output.
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.
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.
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.
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.
28929 * fall-thru: Edges. (line 69)
28930 * FATAL_EXIT_CODE: Host Misc. (line 6)
28931 * FDL, GNU Free Documentation License: GNU Free Documentation License.
28933 * features, optional, in system conventions: Run-time Target.
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.
28943 * FINAL_PRESCAN_INSN: Instruction Output. (line 46)
28944 * final_presence_set: Processor pipeline description.
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.
28952 * FINI_SECTION_ASM_OP: Sections. (line 68)
28953 * finite state automaton minimization: Processor pipeline description.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
29062 * GENERIC: Parsing pass. (line 6)
29063 * generic predicates: Machine-Independent Predicates.
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.
29093 * GIMPLE: Parsing pass. (line 14)
29094 * GIMPLE Example: GIMPLE Example. (line 6)
29095 * GIMPLE Exception Handling: GIMPLE Exception Handling.
29097 * GIMPLE Expressions: GIMPLE Expressions. (line 6)
29098 * gimplification <1>: Interfaces. (line 6)
29099 * gimplification <2>: Gimplification pass.
29101 * gimplification: Parsing pass. (line 14)
29102 * gimplifier: Parsing pass. (line 14)
29103 * gimplify_expr: Gimplification pass.
29105 * gimplify_function_tree: Gimplification pass.
29107 * GLOBAL_INIT_PRIORITY: Function Basics. (line 6)
29108 * global_live_at_start, global_live_at_end: Liveness information.
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.
29135 * HARD_REGNO_NREGS: Values in Registers.
29137 * HARD_REGNO_RENAME_OK: Values in Registers.
29139 * HAS_INIT_SECTION: Macros for Initialization.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
29286 * ior: Arithmetic. (line 141)
29287 * ior and attributes: Expressions. (line 50)
29288 * ior, canonicalization of: Insn Canonicalizations.
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.
29327 * lang_hooks.parse_file: Parsing pass. (line 6)
29328 * language-independent intermediate representation: Parsing pass.
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.
29336 * LD_INIT_SWITCH: Macros for Initialization.
29338 * LDD_SUFFIX: Macros for Initialization.
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.
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.
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.
29423 * machine-independent predicates: Machine-Independent Predicates.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
29610 * nonimmediate_operand: Machine-Independent Predicates.
29612 * nonlocal goto handler: Edges. (line 171)
29613 * nonlocal_goto instruction pattern: Standard Names. (line 939)
29614 * nonlocal_goto_receiver instruction pattern: Standard Names.
29616 * nonmemory_operand: Machine-Independent Predicates.
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.
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.
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.
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.
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.
29735 * plus: Arithmetic. (line 14)
29736 * plus and attributes: Expressions. (line 64)
29737 * plus, canonicalization of: Insn Canonicalizations.
29739 * PLUS_EXPR: Expression trees. (line 6)
29740 * Pmode: Misc. (line 345)
29741 * pmode_register_operand: Machine-Independent Predicates.
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.
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.
29772 * predict.def: Profile information.
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.
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.
29792 * processor pipeline description: Processor pipeline description.
29794 * product: Arithmetic. (line 85)
29795 * profile feedback: Profile information.
29797 * profile representation: Profile information.
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.
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.
29821 * push_reload: Addressing Modes. (line 196)
29822 * PUSH_ROUNDING: Stack Arguments. (line 32)
29823 * PUSH_ROUNDING, interaction with PREFERRED_STACK_BOUNDARY: Storage Layout.
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.
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.
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.
29875 * redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
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.
29889 * REG_BR_PROB_BASE, EDGE_FREQUENCY: Profile information.
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.
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.
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.
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.
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.
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.
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.
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.
29976 * restore_stack_nonlocal instruction pattern: Standard Names.
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.
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.
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.
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.
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.
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.
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.
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.
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.
30160 * STACK_POINTER_REGNUM: Frame Registers. (line 9)
30161 * STACK_POINTER_REGNUM and virtual registers: Regs and Memory.
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.
30178 * Statement Sequences: Statement Sequences.
30180 * Statements: Statements. (line 6)
30181 * statements: Function Bodies. (line 6)
30182 * Static profile estimation: Profile information.
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.
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.
30285 * TARGET_ASM_DESTRUCTOR: Macros for Initialization.
30287 * TARGET_ASM_EH_FRAME_SECTION: Exception Region Output.
30289 * TARGET_ASM_EMIT_UNWIND_LABEL: Dispatch Tables. (line 63)
30290 * TARGET_ASM_EXCEPTION_SECTION: Exception Region Output.
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.
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.
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.
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.
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.
30414 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
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.
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.
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.
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.
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.
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.
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.
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
30804 Node: Alias analysis
\7f269734
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
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