1 This is doc/gccint.info, produced by makeinfo version 4.8 from
2 /projects/toolchains_build/buildroot-2012.02-brcm/output/toolchain/gcc-4.5.3/gcc/doc/gccint.texi.
4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
5 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 Free
6 Software Foundation, Inc.
8 Permission is granted to copy, distribute and/or modify this document
9 under the terms of the GNU Free Documentation License, Version 1.2 or
10 any later version published by the Free Software Foundation; with the
11 Invariant Sections being "Funding Free Software", the Front-Cover Texts
12 being (a) (see below), and with the Back-Cover Texts being (b) (see
13 below). A copy of the license is included in the section entitled "GNU
14 Free Documentation License".
16 (a) The FSF's Front-Cover Text is:
20 (b) The FSF's Back-Cover Text is:
22 You have freedom to copy and modify this GNU Manual, like GNU
23 software. Copies published by the Free Software Foundation raise
24 funds for GNU development.
26 INFO-DIR-SECTION Software development
28 * gccint: (gccint). Internals of the GNU Compiler Collection.
30 This file documents the internals of the GNU compilers.
32 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
33 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 Free
34 Software Foundation, Inc.
36 Permission is granted to copy, distribute and/or modify this document
37 under the terms of the GNU Free Documentation License, Version 1.2 or
38 any later version published by the Free Software Foundation; with the
39 Invariant Sections being "Funding Free Software", the Front-Cover Texts
40 being (a) (see below), and with the Back-Cover Texts being (b) (see
41 below). A copy of the license is included in the section entitled "GNU
42 Free Documentation License".
44 (a) The FSF's Front-Cover Text is:
48 (b) The FSF's Back-Cover Text is:
50 You have freedom to copy and modify this GNU Manual, like GNU
51 software. Copies published by the Free Software Foundation raise
52 funds for GNU development.
56 File: gccint.info, Node: Top, Next: Contributing, Up: (DIR)
61 This manual documents the internals of the GNU compilers, including how
62 to port them to new targets and some information about how to write
63 front ends for new languages. It corresponds to the compilers
64 (Buildroot 2012.02) version 4.5.3. The use of the GNU compilers is
65 documented in a separate manual. *Note Introduction: (gcc)Top.
67 This manual is mainly a reference manual rather than a tutorial. It
68 discusses how to contribute to GCC (*note Contributing::), the
69 characteristics of the machines supported by GCC as hosts and targets
70 (*note Portability::), how GCC relates to the ABIs on such systems
71 (*note Interface::), and the characteristics of the languages for which
72 GCC front ends are written (*note Languages::). It then describes the
73 GCC source tree structure and build system, some of the interfaces to
74 GCC front ends, and how support for a target system is implemented in
77 Additional tutorial information is linked to from
78 `http://gcc.gnu.org/readings.html'.
82 * Contributing:: How to contribute to testing and developing GCC.
83 * Portability:: Goals of GCC's portability features.
84 * Interface:: Function-call interface of GCC output.
85 * Libgcc:: Low-level runtime library used by GCC.
86 * Languages:: Languages for which GCC front ends are written.
87 * Source Tree:: GCC source tree structure and build system.
88 * Testsuites:: GCC testsuites.
89 * Options:: Option specification files.
90 * Passes:: Order of passes, what they do, and what each file is for.
91 * GENERIC:: Language-independent representation generated by Front Ends
92 * GIMPLE:: Tuple representation used by Tree SSA optimizers
93 * Tree SSA:: Analysis and optimization of GIMPLE
94 * RTL:: Machine-dependent low-level intermediate representation.
95 * Control Flow:: Maintaining and manipulating the control flow graph.
96 * Loop Analysis and Representation:: Analysis and representation of loops
97 * Machine Desc:: How to write machine description instruction patterns.
98 * Target Macros:: How to write the machine description C macros and functions.
99 * Host Config:: Writing the `xm-MACHINE.h' file.
100 * Fragments:: Writing the `t-TARGET' and `x-HOST' files.
101 * Collect2:: How `collect2' works; how it finds `ld'.
102 * Header Dirs:: Understanding the standard header file directories.
103 * Type Information:: GCC's memory management; generating type information.
104 * Plugins:: Extending the compiler with plugins.
106 * Funding:: How to help assure funding for free software.
107 * GNU Project:: The GNU Project and GNU/Linux.
109 * Copying:: GNU General Public License says
110 how you can copy and share GCC.
111 * GNU Free Documentation License:: How you can copy and share this manual.
112 * Contributors:: People who have contributed to GCC.
114 * Option Index:: Index to command line options.
115 * Concept Index:: Index of concepts and symbol names.
118 File: gccint.info, Node: Contributing, Next: Portability, Prev: Top, Up: Top
120 1 Contributing to GCC Development
121 *********************************
123 If you would like to help pretest GCC releases to assure they work well,
124 current development sources are available by SVN (see
125 `http://gcc.gnu.org/svn.html'). Source and binary snapshots are also
126 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
128 If you would like to work on improvements to GCC, please read the
129 advice at these URLs:
131 `http://gcc.gnu.org/contribute.html'
132 `http://gcc.gnu.org/contributewhy.html'
134 for information on how to make useful contributions and avoid
135 duplication of effort. Suggested projects are listed at
136 `http://gcc.gnu.org/projects/'.
139 File: gccint.info, Node: Portability, Next: Interface, Prev: Contributing, Up: Top
141 2 GCC and Portability
142 *********************
144 GCC itself aims to be portable to any machine where `int' is at least a
145 32-bit type. It aims to target machines with a flat (non-segmented)
146 byte addressed data address space (the code address space can be
147 separate). Target ABIs may have 8, 16, 32 or 64-bit `int' type. `char'
148 can be wider than 8 bits.
150 GCC gets most of the information about the target machine from a
151 machine description which gives an algebraic formula for each of the
152 machine's instructions. This is a very clean way to describe the
153 target. But when the compiler needs information that is difficult to
154 express in this fashion, ad-hoc parameters have been defined for
155 machine descriptions. The purpose of portability is to reduce the
156 total work needed on the compiler; it was not of interest for its own
159 GCC does not contain machine dependent code, but it does contain code
160 that depends on machine parameters such as endianness (whether the most
161 significant byte has the highest or lowest address of the bytes in a
162 word) and the availability of autoincrement addressing. In the
163 RTL-generation pass, it is often necessary to have multiple strategies
164 for generating code for a particular kind of syntax tree, strategies
165 that are usable for different combinations of parameters. Often, not
166 all possible cases have been addressed, but only the common ones or
167 only the ones that have been encountered. As a result, a new target
168 may require additional strategies. You will know if this happens
169 because the compiler will call `abort'. Fortunately, the new
170 strategies can be added in a machine-independent fashion, and will
171 affect only the target machines that need them.
174 File: gccint.info, Node: Interface, Next: Libgcc, Prev: Portability, Up: Top
176 3 Interfacing to GCC Output
177 ***************************
179 GCC is normally configured to use the same function calling convention
180 normally in use on the target system. This is done with the
181 machine-description macros described (*note Target Macros::).
183 However, returning of structure and union values is done differently on
184 some target machines. As a result, functions compiled with PCC
185 returning such types cannot be called from code compiled with GCC, and
186 vice versa. This does not cause trouble often because few Unix library
187 routines return structures or unions.
189 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes
190 long in the same registers used for `int' or `double' return values.
191 (GCC typically allocates variables of such types in registers also.)
192 Structures and unions of other sizes are returned by storing them into
193 an address passed by the caller (usually in a register). The target
194 hook `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
196 By contrast, PCC on most target machines returns structures and unions
197 of any size by copying the data into an area of static storage, and then
198 returning the address of that storage as if it were a pointer value.
199 The caller must copy the data from that memory area to the place where
200 the value is wanted. This is slower than the method used by GCC, and
201 fails to be reentrant.
203 On some target machines, such as RISC machines and the 80386, the
204 standard system convention is to pass to the subroutine the address of
205 where to return the value. On these machines, GCC has been configured
206 to be compatible with the standard compiler, when this method is used.
207 It may not be compatible for structures of 1, 2, 4 or 8 bytes.
209 GCC uses the system's standard convention for passing arguments. On
210 some machines, the first few arguments are passed in registers; in
211 others, all are passed on the stack. It would be possible to use
212 registers for argument passing on any machine, and this would probably
213 result in a significant speedup. But the result would be complete
214 incompatibility with code that follows the standard convention. So this
215 change is practical only if you are switching to GCC as the sole C
216 compiler for the system. We may implement register argument passing on
217 certain machines once we have a complete GNU system so that we can
218 compile the libraries with GCC.
220 On some machines (particularly the SPARC), certain types of arguments
221 are passed "by invisible reference". This means that the value is
222 stored in memory, and the address of the memory location is passed to
225 If you use `longjmp', beware of automatic variables. ISO C says that
226 automatic variables that are not declared `volatile' have undefined
227 values after a `longjmp'. And this is all GCC promises to do, because
228 it is very difficult to restore register variables correctly, and one
229 of GCC's features is that it can put variables in registers without
233 File: gccint.info, Node: Libgcc, Next: Languages, Prev: Interface, Up: Top
235 4 The GCC low-level runtime library
236 ***********************************
238 GCC provides a low-level runtime library, `libgcc.a' or `libgcc_s.so.1'
239 on some platforms. GCC generates calls to routines in this library
240 automatically, whenever it needs to perform some operation that is too
241 complicated to emit inline code for.
243 Most of the routines in `libgcc' handle arithmetic operations that the
244 target processor cannot perform directly. This includes integer
245 multiply and divide on some machines, and all floating-point and
246 fixed-point operations on other machines. `libgcc' also includes
247 routines for exception handling, and a handful of miscellaneous
250 Some of these routines can be defined in mostly machine-independent C.
251 Others must be hand-written in assembly language for each processor
254 GCC will also generate calls to C library routines, such as `memcpy'
255 and `memset', in some cases. The set of routines that GCC may possibly
256 use is documented in *Note Other Builtins: (gcc)Other Builtins.
258 These routines take arguments and return values of a specific machine
259 mode, not a specific C type. *Note Machine Modes::, for an explanation
260 of this concept. For illustrative purposes, in this chapter the
261 floating point type `float' is assumed to correspond to `SFmode';
262 `double' to `DFmode'; and `long double' to both `TFmode' and `XFmode'.
263 Similarly, the integer types `int' and `unsigned int' correspond to
264 `SImode'; `long' and `unsigned long' to `DImode'; and `long long' and
265 `unsigned long long' to `TImode'.
269 * Integer library routines::
270 * Soft float library routines::
271 * Decimal float library routines::
272 * Fixed-point fractional library routines::
273 * Exception handling routines::
274 * Miscellaneous routines::
277 File: gccint.info, Node: Integer library routines, Next: Soft float library routines, Up: Libgcc
279 4.1 Routines for integer arithmetic
280 ===================================
282 The integer arithmetic routines are used on platforms that don't provide
283 hardware support for arithmetic operations on some modes.
285 4.1.1 Arithmetic functions
286 --------------------------
288 -- Runtime Function: int __ashlsi3 (int A, int B)
289 -- Runtime Function: long __ashldi3 (long A, int B)
290 -- Runtime Function: long long __ashlti3 (long long A, int B)
291 These functions return the result of shifting A left by B bits.
293 -- Runtime Function: int __ashrsi3 (int A, int B)
294 -- Runtime Function: long __ashrdi3 (long A, int B)
295 -- Runtime Function: long long __ashrti3 (long long A, int B)
296 These functions return the result of arithmetically shifting A
299 -- Runtime Function: int __divsi3 (int A, int B)
300 -- Runtime Function: long __divdi3 (long A, long B)
301 -- Runtime Function: long long __divti3 (long long A, long long B)
302 These functions return the quotient of the signed division of A and
305 -- Runtime Function: int __lshrsi3 (int A, int B)
306 -- Runtime Function: long __lshrdi3 (long A, int B)
307 -- Runtime Function: long long __lshrti3 (long long A, int B)
308 These functions return the result of logically shifting A right by
311 -- Runtime Function: int __modsi3 (int A, int B)
312 -- Runtime Function: long __moddi3 (long A, long B)
313 -- Runtime Function: long long __modti3 (long long A, long long B)
314 These functions return the remainder of the signed division of A
317 -- Runtime Function: int __mulsi3 (int A, int B)
318 -- Runtime Function: long __muldi3 (long A, long B)
319 -- Runtime Function: long long __multi3 (long long A, long long B)
320 These functions return the product of A and B.
322 -- Runtime Function: long __negdi2 (long A)
323 -- Runtime Function: long long __negti2 (long long A)
324 These functions return the negation of A.
326 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned
328 -- Runtime Function: unsigned long __udivdi3 (unsigned long A,
330 -- Runtime Function: unsigned long long __udivti3 (unsigned long long
331 A, unsigned long long B)
332 These functions return the quotient of the unsigned division of A
335 -- Runtime Function: unsigned long __udivmoddi3 (unsigned long A,
336 unsigned long B, unsigned long *C)
337 -- Runtime Function: unsigned long long __udivti3 (unsigned long long
338 A, unsigned long long B, unsigned long long *C)
339 These functions calculate both the quotient and remainder of the
340 unsigned division of A and B. The return value is the quotient,
341 and the remainder is placed in variable pointed to by C.
343 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned
345 -- Runtime Function: unsigned long __umoddi3 (unsigned long A,
347 -- Runtime Function: unsigned long long __umodti3 (unsigned long long
348 A, unsigned long long B)
349 These functions return the remainder of the unsigned division of A
352 4.1.2 Comparison functions
353 --------------------------
355 The following functions implement integral comparisons. These functions
356 implement a low-level compare, upon which the higher level comparison
357 operators (such as less than and greater than or equal to) can be
358 constructed. The returned values lie in the range zero to two, to allow
359 the high-level operators to be implemented by testing the returned
360 result using either signed or unsigned comparison.
362 -- Runtime Function: int __cmpdi2 (long A, long B)
363 -- Runtime Function: int __cmpti2 (long long A, long long B)
364 These functions perform a signed comparison of A and B. If A is
365 less than B, they return 0; if A is greater than B, they return 2;
366 and if A and B are equal they return 1.
368 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B)
369 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned
371 These functions perform an unsigned comparison of A and B. If A
372 is less than B, they return 0; if A is greater than B, they return
373 2; and if A and B are equal they return 1.
375 4.1.3 Trapping arithmetic functions
376 -----------------------------------
378 The following functions implement trapping arithmetic. These functions
379 call the libc function `abort' upon signed arithmetic overflow.
381 -- Runtime Function: int __absvsi2 (int A)
382 -- Runtime Function: long __absvdi2 (long A)
383 These functions return the absolute value of A.
385 -- Runtime Function: int __addvsi3 (int A, int B)
386 -- Runtime Function: long __addvdi3 (long A, long B)
387 These functions return the sum of A and B; that is `A + B'.
389 -- Runtime Function: int __mulvsi3 (int A, int B)
390 -- Runtime Function: long __mulvdi3 (long A, long B)
391 The functions return the product of A and B; that is `A * B'.
393 -- Runtime Function: int __negvsi2 (int A)
394 -- Runtime Function: long __negvdi2 (long A)
395 These functions return the negation of A; that is `-A'.
397 -- Runtime Function: int __subvsi3 (int A, int B)
398 -- Runtime Function: long __subvdi3 (long A, long B)
399 These functions return the difference between B and A; that is `A
405 -- Runtime Function: int __clzsi2 (int A)
406 -- Runtime Function: int __clzdi2 (long A)
407 -- Runtime Function: int __clzti2 (long long A)
408 These functions return the number of leading 0-bits in A, starting
409 at the most significant bit position. If A is zero, the result is
412 -- Runtime Function: int __ctzsi2 (int A)
413 -- Runtime Function: int __ctzdi2 (long A)
414 -- Runtime Function: int __ctzti2 (long long A)
415 These functions return the number of trailing 0-bits in A, starting
416 at the least significant bit position. If A is zero, the result is
419 -- Runtime Function: int __ffsdi2 (long A)
420 -- Runtime Function: int __ffsti2 (long long A)
421 These functions return the index of the least significant 1-bit in
422 A, or the value zero if A is zero. The least significant bit is
425 -- Runtime Function: int __paritysi2 (int A)
426 -- Runtime Function: int __paritydi2 (long A)
427 -- Runtime Function: int __parityti2 (long long A)
428 These functions return the value zero if the number of bits set in
429 A is even, and the value one otherwise.
431 -- Runtime Function: int __popcountsi2 (int A)
432 -- Runtime Function: int __popcountdi2 (long A)
433 -- Runtime Function: int __popcountti2 (long long A)
434 These functions return the number of bits set in A.
436 -- Runtime Function: int32_t __bswapsi2 (int32_t A)
437 -- Runtime Function: int64_t __bswapdi2 (int64_t A)
438 These functions return the A byteswapped.
441 File: gccint.info, Node: Soft float library routines, Next: Decimal float library routines, Prev: Integer library routines, Up: Libgcc
443 4.2 Routines for floating point emulation
444 =========================================
446 The software floating point library is used on machines which do not
447 have hardware support for floating point. It is also used whenever
448 `-msoft-float' is used to disable generation of floating point
449 instructions. (Not all targets support this switch.)
451 For compatibility with other compilers, the floating point emulation
452 routines can be renamed with the `DECLARE_LIBRARY_RENAMES' macro (*note
453 Library Calls::). In this section, the default names are used.
455 Presently the library does not support `XFmode', which is used for
456 `long double' on some architectures.
458 4.2.1 Arithmetic functions
459 --------------------------
461 -- Runtime Function: float __addsf3 (float A, float B)
462 -- Runtime Function: double __adddf3 (double A, double B)
463 -- Runtime Function: long double __addtf3 (long double A, long double
465 -- Runtime Function: long double __addxf3 (long double A, long double
467 These functions return the sum of A and B.
469 -- Runtime Function: float __subsf3 (float A, float B)
470 -- Runtime Function: double __subdf3 (double A, double B)
471 -- Runtime Function: long double __subtf3 (long double A, long double
473 -- Runtime Function: long double __subxf3 (long double A, long double
475 These functions return the difference between B and A; that is,
478 -- Runtime Function: float __mulsf3 (float A, float B)
479 -- Runtime Function: double __muldf3 (double A, double B)
480 -- Runtime Function: long double __multf3 (long double A, long double
482 -- Runtime Function: long double __mulxf3 (long double A, long double
484 These functions return the product of A and B.
486 -- Runtime Function: float __divsf3 (float A, float B)
487 -- Runtime Function: double __divdf3 (double A, double B)
488 -- Runtime Function: long double __divtf3 (long double A, long double
490 -- Runtime Function: long double __divxf3 (long double A, long double
492 These functions return the quotient of A and B; that is, A / B.
494 -- Runtime Function: float __negsf2 (float A)
495 -- Runtime Function: double __negdf2 (double A)
496 -- Runtime Function: long double __negtf2 (long double A)
497 -- Runtime Function: long double __negxf2 (long double A)
498 These functions return the negation of A. They simply flip the
499 sign bit, so they can produce negative zero and negative NaN.
501 4.2.2 Conversion functions
502 --------------------------
504 -- Runtime Function: double __extendsfdf2 (float A)
505 -- Runtime Function: long double __extendsftf2 (float A)
506 -- Runtime Function: long double __extendsfxf2 (float A)
507 -- Runtime Function: long double __extenddftf2 (double A)
508 -- Runtime Function: long double __extenddfxf2 (double A)
509 These functions extend A to the wider mode of their return type.
511 -- Runtime Function: double __truncxfdf2 (long double A)
512 -- Runtime Function: double __trunctfdf2 (long double A)
513 -- Runtime Function: float __truncxfsf2 (long double A)
514 -- Runtime Function: float __trunctfsf2 (long double A)
515 -- Runtime Function: float __truncdfsf2 (double A)
516 These functions truncate A to the narrower mode of their return
517 type, rounding toward zero.
519 -- Runtime Function: int __fixsfsi (float A)
520 -- Runtime Function: int __fixdfsi (double A)
521 -- Runtime Function: int __fixtfsi (long double A)
522 -- Runtime Function: int __fixxfsi (long double A)
523 These functions convert A to a signed integer, rounding toward
526 -- Runtime Function: long __fixsfdi (float A)
527 -- Runtime Function: long __fixdfdi (double A)
528 -- Runtime Function: long __fixtfdi (long double A)
529 -- Runtime Function: long __fixxfdi (long double A)
530 These functions convert A to a signed long, rounding toward zero.
532 -- Runtime Function: long long __fixsfti (float A)
533 -- Runtime Function: long long __fixdfti (double A)
534 -- Runtime Function: long long __fixtfti (long double A)
535 -- Runtime Function: long long __fixxfti (long double A)
536 These functions convert A to a signed long long, rounding toward
539 -- Runtime Function: unsigned int __fixunssfsi (float A)
540 -- Runtime Function: unsigned int __fixunsdfsi (double A)
541 -- Runtime Function: unsigned int __fixunstfsi (long double A)
542 -- Runtime Function: unsigned int __fixunsxfsi (long double A)
543 These functions convert A to an unsigned integer, rounding toward
544 zero. Negative values all become zero.
546 -- Runtime Function: unsigned long __fixunssfdi (float A)
547 -- Runtime Function: unsigned long __fixunsdfdi (double A)
548 -- Runtime Function: unsigned long __fixunstfdi (long double A)
549 -- Runtime Function: unsigned long __fixunsxfdi (long double A)
550 These functions convert A to an unsigned long, rounding toward
551 zero. Negative values all become zero.
553 -- Runtime Function: unsigned long long __fixunssfti (float A)
554 -- Runtime Function: unsigned long long __fixunsdfti (double A)
555 -- Runtime Function: unsigned long long __fixunstfti (long double A)
556 -- Runtime Function: unsigned long long __fixunsxfti (long double A)
557 These functions convert A to an unsigned long long, rounding
558 toward zero. Negative values all become zero.
560 -- Runtime Function: float __floatsisf (int I)
561 -- Runtime Function: double __floatsidf (int I)
562 -- Runtime Function: long double __floatsitf (int I)
563 -- Runtime Function: long double __floatsixf (int I)
564 These functions convert I, a signed integer, to floating point.
566 -- Runtime Function: float __floatdisf (long I)
567 -- Runtime Function: double __floatdidf (long I)
568 -- Runtime Function: long double __floatditf (long I)
569 -- Runtime Function: long double __floatdixf (long I)
570 These functions convert I, a signed long, to floating point.
572 -- Runtime Function: float __floattisf (long long I)
573 -- Runtime Function: double __floattidf (long long I)
574 -- Runtime Function: long double __floattitf (long long I)
575 -- Runtime Function: long double __floattixf (long long I)
576 These functions convert I, a signed long long, to floating point.
578 -- Runtime Function: float __floatunsisf (unsigned int I)
579 -- Runtime Function: double __floatunsidf (unsigned int I)
580 -- Runtime Function: long double __floatunsitf (unsigned int I)
581 -- Runtime Function: long double __floatunsixf (unsigned int I)
582 These functions convert I, an unsigned integer, to floating point.
584 -- Runtime Function: float __floatundisf (unsigned long I)
585 -- Runtime Function: double __floatundidf (unsigned long I)
586 -- Runtime Function: long double __floatunditf (unsigned long I)
587 -- Runtime Function: long double __floatundixf (unsigned long I)
588 These functions convert I, an unsigned long, to floating point.
590 -- Runtime Function: float __floatuntisf (unsigned long long I)
591 -- Runtime Function: double __floatuntidf (unsigned long long I)
592 -- Runtime Function: long double __floatuntitf (unsigned long long I)
593 -- Runtime Function: long double __floatuntixf (unsigned long long I)
594 These functions convert I, an unsigned long long, to floating
597 4.2.3 Comparison functions
598 --------------------------
600 There are two sets of basic comparison functions.
602 -- Runtime Function: int __cmpsf2 (float A, float B)
603 -- Runtime Function: int __cmpdf2 (double A, double B)
604 -- Runtime Function: int __cmptf2 (long double A, long double B)
605 These functions calculate a <=> b. That is, if A is less than B,
606 they return -1; if A is greater than B, they return 1; and if A
607 and B are equal they return 0. If either argument is NaN they
608 return 1, but you should not rely on this; if NaN is a
609 possibility, use one of the higher-level comparison functions.
611 -- Runtime Function: int __unordsf2 (float A, float B)
612 -- Runtime Function: int __unorddf2 (double A, double B)
613 -- Runtime Function: int __unordtf2 (long double A, long double B)
614 These functions return a nonzero value if either argument is NaN,
617 There is also a complete group of higher level functions which
618 correspond directly to comparison operators. They implement the ISO C
619 semantics for floating-point comparisons, taking NaN into account. Pay
620 careful attention to the return values defined for each set. Under the
621 hood, all of these routines are implemented as
623 if (__unordXf2 (a, b))
625 return __cmpXf2 (a, b);
627 where E is a constant chosen to give the proper behavior for NaN.
628 Thus, the meaning of the return value is different for each set. Do
629 not rely on this implementation; only the semantics documented below
632 -- Runtime Function: int __eqsf2 (float A, float B)
633 -- Runtime Function: int __eqdf2 (double A, double B)
634 -- Runtime Function: int __eqtf2 (long double A, long double B)
635 These functions return zero if neither argument is NaN, and A and
638 -- Runtime Function: int __nesf2 (float A, float B)
639 -- Runtime Function: int __nedf2 (double A, double B)
640 -- Runtime Function: int __netf2 (long double A, long double B)
641 These functions return a nonzero value if either argument is NaN,
642 or if A and B are unequal.
644 -- Runtime Function: int __gesf2 (float A, float B)
645 -- Runtime Function: int __gedf2 (double A, double B)
646 -- Runtime Function: int __getf2 (long double A, long double B)
647 These functions return a value greater than or equal to zero if
648 neither argument is NaN, and A is greater than or equal to B.
650 -- Runtime Function: int __ltsf2 (float A, float B)
651 -- Runtime Function: int __ltdf2 (double A, double B)
652 -- Runtime Function: int __lttf2 (long double A, long double B)
653 These functions return a value less than zero if neither argument
654 is NaN, and A is strictly less than B.
656 -- Runtime Function: int __lesf2 (float A, float B)
657 -- Runtime Function: int __ledf2 (double A, double B)
658 -- Runtime Function: int __letf2 (long double A, long double B)
659 These functions return a value less than or equal to zero if
660 neither argument is NaN, and A is less than or equal to B.
662 -- Runtime Function: int __gtsf2 (float A, float B)
663 -- Runtime Function: int __gtdf2 (double A, double B)
664 -- Runtime Function: int __gttf2 (long double A, long double B)
665 These functions return a value greater than zero if neither
666 argument is NaN, and A is strictly greater than B.
668 4.2.4 Other floating-point functions
669 ------------------------------------
671 -- Runtime Function: float __powisf2 (float A, int B)
672 -- Runtime Function: double __powidf2 (double A, int B)
673 -- Runtime Function: long double __powitf2 (long double A, int B)
674 -- Runtime Function: long double __powixf2 (long double A, int B)
675 These functions convert raise A to the power B.
677 -- Runtime Function: complex float __mulsc3 (float A, float B, float
679 -- Runtime Function: complex double __muldc3 (double A, double B,
681 -- Runtime Function: complex long double __multc3 (long double A, long
682 double B, long double C, long double D)
683 -- Runtime Function: complex long double __mulxc3 (long double A, long
684 double B, long double C, long double D)
685 These functions return the product of A + iB and C + iD, following
686 the rules of C99 Annex G.
688 -- Runtime Function: complex float __divsc3 (float A, float B, float
690 -- Runtime Function: complex double __divdc3 (double A, double B,
692 -- Runtime Function: complex long double __divtc3 (long double A, long
693 double B, long double C, long double D)
694 -- Runtime Function: complex long double __divxc3 (long double A, long
695 double B, long double C, long double D)
696 These functions return the quotient of A + iB and C + iD (i.e., (A
697 + iB) / (C + iD)), following the rules of C99 Annex G.
700 File: gccint.info, Node: Decimal float library routines, Next: Fixed-point fractional library routines, Prev: Soft float library routines, Up: Libgcc
702 4.3 Routines for decimal floating point emulation
703 =================================================
705 The software decimal floating point library implements IEEE 754-2008
706 decimal floating point arithmetic and is only activated on selected
709 The software decimal floating point library supports either DPD
710 (Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as
711 selected at configure time.
713 4.3.1 Arithmetic functions
714 --------------------------
716 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32
718 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32
720 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64
722 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64
724 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A,
726 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A,
728 These functions return the sum of A and B.
730 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32
732 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32
734 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64
736 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64
738 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A,
740 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A,
742 These functions return the difference between B and A; that is,
745 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32
747 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32
749 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64
751 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64
753 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A,
755 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A,
757 These functions return the product of A and B.
759 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32
761 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32
763 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64
765 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64
767 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A,
769 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A,
771 These functions return the quotient of A and B; that is, A / B.
773 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A)
774 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A)
775 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A)
776 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A)
777 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A)
778 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A)
779 These functions return the negation of A. They simply flip the
780 sign bit, so they can produce negative zero and negative NaN.
782 4.3.2 Conversion functions
783 --------------------------
785 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A)
786 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A)
787 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A)
788 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A)
789 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A)
790 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A)
791 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A)
792 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A)
793 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A)
794 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A)
795 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A)
796 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A)
797 These functions convert the value A from one decimal floating type
800 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A)
801 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A)
802 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A)
803 -- Runtime Function: _Decimal128 __bid_extendsftd (float A)
804 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A)
805 -- Runtime Function: _Decimal128 __bid_extenddftd (double A)
806 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A)
807 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A)
808 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A)
809 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A)
810 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A)
811 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A)
812 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A)
813 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A)
814 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A)
815 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A)
816 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A)
817 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A)
818 These functions convert the value of A from a binary floating type
819 to a decimal floating type of a different size.
821 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A)
822 -- Runtime Function: float __bid_truncddsf (_Decimal64 A)
823 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A)
824 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A)
825 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A)
826 -- Runtime Function: double __bid_extendsddf (_Decimal32 A)
827 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A)
828 -- Runtime Function: double __bid_trunctddf (_Decimal128 A)
829 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A)
830 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A)
831 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A)
832 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A)
833 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A)
834 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A)
835 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A)
836 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A)
837 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A)
838 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A)
839 These functions convert the value of A from a decimal floating type
840 to a binary floating type of a different size.
842 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A)
843 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A)
844 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A)
845 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A)
846 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A)
847 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A)
848 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A)
849 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A)
850 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A)
851 -- Runtime Function: double __bid_truncdddf (_Decimal64 A)
852 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A)
853 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A)
854 These functions convert the value of A between decimal and binary
855 floating types of the same size.
857 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A)
858 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A)
859 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A)
860 -- Runtime Function: int __bid_fixddsi (_Decimal64 A)
861 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A)
862 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A)
863 These functions convert A to a signed integer.
865 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A)
866 -- Runtime Function: long __bid_fixsddi (_Decimal32 A)
867 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A)
868 -- Runtime Function: long __bid_fixdddi (_Decimal64 A)
869 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A)
870 -- Runtime Function: long __bid_fixtddi (_Decimal128 A)
871 These functions convert A to a signed long.
873 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A)
874 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A)
875 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A)
876 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A)
877 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A)
878 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A)
879 These functions convert A to an unsigned integer. Negative values
882 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A)
883 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A)
884 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A)
885 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A)
886 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A)
887 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A)
888 These functions convert A to an unsigned long. Negative values
891 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I)
892 -- Runtime Function: _Decimal32 __bid_floatsisd (int I)
893 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I)
894 -- Runtime Function: _Decimal64 __bid_floatsidd (int I)
895 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I)
896 -- Runtime Function: _Decimal128 __bid_floatsitd (int I)
897 These functions convert I, a signed integer, to decimal floating
900 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I)
901 -- Runtime Function: _Decimal32 __bid_floatdisd (long I)
902 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I)
903 -- Runtime Function: _Decimal64 __bid_floatdidd (long I)
904 -- Runtime Function: _Decimal128 __dpd_floatditd (long I)
905 -- Runtime Function: _Decimal128 __bid_floatditd (long I)
906 These functions convert I, a signed long, to decimal floating
909 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I)
910 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I)
911 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I)
912 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I)
913 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I)
914 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I)
915 These functions convert I, an unsigned integer, to decimal
918 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I)
919 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I)
920 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I)
921 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I)
922 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I)
923 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I)
924 These functions convert I, an unsigned long, to decimal floating
927 4.3.3 Comparison functions
928 --------------------------
930 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B)
931 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B)
932 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B)
933 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B)
934 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B)
935 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B)
936 These functions return a nonzero value if either argument is NaN,
939 There is also a complete group of higher level functions which
940 correspond directly to comparison operators. They implement the ISO C
941 semantics for floating-point comparisons, taking NaN into account. Pay
942 careful attention to the return values defined for each set. Under the
943 hood, all of these routines are implemented as
945 if (__bid_unordXd2 (a, b))
947 return __bid_cmpXd2 (a, b);
949 where E is a constant chosen to give the proper behavior for NaN.
950 Thus, the meaning of the return value is different for each set. Do
951 not rely on this implementation; only the semantics documented below
954 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B)
955 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B)
956 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B)
957 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B)
958 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B)
959 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B)
960 These functions return zero if neither argument is NaN, and A and
963 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B)
964 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B)
965 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B)
966 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B)
967 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B)
968 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B)
969 These functions return a nonzero value if either argument is NaN,
970 or if A and B are unequal.
972 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B)
973 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B)
974 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B)
975 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B)
976 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B)
977 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B)
978 These functions return a value greater than or equal to zero if
979 neither argument is NaN, and A is greater than or equal to B.
981 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B)
982 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B)
983 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B)
984 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B)
985 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B)
986 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B)
987 These functions return a value less than zero if neither argument
988 is NaN, and A is strictly less than B.
990 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B)
991 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B)
992 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B)
993 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B)
994 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B)
995 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B)
996 These functions return a value less than or equal to zero if
997 neither argument is NaN, and A is less than or equal to B.
999 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B)
1000 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B)
1001 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B)
1002 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B)
1003 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B)
1004 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B)
1005 These functions return a value greater than zero if neither
1006 argument is NaN, and A is strictly greater than B.
1009 File: gccint.info, Node: Fixed-point fractional library routines, Next: Exception handling routines, Prev: Decimal float library routines, Up: Libgcc
1011 4.4 Routines for fixed-point fractional emulation
1012 =================================================
1014 The software fixed-point library implements fixed-point fractional
1015 arithmetic, and is only activated on selected targets.
1017 For ease of comprehension `fract' is an alias for the `_Fract' type,
1018 `accum' an alias for `_Accum', and `sat' an alias for `_Sat'.
1020 For illustrative purposes, in this section the fixed-point fractional
1021 type `short fract' is assumed to correspond to machine mode `QQmode';
1022 `unsigned short fract' to `UQQmode'; `fract' to `HQmode';
1023 `unsigned fract' to `UHQmode'; `long fract' to `SQmode';
1024 `unsigned long fract' to `USQmode'; `long long fract' to `DQmode'; and
1025 `unsigned long long fract' to `UDQmode'. Similarly the fixed-point
1026 accumulator type `short accum' corresponds to `HAmode';
1027 `unsigned short accum' to `UHAmode'; `accum' to `SAmode';
1028 `unsigned accum' to `USAmode'; `long accum' to `DAmode';
1029 `unsigned long accum' to `UDAmode'; `long long accum' to `TAmode'; and
1030 `unsigned long long accum' to `UTAmode'.
1032 4.4.1 Arithmetic functions
1033 --------------------------
1035 -- Runtime Function: short fract __addqq3 (short fract A, short fract
1037 -- Runtime Function: fract __addhq3 (fract A, fract B)
1038 -- Runtime Function: long fract __addsq3 (long fract A, long fract B)
1039 -- Runtime Function: long long fract __adddq3 (long long fract A, long
1041 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short
1042 fract A, unsigned short fract B)
1043 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A,
1045 -- Runtime Function: unsigned long fract __addusq3 (unsigned long
1046 fract A, unsigned long fract B)
1047 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long
1048 long fract A, unsigned long long fract B)
1049 -- Runtime Function: short accum __addha3 (short accum A, short accum
1051 -- Runtime Function: accum __addsa3 (accum A, accum B)
1052 -- Runtime Function: long accum __addda3 (long accum A, long accum B)
1053 -- Runtime Function: long long accum __addta3 (long long accum A, long
1055 -- Runtime Function: unsigned short accum __adduha3 (unsigned short
1056 accum A, unsigned short accum B)
1057 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A,
1059 -- Runtime Function: unsigned long accum __adduda3 (unsigned long
1060 accum A, unsigned long accum B)
1061 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long
1062 long accum A, unsigned long long accum B)
1063 These functions return the sum of A and B.
1065 -- Runtime Function: short fract __ssaddqq3 (short fract A, short
1067 -- Runtime Function: fract __ssaddhq3 (fract A, fract B)
1068 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B)
1069 -- Runtime Function: long long fract __ssadddq3 (long long fract A,
1071 -- Runtime Function: short accum __ssaddha3 (short accum A, short
1073 -- Runtime Function: accum __ssaddsa3 (accum A, accum B)
1074 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B)
1075 -- Runtime Function: long long accum __ssaddta3 (long long accum A,
1077 These functions return the sum of A and B with signed saturation.
1079 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short
1080 fract A, unsigned short fract B)
1081 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A,
1083 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long
1084 fract A, unsigned long fract B)
1085 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned
1086 long long fract A, unsigned long long fract B)
1087 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short
1088 accum A, unsigned short accum B)
1089 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A,
1091 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long
1092 accum A, unsigned long accum B)
1093 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned
1094 long long accum A, unsigned long long accum B)
1095 These functions return the sum of A and B with unsigned saturation.
1097 -- Runtime Function: short fract __subqq3 (short fract A, short fract
1099 -- Runtime Function: fract __subhq3 (fract A, fract B)
1100 -- Runtime Function: long fract __subsq3 (long fract A, long fract B)
1101 -- Runtime Function: long long fract __subdq3 (long long fract A, long
1103 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short
1104 fract A, unsigned short fract B)
1105 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A,
1107 -- Runtime Function: unsigned long fract __subusq3 (unsigned long
1108 fract A, unsigned long fract B)
1109 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long
1110 long fract A, unsigned long long fract B)
1111 -- Runtime Function: short accum __subha3 (short accum A, short accum
1113 -- Runtime Function: accum __subsa3 (accum A, accum B)
1114 -- Runtime Function: long accum __subda3 (long accum A, long accum B)
1115 -- Runtime Function: long long accum __subta3 (long long accum A, long
1117 -- Runtime Function: unsigned short accum __subuha3 (unsigned short
1118 accum A, unsigned short accum B)
1119 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A,
1121 -- Runtime Function: unsigned long accum __subuda3 (unsigned long
1122 accum A, unsigned long accum B)
1123 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long
1124 long accum A, unsigned long long accum B)
1125 These functions return the difference of A and B; that is, `A - B'.
1127 -- Runtime Function: short fract __sssubqq3 (short fract A, short
1129 -- Runtime Function: fract __sssubhq3 (fract A, fract B)
1130 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B)
1131 -- Runtime Function: long long fract __sssubdq3 (long long fract A,
1133 -- Runtime Function: short accum __sssubha3 (short accum A, short
1135 -- Runtime Function: accum __sssubsa3 (accum A, accum B)
1136 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B)
1137 -- Runtime Function: long long accum __sssubta3 (long long accum A,
1139 These functions return the difference of A and B with signed
1140 saturation; that is, `A - B'.
1142 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short
1143 fract A, unsigned short fract B)
1144 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A,
1146 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long
1147 fract A, unsigned long fract B)
1148 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned
1149 long long fract A, unsigned long long fract B)
1150 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short
1151 accum A, unsigned short accum B)
1152 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A,
1154 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long
1155 accum A, unsigned long accum B)
1156 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned
1157 long long accum A, unsigned long long accum B)
1158 These functions return the difference of A and B with unsigned
1159 saturation; that is, `A - B'.
1161 -- Runtime Function: short fract __mulqq3 (short fract A, short fract
1163 -- Runtime Function: fract __mulhq3 (fract A, fract B)
1164 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B)
1165 -- Runtime Function: long long fract __muldq3 (long long fract A, long
1167 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short
1168 fract A, unsigned short fract B)
1169 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A,
1171 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long
1172 fract A, unsigned long fract B)
1173 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long
1174 long fract A, unsigned long long fract B)
1175 -- Runtime Function: short accum __mulha3 (short accum A, short accum
1177 -- Runtime Function: accum __mulsa3 (accum A, accum B)
1178 -- Runtime Function: long accum __mulda3 (long accum A, long accum B)
1179 -- Runtime Function: long long accum __multa3 (long long accum A, long
1181 -- Runtime Function: unsigned short accum __muluha3 (unsigned short
1182 accum A, unsigned short accum B)
1183 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A,
1185 -- Runtime Function: unsigned long accum __muluda3 (unsigned long
1186 accum A, unsigned long accum B)
1187 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long
1188 long accum A, unsigned long long accum B)
1189 These functions return the product of A and B.
1191 -- Runtime Function: short fract __ssmulqq3 (short fract A, short
1193 -- Runtime Function: fract __ssmulhq3 (fract A, fract B)
1194 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B)
1195 -- Runtime Function: long long fract __ssmuldq3 (long long fract A,
1197 -- Runtime Function: short accum __ssmulha3 (short accum A, short
1199 -- Runtime Function: accum __ssmulsa3 (accum A, accum B)
1200 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B)
1201 -- Runtime Function: long long accum __ssmulta3 (long long accum A,
1203 These functions return the product of A and B with signed
1206 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short
1207 fract A, unsigned short fract B)
1208 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A,
1210 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long
1211 fract A, unsigned long fract B)
1212 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned
1213 long long fract A, unsigned long long fract B)
1214 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short
1215 accum A, unsigned short accum B)
1216 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A,
1218 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long
1219 accum A, unsigned long accum B)
1220 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned
1221 long long accum A, unsigned long long accum B)
1222 These functions return the product of A and B with unsigned
1225 -- Runtime Function: short fract __divqq3 (short fract A, short fract
1227 -- Runtime Function: fract __divhq3 (fract A, fract B)
1228 -- Runtime Function: long fract __divsq3 (long fract A, long fract B)
1229 -- Runtime Function: long long fract __divdq3 (long long fract A, long
1231 -- Runtime Function: short accum __divha3 (short accum A, short accum
1233 -- Runtime Function: accum __divsa3 (accum A, accum B)
1234 -- Runtime Function: long accum __divda3 (long accum A, long accum B)
1235 -- Runtime Function: long long accum __divta3 (long long accum A, long
1237 These functions return the quotient of the signed division of A
1240 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short
1241 fract A, unsigned short fract B)
1242 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A,
1244 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long
1245 fract A, unsigned long fract B)
1246 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned
1247 long long fract A, unsigned long long fract B)
1248 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short
1249 accum A, unsigned short accum B)
1250 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A,
1252 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long
1253 accum A, unsigned long accum B)
1254 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned
1255 long long accum A, unsigned long long accum B)
1256 These functions return the quotient of the unsigned division of A
1259 -- Runtime Function: short fract __ssdivqq3 (short fract A, short
1261 -- Runtime Function: fract __ssdivhq3 (fract A, fract B)
1262 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B)
1263 -- Runtime Function: long long fract __ssdivdq3 (long long fract A,
1265 -- Runtime Function: short accum __ssdivha3 (short accum A, short
1267 -- Runtime Function: accum __ssdivsa3 (accum A, accum B)
1268 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B)
1269 -- Runtime Function: long long accum __ssdivta3 (long long accum A,
1271 These functions return the quotient of the signed division of A
1272 and B with signed saturation.
1274 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short
1275 fract A, unsigned short fract B)
1276 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A,
1278 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long
1279 fract A, unsigned long fract B)
1280 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned
1281 long long fract A, unsigned long long fract B)
1282 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short
1283 accum A, unsigned short accum B)
1284 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A,
1286 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long
1287 accum A, unsigned long accum B)
1288 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned
1289 long long accum A, unsigned long long accum B)
1290 These functions return the quotient of the unsigned division of A
1291 and B with unsigned saturation.
1293 -- Runtime Function: short fract __negqq2 (short fract A)
1294 -- Runtime Function: fract __neghq2 (fract A)
1295 -- Runtime Function: long fract __negsq2 (long fract A)
1296 -- Runtime Function: long long fract __negdq2 (long long fract A)
1297 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short
1299 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A)
1300 -- Runtime Function: unsigned long fract __negusq2 (unsigned long
1302 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long
1304 -- Runtime Function: short accum __negha2 (short accum A)
1305 -- Runtime Function: accum __negsa2 (accum A)
1306 -- Runtime Function: long accum __negda2 (long accum A)
1307 -- Runtime Function: long long accum __negta2 (long long accum A)
1308 -- Runtime Function: unsigned short accum __neguha2 (unsigned short
1310 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A)
1311 -- Runtime Function: unsigned long accum __neguda2 (unsigned long
1313 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long
1315 These functions return the negation of A.
1317 -- Runtime Function: short fract __ssnegqq2 (short fract A)
1318 -- Runtime Function: fract __ssneghq2 (fract A)
1319 -- Runtime Function: long fract __ssnegsq2 (long fract A)
1320 -- Runtime Function: long long fract __ssnegdq2 (long long fract A)
1321 -- Runtime Function: short accum __ssnegha2 (short accum A)
1322 -- Runtime Function: accum __ssnegsa2 (accum A)
1323 -- Runtime Function: long accum __ssnegda2 (long accum A)
1324 -- Runtime Function: long long accum __ssnegta2 (long long accum A)
1325 These functions return the negation of A with signed saturation.
1327 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short
1329 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A)
1330 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long
1332 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned
1334 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short
1336 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A)
1337 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long
1339 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned
1341 These functions return the negation of A with unsigned saturation.
1343 -- Runtime Function: short fract __ashlqq3 (short fract A, int B)
1344 -- Runtime Function: fract __ashlhq3 (fract A, int B)
1345 -- Runtime Function: long fract __ashlsq3 (long fract A, int B)
1346 -- Runtime Function: long long fract __ashldq3 (long long fract A, int
1348 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short
1350 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int
1352 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long
1354 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned
1355 long long fract A, int B)
1356 -- Runtime Function: short accum __ashlha3 (short accum A, int B)
1357 -- Runtime Function: accum __ashlsa3 (accum A, int B)
1358 -- Runtime Function: long accum __ashlda3 (long accum A, int B)
1359 -- Runtime Function: long long accum __ashlta3 (long long accum A, int
1361 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short
1363 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int
1365 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long
1367 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned
1368 long long accum A, int B)
1369 These functions return the result of shifting A left by B bits.
1371 -- Runtime Function: short fract __ashrqq3 (short fract A, int B)
1372 -- Runtime Function: fract __ashrhq3 (fract A, int B)
1373 -- Runtime Function: long fract __ashrsq3 (long fract A, int B)
1374 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int
1376 -- Runtime Function: short accum __ashrha3 (short accum A, int B)
1377 -- Runtime Function: accum __ashrsa3 (accum A, int B)
1378 -- Runtime Function: long accum __ashrda3 (long accum A, int B)
1379 -- Runtime Function: long long accum __ashrta3 (long long accum A, int
1381 These functions return the result of arithmetically shifting A
1384 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short
1386 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int
1388 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long
1390 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned
1391 long long fract A, int B)
1392 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short
1394 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int
1396 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long
1398 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned
1399 long long accum A, int B)
1400 These functions return the result of logically shifting A right by
1403 -- Runtime Function: fract __ssashlhq3 (fract A, int B)
1404 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B)
1405 -- Runtime Function: long long fract __ssashldq3 (long long fract A,
1407 -- Runtime Function: short accum __ssashlha3 (short accum A, int B)
1408 -- Runtime Function: accum __ssashlsa3 (accum A, int B)
1409 -- Runtime Function: long accum __ssashlda3 (long accum A, int B)
1410 -- Runtime Function: long long accum __ssashlta3 (long long accum A,
1412 These functions return the result of shifting A left by B bits
1413 with signed saturation.
1415 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short
1417 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A,
1419 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long
1421 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned
1422 long long fract A, int B)
1423 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short
1425 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A,
1427 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long
1429 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned
1430 long long accum A, int B)
1431 These functions return the result of shifting A left by B bits
1432 with unsigned saturation.
1434 4.4.2 Comparison functions
1435 --------------------------
1437 The following functions implement fixed-point comparisons. These
1438 functions implement a low-level compare, upon which the higher level
1439 comparison operators (such as less than and greater than or equal to)
1440 can be constructed. The returned values lie in the range zero to two,
1441 to allow the high-level operators to be implemented by testing the
1442 returned result using either signed or unsigned comparison.
1444 -- Runtime Function: int __cmpqq2 (short fract A, short fract B)
1445 -- Runtime Function: int __cmphq2 (fract A, fract B)
1446 -- Runtime Function: int __cmpsq2 (long fract A, long fract B)
1447 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract
1449 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned
1451 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B)
1452 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned
1454 -- Runtime Function: int __cmpudq2 (unsigned long long fract A,
1455 unsigned long long fract B)
1456 -- Runtime Function: int __cmpha2 (short accum A, short accum B)
1457 -- Runtime Function: int __cmpsa2 (accum A, accum B)
1458 -- Runtime Function: int __cmpda2 (long accum A, long accum B)
1459 -- Runtime Function: int __cmpta2 (long long accum A, long long accum
1461 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned
1463 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B)
1464 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned
1466 -- Runtime Function: int __cmputa2 (unsigned long long accum A,
1467 unsigned long long accum B)
1468 These functions perform a signed or unsigned comparison of A and B
1469 (depending on the selected machine mode). If A is less than B,
1470 they return 0; if A is greater than B, they return 2; and if A and
1471 B are equal they return 1.
1473 4.4.3 Conversion functions
1474 --------------------------
1476 -- Runtime Function: fract __fractqqhq2 (short fract A)
1477 -- Runtime Function: long fract __fractqqsq2 (short fract A)
1478 -- Runtime Function: long long fract __fractqqdq2 (short fract A)
1479 -- Runtime Function: short accum __fractqqha (short fract A)
1480 -- Runtime Function: accum __fractqqsa (short fract A)
1481 -- Runtime Function: long accum __fractqqda (short fract A)
1482 -- Runtime Function: long long accum __fractqqta (short fract A)
1483 -- Runtime Function: unsigned short fract __fractqquqq (short fract A)
1484 -- Runtime Function: unsigned fract __fractqquhq (short fract A)
1485 -- Runtime Function: unsigned long fract __fractqqusq (short fract A)
1486 -- Runtime Function: unsigned long long fract __fractqqudq (short
1488 -- Runtime Function: unsigned short accum __fractqquha (short fract A)
1489 -- Runtime Function: unsigned accum __fractqqusa (short fract A)
1490 -- Runtime Function: unsigned long accum __fractqquda (short fract A)
1491 -- Runtime Function: unsigned long long accum __fractqquta (short
1493 -- Runtime Function: signed char __fractqqqi (short fract A)
1494 -- Runtime Function: short __fractqqhi (short fract A)
1495 -- Runtime Function: int __fractqqsi (short fract A)
1496 -- Runtime Function: long __fractqqdi (short fract A)
1497 -- Runtime Function: long long __fractqqti (short fract A)
1498 -- Runtime Function: float __fractqqsf (short fract A)
1499 -- Runtime Function: double __fractqqdf (short fract A)
1500 -- Runtime Function: short fract __fracthqqq2 (fract A)
1501 -- Runtime Function: long fract __fracthqsq2 (fract A)
1502 -- Runtime Function: long long fract __fracthqdq2 (fract A)
1503 -- Runtime Function: short accum __fracthqha (fract A)
1504 -- Runtime Function: accum __fracthqsa (fract A)
1505 -- Runtime Function: long accum __fracthqda (fract A)
1506 -- Runtime Function: long long accum __fracthqta (fract A)
1507 -- Runtime Function: unsigned short fract __fracthquqq (fract A)
1508 -- Runtime Function: unsigned fract __fracthquhq (fract A)
1509 -- Runtime Function: unsigned long fract __fracthqusq (fract A)
1510 -- Runtime Function: unsigned long long fract __fracthqudq (fract A)
1511 -- Runtime Function: unsigned short accum __fracthquha (fract A)
1512 -- Runtime Function: unsigned accum __fracthqusa (fract A)
1513 -- Runtime Function: unsigned long accum __fracthquda (fract A)
1514 -- Runtime Function: unsigned long long accum __fracthquta (fract A)
1515 -- Runtime Function: signed char __fracthqqi (fract A)
1516 -- Runtime Function: short __fracthqhi (fract A)
1517 -- Runtime Function: int __fracthqsi (fract A)
1518 -- Runtime Function: long __fracthqdi (fract A)
1519 -- Runtime Function: long long __fracthqti (fract A)
1520 -- Runtime Function: float __fracthqsf (fract A)
1521 -- Runtime Function: double __fracthqdf (fract A)
1522 -- Runtime Function: short fract __fractsqqq2 (long fract A)
1523 -- Runtime Function: fract __fractsqhq2 (long fract A)
1524 -- Runtime Function: long long fract __fractsqdq2 (long fract A)
1525 -- Runtime Function: short accum __fractsqha (long fract A)
1526 -- Runtime Function: accum __fractsqsa (long fract A)
1527 -- Runtime Function: long accum __fractsqda (long fract A)
1528 -- Runtime Function: long long accum __fractsqta (long fract A)
1529 -- Runtime Function: unsigned short fract __fractsquqq (long fract A)
1530 -- Runtime Function: unsigned fract __fractsquhq (long fract A)
1531 -- Runtime Function: unsigned long fract __fractsqusq (long fract A)
1532 -- Runtime Function: unsigned long long fract __fractsqudq (long fract
1534 -- Runtime Function: unsigned short accum __fractsquha (long fract A)
1535 -- Runtime Function: unsigned accum __fractsqusa (long fract A)
1536 -- Runtime Function: unsigned long accum __fractsquda (long fract A)
1537 -- Runtime Function: unsigned long long accum __fractsquta (long fract
1539 -- Runtime Function: signed char __fractsqqi (long fract A)
1540 -- Runtime Function: short __fractsqhi (long fract A)
1541 -- Runtime Function: int __fractsqsi (long fract A)
1542 -- Runtime Function: long __fractsqdi (long fract A)
1543 -- Runtime Function: long long __fractsqti (long fract A)
1544 -- Runtime Function: float __fractsqsf (long fract A)
1545 -- Runtime Function: double __fractsqdf (long fract A)
1546 -- Runtime Function: short fract __fractdqqq2 (long long fract A)
1547 -- Runtime Function: fract __fractdqhq2 (long long fract A)
1548 -- Runtime Function: long fract __fractdqsq2 (long long fract A)
1549 -- Runtime Function: short accum __fractdqha (long long fract A)
1550 -- Runtime Function: accum __fractdqsa (long long fract A)
1551 -- Runtime Function: long accum __fractdqda (long long fract A)
1552 -- Runtime Function: long long accum __fractdqta (long long fract A)
1553 -- Runtime Function: unsigned short fract __fractdquqq (long long
1555 -- Runtime Function: unsigned fract __fractdquhq (long long fract A)
1556 -- Runtime Function: unsigned long fract __fractdqusq (long long fract
1558 -- Runtime Function: unsigned long long fract __fractdqudq (long long
1560 -- Runtime Function: unsigned short accum __fractdquha (long long
1562 -- Runtime Function: unsigned accum __fractdqusa (long long fract A)
1563 -- Runtime Function: unsigned long accum __fractdquda (long long fract
1565 -- Runtime Function: unsigned long long accum __fractdquta (long long
1567 -- Runtime Function: signed char __fractdqqi (long long fract A)
1568 -- Runtime Function: short __fractdqhi (long long fract A)
1569 -- Runtime Function: int __fractdqsi (long long fract A)
1570 -- Runtime Function: long __fractdqdi (long long fract A)
1571 -- Runtime Function: long long __fractdqti (long long fract A)
1572 -- Runtime Function: float __fractdqsf (long long fract A)
1573 -- Runtime Function: double __fractdqdf (long long fract A)
1574 -- Runtime Function: short fract __fracthaqq (short accum A)
1575 -- Runtime Function: fract __fracthahq (short accum A)
1576 -- Runtime Function: long fract __fracthasq (short accum A)
1577 -- Runtime Function: long long fract __fracthadq (short accum A)
1578 -- Runtime Function: accum __fracthasa2 (short accum A)
1579 -- Runtime Function: long accum __fracthada2 (short accum A)
1580 -- Runtime Function: long long accum __fracthata2 (short accum A)
1581 -- Runtime Function: unsigned short fract __fracthauqq (short accum A)
1582 -- Runtime Function: unsigned fract __fracthauhq (short accum A)
1583 -- Runtime Function: unsigned long fract __fracthausq (short accum A)
1584 -- Runtime Function: unsigned long long fract __fracthaudq (short
1586 -- Runtime Function: unsigned short accum __fracthauha (short accum A)
1587 -- Runtime Function: unsigned accum __fracthausa (short accum A)
1588 -- Runtime Function: unsigned long accum __fracthauda (short accum A)
1589 -- Runtime Function: unsigned long long accum __fracthauta (short
1591 -- Runtime Function: signed char __fracthaqi (short accum A)
1592 -- Runtime Function: short __fracthahi (short accum A)
1593 -- Runtime Function: int __fracthasi (short accum A)
1594 -- Runtime Function: long __fracthadi (short accum A)
1595 -- Runtime Function: long long __fracthati (short accum A)
1596 -- Runtime Function: float __fracthasf (short accum A)
1597 -- Runtime Function: double __fracthadf (short accum A)
1598 -- Runtime Function: short fract __fractsaqq (accum A)
1599 -- Runtime Function: fract __fractsahq (accum A)
1600 -- Runtime Function: long fract __fractsasq (accum A)
1601 -- Runtime Function: long long fract __fractsadq (accum A)
1602 -- Runtime Function: short accum __fractsaha2 (accum A)
1603 -- Runtime Function: long accum __fractsada2 (accum A)
1604 -- Runtime Function: long long accum __fractsata2 (accum A)
1605 -- Runtime Function: unsigned short fract __fractsauqq (accum A)
1606 -- Runtime Function: unsigned fract __fractsauhq (accum A)
1607 -- Runtime Function: unsigned long fract __fractsausq (accum A)
1608 -- Runtime Function: unsigned long long fract __fractsaudq (accum A)
1609 -- Runtime Function: unsigned short accum __fractsauha (accum A)
1610 -- Runtime Function: unsigned accum __fractsausa (accum A)
1611 -- Runtime Function: unsigned long accum __fractsauda (accum A)
1612 -- Runtime Function: unsigned long long accum __fractsauta (accum A)
1613 -- Runtime Function: signed char __fractsaqi (accum A)
1614 -- Runtime Function: short __fractsahi (accum A)
1615 -- Runtime Function: int __fractsasi (accum A)
1616 -- Runtime Function: long __fractsadi (accum A)
1617 -- Runtime Function: long long __fractsati (accum A)
1618 -- Runtime Function: float __fractsasf (accum A)
1619 -- Runtime Function: double __fractsadf (accum A)
1620 -- Runtime Function: short fract __fractdaqq (long accum A)
1621 -- Runtime Function: fract __fractdahq (long accum A)
1622 -- Runtime Function: long fract __fractdasq (long accum A)
1623 -- Runtime Function: long long fract __fractdadq (long accum A)
1624 -- Runtime Function: short accum __fractdaha2 (long accum A)
1625 -- Runtime Function: accum __fractdasa2 (long accum A)
1626 -- Runtime Function: long long accum __fractdata2 (long accum A)
1627 -- Runtime Function: unsigned short fract __fractdauqq (long accum A)
1628 -- Runtime Function: unsigned fract __fractdauhq (long accum A)
1629 -- Runtime Function: unsigned long fract __fractdausq (long accum A)
1630 -- Runtime Function: unsigned long long fract __fractdaudq (long accum
1632 -- Runtime Function: unsigned short accum __fractdauha (long accum A)
1633 -- Runtime Function: unsigned accum __fractdausa (long accum A)
1634 -- Runtime Function: unsigned long accum __fractdauda (long accum A)
1635 -- Runtime Function: unsigned long long accum __fractdauta (long accum
1637 -- Runtime Function: signed char __fractdaqi (long accum A)
1638 -- Runtime Function: short __fractdahi (long accum A)
1639 -- Runtime Function: int __fractdasi (long accum A)
1640 -- Runtime Function: long __fractdadi (long accum A)
1641 -- Runtime Function: long long __fractdati (long accum A)
1642 -- Runtime Function: float __fractdasf (long accum A)
1643 -- Runtime Function: double __fractdadf (long accum A)
1644 -- Runtime Function: short fract __fracttaqq (long long accum A)
1645 -- Runtime Function: fract __fracttahq (long long accum A)
1646 -- Runtime Function: long fract __fracttasq (long long accum A)
1647 -- Runtime Function: long long fract __fracttadq (long long accum A)
1648 -- Runtime Function: short accum __fracttaha2 (long long accum A)
1649 -- Runtime Function: accum __fracttasa2 (long long accum A)
1650 -- Runtime Function: long accum __fracttada2 (long long accum A)
1651 -- Runtime Function: unsigned short fract __fracttauqq (long long
1653 -- Runtime Function: unsigned fract __fracttauhq (long long accum A)
1654 -- Runtime Function: unsigned long fract __fracttausq (long long accum
1656 -- Runtime Function: unsigned long long fract __fracttaudq (long long
1658 -- Runtime Function: unsigned short accum __fracttauha (long long
1660 -- Runtime Function: unsigned accum __fracttausa (long long accum A)
1661 -- Runtime Function: unsigned long accum __fracttauda (long long accum
1663 -- Runtime Function: unsigned long long accum __fracttauta (long long
1665 -- Runtime Function: signed char __fracttaqi (long long accum A)
1666 -- Runtime Function: short __fracttahi (long long accum A)
1667 -- Runtime Function: int __fracttasi (long long accum A)
1668 -- Runtime Function: long __fracttadi (long long accum A)
1669 -- Runtime Function: long long __fracttati (long long accum A)
1670 -- Runtime Function: float __fracttasf (long long accum A)
1671 -- Runtime Function: double __fracttadf (long long accum A)
1672 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A)
1673 -- Runtime Function: fract __fractuqqhq (unsigned short fract A)
1674 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A)
1675 -- Runtime Function: long long fract __fractuqqdq (unsigned short
1677 -- Runtime Function: short accum __fractuqqha (unsigned short fract A)
1678 -- Runtime Function: accum __fractuqqsa (unsigned short fract A)
1679 -- Runtime Function: long accum __fractuqqda (unsigned short fract A)
1680 -- Runtime Function: long long accum __fractuqqta (unsigned short
1682 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short
1684 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned
1686 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned
1688 -- Runtime Function: unsigned short accum __fractuqquha (unsigned
1690 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short
1692 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short
1694 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned
1696 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A)
1697 -- Runtime Function: short __fractuqqhi (unsigned short fract A)
1698 -- Runtime Function: int __fractuqqsi (unsigned short fract A)
1699 -- Runtime Function: long __fractuqqdi (unsigned short fract A)
1700 -- Runtime Function: long long __fractuqqti (unsigned short fract A)
1701 -- Runtime Function: float __fractuqqsf (unsigned short fract A)
1702 -- Runtime Function: double __fractuqqdf (unsigned short fract A)
1703 -- Runtime Function: short fract __fractuhqqq (unsigned fract A)
1704 -- Runtime Function: fract __fractuhqhq (unsigned fract A)
1705 -- Runtime Function: long fract __fractuhqsq (unsigned fract A)
1706 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A)
1707 -- Runtime Function: short accum __fractuhqha (unsigned fract A)
1708 -- Runtime Function: accum __fractuhqsa (unsigned fract A)
1709 -- Runtime Function: long accum __fractuhqda (unsigned fract A)
1710 -- Runtime Function: long long accum __fractuhqta (unsigned fract A)
1711 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned
1713 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned
1715 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned
1717 -- Runtime Function: unsigned short accum __fractuhquha (unsigned
1719 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A)
1720 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract
1722 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned
1724 -- Runtime Function: signed char __fractuhqqi (unsigned fract A)
1725 -- Runtime Function: short __fractuhqhi (unsigned fract A)
1726 -- Runtime Function: int __fractuhqsi (unsigned fract A)
1727 -- Runtime Function: long __fractuhqdi (unsigned fract A)
1728 -- Runtime Function: long long __fractuhqti (unsigned fract A)
1729 -- Runtime Function: float __fractuhqsf (unsigned fract A)
1730 -- Runtime Function: double __fractuhqdf (unsigned fract A)
1731 -- Runtime Function: short fract __fractusqqq (unsigned long fract A)
1732 -- Runtime Function: fract __fractusqhq (unsigned long fract A)
1733 -- Runtime Function: long fract __fractusqsq (unsigned long fract A)
1734 -- Runtime Function: long long fract __fractusqdq (unsigned long fract
1736 -- Runtime Function: short accum __fractusqha (unsigned long fract A)
1737 -- Runtime Function: accum __fractusqsa (unsigned long fract A)
1738 -- Runtime Function: long accum __fractusqda (unsigned long fract A)
1739 -- Runtime Function: long long accum __fractusqta (unsigned long fract
1741 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned
1743 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long
1745 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned
1747 -- Runtime Function: unsigned short accum __fractusquha (unsigned long
1749 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract
1751 -- Runtime Function: unsigned long accum __fractusquda (unsigned long
1753 -- Runtime Function: unsigned long long accum __fractusquta (unsigned
1755 -- Runtime Function: signed char __fractusqqi (unsigned long fract A)
1756 -- Runtime Function: short __fractusqhi (unsigned long fract A)
1757 -- Runtime Function: int __fractusqsi (unsigned long fract A)
1758 -- Runtime Function: long __fractusqdi (unsigned long fract A)
1759 -- Runtime Function: long long __fractusqti (unsigned long fract A)
1760 -- Runtime Function: float __fractusqsf (unsigned long fract A)
1761 -- Runtime Function: double __fractusqdf (unsigned long fract A)
1762 -- Runtime Function: short fract __fractudqqq (unsigned long long
1764 -- Runtime Function: fract __fractudqhq (unsigned long long fract A)
1765 -- Runtime Function: long fract __fractudqsq (unsigned long long fract
1767 -- Runtime Function: long long fract __fractudqdq (unsigned long long
1769 -- Runtime Function: short accum __fractudqha (unsigned long long
1771 -- Runtime Function: accum __fractudqsa (unsigned long long fract A)
1772 -- Runtime Function: long accum __fractudqda (unsigned long long fract
1774 -- Runtime Function: long long accum __fractudqta (unsigned long long
1776 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned
1778 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long
1780 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long
1782 -- Runtime Function: unsigned short accum __fractudquha (unsigned long
1784 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long
1786 -- Runtime Function: unsigned long accum __fractudquda (unsigned long
1788 -- Runtime Function: unsigned long long accum __fractudquta (unsigned
1790 -- Runtime Function: signed char __fractudqqi (unsigned long long
1792 -- Runtime Function: short __fractudqhi (unsigned long long fract A)
1793 -- Runtime Function: int __fractudqsi (unsigned long long fract A)
1794 -- Runtime Function: long __fractudqdi (unsigned long long fract A)
1795 -- Runtime Function: long long __fractudqti (unsigned long long fract
1797 -- Runtime Function: float __fractudqsf (unsigned long long fract A)
1798 -- Runtime Function: double __fractudqdf (unsigned long long fract A)
1799 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A)
1800 -- Runtime Function: fract __fractuhahq (unsigned short accum A)
1801 -- Runtime Function: long fract __fractuhasq (unsigned short accum A)
1802 -- Runtime Function: long long fract __fractuhadq (unsigned short
1804 -- Runtime Function: short accum __fractuhaha (unsigned short accum A)
1805 -- Runtime Function: accum __fractuhasa (unsigned short accum A)
1806 -- Runtime Function: long accum __fractuhada (unsigned short accum A)
1807 -- Runtime Function: long long accum __fractuhata (unsigned short
1809 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned
1811 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short
1813 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short
1815 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned
1817 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short
1819 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned
1821 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned
1823 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A)
1824 -- Runtime Function: short __fractuhahi (unsigned short accum A)
1825 -- Runtime Function: int __fractuhasi (unsigned short accum A)
1826 -- Runtime Function: long __fractuhadi (unsigned short accum A)
1827 -- Runtime Function: long long __fractuhati (unsigned short accum A)
1828 -- Runtime Function: float __fractuhasf (unsigned short accum A)
1829 -- Runtime Function: double __fractuhadf (unsigned short accum A)
1830 -- Runtime Function: short fract __fractusaqq (unsigned accum A)
1831 -- Runtime Function: fract __fractusahq (unsigned accum A)
1832 -- Runtime Function: long fract __fractusasq (unsigned accum A)
1833 -- Runtime Function: long long fract __fractusadq (unsigned accum A)
1834 -- Runtime Function: short accum __fractusaha (unsigned accum A)
1835 -- Runtime Function: accum __fractusasa (unsigned accum A)
1836 -- Runtime Function: long accum __fractusada (unsigned accum A)
1837 -- Runtime Function: long long accum __fractusata (unsigned accum A)
1838 -- Runtime Function: unsigned short fract __fractusauqq (unsigned
1840 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A)
1841 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum
1843 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned
1845 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned
1847 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned
1849 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned
1851 -- Runtime Function: signed char __fractusaqi (unsigned accum A)
1852 -- Runtime Function: short __fractusahi (unsigned accum A)
1853 -- Runtime Function: int __fractusasi (unsigned accum A)
1854 -- Runtime Function: long __fractusadi (unsigned accum A)
1855 -- Runtime Function: long long __fractusati (unsigned accum A)
1856 -- Runtime Function: float __fractusasf (unsigned accum A)
1857 -- Runtime Function: double __fractusadf (unsigned accum A)
1858 -- Runtime Function: short fract __fractudaqq (unsigned long accum A)
1859 -- Runtime Function: fract __fractudahq (unsigned long accum A)
1860 -- Runtime Function: long fract __fractudasq (unsigned long accum A)
1861 -- Runtime Function: long long fract __fractudadq (unsigned long accum
1863 -- Runtime Function: short accum __fractudaha (unsigned long accum A)
1864 -- Runtime Function: accum __fractudasa (unsigned long accum A)
1865 -- Runtime Function: long accum __fractudada (unsigned long accum A)
1866 -- Runtime Function: long long accum __fractudata (unsigned long accum
1868 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long
1870 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum
1872 -- Runtime Function: unsigned long fract __fractudausq (unsigned long
1874 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned
1876 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned
1878 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long
1880 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned
1882 -- Runtime Function: signed char __fractudaqi (unsigned long accum A)
1883 -- Runtime Function: short __fractudahi (unsigned long accum A)
1884 -- Runtime Function: int __fractudasi (unsigned long accum A)
1885 -- Runtime Function: long __fractudadi (unsigned long accum A)
1886 -- Runtime Function: long long __fractudati (unsigned long accum A)
1887 -- Runtime Function: float __fractudasf (unsigned long accum A)
1888 -- Runtime Function: double __fractudadf (unsigned long accum A)
1889 -- Runtime Function: short fract __fractutaqq (unsigned long long
1891 -- Runtime Function: fract __fractutahq (unsigned long long accum A)
1892 -- Runtime Function: long fract __fractutasq (unsigned long long accum
1894 -- Runtime Function: long long fract __fractutadq (unsigned long long
1896 -- Runtime Function: short accum __fractutaha (unsigned long long
1898 -- Runtime Function: accum __fractutasa (unsigned long long accum A)
1899 -- Runtime Function: long accum __fractutada (unsigned long long accum
1901 -- Runtime Function: long long accum __fractutata (unsigned long long
1903 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long
1905 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long
1907 -- Runtime Function: unsigned long fract __fractutausq (unsigned long
1909 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned
1911 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned
1913 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long
1915 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long
1917 -- Runtime Function: signed char __fractutaqi (unsigned long long
1919 -- Runtime Function: short __fractutahi (unsigned long long accum A)
1920 -- Runtime Function: int __fractutasi (unsigned long long accum A)
1921 -- Runtime Function: long __fractutadi (unsigned long long accum A)
1922 -- Runtime Function: long long __fractutati (unsigned long long accum
1924 -- Runtime Function: float __fractutasf (unsigned long long accum A)
1925 -- Runtime Function: double __fractutadf (unsigned long long accum A)
1926 -- Runtime Function: short fract __fractqiqq (signed char A)
1927 -- Runtime Function: fract __fractqihq (signed char A)
1928 -- Runtime Function: long fract __fractqisq (signed char A)
1929 -- Runtime Function: long long fract __fractqidq (signed char A)
1930 -- Runtime Function: short accum __fractqiha (signed char A)
1931 -- Runtime Function: accum __fractqisa (signed char A)
1932 -- Runtime Function: long accum __fractqida (signed char A)
1933 -- Runtime Function: long long accum __fractqita (signed char A)
1934 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A)
1935 -- Runtime Function: unsigned fract __fractqiuhq (signed char A)
1936 -- Runtime Function: unsigned long fract __fractqiusq (signed char A)
1937 -- Runtime Function: unsigned long long fract __fractqiudq (signed
1939 -- Runtime Function: unsigned short accum __fractqiuha (signed char A)
1940 -- Runtime Function: unsigned accum __fractqiusa (signed char A)
1941 -- Runtime Function: unsigned long accum __fractqiuda (signed char A)
1942 -- Runtime Function: unsigned long long accum __fractqiuta (signed
1944 -- Runtime Function: short fract __fracthiqq (short A)
1945 -- Runtime Function: fract __fracthihq (short A)
1946 -- Runtime Function: long fract __fracthisq (short A)
1947 -- Runtime Function: long long fract __fracthidq (short A)
1948 -- Runtime Function: short accum __fracthiha (short A)
1949 -- Runtime Function: accum __fracthisa (short A)
1950 -- Runtime Function: long accum __fracthida (short A)
1951 -- Runtime Function: long long accum __fracthita (short A)
1952 -- Runtime Function: unsigned short fract __fracthiuqq (short A)
1953 -- Runtime Function: unsigned fract __fracthiuhq (short A)
1954 -- Runtime Function: unsigned long fract __fracthiusq (short A)
1955 -- Runtime Function: unsigned long long fract __fracthiudq (short A)
1956 -- Runtime Function: unsigned short accum __fracthiuha (short A)
1957 -- Runtime Function: unsigned accum __fracthiusa (short A)
1958 -- Runtime Function: unsigned long accum __fracthiuda (short A)
1959 -- Runtime Function: unsigned long long accum __fracthiuta (short A)
1960 -- Runtime Function: short fract __fractsiqq (int A)
1961 -- Runtime Function: fract __fractsihq (int A)
1962 -- Runtime Function: long fract __fractsisq (int A)
1963 -- Runtime Function: long long fract __fractsidq (int A)
1964 -- Runtime Function: short accum __fractsiha (int A)
1965 -- Runtime Function: accum __fractsisa (int A)
1966 -- Runtime Function: long accum __fractsida (int A)
1967 -- Runtime Function: long long accum __fractsita (int A)
1968 -- Runtime Function: unsigned short fract __fractsiuqq (int A)
1969 -- Runtime Function: unsigned fract __fractsiuhq (int A)
1970 -- Runtime Function: unsigned long fract __fractsiusq (int A)
1971 -- Runtime Function: unsigned long long fract __fractsiudq (int A)
1972 -- Runtime Function: unsigned short accum __fractsiuha (int A)
1973 -- Runtime Function: unsigned accum __fractsiusa (int A)
1974 -- Runtime Function: unsigned long accum __fractsiuda (int A)
1975 -- Runtime Function: unsigned long long accum __fractsiuta (int A)
1976 -- Runtime Function: short fract __fractdiqq (long A)
1977 -- Runtime Function: fract __fractdihq (long A)
1978 -- Runtime Function: long fract __fractdisq (long A)
1979 -- Runtime Function: long long fract __fractdidq (long A)
1980 -- Runtime Function: short accum __fractdiha (long A)
1981 -- Runtime Function: accum __fractdisa (long A)
1982 -- Runtime Function: long accum __fractdida (long A)
1983 -- Runtime Function: long long accum __fractdita (long A)
1984 -- Runtime Function: unsigned short fract __fractdiuqq (long A)
1985 -- Runtime Function: unsigned fract __fractdiuhq (long A)
1986 -- Runtime Function: unsigned long fract __fractdiusq (long A)
1987 -- Runtime Function: unsigned long long fract __fractdiudq (long A)
1988 -- Runtime Function: unsigned short accum __fractdiuha (long A)
1989 -- Runtime Function: unsigned accum __fractdiusa (long A)
1990 -- Runtime Function: unsigned long accum __fractdiuda (long A)
1991 -- Runtime Function: unsigned long long accum __fractdiuta (long A)
1992 -- Runtime Function: short fract __fracttiqq (long long A)
1993 -- Runtime Function: fract __fracttihq (long long A)
1994 -- Runtime Function: long fract __fracttisq (long long A)
1995 -- Runtime Function: long long fract __fracttidq (long long A)
1996 -- Runtime Function: short accum __fracttiha (long long A)
1997 -- Runtime Function: accum __fracttisa (long long A)
1998 -- Runtime Function: long accum __fracttida (long long A)
1999 -- Runtime Function: long long accum __fracttita (long long A)
2000 -- Runtime Function: unsigned short fract __fracttiuqq (long long A)
2001 -- Runtime Function: unsigned fract __fracttiuhq (long long A)
2002 -- Runtime Function: unsigned long fract __fracttiusq (long long A)
2003 -- Runtime Function: unsigned long long fract __fracttiudq (long long
2005 -- Runtime Function: unsigned short accum __fracttiuha (long long A)
2006 -- Runtime Function: unsigned accum __fracttiusa (long long A)
2007 -- Runtime Function: unsigned long accum __fracttiuda (long long A)
2008 -- Runtime Function: unsigned long long accum __fracttiuta (long long
2010 -- Runtime Function: short fract __fractsfqq (float A)
2011 -- Runtime Function: fract __fractsfhq (float A)
2012 -- Runtime Function: long fract __fractsfsq (float A)
2013 -- Runtime Function: long long fract __fractsfdq (float A)
2014 -- Runtime Function: short accum __fractsfha (float A)
2015 -- Runtime Function: accum __fractsfsa (float A)
2016 -- Runtime Function: long accum __fractsfda (float A)
2017 -- Runtime Function: long long accum __fractsfta (float A)
2018 -- Runtime Function: unsigned short fract __fractsfuqq (float A)
2019 -- Runtime Function: unsigned fract __fractsfuhq (float A)
2020 -- Runtime Function: unsigned long fract __fractsfusq (float A)
2021 -- Runtime Function: unsigned long long fract __fractsfudq (float A)
2022 -- Runtime Function: unsigned short accum __fractsfuha (float A)
2023 -- Runtime Function: unsigned accum __fractsfusa (float A)
2024 -- Runtime Function: unsigned long accum __fractsfuda (float A)
2025 -- Runtime Function: unsigned long long accum __fractsfuta (float A)
2026 -- Runtime Function: short fract __fractdfqq (double A)
2027 -- Runtime Function: fract __fractdfhq (double A)
2028 -- Runtime Function: long fract __fractdfsq (double A)
2029 -- Runtime Function: long long fract __fractdfdq (double A)
2030 -- Runtime Function: short accum __fractdfha (double A)
2031 -- Runtime Function: accum __fractdfsa (double A)
2032 -- Runtime Function: long accum __fractdfda (double A)
2033 -- Runtime Function: long long accum __fractdfta (double A)
2034 -- Runtime Function: unsigned short fract __fractdfuqq (double A)
2035 -- Runtime Function: unsigned fract __fractdfuhq (double A)
2036 -- Runtime Function: unsigned long fract __fractdfusq (double A)
2037 -- Runtime Function: unsigned long long fract __fractdfudq (double A)
2038 -- Runtime Function: unsigned short accum __fractdfuha (double A)
2039 -- Runtime Function: unsigned accum __fractdfusa (double A)
2040 -- Runtime Function: unsigned long accum __fractdfuda (double A)
2041 -- Runtime Function: unsigned long long accum __fractdfuta (double A)
2042 These functions convert from fractional and signed non-fractionals
2043 to fractionals and signed non-fractionals, without saturation.
2045 -- Runtime Function: fract __satfractqqhq2 (short fract A)
2046 -- Runtime Function: long fract __satfractqqsq2 (short fract A)
2047 -- Runtime Function: long long fract __satfractqqdq2 (short fract A)
2048 -- Runtime Function: short accum __satfractqqha (short fract A)
2049 -- Runtime Function: accum __satfractqqsa (short fract A)
2050 -- Runtime Function: long accum __satfractqqda (short fract A)
2051 -- Runtime Function: long long accum __satfractqqta (short fract A)
2052 -- Runtime Function: unsigned short fract __satfractqquqq (short fract
2054 -- Runtime Function: unsigned fract __satfractqquhq (short fract A)
2055 -- Runtime Function: unsigned long fract __satfractqqusq (short fract
2057 -- Runtime Function: unsigned long long fract __satfractqqudq (short
2059 -- Runtime Function: unsigned short accum __satfractqquha (short fract
2061 -- Runtime Function: unsigned accum __satfractqqusa (short fract A)
2062 -- Runtime Function: unsigned long accum __satfractqquda (short fract
2064 -- Runtime Function: unsigned long long accum __satfractqquta (short
2066 -- Runtime Function: short fract __satfracthqqq2 (fract A)
2067 -- Runtime Function: long fract __satfracthqsq2 (fract A)
2068 -- Runtime Function: long long fract __satfracthqdq2 (fract A)
2069 -- Runtime Function: short accum __satfracthqha (fract A)
2070 -- Runtime Function: accum __satfracthqsa (fract A)
2071 -- Runtime Function: long accum __satfracthqda (fract A)
2072 -- Runtime Function: long long accum __satfracthqta (fract A)
2073 -- Runtime Function: unsigned short fract __satfracthquqq (fract A)
2074 -- Runtime Function: unsigned fract __satfracthquhq (fract A)
2075 -- Runtime Function: unsigned long fract __satfracthqusq (fract A)
2076 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A)
2077 -- Runtime Function: unsigned short accum __satfracthquha (fract A)
2078 -- Runtime Function: unsigned accum __satfracthqusa (fract A)
2079 -- Runtime Function: unsigned long accum __satfracthquda (fract A)
2080 -- Runtime Function: unsigned long long accum __satfracthquta (fract A)
2081 -- Runtime Function: short fract __satfractsqqq2 (long fract A)
2082 -- Runtime Function: fract __satfractsqhq2 (long fract A)
2083 -- Runtime Function: long long fract __satfractsqdq2 (long fract A)
2084 -- Runtime Function: short accum __satfractsqha (long fract A)
2085 -- Runtime Function: accum __satfractsqsa (long fract A)
2086 -- Runtime Function: long accum __satfractsqda (long fract A)
2087 -- Runtime Function: long long accum __satfractsqta (long fract A)
2088 -- Runtime Function: unsigned short fract __satfractsquqq (long fract
2090 -- Runtime Function: unsigned fract __satfractsquhq (long fract A)
2091 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A)
2092 -- Runtime Function: unsigned long long fract __satfractsqudq (long
2094 -- Runtime Function: unsigned short accum __satfractsquha (long fract
2096 -- Runtime Function: unsigned accum __satfractsqusa (long fract A)
2097 -- Runtime Function: unsigned long accum __satfractsquda (long fract A)
2098 -- Runtime Function: unsigned long long accum __satfractsquta (long
2100 -- Runtime Function: short fract __satfractdqqq2 (long long fract A)
2101 -- Runtime Function: fract __satfractdqhq2 (long long fract A)
2102 -- Runtime Function: long fract __satfractdqsq2 (long long fract A)
2103 -- Runtime Function: short accum __satfractdqha (long long fract A)
2104 -- Runtime Function: accum __satfractdqsa (long long fract A)
2105 -- Runtime Function: long accum __satfractdqda (long long fract A)
2106 -- Runtime Function: long long accum __satfractdqta (long long fract A)
2107 -- Runtime Function: unsigned short fract __satfractdquqq (long long
2109 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A)
2110 -- Runtime Function: unsigned long fract __satfractdqusq (long long
2112 -- Runtime Function: unsigned long long fract __satfractdqudq (long
2114 -- Runtime Function: unsigned short accum __satfractdquha (long long
2116 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A)
2117 -- Runtime Function: unsigned long accum __satfractdquda (long long
2119 -- Runtime Function: unsigned long long accum __satfractdquta (long
2121 -- Runtime Function: short fract __satfracthaqq (short accum A)
2122 -- Runtime Function: fract __satfracthahq (short accum A)
2123 -- Runtime Function: long fract __satfracthasq (short accum A)
2124 -- Runtime Function: long long fract __satfracthadq (short accum A)
2125 -- Runtime Function: accum __satfracthasa2 (short accum A)
2126 -- Runtime Function: long accum __satfracthada2 (short accum A)
2127 -- Runtime Function: long long accum __satfracthata2 (short accum A)
2128 -- Runtime Function: unsigned short fract __satfracthauqq (short accum
2130 -- Runtime Function: unsigned fract __satfracthauhq (short accum A)
2131 -- Runtime Function: unsigned long fract __satfracthausq (short accum
2133 -- Runtime Function: unsigned long long fract __satfracthaudq (short
2135 -- Runtime Function: unsigned short accum __satfracthauha (short accum
2137 -- Runtime Function: unsigned accum __satfracthausa (short accum A)
2138 -- Runtime Function: unsigned long accum __satfracthauda (short accum
2140 -- Runtime Function: unsigned long long accum __satfracthauta (short
2142 -- Runtime Function: short fract __satfractsaqq (accum A)
2143 -- Runtime Function: fract __satfractsahq (accum A)
2144 -- Runtime Function: long fract __satfractsasq (accum A)
2145 -- Runtime Function: long long fract __satfractsadq (accum A)
2146 -- Runtime Function: short accum __satfractsaha2 (accum A)
2147 -- Runtime Function: long accum __satfractsada2 (accum A)
2148 -- Runtime Function: long long accum __satfractsata2 (accum A)
2149 -- Runtime Function: unsigned short fract __satfractsauqq (accum A)
2150 -- Runtime Function: unsigned fract __satfractsauhq (accum A)
2151 -- Runtime Function: unsigned long fract __satfractsausq (accum A)
2152 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A)
2153 -- Runtime Function: unsigned short accum __satfractsauha (accum A)
2154 -- Runtime Function: unsigned accum __satfractsausa (accum A)
2155 -- Runtime Function: unsigned long accum __satfractsauda (accum A)
2156 -- Runtime Function: unsigned long long accum __satfractsauta (accum A)
2157 -- Runtime Function: short fract __satfractdaqq (long accum A)
2158 -- Runtime Function: fract __satfractdahq (long accum A)
2159 -- Runtime Function: long fract __satfractdasq (long accum A)
2160 -- Runtime Function: long long fract __satfractdadq (long accum A)
2161 -- Runtime Function: short accum __satfractdaha2 (long accum A)
2162 -- Runtime Function: accum __satfractdasa2 (long accum A)
2163 -- Runtime Function: long long accum __satfractdata2 (long accum A)
2164 -- Runtime Function: unsigned short fract __satfractdauqq (long accum
2166 -- Runtime Function: unsigned fract __satfractdauhq (long accum A)
2167 -- Runtime Function: unsigned long fract __satfractdausq (long accum A)
2168 -- Runtime Function: unsigned long long fract __satfractdaudq (long
2170 -- Runtime Function: unsigned short accum __satfractdauha (long accum
2172 -- Runtime Function: unsigned accum __satfractdausa (long accum A)
2173 -- Runtime Function: unsigned long accum __satfractdauda (long accum A)
2174 -- Runtime Function: unsigned long long accum __satfractdauta (long
2176 -- Runtime Function: short fract __satfracttaqq (long long accum A)
2177 -- Runtime Function: fract __satfracttahq (long long accum A)
2178 -- Runtime Function: long fract __satfracttasq (long long accum A)
2179 -- Runtime Function: long long fract __satfracttadq (long long accum A)
2180 -- Runtime Function: short accum __satfracttaha2 (long long accum A)
2181 -- Runtime Function: accum __satfracttasa2 (long long accum A)
2182 -- Runtime Function: long accum __satfracttada2 (long long accum A)
2183 -- Runtime Function: unsigned short fract __satfracttauqq (long long
2185 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A)
2186 -- Runtime Function: unsigned long fract __satfracttausq (long long
2188 -- Runtime Function: unsigned long long fract __satfracttaudq (long
2190 -- Runtime Function: unsigned short accum __satfracttauha (long long
2192 -- Runtime Function: unsigned accum __satfracttausa (long long accum A)
2193 -- Runtime Function: unsigned long accum __satfracttauda (long long
2195 -- Runtime Function: unsigned long long accum __satfracttauta (long
2197 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract
2199 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A)
2200 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract
2202 -- Runtime Function: long long fract __satfractuqqdq (unsigned short
2204 -- Runtime Function: short accum __satfractuqqha (unsigned short fract
2206 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A)
2207 -- Runtime Function: long accum __satfractuqqda (unsigned short fract
2209 -- Runtime Function: long long accum __satfractuqqta (unsigned short
2211 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short
2213 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned
2215 -- Runtime Function: unsigned long long fract __satfractuqqudq2
2216 (unsigned short fract A)
2217 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned
2219 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short
2221 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned
2223 -- Runtime Function: unsigned long long accum __satfractuqquta
2224 (unsigned short fract A)
2225 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A)
2226 -- Runtime Function: fract __satfractuhqhq (unsigned fract A)
2227 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A)
2228 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A)
2229 -- Runtime Function: short accum __satfractuhqha (unsigned fract A)
2230 -- Runtime Function: accum __satfractuhqsa (unsigned fract A)
2231 -- Runtime Function: long accum __satfractuhqda (unsigned fract A)
2232 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A)
2233 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned
2235 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned
2237 -- Runtime Function: unsigned long long fract __satfractuhqudq2
2239 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned
2241 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A)
2242 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned
2244 -- Runtime Function: unsigned long long accum __satfractuhquta
2246 -- Runtime Function: short fract __satfractusqqq (unsigned long fract
2248 -- Runtime Function: fract __satfractusqhq (unsigned long fract A)
2249 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A)
2250 -- Runtime Function: long long fract __satfractusqdq (unsigned long
2252 -- Runtime Function: short accum __satfractusqha (unsigned long fract
2254 -- Runtime Function: accum __satfractusqsa (unsigned long fract A)
2255 -- Runtime Function: long accum __satfractusqda (unsigned long fract A)
2256 -- Runtime Function: long long accum __satfractusqta (unsigned long
2258 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned
2260 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long
2262 -- Runtime Function: unsigned long long fract __satfractusqudq2
2263 (unsigned long fract A)
2264 -- Runtime Function: unsigned short accum __satfractusquha (unsigned
2266 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long
2268 -- Runtime Function: unsigned long accum __satfractusquda (unsigned
2270 -- Runtime Function: unsigned long long accum __satfractusquta
2271 (unsigned long fract A)
2272 -- Runtime Function: short fract __satfractudqqq (unsigned long long
2274 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A)
2275 -- Runtime Function: long fract __satfractudqsq (unsigned long long
2277 -- Runtime Function: long long fract __satfractudqdq (unsigned long
2279 -- Runtime Function: short accum __satfractudqha (unsigned long long
2281 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A)
2282 -- Runtime Function: long accum __satfractudqda (unsigned long long
2284 -- Runtime Function: long long accum __satfractudqta (unsigned long
2286 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned
2288 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long
2290 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned
2292 -- Runtime Function: unsigned short accum __satfractudquha (unsigned
2294 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long
2296 -- Runtime Function: unsigned long accum __satfractudquda (unsigned
2298 -- Runtime Function: unsigned long long accum __satfractudquta
2299 (unsigned long long fract A)
2300 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum
2302 -- Runtime Function: fract __satfractuhahq (unsigned short accum A)
2303 -- Runtime Function: long fract __satfractuhasq (unsigned short accum
2305 -- Runtime Function: long long fract __satfractuhadq (unsigned short
2307 -- Runtime Function: short accum __satfractuhaha (unsigned short accum
2309 -- Runtime Function: accum __satfractuhasa (unsigned short accum A)
2310 -- Runtime Function: long accum __satfractuhada (unsigned short accum
2312 -- Runtime Function: long long accum __satfractuhata (unsigned short
2314 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned
2316 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short
2318 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned
2320 -- Runtime Function: unsigned long long fract __satfractuhaudq
2321 (unsigned short accum A)
2322 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short
2324 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned
2326 -- Runtime Function: unsigned long long accum __satfractuhauta2
2327 (unsigned short accum A)
2328 -- Runtime Function: short fract __satfractusaqq (unsigned accum A)
2329 -- Runtime Function: fract __satfractusahq (unsigned accum A)
2330 -- Runtime Function: long fract __satfractusasq (unsigned accum A)
2331 -- Runtime Function: long long fract __satfractusadq (unsigned accum A)
2332 -- Runtime Function: short accum __satfractusaha (unsigned accum A)
2333 -- Runtime Function: accum __satfractusasa (unsigned accum A)
2334 -- Runtime Function: long accum __satfractusada (unsigned accum A)
2335 -- Runtime Function: long long accum __satfractusata (unsigned accum A)
2336 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned
2338 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A)
2339 -- Runtime Function: unsigned long fract __satfractusausq (unsigned
2341 -- Runtime Function: unsigned long long fract __satfractusaudq
2343 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned
2345 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned
2347 -- Runtime Function: unsigned long long accum __satfractusauta2
2349 -- Runtime Function: short fract __satfractudaqq (unsigned long accum
2351 -- Runtime Function: fract __satfractudahq (unsigned long accum A)
2352 -- Runtime Function: long fract __satfractudasq (unsigned long accum A)
2353 -- Runtime Function: long long fract __satfractudadq (unsigned long
2355 -- Runtime Function: short accum __satfractudaha (unsigned long accum
2357 -- Runtime Function: accum __satfractudasa (unsigned long accum A)
2358 -- Runtime Function: long accum __satfractudada (unsigned long accum A)
2359 -- Runtime Function: long long accum __satfractudata (unsigned long
2361 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned
2363 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long
2365 -- Runtime Function: unsigned long fract __satfractudausq (unsigned
2367 -- Runtime Function: unsigned long long fract __satfractudaudq
2368 (unsigned long accum A)
2369 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned
2371 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long
2373 -- Runtime Function: unsigned long long accum __satfractudauta2
2374 (unsigned long accum A)
2375 -- Runtime Function: short fract __satfractutaqq (unsigned long long
2377 -- Runtime Function: fract __satfractutahq (unsigned long long accum A)
2378 -- Runtime Function: long fract __satfractutasq (unsigned long long
2380 -- Runtime Function: long long fract __satfractutadq (unsigned long
2382 -- Runtime Function: short accum __satfractutaha (unsigned long long
2384 -- Runtime Function: accum __satfractutasa (unsigned long long accum A)
2385 -- Runtime Function: long accum __satfractutada (unsigned long long
2387 -- Runtime Function: long long accum __satfractutata (unsigned long
2389 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned
2391 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long
2393 -- Runtime Function: unsigned long fract __satfractutausq (unsigned
2395 -- Runtime Function: unsigned long long fract __satfractutaudq
2396 (unsigned long long accum A)
2397 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned
2399 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long
2401 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned
2403 -- Runtime Function: short fract __satfractqiqq (signed char A)
2404 -- Runtime Function: fract __satfractqihq (signed char A)
2405 -- Runtime Function: long fract __satfractqisq (signed char A)
2406 -- Runtime Function: long long fract __satfractqidq (signed char A)
2407 -- Runtime Function: short accum __satfractqiha (signed char A)
2408 -- Runtime Function: accum __satfractqisa (signed char A)
2409 -- Runtime Function: long accum __satfractqida (signed char A)
2410 -- Runtime Function: long long accum __satfractqita (signed char A)
2411 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char
2413 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A)
2414 -- Runtime Function: unsigned long fract __satfractqiusq (signed char
2416 -- Runtime Function: unsigned long long fract __satfractqiudq (signed
2418 -- Runtime Function: unsigned short accum __satfractqiuha (signed char
2420 -- Runtime Function: unsigned accum __satfractqiusa (signed char A)
2421 -- Runtime Function: unsigned long accum __satfractqiuda (signed char
2423 -- Runtime Function: unsigned long long accum __satfractqiuta (signed
2425 -- Runtime Function: short fract __satfracthiqq (short A)
2426 -- Runtime Function: fract __satfracthihq (short A)
2427 -- Runtime Function: long fract __satfracthisq (short A)
2428 -- Runtime Function: long long fract __satfracthidq (short A)
2429 -- Runtime Function: short accum __satfracthiha (short A)
2430 -- Runtime Function: accum __satfracthisa (short A)
2431 -- Runtime Function: long accum __satfracthida (short A)
2432 -- Runtime Function: long long accum __satfracthita (short A)
2433 -- Runtime Function: unsigned short fract __satfracthiuqq (short A)
2434 -- Runtime Function: unsigned fract __satfracthiuhq (short A)
2435 -- Runtime Function: unsigned long fract __satfracthiusq (short A)
2436 -- Runtime Function: unsigned long long fract __satfracthiudq (short A)
2437 -- Runtime Function: unsigned short accum __satfracthiuha (short A)
2438 -- Runtime Function: unsigned accum __satfracthiusa (short A)
2439 -- Runtime Function: unsigned long accum __satfracthiuda (short A)
2440 -- Runtime Function: unsigned long long accum __satfracthiuta (short A)
2441 -- Runtime Function: short fract __satfractsiqq (int A)
2442 -- Runtime Function: fract __satfractsihq (int A)
2443 -- Runtime Function: long fract __satfractsisq (int A)
2444 -- Runtime Function: long long fract __satfractsidq (int A)
2445 -- Runtime Function: short accum __satfractsiha (int A)
2446 -- Runtime Function: accum __satfractsisa (int A)
2447 -- Runtime Function: long accum __satfractsida (int A)
2448 -- Runtime Function: long long accum __satfractsita (int A)
2449 -- Runtime Function: unsigned short fract __satfractsiuqq (int A)
2450 -- Runtime Function: unsigned fract __satfractsiuhq (int A)
2451 -- Runtime Function: unsigned long fract __satfractsiusq (int A)
2452 -- Runtime Function: unsigned long long fract __satfractsiudq (int A)
2453 -- Runtime Function: unsigned short accum __satfractsiuha (int A)
2454 -- Runtime Function: unsigned accum __satfractsiusa (int A)
2455 -- Runtime Function: unsigned long accum __satfractsiuda (int A)
2456 -- Runtime Function: unsigned long long accum __satfractsiuta (int A)
2457 -- Runtime Function: short fract __satfractdiqq (long A)
2458 -- Runtime Function: fract __satfractdihq (long A)
2459 -- Runtime Function: long fract __satfractdisq (long A)
2460 -- Runtime Function: long long fract __satfractdidq (long A)
2461 -- Runtime Function: short accum __satfractdiha (long A)
2462 -- Runtime Function: accum __satfractdisa (long A)
2463 -- Runtime Function: long accum __satfractdida (long A)
2464 -- Runtime Function: long long accum __satfractdita (long A)
2465 -- Runtime Function: unsigned short fract __satfractdiuqq (long A)
2466 -- Runtime Function: unsigned fract __satfractdiuhq (long A)
2467 -- Runtime Function: unsigned long fract __satfractdiusq (long A)
2468 -- Runtime Function: unsigned long long fract __satfractdiudq (long A)
2469 -- Runtime Function: unsigned short accum __satfractdiuha (long A)
2470 -- Runtime Function: unsigned accum __satfractdiusa (long A)
2471 -- Runtime Function: unsigned long accum __satfractdiuda (long A)
2472 -- Runtime Function: unsigned long long accum __satfractdiuta (long A)
2473 -- Runtime Function: short fract __satfracttiqq (long long A)
2474 -- Runtime Function: fract __satfracttihq (long long A)
2475 -- Runtime Function: long fract __satfracttisq (long long A)
2476 -- Runtime Function: long long fract __satfracttidq (long long A)
2477 -- Runtime Function: short accum __satfracttiha (long long A)
2478 -- Runtime Function: accum __satfracttisa (long long A)
2479 -- Runtime Function: long accum __satfracttida (long long A)
2480 -- Runtime Function: long long accum __satfracttita (long long A)
2481 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A)
2482 -- Runtime Function: unsigned fract __satfracttiuhq (long long A)
2483 -- Runtime Function: unsigned long fract __satfracttiusq (long long A)
2484 -- Runtime Function: unsigned long long fract __satfracttiudq (long
2486 -- Runtime Function: unsigned short accum __satfracttiuha (long long A)
2487 -- Runtime Function: unsigned accum __satfracttiusa (long long A)
2488 -- Runtime Function: unsigned long accum __satfracttiuda (long long A)
2489 -- Runtime Function: unsigned long long accum __satfracttiuta (long
2491 -- Runtime Function: short fract __satfractsfqq (float A)
2492 -- Runtime Function: fract __satfractsfhq (float A)
2493 -- Runtime Function: long fract __satfractsfsq (float A)
2494 -- Runtime Function: long long fract __satfractsfdq (float A)
2495 -- Runtime Function: short accum __satfractsfha (float A)
2496 -- Runtime Function: accum __satfractsfsa (float A)
2497 -- Runtime Function: long accum __satfractsfda (float A)
2498 -- Runtime Function: long long accum __satfractsfta (float A)
2499 -- Runtime Function: unsigned short fract __satfractsfuqq (float A)
2500 -- Runtime Function: unsigned fract __satfractsfuhq (float A)
2501 -- Runtime Function: unsigned long fract __satfractsfusq (float A)
2502 -- Runtime Function: unsigned long long fract __satfractsfudq (float A)
2503 -- Runtime Function: unsigned short accum __satfractsfuha (float A)
2504 -- Runtime Function: unsigned accum __satfractsfusa (float A)
2505 -- Runtime Function: unsigned long accum __satfractsfuda (float A)
2506 -- Runtime Function: unsigned long long accum __satfractsfuta (float A)
2507 -- Runtime Function: short fract __satfractdfqq (double A)
2508 -- Runtime Function: fract __satfractdfhq (double A)
2509 -- Runtime Function: long fract __satfractdfsq (double A)
2510 -- Runtime Function: long long fract __satfractdfdq (double A)
2511 -- Runtime Function: short accum __satfractdfha (double A)
2512 -- Runtime Function: accum __satfractdfsa (double A)
2513 -- Runtime Function: long accum __satfractdfda (double A)
2514 -- Runtime Function: long long accum __satfractdfta (double A)
2515 -- Runtime Function: unsigned short fract __satfractdfuqq (double A)
2516 -- Runtime Function: unsigned fract __satfractdfuhq (double A)
2517 -- Runtime Function: unsigned long fract __satfractdfusq (double A)
2518 -- Runtime Function: unsigned long long fract __satfractdfudq (double
2520 -- Runtime Function: unsigned short accum __satfractdfuha (double A)
2521 -- Runtime Function: unsigned accum __satfractdfusa (double A)
2522 -- Runtime Function: unsigned long accum __satfractdfuda (double A)
2523 -- Runtime Function: unsigned long long accum __satfractdfuta (double
2525 The functions convert from fractional and signed non-fractionals to
2526 fractionals, with saturation.
2528 -- Runtime Function: unsigned char __fractunsqqqi (short fract A)
2529 -- Runtime Function: unsigned short __fractunsqqhi (short fract A)
2530 -- Runtime Function: unsigned int __fractunsqqsi (short fract A)
2531 -- Runtime Function: unsigned long __fractunsqqdi (short fract A)
2532 -- Runtime Function: unsigned long long __fractunsqqti (short fract A)
2533 -- Runtime Function: unsigned char __fractunshqqi (fract A)
2534 -- Runtime Function: unsigned short __fractunshqhi (fract A)
2535 -- Runtime Function: unsigned int __fractunshqsi (fract A)
2536 -- Runtime Function: unsigned long __fractunshqdi (fract A)
2537 -- Runtime Function: unsigned long long __fractunshqti (fract A)
2538 -- Runtime Function: unsigned char __fractunssqqi (long fract A)
2539 -- Runtime Function: unsigned short __fractunssqhi (long fract A)
2540 -- Runtime Function: unsigned int __fractunssqsi (long fract A)
2541 -- Runtime Function: unsigned long __fractunssqdi (long fract A)
2542 -- Runtime Function: unsigned long long __fractunssqti (long fract A)
2543 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A)
2544 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A)
2545 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A)
2546 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A)
2547 -- Runtime Function: unsigned long long __fractunsdqti (long long
2549 -- Runtime Function: unsigned char __fractunshaqi (short accum A)
2550 -- Runtime Function: unsigned short __fractunshahi (short accum A)
2551 -- Runtime Function: unsigned int __fractunshasi (short accum A)
2552 -- Runtime Function: unsigned long __fractunshadi (short accum A)
2553 -- Runtime Function: unsigned long long __fractunshati (short accum A)
2554 -- Runtime Function: unsigned char __fractunssaqi (accum A)
2555 -- Runtime Function: unsigned short __fractunssahi (accum A)
2556 -- Runtime Function: unsigned int __fractunssasi (accum A)
2557 -- Runtime Function: unsigned long __fractunssadi (accum A)
2558 -- Runtime Function: unsigned long long __fractunssati (accum A)
2559 -- Runtime Function: unsigned char __fractunsdaqi (long accum A)
2560 -- Runtime Function: unsigned short __fractunsdahi (long accum A)
2561 -- Runtime Function: unsigned int __fractunsdasi (long accum A)
2562 -- Runtime Function: unsigned long __fractunsdadi (long accum A)
2563 -- Runtime Function: unsigned long long __fractunsdati (long accum A)
2564 -- Runtime Function: unsigned char __fractunstaqi (long long accum A)
2565 -- Runtime Function: unsigned short __fractunstahi (long long accum A)
2566 -- Runtime Function: unsigned int __fractunstasi (long long accum A)
2567 -- Runtime Function: unsigned long __fractunstadi (long long accum A)
2568 -- Runtime Function: unsigned long long __fractunstati (long long
2570 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short
2572 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short
2574 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short
2576 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short
2578 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned
2580 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A)
2581 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A)
2582 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A)
2583 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A)
2584 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned
2586 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long
2588 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long
2590 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract
2592 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long
2594 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long
2596 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long
2598 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long
2600 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long
2602 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long
2604 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long
2606 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short
2608 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short
2610 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short
2612 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short
2614 -- Runtime Function: unsigned long long __fractunsuhati (unsigned
2616 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A)
2617 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A)
2618 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A)
2619 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A)
2620 -- Runtime Function: unsigned long long __fractunsusati (unsigned
2622 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long
2624 -- Runtime Function: unsigned short __fractunsudahi (unsigned long
2626 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum
2628 -- Runtime Function: unsigned long __fractunsudadi (unsigned long
2630 -- Runtime Function: unsigned long long __fractunsudati (unsigned long
2632 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long
2634 -- Runtime Function: unsigned short __fractunsutahi (unsigned long
2636 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long
2638 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long
2640 -- Runtime Function: unsigned long long __fractunsutati (unsigned long
2642 -- Runtime Function: short fract __fractunsqiqq (unsigned char A)
2643 -- Runtime Function: fract __fractunsqihq (unsigned char A)
2644 -- Runtime Function: long fract __fractunsqisq (unsigned char A)
2645 -- Runtime Function: long long fract __fractunsqidq (unsigned char A)
2646 -- Runtime Function: short accum __fractunsqiha (unsigned char A)
2647 -- Runtime Function: accum __fractunsqisa (unsigned char A)
2648 -- Runtime Function: long accum __fractunsqida (unsigned char A)
2649 -- Runtime Function: long long accum __fractunsqita (unsigned char A)
2650 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned
2652 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A)
2653 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned
2655 -- Runtime Function: unsigned long long fract __fractunsqiudq
2657 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned
2659 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A)
2660 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned
2662 -- Runtime Function: unsigned long long accum __fractunsqiuta
2664 -- Runtime Function: short fract __fractunshiqq (unsigned short A)
2665 -- Runtime Function: fract __fractunshihq (unsigned short A)
2666 -- Runtime Function: long fract __fractunshisq (unsigned short A)
2667 -- Runtime Function: long long fract __fractunshidq (unsigned short A)
2668 -- Runtime Function: short accum __fractunshiha (unsigned short A)
2669 -- Runtime Function: accum __fractunshisa (unsigned short A)
2670 -- Runtime Function: long accum __fractunshida (unsigned short A)
2671 -- Runtime Function: long long accum __fractunshita (unsigned short A)
2672 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned
2674 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A)
2675 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned
2677 -- Runtime Function: unsigned long long fract __fractunshiudq
2679 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned
2681 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A)
2682 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned
2684 -- Runtime Function: unsigned long long accum __fractunshiuta
2686 -- Runtime Function: short fract __fractunssiqq (unsigned int A)
2687 -- Runtime Function: fract __fractunssihq (unsigned int A)
2688 -- Runtime Function: long fract __fractunssisq (unsigned int A)
2689 -- Runtime Function: long long fract __fractunssidq (unsigned int A)
2690 -- Runtime Function: short accum __fractunssiha (unsigned int A)
2691 -- Runtime Function: accum __fractunssisa (unsigned int A)
2692 -- Runtime Function: long accum __fractunssida (unsigned int A)
2693 -- Runtime Function: long long accum __fractunssita (unsigned int A)
2694 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned
2696 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A)
2697 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int
2699 -- Runtime Function: unsigned long long fract __fractunssiudq
2701 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned
2703 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A)
2704 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int
2706 -- Runtime Function: unsigned long long accum __fractunssiuta
2708 -- Runtime Function: short fract __fractunsdiqq (unsigned long A)
2709 -- Runtime Function: fract __fractunsdihq (unsigned long A)
2710 -- Runtime Function: long fract __fractunsdisq (unsigned long A)
2711 -- Runtime Function: long long fract __fractunsdidq (unsigned long A)
2712 -- Runtime Function: short accum __fractunsdiha (unsigned long A)
2713 -- Runtime Function: accum __fractunsdisa (unsigned long A)
2714 -- Runtime Function: long accum __fractunsdida (unsigned long A)
2715 -- Runtime Function: long long accum __fractunsdita (unsigned long A)
2716 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned
2718 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A)
2719 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned
2721 -- Runtime Function: unsigned long long fract __fractunsdiudq
2723 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned
2725 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A)
2726 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned
2728 -- Runtime Function: unsigned long long accum __fractunsdiuta
2730 -- Runtime Function: short fract __fractunstiqq (unsigned long long A)
2731 -- Runtime Function: fract __fractunstihq (unsigned long long A)
2732 -- Runtime Function: long fract __fractunstisq (unsigned long long A)
2733 -- Runtime Function: long long fract __fractunstidq (unsigned long
2735 -- Runtime Function: short accum __fractunstiha (unsigned long long A)
2736 -- Runtime Function: accum __fractunstisa (unsigned long long A)
2737 -- Runtime Function: long accum __fractunstida (unsigned long long A)
2738 -- Runtime Function: long long accum __fractunstita (unsigned long
2740 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned
2742 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long
2744 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned
2746 -- Runtime Function: unsigned long long fract __fractunstiudq
2747 (unsigned long long A)
2748 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned
2750 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long
2752 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned
2754 -- Runtime Function: unsigned long long accum __fractunstiuta
2755 (unsigned long long A)
2756 These functions convert from fractionals to unsigned
2757 non-fractionals; and from unsigned non-fractionals to fractionals,
2760 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A)
2761 -- Runtime Function: fract __satfractunsqihq (unsigned char A)
2762 -- Runtime Function: long fract __satfractunsqisq (unsigned char A)
2763 -- Runtime Function: long long fract __satfractunsqidq (unsigned char
2765 -- Runtime Function: short accum __satfractunsqiha (unsigned char A)
2766 -- Runtime Function: accum __satfractunsqisa (unsigned char A)
2767 -- Runtime Function: long accum __satfractunsqida (unsigned char A)
2768 -- Runtime Function: long long accum __satfractunsqita (unsigned char
2770 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned
2772 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char
2774 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned
2776 -- Runtime Function: unsigned long long fract __satfractunsqiudq
2778 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned
2780 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char
2782 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned
2784 -- Runtime Function: unsigned long long accum __satfractunsqiuta
2786 -- Runtime Function: short fract __satfractunshiqq (unsigned short A)
2787 -- Runtime Function: fract __satfractunshihq (unsigned short A)
2788 -- Runtime Function: long fract __satfractunshisq (unsigned short A)
2789 -- Runtime Function: long long fract __satfractunshidq (unsigned short
2791 -- Runtime Function: short accum __satfractunshiha (unsigned short A)
2792 -- Runtime Function: accum __satfractunshisa (unsigned short A)
2793 -- Runtime Function: long accum __satfractunshida (unsigned short A)
2794 -- Runtime Function: long long accum __satfractunshita (unsigned short
2796 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned
2798 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short
2800 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned
2802 -- Runtime Function: unsigned long long fract __satfractunshiudq
2804 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned
2806 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short
2808 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned
2810 -- Runtime Function: unsigned long long accum __satfractunshiuta
2812 -- Runtime Function: short fract __satfractunssiqq (unsigned int A)
2813 -- Runtime Function: fract __satfractunssihq (unsigned int A)
2814 -- Runtime Function: long fract __satfractunssisq (unsigned int A)
2815 -- Runtime Function: long long fract __satfractunssidq (unsigned int A)
2816 -- Runtime Function: short accum __satfractunssiha (unsigned int A)
2817 -- Runtime Function: accum __satfractunssisa (unsigned int A)
2818 -- Runtime Function: long accum __satfractunssida (unsigned int A)
2819 -- Runtime Function: long long accum __satfractunssita (unsigned int A)
2820 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned
2822 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A)
2823 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned
2825 -- Runtime Function: unsigned long long fract __satfractunssiudq
2827 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned
2829 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A)
2830 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned
2832 -- Runtime Function: unsigned long long accum __satfractunssiuta
2834 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A)
2835 -- Runtime Function: fract __satfractunsdihq (unsigned long A)
2836 -- Runtime Function: long fract __satfractunsdisq (unsigned long A)
2837 -- Runtime Function: long long fract __satfractunsdidq (unsigned long
2839 -- Runtime Function: short accum __satfractunsdiha (unsigned long A)
2840 -- Runtime Function: accum __satfractunsdisa (unsigned long A)
2841 -- Runtime Function: long accum __satfractunsdida (unsigned long A)
2842 -- Runtime Function: long long accum __satfractunsdita (unsigned long
2844 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned
2846 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long
2848 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned
2850 -- Runtime Function: unsigned long long fract __satfractunsdiudq
2852 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned
2854 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long
2856 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned
2858 -- Runtime Function: unsigned long long accum __satfractunsdiuta
2860 -- Runtime Function: short fract __satfractunstiqq (unsigned long long
2862 -- Runtime Function: fract __satfractunstihq (unsigned long long A)
2863 -- Runtime Function: long fract __satfractunstisq (unsigned long long
2865 -- Runtime Function: long long fract __satfractunstidq (unsigned long
2867 -- Runtime Function: short accum __satfractunstiha (unsigned long long
2869 -- Runtime Function: accum __satfractunstisa (unsigned long long A)
2870 -- Runtime Function: long accum __satfractunstida (unsigned long long
2872 -- Runtime Function: long long accum __satfractunstita (unsigned long
2874 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned
2876 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long
2878 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned
2880 -- Runtime Function: unsigned long long fract __satfractunstiudq
2881 (unsigned long long A)
2882 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned
2884 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long
2886 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned
2888 -- Runtime Function: unsigned long long accum __satfractunstiuta
2889 (unsigned long long A)
2890 These functions convert from unsigned non-fractionals to
2891 fractionals, with saturation.
2894 File: gccint.info, Node: Exception handling routines, Next: Miscellaneous routines, Prev: Fixed-point fractional library routines, Up: Libgcc
2896 4.5 Language-independent routines for exception handling
2897 ========================================================
2901 _Unwind_DeleteException
2903 _Unwind_ForcedUnwind
2906 _Unwind_GetLanguageSpecificData
2907 _Unwind_GetRegionStart
2908 _Unwind_GetTextRelBase
2909 _Unwind_GetDataRelBase
2910 _Unwind_RaiseException
2914 _Unwind_FindEnclosingFunction
2915 _Unwind_SjLj_Register
2916 _Unwind_SjLj_Unregister
2917 _Unwind_SjLj_RaiseException
2918 _Unwind_SjLj_ForcedUnwind
2921 __deregister_frame_info
2922 __deregister_frame_info_bases
2924 __register_frame_info
2925 __register_frame_info_bases
2926 __register_frame_info_table
2927 __register_frame_info_table_bases
2928 __register_frame_table
2931 File: gccint.info, Node: Miscellaneous routines, Prev: Exception handling routines, Up: Libgcc
2933 4.6 Miscellaneous runtime library routines
2934 ==========================================
2936 4.6.1 Cache control functions
2937 -----------------------------
2939 -- Runtime Function: void __clear_cache (char *BEG, char *END)
2940 This function clears the instruction cache between BEG and END.
2943 File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top
2945 5 Language Front Ends in GCC
2946 ****************************
2948 The interface to front ends for languages in GCC, and in particular the
2949 `tree' structure (*note GENERIC::), was initially designed for C, and
2950 many aspects of it are still somewhat biased towards C and C-like
2951 languages. It is, however, reasonably well suited to other procedural
2952 languages, and front ends for many such languages have been written for
2955 Writing a compiler as a front end for GCC, rather than compiling
2956 directly to assembler or generating C code which is then compiled by
2957 GCC, has several advantages:
2959 * GCC front ends benefit from the support for many different target
2960 machines already present in GCC.
2962 * GCC front ends benefit from all the optimizations in GCC. Some of
2963 these, such as alias analysis, may work better when GCC is
2964 compiling directly from source code then when it is compiling from
2967 * Better debugging information is generated when compiling directly
2968 from source code than when going via intermediate generated C code.
2970 Because of the advantages of writing a compiler as a GCC front end,
2971 GCC front ends have also been created for languages very different from
2972 those for which GCC was designed, such as the declarative
2973 logic/functional language Mercury. For these reasons, it may also be
2974 useful to implement compilers created for specialized purposes (for
2975 example, as part of a research project) as GCC front ends.
2978 File: gccint.info, Node: Source Tree, Next: Testsuites, Prev: Languages, Up: Top
2980 6 Source Tree Structure and Build System
2981 ****************************************
2983 This chapter describes the structure of the GCC source tree, and how
2984 GCC is built. The user documentation for building and installing GCC
2985 is in a separate manual (`http://gcc.gnu.org/install/'), with which it
2986 is presumed that you are familiar.
2990 * Configure Terms:: Configuration terminology and history.
2991 * Top Level:: The top level source directory.
2992 * gcc Directory:: The `gcc' subdirectory.
2995 File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree
2997 6.1 Configure Terms and History
2998 ===============================
3000 The configure and build process has a long and colorful history, and can
3001 be confusing to anyone who doesn't know why things are the way they are.
3002 While there are other documents which describe the configuration process
3003 in detail, here are a few things that everyone working on GCC should
3006 There are three system names that the build knows about: the machine
3007 you are building on ("build"), the machine that you are building for
3008 ("host"), and the machine that GCC will produce code for ("target").
3009 When you configure GCC, you specify these with `--build=', `--host=',
3012 Specifying the host without specifying the build should be avoided, as
3013 `configure' may (and once did) assume that the host you specify is also
3014 the build, which may not be true.
3016 If build, host, and target are all the same, this is called a
3017 "native". If build and host are the same but target is different, this
3018 is called a "cross". If build, host, and target are all different this
3019 is called a "canadian" (for obscure reasons dealing with Canada's
3020 political party and the background of the person working on the build
3021 at that time). If host and target are the same, but build is
3022 different, you are using a cross-compiler to build a native for a
3023 different system. Some people call this a "host-x-host", "crossed
3024 native", or "cross-built native". If build and target are the same,
3025 but host is different, you are using a cross compiler to build a cross
3026 compiler that produces code for the machine you're building on. This
3027 is rare, so there is no common way of describing it. There is a
3028 proposal to call this a "crossback".
3030 If build and host are the same, the GCC you are building will also be
3031 used to build the target libraries (like `libstdc++'). If build and
3032 host are different, you must have already built and installed a cross
3033 compiler that will be used to build the target libraries (if you
3034 configured with `--target=foo-bar', this compiler will be called
3037 In the case of target libraries, the machine you're building for is the
3038 machine you specified with `--target'. So, build is the machine you're
3039 building on (no change there), host is the machine you're building for
3040 (the target libraries are built for the target, so host is the target
3041 you specified), and target doesn't apply (because you're not building a
3042 compiler, you're building libraries). The configure/make process will
3043 adjust these variables as needed. It also sets `$with_cross_host' to
3044 the original `--host' value in case you need it.
3046 The `libiberty' support library is built up to three times: once for
3047 the host, once for the target (even if they are the same), and once for
3048 the build if build and host are different. This allows it to be used
3049 by all programs which are generated in the course of the build process.
3052 File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree
3054 6.2 Top Level Source Directory
3055 ==============================
3057 The top level source directory in a GCC distribution contains several
3058 files and directories that are shared with other software distributions
3059 such as that of GNU Binutils. It also contains several subdirectories
3060 that contain parts of GCC and its runtime libraries:
3063 The Boehm conservative garbage collector, used as part of the Java
3067 Autoconf macros and Makefile fragments used throughout the tree.
3070 Contributed scripts that may be found useful in conjunction with
3071 GCC. One of these, `contrib/texi2pod.pl', is used to generate man
3072 pages from Texinfo manuals as part of the GCC build process.
3075 The support for fixing system headers to work with GCC. See
3076 `fixincludes/README' for more information. The headers fixed by
3077 this mechanism are installed in `LIBSUBDIR/include-fixed'. Along
3078 with those headers, `README-fixinc' is also installed, as
3079 `LIBSUBDIR/include-fixed/README'.
3082 The main sources of GCC itself (except for runtime libraries),
3083 including optimizers, support for different target architectures,
3084 language front ends, and testsuites. *Note The `gcc'
3085 Subdirectory: gcc Directory, for details.
3088 Support tools for GNAT.
3091 Headers for the `libiberty' library.
3094 GNU `libintl', from GNU `gettext', for systems which do not
3095 include it in `libc'.
3098 The Ada runtime library.
3101 The C preprocessor library.
3104 The Decimal Float support library.
3107 The `libffi' library, used as part of the Java runtime library.
3110 The GCC runtime library.
3113 The Fortran runtime library.
3116 The GNU OpenMP runtime library.
3119 The `libiberty' library, used for portability and for some
3120 generally useful data structures and algorithms. *Note
3121 Introduction: (libiberty)Top, for more information about this
3125 The Java runtime library.
3128 The `libmudflap' library, used for instrumenting pointer and array
3129 dereferencing operations.
3132 The Objective-C and Objective-C++ runtime library.
3135 The Stack protector runtime library.
3138 The C++ runtime library.
3141 Plugin used by `gold' if link-time optimizations are enabled.
3143 `maintainer-scripts'
3144 Scripts used by the `gccadmin' account on `gcc.gnu.org'.
3147 The `zlib' compression library, used by the Java front end, as
3148 part of the Java runtime library, and for compressing and
3149 uncompressing GCC's intermediate language in LTO object files.
3151 The build system in the top level directory, including how recursion
3152 into subdirectories works and how building runtime libraries for
3153 multilibs is handled, is documented in a separate manual, included with
3154 GNU Binutils. *Note GNU configure and build system: (configure)Top,
3158 File: gccint.info, Node: gcc Directory, Prev: Top Level, Up: Source Tree
3160 6.3 The `gcc' Subdirectory
3161 ==========================
3163 The `gcc' directory contains many files that are part of the C sources
3164 of GCC, other files used as part of the configuration and build
3165 process, and subdirectories including documentation and a testsuite.
3166 The files that are sources of GCC are documented in a separate chapter.
3167 *Note Passes and Files of the Compiler: Passes.
3171 * Subdirectories:: Subdirectories of `gcc'.
3172 * Configuration:: The configuration process, and the files it uses.
3173 * Build:: The build system in the `gcc' directory.
3174 * Makefile:: Targets in `gcc/Makefile'.
3175 * Library Files:: Library source files and headers under `gcc/'.
3176 * Headers:: Headers installed by GCC.
3177 * Documentation:: Building documentation in GCC.
3178 * Front End:: Anatomy of a language front end.
3179 * Back End:: Anatomy of a target back end.
3182 File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory
3184 6.3.1 Subdirectories of `gcc'
3185 -----------------------------
3187 The `gcc' directory contains the following subdirectories:
3190 Subdirectories for various languages. Directories containing a
3191 file `config-lang.in' are language subdirectories. The contents of
3192 the subdirectories `cp' (for C++), `lto' (for LTO), `objc' (for
3193 Objective-C) and `objcp' (for Objective-C++) are documented in
3194 this manual (*note Passes and Files of the Compiler: Passes.);
3195 those for other languages are not. *Note Anatomy of a Language
3196 Front End: Front End, for details of the files in these
3200 Configuration files for supported architectures and operating
3201 systems. *Note Anatomy of a Target Back End: Back End, for
3202 details of the files in this directory.
3205 Texinfo documentation for GCC, together with automatically
3206 generated man pages and support for converting the installation
3207 manual to HTML. *Note Documentation::.
3210 System headers installed by GCC, mainly those required by the C
3211 standard of freestanding implementations. *Note Headers Installed
3212 by GCC: Headers, for details of when these and other headers are
3216 Message catalogs with translations of messages produced by GCC into
3217 various languages, `LANGUAGE.po'. This directory also contains
3218 `gcc.pot', the template for these message catalogues, `exgettext',
3219 a wrapper around `gettext' to extract the messages from the GCC
3220 sources and create `gcc.pot', which is run by `make gcc.pot', and
3221 `EXCLUDES', a list of files from which messages should not be
3225 The GCC testsuites (except for those for runtime libraries).
3229 File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory
3231 6.3.2 Configuration in the `gcc' Directory
3232 ------------------------------------------
3234 The `gcc' directory is configured with an Autoconf-generated script
3235 `configure'. The `configure' script is generated from `configure.ac'
3236 and `aclocal.m4'. From the files `configure.ac' and `acconfig.h',
3237 Autoheader generates the file `config.in'. The file `cstamp-h.in' is
3238 used as a timestamp.
3242 * Config Fragments:: Scripts used by `configure'.
3243 * System Config:: The `config.build', `config.host', and
3245 * Configuration Files:: Files created by running `configure'.
3248 File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration
3250 6.3.2.1 Scripts Used by `configure'
3251 ...................................
3253 `configure' uses some other scripts to help in its work:
3255 * The standard GNU `config.sub' and `config.guess' files, kept in
3256 the top level directory, are used.
3258 * The file `config.gcc' is used to handle configuration specific to
3259 the particular target machine. The file `config.build' is used to
3260 handle configuration specific to the particular build machine.
3261 The file `config.host' is used to handle configuration specific to
3262 the particular host machine. (In general, these should only be
3263 used for features that cannot reasonably be tested in Autoconf
3264 feature tests.) *Note The `config.build'; `config.host'; and
3265 `config.gcc' Files: System Config, for details of the contents of
3268 * Each language subdirectory has a file `LANGUAGE/config-lang.in'
3269 that is used for front-end-specific configuration. *Note The
3270 Front End `config-lang.in' File: Front End Config, for details of
3273 * A helper script `configure.frag' is used as part of creating the
3274 output of `configure'.
3277 File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration
3279 6.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files
3280 .................................................................
3282 The `config.build' file contains specific rules for particular systems
3283 which GCC is built on. This should be used as rarely as possible, as
3284 the behavior of the build system can always be detected by autoconf.
3286 The `config.host' file contains specific rules for particular systems
3287 which GCC will run on. This is rarely needed.
3289 The `config.gcc' file contains specific rules for particular systems
3290 which GCC will generate code for. This is usually needed.
3292 Each file has a list of the shell variables it sets, with
3293 descriptions, at the top of the file.
3295 FIXME: document the contents of these files, and what variables should
3296 be set to control build, host and target configuration.
3299 File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration
3301 6.3.2.3 Files Created by `configure'
3302 ....................................
3304 Here we spell out what files will be set up by `configure' in the `gcc'
3305 directory. Some other files are created as temporary files in the
3306 configuration process, and are not used in the subsequent build; these
3309 * `Makefile' is constructed from `Makefile.in', together with the
3310 host and target fragments (*note Makefile Fragments: Fragments.)
3311 `t-TARGET' and `x-HOST' from `config', if any, and language
3312 Makefile fragments `LANGUAGE/Make-lang.in'.
3314 * `auto-host.h' contains information about the host machine
3315 determined by `configure'. If the host machine is different from
3316 the build machine, then `auto-build.h' is also created, containing
3317 such information about the build machine.
3319 * `config.status' is a script that may be run to recreate the
3320 current configuration.
3322 * `configargs.h' is a header containing details of the arguments
3323 passed to `configure' to configure GCC, and of the thread model
3326 * `cstamp-h' is used as a timestamp.
3328 * `gccbug', a script for reporting bugs in GCC, is constructed from
3331 * If a language `config-lang.in' file (*note The Front End
3332 `config-lang.in' File: Front End Config.) sets `outputs', then the
3333 files listed in `outputs' there are also generated.
3335 The following configuration headers are created from the Makefile,
3336 using `mkconfig.sh', rather than directly by `configure'. `config.h',
3337 `bconfig.h' and `tconfig.h' all contain the `xm-MACHINE.h' header, if
3338 any, appropriate to the host, build and target machines respectively,
3339 the configuration headers for the target, and some definitions; for the
3340 host and build machines, these include the autoconfigured headers
3341 generated by `configure'. The other configuration headers are
3342 determined by `config.gcc'. They also contain the typedefs for `rtx',
3345 * `config.h', for use in programs that run on the host machine.
3347 * `bconfig.h', for use in programs that run on the build machine.
3349 * `tconfig.h', for use in programs and libraries for the target
3352 * `tm_p.h', which includes the header `MACHINE-protos.h' that
3353 contains prototypes for functions in the target `.c' file. FIXME:
3354 why is such a separate header necessary?
3357 File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory
3359 6.3.3 Build System in the `gcc' Directory
3360 -----------------------------------------
3362 FIXME: describe the build system, including what is built in what
3363 stages. Also list the various source files that are used in the build
3364 process but aren't source files of GCC itself and so aren't documented
3365 below (*note Passes::).
3368 File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory
3370 6.3.4 Makefile Targets
3371 ----------------------
3373 These targets are available from the `gcc' directory:
3376 This is the default target. Depending on what your
3377 build/host/target configuration is, it coordinates all the things
3378 that need to be built.
3381 Produce info-formatted documentation and man pages. Essentially it
3382 calls `make man' and `make info'.
3385 Produce DVI-formatted documentation.
3388 Produce PDF-formatted documentation.
3391 Produce HTML-formatted documentation.
3397 Generate info-formatted pages.
3400 Delete the files made while building the compiler.
3403 That, and all the other files built by `make all'.
3406 That, and all the files created by `configure'.
3409 Distclean plus any file that can be generated from other files.
3410 Note that additional tools may be required beyond what is normally
3411 needed to build GCC.
3414 Generates files in the source directory that are not
3415 version-controlled but should go into a release tarball.
3419 Copies the info-formatted and manpage documentation into the source
3420 directory usually for the purpose of generating a release tarball.
3426 Deletes installed files, though this is not supported.
3429 Run the testsuite. This creates a `testsuite' subdirectory that
3430 has various `.sum' and `.log' files containing the results of the
3431 testing. You can run subsets with, for example, `make check-gcc'.
3432 You can specify specific tests by setting `RUNTESTFLAGS' to be the
3433 name of the `.exp' file, optionally followed by (for some tests)
3434 an equals and a file wildcard, like:
3436 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
3438 Note that running the testsuite may require additional tools be
3439 installed, such as Tcl or DejaGnu.
3441 The toplevel tree from which you start GCC compilation is not the GCC
3442 directory, but rather a complex Makefile that coordinates the various
3443 steps of the build, including bootstrapping the compiler and using the
3444 new compiler to build target libraries.
3446 When GCC is configured for a native configuration, the default action
3447 for `make' is to do a full three-stage bootstrap. This means that GCC
3448 is built three times--once with the native compiler, once with the
3449 native-built compiler it just built, and once with the compiler it
3450 built the second time. In theory, the last two should produce the same
3451 results, which `make compare' can check. Each stage is configured
3452 separately and compiled into a separate directory, to minimize problems
3453 due to ABI incompatibilities between the native compiler and GCC.
3455 If you do a change, rebuilding will also start from the first stage
3456 and "bubble" up the change through the three stages. Each stage is
3457 taken from its build directory (if it had been built previously),
3458 rebuilt, and copied to its subdirectory. This will allow you to, for
3459 example, continue a bootstrap after fixing a bug which causes the
3460 stage2 build to crash. It does not provide as good coverage of the
3461 compiler as bootstrapping from scratch, but it ensures that the new
3462 code is syntactically correct (e.g., that you did not use GCC extensions
3463 by mistake), and avoids spurious bootstrap comparison failures(1).
3465 Other targets available from the top level include:
3468 Like `bootstrap', except that the various stages are removed once
3469 they're no longer needed. This saves disk space.
3473 Performs only the first two stages of bootstrap. Unlike a
3474 three-stage bootstrap, this does not perform a comparison to test
3475 that the compiler is running properly. Note that the disk space
3476 required by a "lean" bootstrap is approximately independent of the
3479 `stageN-bubble (N = 1...4)'
3480 Rebuild all the stages up to N, with the appropriate flags,
3481 "bubbling" the changes as described above.
3483 `all-stageN (N = 1...4)'
3484 Assuming that stage N has already been built, rebuild it with the
3485 appropriate flags. This is rarely needed.
3488 Remove everything (`make clean') and rebuilds (`make bootstrap').
3491 Compares the results of stages 2 and 3. This ensures that the
3492 compiler is running properly, since it should produce the same
3493 object files regardless of how it itself was compiled.
3496 Builds a compiler with profiling feedback information. For more
3497 information, see *Note Building with profile feedback:
3498 (gccinstall)Building.
3501 Restart a bootstrap, so that everything that was not built with
3502 the system compiler is rebuilt.
3504 `stageN-start (N = 1...4)'
3505 For each package that is bootstrapped, rename directories so that,
3506 for example, `gcc' points to the stageN GCC, compiled with the
3509 You will invoke this target if you need to test or debug the
3510 stageN GCC. If you only need to execute GCC (but you need not run
3511 `make' either to rebuild it or to run test suites), you should be
3512 able to work directly in the `stageN-gcc' directory. This makes
3513 it easier to debug multiple stages in parallel.
3516 For each package that is bootstrapped, relocate its build directory
3517 to indicate its stage. For example, if the `gcc' directory points
3518 to the stage2 GCC, after invoking this target it will be renamed
3522 If you wish to use non-default GCC flags when compiling the stage2 and
3523 stage3 compilers, set `BOOT_CFLAGS' on the command line when doing
3526 Usually, the first stage only builds the languages that the compiler
3527 is written in: typically, C and maybe Ada. If you are debugging a
3528 miscompilation of a different stage2 front-end (for example, of the
3529 Fortran front-end), you may want to have front-ends for other languages
3530 in the first stage as well. To do so, set `STAGE1_LANGUAGES' on the
3531 command line when doing `make'.
3533 For example, in the aforementioned scenario of debugging a Fortran
3534 front-end miscompilation caused by the stage1 compiler, you may need a
3537 make stage2-bubble STAGE1_LANGUAGES=c,fortran
3539 Alternatively, you can use per-language targets to build and test
3540 languages that are not enabled by default in stage1. For example,
3541 `make f951' will build a Fortran compiler even in the stage1 build
3544 ---------- Footnotes ----------
3546 (1) Except if the compiler was buggy and miscompiled some of the files
3547 that were not modified. In this case, it's best to use `make restrap'.
3549 (2) Customarily, the system compiler is also termed the `stage0' GCC.
3552 File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory
3554 6.3.5 Library Source Files and Headers under the `gcc' Directory
3555 ----------------------------------------------------------------
3557 FIXME: list here, with explanation, all the C source files and headers
3558 under the `gcc' directory that aren't built into the GCC executable but
3559 rather are part of runtime libraries and object files, such as
3560 `crtstuff.c' and `unwind-dw2.c'. *Note Headers Installed by GCC:
3561 Headers, for more information about the `ginclude' directory.
3564 File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory
3566 6.3.6 Headers Installed by GCC
3567 ------------------------------
3569 In general, GCC expects the system C library to provide most of the
3570 headers to be used with it. However, GCC will fix those headers if
3571 necessary to make them work with GCC, and will install some headers
3572 required of freestanding implementations. These headers are installed
3573 in `LIBSUBDIR/include'. Headers for non-C runtime libraries are also
3574 installed by GCC; these are not documented here. (FIXME: document them
3577 Several of the headers GCC installs are in the `ginclude' directory.
3578 These headers, `iso646.h', `stdarg.h', `stdbool.h', and `stddef.h', are
3579 installed in `LIBSUBDIR/include', unless the target Makefile fragment
3580 (*note Target Fragment::) overrides this by setting `USER_H'.
3582 In addition to these headers and those generated by fixing system
3583 headers to work with GCC, some other headers may also be installed in
3584 `LIBSUBDIR/include'. `config.gcc' may set `extra_headers'; this
3585 specifies additional headers under `config' to be installed on some
3588 GCC installs its own version of `<float.h>', from `ginclude/float.h'.
3589 This is done to cope with command-line options that change the
3590 representation of floating point numbers.
3592 GCC also installs its own version of `<limits.h>'; this is generated
3593 from `glimits.h', together with `limitx.h' and `limity.h' if the system
3594 also has its own version of `<limits.h>'. (GCC provides its own header
3595 because it is required of ISO C freestanding implementations, but needs
3596 to include the system header from its own header as well because other
3597 standards such as POSIX specify additional values to be defined in
3598 `<limits.h>'.) The system's `<limits.h>' header is used via
3599 `LIBSUBDIR/include/syslimits.h', which is copied from `gsyslimits.h' if
3600 it does not need fixing to work with GCC; if it needs fixing,
3601 `syslimits.h' is the fixed copy.
3603 GCC can also install `<tgmath.h>'. It will do this when `config.gcc'
3604 sets `use_gcc_tgmath' to `yes'.
3607 File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory
3609 6.3.7 Building Documentation
3610 ----------------------------
3612 The main GCC documentation is in the form of manuals in Texinfo format.
3613 These are installed in Info format; DVI versions may be generated by
3614 `make dvi', PDF versions by `make pdf', and HTML versions by `make
3615 html'. In addition, some man pages are generated from the Texinfo
3616 manuals, there are some other text files with miscellaneous
3617 documentation, and runtime libraries have their own documentation
3618 outside the `gcc' directory. FIXME: document the documentation for
3619 runtime libraries somewhere.
3623 * Texinfo Manuals:: GCC manuals in Texinfo format.
3624 * Man Page Generation:: Generating man pages from Texinfo manuals.
3625 * Miscellaneous Docs:: Miscellaneous text files with documentation.
3628 File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation
3630 6.3.7.1 Texinfo Manuals
3631 .......................
3633 The manuals for GCC as a whole, and the C and C++ front ends, are in
3634 files `doc/*.texi'. Other front ends have their own manuals in files
3635 `LANGUAGE/*.texi'. Common files `doc/include/*.texi' are provided
3636 which may be included in multiple manuals; the following files are in
3640 The GNU Free Documentation License.
3643 The section "Funding Free Software".
3646 Common definitions for manuals.
3650 The GNU General Public License.
3653 A copy of `texinfo.tex' known to work with the GCC manuals.
3655 DVI-formatted manuals are generated by `make dvi', which uses
3656 `texi2dvi' (via the Makefile macro `$(TEXI2DVI)'). PDF-formatted
3657 manuals are generated by `make pdf', which uses `texi2pdf' (via the
3658 Makefile macro `$(TEXI2PDF)'). HTML formatted manuals are generated by
3659 `make html'. Info manuals are generated by `make info' (which is run
3660 as part of a bootstrap); this generates the manuals in the source
3661 directory, using `makeinfo' via the Makefile macro `$(MAKEINFO)', and
3662 they are included in release distributions.
3664 Manuals are also provided on the GCC web site, in both HTML and
3665 PostScript forms. This is done via the script
3666 `maintainer-scripts/update_web_docs'. Each manual to be provided
3667 online must be listed in the definition of `MANUALS' in that file; a
3668 file `NAME.texi' must only appear once in the source tree, and the
3669 output manual must have the same name as the source file. (However,
3670 other Texinfo files, included in manuals but not themselves the root
3671 files of manuals, may have names that appear more than once in the
3672 source tree.) The manual file `NAME.texi' should only include other
3673 files in its own directory or in `doc/include'. HTML manuals will be
3674 generated by `makeinfo --html', PostScript manuals by `texi2dvi' and
3675 `dvips', and PDF manuals by `texi2pdf'. All Texinfo files that are
3676 parts of manuals must be version-controlled, even if they are generated
3677 files, for the generation of online manuals to work.
3679 The installation manual, `doc/install.texi', is also provided on the
3680 GCC web site. The HTML version is generated by the script
3681 `doc/install.texi2html'.
3684 File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation
3686 6.3.7.2 Man Page Generation
3687 ...........................
3689 Because of user demand, in addition to full Texinfo manuals, man pages
3690 are provided which contain extracts from those manuals. These man
3691 pages are generated from the Texinfo manuals using
3692 `contrib/texi2pod.pl' and `pod2man'. (The man page for `g++',
3693 `cp/g++.1', just contains a `.so' reference to `gcc.1', but all the
3694 other man pages are generated from Texinfo manuals.)
3696 Because many systems may not have the necessary tools installed to
3697 generate the man pages, they are only generated if the `configure'
3698 script detects that recent enough tools are installed, and the
3699 Makefiles allow generating man pages to fail without aborting the
3700 build. Man pages are also included in release distributions. They are
3701 generated in the source directory.
3703 Magic comments in Texinfo files starting `@c man' control what parts
3704 of a Texinfo file go into a man page. Only a subset of Texinfo is
3705 supported by `texi2pod.pl', and it may be necessary to add support for
3706 more Texinfo features to this script when generating new man pages. To
3707 improve the man page output, some special Texinfo macros are provided
3708 in `doc/include/gcc-common.texi' which `texi2pod.pl' understands:
3711 Use in the form `@table @gcctabopt' for tables of options, where
3712 for printed output the effect of `@code' is better than that of
3713 `@option' but for man page output a different effect is wanted.
3716 Use for summary lists of options in manuals.
3719 Use at the end of each line inside `@gccoptlist'. This is
3720 necessary to avoid problems with differences in how the
3721 `@gccoptlist' macro is handled by different Texinfo formatters.
3723 FIXME: describe the `texi2pod.pl' input language and magic comments in
3727 File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation
3729 6.3.7.3 Miscellaneous Documentation
3730 ...................................
3732 In addition to the formal documentation that is installed by GCC, there
3733 are several other text files in the `gcc' subdirectory with
3734 miscellaneous documentation:
3737 Notes on GCC's Native Language Support. FIXME: this should be
3738 part of this manual rather than a separate file.
3741 Notes on the Free Translation Project.
3745 The GNU General Public License, Versions 2 and 3.
3749 The GNU Lesser General Public License, Versions 2.1 and 3.
3753 Change log files for various parts of GCC.
3756 Details of a few changes to the GCC front-end interface. FIXME:
3757 the information in this file should be part of general
3758 documentation of the front-end interface in this manual.
3761 Information about new features in old versions of GCC. (For recent
3762 versions, the information is on the GCC web site.)
3764 `README.Portability'
3765 Information about portability issues when writing code in GCC.
3766 FIXME: why isn't this part of this manual or of the GCC Coding
3769 FIXME: document such files in subdirectories, at least `config', `cp',
3770 `objc', `testsuite'.
3773 File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory
3775 6.3.8 Anatomy of a Language Front End
3776 -------------------------------------
3778 A front end for a language in GCC has the following parts:
3780 * A directory `LANGUAGE' under `gcc' containing source files for
3781 that front end. *Note The Front End `LANGUAGE' Directory: Front
3782 End Directory, for details.
3784 * A mention of the language in the list of supported languages in
3785 `gcc/doc/install.texi'.
3787 * A mention of the name under which the language's runtime library is
3788 recognized by `--enable-shared=PACKAGE' in the documentation of
3789 that option in `gcc/doc/install.texi'.
3791 * A mention of any special prerequisites for building the front end
3792 in the documentation of prerequisites in `gcc/doc/install.texi'.
3794 * Details of contributors to that front end in
3795 `gcc/doc/contrib.texi'. If the details are in that front end's
3796 own manual then there should be a link to that manual's list in
3799 * Information about support for that language in
3800 `gcc/doc/frontends.texi'.
3802 * Information about standards for that language, and the front end's
3803 support for them, in `gcc/doc/standards.texi'. This may be a link
3804 to such information in the front end's own manual.
3806 * Details of source file suffixes for that language and `-x LANG'
3807 options supported, in `gcc/doc/invoke.texi'.
3809 * Entries in `default_compilers' in `gcc.c' for source file suffixes
3812 * Preferably testsuites, which may be under `gcc/testsuite' or
3813 runtime library directories. FIXME: document somewhere how to
3814 write testsuite harnesses.
3816 * Probably a runtime library for the language, outside the `gcc'
3817 directory. FIXME: document this further.
3819 * Details of the directories of any runtime libraries in
3820 `gcc/doc/sourcebuild.texi'.
3822 * Check targets in `Makefile.def' for the top-level `Makefile' to
3823 check just the compiler or the compiler and runtime library for the
3826 If the front end is added to the official GCC source repository, the
3827 following are also necessary:
3829 * At least one Bugzilla component for bugs in that front end and
3830 runtime libraries. This category needs to be mentioned in
3831 `gcc/gccbug.in', as well as being added to the Bugzilla database.
3833 * Normally, one or more maintainers of that front end listed in
3836 * Mentions on the GCC web site in `index.html' and `frontends.html',
3837 with any relevant links on `readings.html'. (Front ends that are
3838 not an official part of GCC may also be listed on
3839 `frontends.html', with relevant links.)
3841 * A news item on `index.html', and possibly an announcement on the
3842 <gcc-announce@gcc.gnu.org> mailing list.
3844 * The front end's manuals should be mentioned in
3845 `maintainer-scripts/update_web_docs' (*note Texinfo Manuals::) and
3846 the online manuals should be linked to from
3847 `onlinedocs/index.html'.
3849 * Any old releases or CVS repositories of the front end, before its
3850 inclusion in GCC, should be made available on the GCC FTP site
3851 `ftp://gcc.gnu.org/pub/gcc/old-releases/'.
3853 * The release and snapshot script `maintainer-scripts/gcc_release'
3854 should be updated to generate appropriate tarballs for this front
3855 end. The associated `maintainer-scripts/snapshot-README' and
3856 `maintainer-scripts/snapshot-index.html' files should be updated
3857 to list the tarballs and diffs for this front end.
3859 * If this front end includes its own version files that include the
3860 current date, `maintainer-scripts/update_version' should be
3861 updated accordingly.
3865 * Front End Directory:: The front end `LANGUAGE' directory.
3866 * Front End Config:: The front end `config-lang.in' file.
3867 * Front End Makefile:: The front end `Make-lang.in' file.
3870 File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End
3872 6.3.8.1 The Front End `LANGUAGE' Directory
3873 ..........................................
3875 A front end `LANGUAGE' directory contains the source files of that
3876 front end (but not of any runtime libraries, which should be outside
3877 the `gcc' directory). This includes documentation, and possibly some
3878 subsidiary programs built alongside the front end. Certain files are
3879 special and other parts of the compiler depend on their names:
3882 This file is required in all language subdirectories. *Note The
3883 Front End `config-lang.in' File: Front End Config, for details of
3887 This file is required in all language subdirectories. *Note The
3888 Front End `Make-lang.in' File: Front End Makefile, for details of
3892 This file registers the set of switches that the front end accepts
3893 on the command line, and their `--help' text. *Note Options::.
3896 This file provides entries for `default_compilers' in `gcc.c'
3897 which override the default of giving an error that a compiler for
3898 that language is not installed.
3901 This file, which need not exist, defines any language-specific tree
3905 File: gccint.info, Node: Front End Config, Next: Front End Makefile, Prev: Front End Directory, Up: Front End
3907 6.3.8.2 The Front End `config-lang.in' File
3908 ...........................................
3910 Each language subdirectory contains a `config-lang.in' file. In
3911 addition the main directory contains `c-config-lang.in', which contains
3912 limited information for the C language. This file is a shell script
3913 that may define some variables describing the language:
3916 This definition must be present, and gives the name of the language
3917 for some purposes such as arguments to `--enable-languages'.
3920 If defined, this variable lists (space-separated) language front
3921 ends other than C that this front end requires to be enabled (with
3922 the names given being their `language' settings). For example, the
3923 Java front end depends on the C++ front end, so sets
3924 `lang_requires=c++'.
3927 If defined, this variable lists (space-separated) front end
3928 directories other than C that this front end requires to be
3929 present. For example, the Objective-C++ front end uses source
3930 files from the C++ and Objective-C front ends, so sets
3931 `subdir_requires="cp objc"'.
3934 If defined, this variable lists (space-separated) targets in the
3935 top level `Makefile' to build the runtime libraries for this
3936 language, such as `target-libobjc'.
3939 If defined, this variable lists (space-separated) top level
3940 directories (parallel to `gcc'), apart from the runtime libraries,
3941 that should not be configured if this front end is not built.
3944 If defined to `no', this language front end is not built unless
3945 enabled in a `--enable-languages' argument. Otherwise, front ends
3946 are built by default, subject to any special logic in
3947 `configure.ac' (as is present to disable the Ada front end if the
3948 Ada compiler is not already installed).
3951 If defined to `yes', this front end is built in stage1 of the
3952 bootstrap. This is only relevant to front ends written in their
3956 If defined, a space-separated list of compiler executables that
3957 will be run by the driver. The names here will each end with
3961 If defined, a space-separated list of files that should be
3962 generated by `configure' substituting values in them. This
3963 mechanism can be used to create a file `LANGUAGE/Makefile' from
3964 `LANGUAGE/Makefile.in', but this is deprecated, building
3965 everything from the single `gcc/Makefile' is preferred.
3968 If defined, a space-separated list of files that should be scanned
3969 by `gengtype.c' to generate the garbage collection tables and
3970 routines for this language. This excludes the files that are
3971 common to all front ends. *Note Type Information::.
3975 File: gccint.info, Node: Front End Makefile, Prev: Front End Config, Up: Front End
3977 6.3.8.3 The Front End `Make-lang.in' File
3978 .........................................
3980 Each language subdirectory contains a `Make-lang.in' file. It contains
3981 targets `LANG.HOOK' (where `LANG' is the setting of `language' in
3982 `config-lang.in') for the following values of `HOOK', and any other
3983 Makefile rules required to build those targets (which may if necessary
3984 use other Makefiles specified in `outputs' in `config-lang.in',
3985 although this is deprecated). It also adds any testsuite targets that
3986 can use the standard rule in `gcc/Makefile.in' to the variable
3992 FIXME: exactly what goes in each of these targets?
3995 Build an `etags' `TAGS' file in the language subdirectory in the
3999 Build info documentation for the front end, in the build directory.
4000 This target is only called by `make bootstrap' if a suitable
4001 version of `makeinfo' is available, so does not need to check for
4002 this, and should fail if an error occurs.
4005 Build DVI documentation for the front end, in the build directory.
4006 This should be done using `$(TEXI2DVI)', with appropriate `-I'
4007 arguments pointing to directories of included files.
4010 Build PDF documentation for the front end, in the build directory.
4011 This should be done using `$(TEXI2PDF)', with appropriate `-I'
4012 arguments pointing to directories of included files.
4015 Build HTML documentation for the front end, in the build directory.
4018 Build generated man pages for the front end from Texinfo manuals
4019 (*note Man Page Generation::), in the build directory. This target
4020 is only called if the necessary tools are available, but should
4021 ignore errors so as not to stop the build if errors occur; man
4022 pages are optional and the tools involved may be installed in a
4026 Install everything that is part of the front end, apart from the
4027 compiler executables listed in `compilers' in `config-lang.in'.
4030 Install info documentation for the front end, if it is present in
4031 the source directory. This target should have dependencies on
4032 info files that should be installed.
4035 Install man pages for the front end. This target should ignore
4039 Install headers needed for plugins.
4042 Copies its dependencies into the source directory. This generally
4043 should be used for generated files such as Bison output files
4044 which are not version-controlled, but should be included in any
4045 release tarballs. This target will be executed during a bootstrap
4046 if `--enable-generated-files-in-srcdir' was specified as a
4051 Copies its dependencies into the source directory. These targets
4052 will be executed during a bootstrap if
4053 `--enable-generated-files-in-srcdir' was specified as a
4057 Uninstall files installed by installing the compiler. This is
4058 currently documented not to be supported, so the hook need not do
4065 The language parts of the standard GNU `*clean' targets. *Note
4066 Standard Targets for Users: (standards)Standard Targets, for
4067 details of the standard targets. For GCC, `maintainer-clean'
4068 should delete all generated files in the source directory that are
4069 not version-controlled, but should not delete anything that is.
4071 `Make-lang.in' must also define a variable `LANG_OBJS' to a list of
4072 host object files that are used by that language.
4075 File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory
4077 6.3.9 Anatomy of a Target Back End
4078 ----------------------------------
4080 A back end for a target architecture in GCC has the following parts:
4082 * A directory `MACHINE' under `gcc/config', containing a machine
4083 description `MACHINE.md' file (*note Machine Descriptions: Machine
4084 Desc.), header files `MACHINE.h' and `MACHINE-protos.h' and a
4085 source file `MACHINE.c' (*note Target Description Macros and
4086 Functions: Target Macros.), possibly a target Makefile fragment
4087 `t-MACHINE' (*note The Target Makefile Fragment: Target
4088 Fragment.), and maybe some other files. The names of these files
4089 may be changed from the defaults given by explicit specifications
4092 * If necessary, a file `MACHINE-modes.def' in the `MACHINE'
4093 directory, containing additional machine modes to represent
4094 condition codes. *Note Condition Code::, for further details.
4096 * An optional `MACHINE.opt' file in the `MACHINE' directory,
4097 containing a list of target-specific options. You can also add
4098 other option files using the `extra_options' variable in
4099 `config.gcc'. *Note Options::.
4101 * Entries in `config.gcc' (*note The `config.gcc' File: System
4102 Config.) for the systems with this target architecture.
4104 * Documentation in `gcc/doc/invoke.texi' for any command-line
4105 options supported by this target (*note Run-time Target
4106 Specification: Run-time Target.). This means both entries in the
4107 summary table of options and details of the individual options.
4109 * Documentation in `gcc/doc/extend.texi' for any target-specific
4110 attributes supported (*note Defining target-specific uses of
4111 `__attribute__': Target Attributes.), including where the same
4112 attribute is already supported on some targets, which are
4113 enumerated in the manual.
4115 * Documentation in `gcc/doc/extend.texi' for any target-specific
4118 * Documentation in `gcc/doc/extend.texi' of any target-specific
4119 built-in functions supported.
4121 * Documentation in `gcc/doc/extend.texi' of any target-specific
4122 format checking styles supported.
4124 * Documentation in `gcc/doc/md.texi' of any target-specific
4125 constraint letters (*note Constraints for Particular Machines:
4126 Machine Constraints.).
4128 * A note in `gcc/doc/contrib.texi' under the person or people who
4129 contributed the target support.
4131 * Entries in `gcc/doc/install.texi' for all target triplets
4132 supported with this target architecture, giving details of any
4133 special notes about installation for this target, or saying that
4134 there are no special notes if there are none.
4136 * Possibly other support outside the `gcc' directory for runtime
4137 libraries. FIXME: reference docs for this. The `libstdc++'
4138 porting manual needs to be installed as info for this to work, or
4139 to be a chapter of this manual.
4141 If the back end is added to the official GCC source repository, the
4142 following are also necessary:
4144 * An entry for the target architecture in `readings.html' on the GCC
4145 web site, with any relevant links.
4147 * Details of the properties of the back end and target architecture
4148 in `backends.html' on the GCC web site.
4150 * A news item about the contribution of support for that target
4151 architecture, in `index.html' on the GCC web site.
4153 * Normally, one or more maintainers of that target listed in
4154 `MAINTAINERS'. Some existing architectures may be unmaintained,
4155 but it would be unusual to add support for a target that does not
4156 have a maintainer when support is added.
4159 File: gccint.info, Node: Testsuites, Next: Options, Prev: Source Tree, Up: Top
4164 GCC contains several testsuites to help maintain compiler quality.
4165 Most of the runtime libraries and language front ends in GCC have
4166 testsuites. Currently only the C language testsuites are documented
4167 here; FIXME: document the others.
4171 * Test Idioms:: Idioms used in testsuite code.
4172 * Test Directives:: Directives used within DejaGnu tests.
4173 * Ada Tests:: The Ada language testsuites.
4174 * C Tests:: The C language testsuites.
4175 * libgcj Tests:: The Java library testsuites.
4176 * LTO Testing:: Support for testing link-time optimizations.
4177 * gcov Testing:: Support for testing gcov.
4178 * profopt Testing:: Support for testing profile-directed optimizations.
4179 * compat Testing:: Support for testing binary compatibility.
4180 * Torture Tests:: Support for torture testing using multiple options.
4183 File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites
4185 7.1 Idioms Used in Testsuite Code
4186 =================================
4188 In general, C testcases have a trailing `-N.c', starting with `-1.c',
4189 in case other testcases with similar names are added later. If the
4190 test is a test of some well-defined feature, it should have a name
4191 referring to that feature such as `FEATURE-1.c'. If it does not test a
4192 well-defined feature but just happens to exercise a bug somewhere in
4193 the compiler, and a bug report has been filed for this bug in the GCC
4194 bug database, `prBUG-NUMBER-1.c' is the appropriate form of name.
4195 Otherwise (for miscellaneous bugs not filed in the GCC bug database),
4196 and previously more generally, test cases are named after the date on
4197 which they were added. This allows people to tell at a glance whether
4198 a test failure is because of a recently found bug that has not yet been
4199 fixed, or whether it may be a regression, but does not give any other
4200 information about the bug or where discussion of it may be found. Some
4201 other language testsuites follow similar conventions.
4203 In the `gcc.dg' testsuite, it is often necessary to test that an error
4204 is indeed a hard error and not just a warning--for example, where it is
4205 a constraint violation in the C standard, which must become an error
4206 with `-pedantic-errors'. The following idiom, where the first line
4207 shown is line LINE of the file and the line that generates the error,
4210 /* { dg-bogus "warning" "warning in place of error" } */
4211 /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */
4213 It may be necessary to check that an expression is an integer constant
4214 expression and has a certain value. To check that `E' has value `V',
4215 an idiom similar to the following is used:
4217 char x[((E) == (V) ? 1 : -1)];
4219 In `gcc.dg' tests, `__typeof__' is sometimes used to make assertions
4220 about the types of expressions. See, for example,
4221 `gcc.dg/c99-condexpr-1.c'. The more subtle uses depend on the exact
4222 rules for the types of conditional expressions in the C standard; see,
4223 for example, `gcc.dg/c99-intconst-1.c'.
4225 It is useful to be able to test that optimizations are being made
4226 properly. This cannot be done in all cases, but it can be done where
4227 the optimization will lead to code being optimized away (for example,
4228 where flow analysis or alias analysis should show that certain code
4229 cannot be called) or to functions not being called because they have
4230 been expanded as built-in functions. Such tests go in
4231 `gcc.c-torture/execute'. Where code should be optimized away, a call
4232 to a nonexistent function such as `link_failure ()' may be inserted; a
4235 #ifndef __OPTIMIZE__
4243 will also be needed so that linking still succeeds when the test is run
4244 without optimization. When all calls to a built-in function should
4245 have been optimized and no calls to the non-built-in version of the
4246 function should remain, that function may be defined as `static' to
4247 call `abort ()' (although redeclaring a function as static may not work
4250 All testcases must be portable. Target-specific testcases must have
4251 appropriate code to avoid causing failures on unsupported systems;
4252 unfortunately, the mechanisms for this differ by directory.
4254 FIXME: discuss non-C testsuites here.
4257 File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites
4259 7.2 Directives used within DejaGnu tests
4260 ========================================
4264 * Directives:: Syntax and descriptions of test directives.
4265 * Selectors:: Selecting targets to which a test applies.
4266 * Effective-Target Keywords:: Keywords describing target attributes.
4267 * Add Options:: Features for `dg-add-options'
4268 * Require Support:: Variants of `dg-require-SUPPORT'
4269 * Final Actions:: Commands for use in `dg-final'
4272 File: gccint.info, Node: Directives, Next: Selectors, Up: Test Directives
4274 7.2.1 Syntax and Descriptions of test directives
4275 ------------------------------------------------
4277 Test directives appear within comments in a test source file and begin
4278 with `dg-'. Some of these are defined within DejaGnu and others are
4279 local to the GCC testsuite.
4281 The order in which test directives appear in a test can be important:
4282 directives local to GCC sometimes override information used by the
4283 DejaGnu directives, which know nothing about the GCC directives, so the
4284 DejaGnu directives must precede GCC directives.
4286 Several test directives include selectors (*note Selectors::) which
4287 are usually preceded by the keyword `target' or `xfail'.
4289 7.2.1.1 Specify how to build the test
4290 .....................................
4292 `{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }'
4293 DO-WHAT-KEYWORD specifies how the test is compiled and whether it
4294 is executed. It is one of:
4297 Compile with `-E' to run only the preprocessor.
4300 Compile with `-S' to produce an assembly code file.
4303 Compile with `-c' to produce a relocatable object file.
4306 Compile, assemble, and link to produce an executable file.
4309 Produce and run an executable file, which is expected to
4310 return an exit code of 0.
4312 The default is `compile'. That can be overridden for a set of
4313 tests by redefining `dg-do-what-default' within the `.exp' file
4316 If the directive includes the optional `{ target SELECTOR }' then
4317 the test is skipped unless the target system matches the SELECTOR.
4319 If DO-WHAT-KEYWORD is `run' and the directive includes the
4320 optional `{ xfail SELECTOR }' and the selector is met then the
4321 test is expected to fail. The `xfail' clause is ignored for other
4322 values of DO-WHAT-KEYWORD; those tests can use directive
4325 7.2.1.2 Specify additional compiler options
4326 ...........................................
4328 `{ dg-options OPTIONS [{ target SELECTOR }] }'
4329 This DejaGnu directive provides a list of compiler options, to be
4330 used if the target system matches SELECTOR, that replace the
4331 default options used for this set of tests.
4333 `{ dg-add-options FEATURE ... }'
4334 Add any compiler options that are needed to access certain
4335 features. This directive does nothing on targets that enable the
4336 features by default, or that don't provide them at all. It must
4337 come after all `dg-options' directives. For supported values of
4338 FEATURE see *Note Add Options::.
4340 7.2.1.3 Modify the test timeout value
4341 .....................................
4343 The normal timeout limit, in seconds, is found by searching the
4346 * the value defined by an earlier `dg-timeout' directive in the test
4348 * variable TOOL_TIMEOUT defined by the set of tests
4350 * GCC,TIMEOUT set in the target board
4354 `{ dg-timeout N [{target SELECTOR }] }'
4355 Set the time limit for the compilation and for the execution of
4356 the test to the specified number of seconds.
4358 `{ dg-timeout-factor X [{ target SELECTOR }] }'
4359 Multiply the normal time limit for compilation and execution of
4360 the test by the specified floating-point factor.
4362 7.2.1.4 Skip a test for some targets
4363 ....................................
4365 `{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4366 Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each
4367 element is a string of zero or more GCC options. Skip the test if
4368 all of the following conditions are met:
4369 * the test system is included in SELECTOR
4371 * for at least one of the option strings in INCLUDE-OPTS, every
4372 option from that string is in the set of options with which
4373 the test would be compiled; use `"*"' for an INCLUDE-OPTS list
4374 that matches any options; that is the default if INCLUDE-OPTS
4377 * for each of the option strings in EXCLUDE-OPTS, at least one
4378 option from that string is not in the set of options with
4379 which the test would be compiled; use `""' for an empty
4380 EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not
4383 For example, to skip a test if option `-Os' is present:
4385 /* { dg-skip-if "" { *-*-* } { "-Os" } { "" } } */
4387 To skip a test if both options `-O2' and `-g' are present:
4389 /* { dg-skip-if "" { *-*-* } { "-O2 -g" } { "" } } */
4391 To skip a test if either `-O2' or `-O3' is present:
4393 /* { dg-skip-if "" { *-*-* } { "-O2" "-O3" } { "" } } */
4395 To skip a test unless option `-Os' is present:
4397 /* { dg-skip-if "" { *-*-* } { "*" } { "-Os" } } */
4399 To skip a test if either `-O2' or `-O3' is used with `-g' but not
4400 if `-fpic' is also present:
4402 /* { dg-skip-if "" { *-*-* } { "-O2 -g" "-O3 -g" } { "-fpic" } } */
4404 `{ dg-require-effective-target KEYWORD [{ SELECTOR }] }'
4405 Skip the test if the test target, including current multilib flags,
4406 is not covered by the effective-target keyword. If the directive
4407 includes the optional `{ SELECTOR }' then the effective-target
4408 test is only performed if the target system matches the SELECTOR.
4409 This directive must appear after any `dg-do' directive in the test
4410 and before any `dg-additional-sources' directive. *Note
4411 Effective-Target Keywords::.
4413 `{ dg-require-SUPPORT args }'
4414 Skip the test if the target does not provide the required support.
4415 These directives must appear after any `dg-do' directive in the
4416 test and before any `dg-additional-sources' directive. They
4417 require at least one argument, which can be an empty string if the
4418 specific procedure does not examine the argument. *Note Require
4419 Support::, for a complete list of these directives.
4421 7.2.1.5 Expect a test to fail for some targets
4422 ..............................................
4424 `{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4425 Expect the test to fail if the conditions (which are the same as
4426 for `dg-skip-if') are met. This does not affect the execute step.
4428 `{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }'
4429 Expect the execute step of a test to fail if the conditions (which
4430 are the same as for `dg-skip-if') are met.
4432 7.2.1.6 Expect the test executable to fail
4433 ..........................................
4435 `{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }'
4436 Expect the test executable to return a nonzero exit status if the
4437 conditions (which are the same as for `dg-skip-if') are met.
4439 7.2.1.7 Verify compiler messages
4440 ................................
4442 `{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4443 This DejaGnu directive appears on a source line that is expected
4444 to get an error message, or else specifies the source line
4445 associated with the message. If there is no message for that line
4446 or if the text of that message is not matched by REGEXP then the
4447 check fails and COMMENT is included in the `FAIL' message. The
4448 check does not look for the string `error' unless it is part of
4451 `{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4452 This DejaGnu directive appears on a source line that is expected
4453 to get a warning message, or else specifies the source line
4454 associated with the message. If there is no message for that line
4455 or if the text of that message is not matched by REGEXP then the
4456 check fails and COMMENT is included in the `FAIL' message. The
4457 check does not look for the string `warning' unless it is part of
4460 `{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4461 The line is expected to get a message other than an error or
4462 warning. If there is no message for that line or if the text of
4463 that message is not matched by REGEXP then the check fails and
4464 COMMENT is included in the `FAIL' message.
4466 `{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }'
4467 This DejaGnu directive appears on a source line that should not
4468 get a message matching REGEXP, or else specifies the source line
4469 associated with the bogus message. It is usually used with `xfail'
4470 to indicate that the message is a known problem for a particular
4473 `{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }'
4474 This DejaGnu directive indicates that the test is expected to fail
4475 due to compiler messages that are not handled by `dg-error',
4476 `dg-warning' or `dg-bogus'. For this directive `xfail' has the
4477 same effect as `target'.
4479 `{ dg-prune-output REGEXP }'
4480 Prune messages matching REGEXP from the test output.
4482 7.2.1.8 Verify output of the test executable
4483 ............................................
4485 `{ dg-output REGEXP [{ target/xfail SELECTOR }] }'
4486 This DejaGnu directive compares REGEXP to the combined output that
4487 the test executable writes to `stdout' and `stderr'.
4489 7.2.1.9 Specify additional files for a test
4490 ...........................................
4492 `{ dg-additional-files "FILELIST" }'
4493 Specify additional files, other than source files, that must be
4494 copied to the system where the compiler runs.
4496 `{ dg-additional-sources "FILELIST" }'
4497 Specify additional source files to appear in the compile line
4498 following the main test file.
4500 7.2.1.10 Add checks at the end of a test
4501 ........................................
4503 `{ dg-final { LOCAL-DIRECTIVE } }'
4504 This DejaGnu directive is placed within a comment anywhere in the
4505 source file and is processed after the test has been compiled and
4506 run. Multiple `dg-final' commands are processed in the order in
4507 which they appear in the source file. *Note Final Actions::, for
4508 a list of directives that can be used within `dg-final'.
4511 File: gccint.info, Node: Selectors, Next: Effective-Target Keywords, Prev: Directives, Up: Test Directives
4513 7.2.2 Selecting targets to which a test applies
4514 -----------------------------------------------
4516 Several test directives include SELECTORs to limit the targets for
4517 which a test is run or to declare that a test is expected to fail on
4521 * one or more target triplets, possibly including wildcard characters
4523 * a single effective-target keyword (*note Effective-Target
4526 * a logical expression
4528 Depending on the context, the selector specifies whether a test is
4529 skipped and reported as unsupported or is expected to fail. Use
4530 `*-*-*' to match any target.
4532 A selector expression appears within curly braces and uses a single
4533 logical operator: one of `!', `&&', or `||'. An operand is another
4534 selector expression, an effective-target keyword, a single target
4535 triplet, or a list of target triplets within quotes or curly braces.
4538 { target { ! "hppa*-*-* ia64*-*-*" } }
4539 { target { powerpc*-*-* && lp64 } }
4540 { xfail { lp64 || vect_no_align } }
4543 File: gccint.info, Node: Effective-Target Keywords, Next: Add Options, Prev: Selectors, Up: Test Directives
4545 7.2.3 Keywords describing target attributes
4546 -------------------------------------------
4548 Effective-target keywords identify sets of targets that support
4549 particular functionality. They are used to limit tests to be run only
4550 for particular targets, or to specify that particular sets of targets
4551 are expected to fail some tests.
4553 Effective-target keywords are defined in `lib/target-supports.exp' in
4554 the GCC testsuite, with the exception of those that are documented as
4555 being local to a particular test directory.
4557 The `effective target' takes into account all of the compiler options
4558 with which the test will be compiled, including the multilib options.
4559 By convention, keywords ending in `_nocache' can also include options
4560 specified for the particular test in an earlier `dg-options' or
4561 `dg-add-options' directive.
4563 7.2.3.1 Data type sizes
4564 .......................
4567 Target has 32-bit `int', `long', and pointers.
4570 Target has 32-bit `int', 64-bit `long' and pointers.
4573 Target has 32-bit `int' and `long', 64-bit `long long' and
4577 Target has 64-bit `double'.
4580 Target has `double' that is 64 bits or longer.
4583 Target has `int' that is at 32 bits or longer.
4586 Target has `int' that is 16 bits or shorter.
4589 Target supports `double' that is longer than `float'.
4592 Target supports `long double' that is longer than `double'.
4595 Target has pointers that are 32 bits or longer.
4598 Target supports array and structure sizes that are 32 bits or
4602 Target has `wchar_t' that is at least 4 bytes.
4604 7.2.3.2 Fortran-specific attributes
4605 ...................................
4607 `fortran_integer_16'
4608 Target supports Fortran `integer' that is 16 bytes or longer.
4611 Target supports Fortran `integer' kinds larger than `integer(8)'.
4613 `fortran_large_real'
4614 Target supports Fortran `real' kinds larger than `real(8)'.
4616 7.2.3.3 Vector-specific attributes
4617 ..................................
4620 Target supports vector conditional operations.
4623 Target supports hardware vectors of `double'.
4626 Target supports hardware vectors of `float'.
4629 Target supports hardware vectors of `int'.
4632 Target supports a vector widening multiplication of `short'
4633 operands into an `int' result, or supports promotion (unpacking)
4634 from `short' to `int' and a non-widening multiplication of `int'.
4637 Target supports hardware vectors of `long'.
4640 Target supports hardware vectors of `long long'.
4642 `vect_aligned_arrays'
4643 Target aligns arrays to vector alignment boundary.
4646 Target supports a vector misalign access.
4649 Target does not support a vector alignment mechanism.
4652 Target does not support a vector max instruction on `int'.
4655 Target does not support a vector add instruction on `int'.
4658 Target does not support vector bitwise instructions.
4661 Target supports `vector char' multiplication.
4664 Target supports `vector short' multiplication.
4667 Target supports `vector int' multiplication.
4669 `vect_extract_even_odd'
4670 Target supports vector even/odd element extraction.
4672 `vect_extract_even_odd_wide'
4673 Target supports vector even/odd element extraction of vectors with
4674 elements `SImode' or larger.
4677 Target supports vector interleaving.
4680 Target supports vector interleaving and extract even/odd.
4683 Target supports vector interleaving and extract even/odd for wide
4687 Target supports vector permutation.
4690 Target supports a hardware vector shift operation.
4692 `vect_widen_sum_hi_to_si'
4693 Target supports a vector widening summation of `short' operands
4694 into `int' results, or can promote (unpack) from `short' to `int'.
4696 `vect_widen_sum_qi_to_hi'
4697 Target supports a vector widening summation of `char' operands
4698 into `short' results, or can promote (unpack) from `char' to
4701 `vect_widen_sum_qi_to_si'
4702 Target supports a vector widening summation of `char' operands
4705 `vect_widen_mult_qi_to_hi'
4706 Target supports a vector widening multiplication of `char' operands
4707 into `short' results, or can promote (unpack) from `char' to
4708 `short' and perform non-widening multiplication of `short'.
4710 `vect_widen_mult_hi_to_si'
4711 Target supports a vector widening multiplication of `short'
4712 operands into `int' results, or can promote (unpack) from `short'
4713 to `int' and perform non-widening multiplication of `int'.
4716 Target supports a vector dot-product of `signed char'.
4719 Target supports a vector dot-product of `unsigned char'.
4722 Target supports a vector dot-product of `signed short'.
4725 Target supports a vector dot-product of `unsigned short'.
4728 Target supports a vector demotion (packing) of `short' to `char'
4729 and from `int' to `short' using modulo arithmetic.
4732 Target supports a vector promotion (unpacking) of `char' to `short'
4733 and from `char' to `int'.
4736 Target supports conversion from `signed int' to `float'.
4738 `vect_uintfloat_cvt'
4739 Target supports conversion from `unsigned int' to `float'.
4742 Target supports conversion from `float' to `signed int'.
4744 `vect_floatuint_cvt'
4745 Target supports conversion from `float' to `unsigned int'.
4747 7.2.3.4 Thread Local Storage attributes
4748 .......................................
4751 Target supports thread-local storage.
4754 Target supports native (rather than emulated) thread-local storage.
4757 Test system supports executing TLS executables.
4759 7.2.3.5 Decimal floating point attributes
4760 .........................................
4763 Targets supports compiling decimal floating point extension to C.
4766 Including the options used to compile this particular test, the
4767 target supports compiling decimal floating point extension to C.
4770 Test system can execute decimal floating point tests.
4773 Including the options used to compile this particular test, the
4774 test system can execute decimal floating point tests.
4777 Target generates decimal floating point instructions with current
4780 7.2.3.6 ARM-specific attributes
4781 ...............................
4784 ARM target generates 32-bit code.
4787 ARM target adheres to the ABI for the ARM Architecture.
4790 ARM target supports `-mfpu=vfp -mfloat-abi=hard'. Some multilibs
4791 may be incompatible with these options.
4794 ARM target supports `-mcpu=iwmmxt'. Some multilibs may be
4795 incompatible with this option.
4798 ARM target supports generating NEON instructions.
4801 Test system supports executing NEON instructions.
4804 ARM Target supports `-mfpu=neon -mfloat-abi=softfp'. Some
4805 multilibs may be incompatible with these options.
4808 ARM target generates Thumb-1 code for `-mthumb'.
4811 ARM target generates Thumb-2 code for `-mthumb'.
4814 ARM target supports `-mfpu=vfp -mfloat-abi=softfp'. Some
4815 multilibs may be incompatible with these options.
4817 7.2.3.7 MIPS-specific attributes
4818 ................................
4821 MIPS target supports 64-bit instructions.
4824 MIPS target does not produce MIPS16 code.
4827 MIPS target can generate MIPS16 code.
4830 MIPS target is a Loongson-2E or -2F target using an ABI that
4831 supports the Loongson vector modes.
4833 `mips_newabi_large_long_double'
4834 MIPS target supports `long double' larger than `double' when using
4838 MIPS target supports `-mpaired-single'.
4840 7.2.3.8 PowerPC-specific attributes
4841 ...................................
4844 Test system supports executing 64-bit instructions.
4847 PowerPC target supports AltiVec.
4849 `powerpc_altivec_ok'
4850 PowerPC target supports `-maltivec'.
4853 PowerPC target supports floating-point registers.
4855 `powerpc_hard_double'
4856 PowerPC target supports hardware double-precision floating-point.
4859 PowerPC target supports `-mcpu=cell'.
4862 PowerPC target supports PowerPC SPE.
4864 `powerpc_spe_nocache'
4865 Including the options used to compile this particular test, the
4866 PowerPC target supports PowerPC SPE.
4869 PowerPC target supports PowerPC SPU.
4872 SPU target has toolchain that supports automatic overlay
4876 PowerPC target supports `-mvsx'.
4878 `powerpc_405_nocache'
4879 Including the options used to compile this particular test, the
4880 PowerPC target supports PowerPC 405.
4883 PowerPC target supports executing AltiVec instructions.
4885 7.2.3.9 Other hardware attributes
4886 .................................
4889 Target supports compiling AVX instructions.
4892 Test system can execute AltiVec and Cell PPU instructions.
4895 Target uses a ColdFire FPU.
4898 Target supports FPU instructions.
4901 Target supports compiling `sse' instructions.
4904 Target supports the execution of `sse' instructions.
4907 Target supports compiling `sse2' instructions.
4910 Target supports the execution of `sse2' instructions.
4913 Target supports atomic operations on `char' and `short'.
4916 Target supports atomic operations on `int' and `long'.
4919 Test environment appears to run executables on a simulator that
4920 accepts only `EM_SPARC' executables and chokes on `EM_SPARC32PLUS'
4921 or `EM_SPARCV9' executables.
4923 `vect_cmdline_needed'
4924 Target requires a command line argument to enable a SIMD
4927 7.2.3.10 Environment attributes
4928 ...............................
4931 The language for the compiler under test is C.
4934 The language for the compiler under test is C++.
4937 Target provides a full C99 runtime.
4939 `correct_iso_cpp_string_wchar_protos'
4940 Target `string.h' and `wchar.h' headers provide C++ required
4941 overloads for `strchr' etc. functions.
4944 Target uses a dummy `wcsftime' function that always returns zero.
4947 Target can truncate a file from a file descriptor, as used by
4948 `libgfortran/io/unix.c:fd_truncate'; i.e. `ftruncate' or `chsize'.
4951 Target is `freestanding' as defined in section 4 of the C99
4952 standard. Effectively, it is a target which supports no extra
4953 headers or libraries other than what is considered essential.
4956 Target supports constructors with initialization priority
4960 Target has the basic signed and unsigned types in `inttypes.h'.
4961 This is for tests that GCC's notions of these types agree with
4962 those in the header, as some systems have only `inttypes.h'.
4965 Target might have errors of a few ULP in string to floating-point
4966 conversion functions and overflow is not always detected correctly
4970 Target supports Newlib.
4973 Target provides `pow10' function.
4976 Target can compile using `pthread.h' with no errors or warnings.
4979 Target has `pthread.h'.
4981 `run_expensive_tests'
4982 Expensive testcases (usually those that consume excessive amounts
4983 of CPU time) should be run on this target. This can be enabled by
4984 setting the `GCC_TEST_RUN_EXPENSIVE' environment variable to a
4988 Test system runs executables on a simulator (i.e. slowly) rather
4989 than hardware (i.e. fast).
4992 Target has the basic signed and unsigned C types in `stdint.h'.
4993 This will be obsolete when GCC ensures a working `stdint.h' for
4997 Target supports trampolines.
5000 Target supports uClibc.
5003 Target does not use a status wrapper.
5006 Target is a VxWorks kernel.
5009 Target is a VxWorks RTP.
5012 Target supports wide characters.
5014 7.2.3.11 Other attributes
5015 .........................
5017 `automatic_stack_alignment'
5018 Target supports automatic stack alignment.
5021 Target uses `__cxa_atexit'.
5024 Target has packed layout of structure members by default.
5027 Target supports Graphite optimizations.
5030 Target supports fixed-point extension to C.
5033 Target supports OpenMP via `-fopenmp'.
5036 Target supports `-fpic' and `-fPIC'.
5039 Target supports `-freorder-blocks-and-partition'.
5042 Target supports `-fstack-protector'.
5045 Target uses GNU `as'.
5048 Target supports `--gc-sections'.
5050 `keeps_null_pointer_checks'
5051 Target keeps null pointer checks, either due to the use of
5052 `-fno-delete-null-pointer-checks' or hardwired into the target.
5055 Compiler has been configured to support link-time optimization
5059 Target supports named sections.
5061 `natural_alignment_32'
5062 Target uses natural alignment (aligned to type size) for types of
5065 `target_natural_alignment_64'
5066 Target uses natural alignment (aligned to type size) for types of
5070 Target does not generate PIC by default.
5072 `pcc_bitfield_type_matters'
5073 Target defines `PCC_BITFIELD_TYPE_MATTERS'.
5075 `pe_aligned_commons'
5076 Target supports `-mpe-aligned-commons'.
5079 Target supports section anchors.
5082 Target defaults to short enums.
5085 Target supports `-static'.
5087 `static_libgfortran'
5088 Target supports statically linking `libgfortran'.
5091 Target supports merging string constants at link time.
5094 Target supports compiling and assembling UCN.
5097 Including the options used to compile this particular test, the
5098 target supports compiling and assembling UCN.
5101 Target does not guarantee that its `STACK_BOUNDARY' is greater than
5102 or equal to the required vector alignment.
5104 `vector_alignment_reachable'
5105 Vector alignment is reachable for types of 32 bits or less.
5107 `vector_alignment_reachable_for_64bit'
5108 Vector alignment is reachable for types of 64 bits or less.
5110 `wchar_t_char16_t_compatible'
5111 Target supports `wchar_t' that is compatible with `char16_t'.
5113 `wchar_t_char32_t_compatible'
5114 Target supports `wchar_t' that is compatible with `char32_t'.
5116 7.2.3.12 Local to tests in `gcc.target/i386'
5117 ............................................
5120 Target supports compiling `3dnow' instructions.
5123 Target supports compiling `aes' instructions.
5126 Target supports compiling `fma4' instructions.
5129 Target supports attribute `ms_hook_prologue'.
5132 Target supports compiling `pclmul' instructions.
5135 Target supports compiling `sse3' instructions.
5138 Target supports compiling `sse4' instructions.
5141 Target supports compiling `sse4a' instructions.
5144 Target supports compiling `ssse3' instructions.
5147 Target supports compiling `vaes' instructions.
5150 Target supports compiling `vpclmul' instructions.
5153 Target supports compiling `xop' instructions.
5155 7.2.3.13 Local to tests in `gcc.target/spu/ea'
5156 ..............................................
5159 Target `__ea' library functions are available.
5161 7.2.3.14 Local to tests in `gcc.test-framework'
5162 ...............................................
5171 File: gccint.info, Node: Add Options, Next: Require Support, Prev: Effective-Target Keywords, Up: Test Directives
5173 7.2.4 Features for `dg-add-options'
5174 -----------------------------------
5176 The supported values of FEATURE for directive `dg-add-options' are:
5179 Add the target-specific flags needed to enable functions to bind
5180 locally when using pic/PIC passes in the testsuite.
5183 Add the target-specific flags needed to access the C99 runtime.
5186 Add the target-specific flags needed to enable full IEEE
5190 `mips16' function attributes. Only MIPS targets support this
5191 feature, and only then in certain modes.
5194 Add the target-specific flags needed to use thread-local storage.
5197 File: gccint.info, Node: Require Support, Next: Final Actions, Prev: Add Options, Up: Test Directives
5199 7.2.5 Variants of `dg-require-SUPPORT'
5200 --------------------------------------
5202 A few of the `dg-require' directives take arguments.
5204 `dg-require-iconv CODESET'
5205 Skip the test if the target does not support iconv. CODESET is
5206 the codeset to convert to.
5208 `dg-require-profiling PROFOPT'
5209 Skip the test if the target does not support profiling with option
5212 `dg-require-visibility VIS'
5213 Skip the test if the target does not support the `visibility'
5214 attribute. If VIS is `""', support for `visibility("hidden")' is
5215 checked, for `visibility("VIS")' otherwise.
5217 The original `dg-require' directives were defined before there was
5218 support for effective-target keywords. The directives that do not take
5219 arguments could be replaced with effective-target keywords.
5221 `dg-require-alias ""'
5222 Skip the test if the target does not support the `alias' attribute.
5224 `dg-require-ascii-locale ""'
5225 Skip the test if the host does not support an ASCII locale.
5227 `dg-require-compat-dfp ""'
5228 Skip this test unless both compilers in a `compat' testsuite
5229 support decimal floating point.
5231 `dg-require-cxa-atexit ""'
5232 Skip the test if the target does not support `__cxa_atexit'. This
5233 is equivalent to `dg-require-effective-target cxa_atexit'.
5236 Skip the test if the target does not support DLL attributes.
5238 `dg-require-fork ""'
5239 Skip the test if the target does not support `fork'.
5241 `dg-require-gc-sections ""'
5242 Skip the test if the target's linker does not support the
5243 `--gc-sections' flags. This is equivalent to
5244 `dg-require-effective-target gc-sections'.
5246 `dg-require-host-local ""'
5247 Skip the test if the host is remote, rather than the same as the
5248 build system. Some tests are incompatible with DejaGnu's handling
5249 of remote hosts, which involves copying the source file to the
5250 host and compiling it with a relative path and "`-o a.out'".
5252 `dg-require-mkfifo ""'
5253 Skip the test if the target does not support `mkfifo'.
5255 `dg-require-named-sections ""'
5256 Skip the test is the target does not support named sections. This
5257 is equivalent to `dg-require-effective-target named_sections'.
5259 `dg-require-weak ""'
5260 Skip the test if the target does not support weak symbols.
5262 `dg-require-weak-override ""'
5263 Skip the test if the target does not support overriding weak
5267 File: gccint.info, Node: Final Actions, Prev: Require Support, Up: Test Directives
5269 7.2.6 Commands for use in `dg-final'
5270 ------------------------------------
5272 The GCC testsuite defines the following directives to be used within
5275 7.2.6.1 Scan a particular file
5276 ..............................
5278 `scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]'
5279 Passes if REGEXP matches text in FILENAME.
5281 `scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]'
5282 Passes if REGEXP does not match text in FILENAME.
5284 `scan-module MODULE REGEXP [{ target/xfail SELECTOR }]'
5285 Passes if REGEXP matches in Fortran module MODULE.
5287 7.2.6.2 Scan the assembly output
5288 ................................
5290 `scan-assembler REGEX [{ target/xfail SELECTOR }]'
5291 Passes if REGEX matches text in the test's assembler output.
5293 `scan-assembler-not REGEX [{ target/xfail SELECTOR }]'
5294 Passes if REGEX does not match text in the test's assembler output.
5296 `scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]'
5297 Passes if REGEX is matched exactly NUM times in the test's
5300 `scan-assembler-dem REGEX [{ target/xfail SELECTOR }]'
5301 Passes if REGEX matches text in the test's demangled assembler
5304 `scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]'
5305 Passes if REGEX does not match text in the test's demangled
5308 `scan-hidden SYMBOL [{ target/xfail SELECTOR }]'
5309 Passes if SYMBOL is defined as a hidden symbol in the test's
5312 `scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]'
5313 Passes if SYMBOL is not defined as a hidden symbol in the test's
5316 7.2.6.3 Scan optimization dump files
5317 ....................................
5319 These commands are available for KIND of `tree', `rtl', and `ipa'.
5321 `scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]'
5322 Passes if REGEX matches text in the dump file with suffix SUFFIX.
5324 `scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
5325 Passes if REGEX does not match text in the dump file with suffix
5328 `scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]'
5329 Passes if REGEX is found exactly NUM times in the dump file with
5332 `scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]'
5333 Passes if REGEX matches demangled text in the dump file with
5336 `scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]'
5337 Passes if REGEX does not match demangled text in the dump file with
5340 7.2.6.4 Verify that an output files exists or not
5341 .................................................
5343 `output-exists [{ target/xfail SELECTOR }]'
5344 Passes if compiler output file exists.
5346 `output-exists-not [{ target/xfail SELECTOR }]'
5347 Passes if compiler output file does not exist.
5349 7.2.6.5 Check for LTO tests
5350 ...........................
5352 `scan-symbol REGEXP [{ target/xfail SELECTOR }]'
5353 Passes if the pattern is present in the final executable.
5355 7.2.6.6 Checks for `gcov' tests
5356 ...............................
5358 `run-gcov SOURCEFILE'
5359 Check line counts in `gcov' tests.
5361 `run-gcov [branches] [calls] { OPTS SOURCEFILE }'
5362 Check branch and/or call counts, in addition to line counts, in
5365 7.2.6.7 Clean up generated test files
5366 .....................................
5368 `cleanup-coverage-files'
5369 Removes coverage data files generated for this test.
5371 `cleanup-ipa-dump SUFFIX'
5372 Removes IPA dump files generated for this test.
5375 Removes Fortran module files generated for this test.
5377 `cleanup-profile-file'
5378 Removes profiling files generated for this test.
5380 `cleanup-repo-files'
5381 Removes files generated for this test for `-frepo'.
5383 `cleanup-rtl-dump SUFFIX'
5384 Removes RTL dump files generated for this test.
5386 `cleanup-saved-temps'
5387 Removes files for the current test which were kept for
5390 `cleanup-tree-dump SUFFIX'
5391 Removes tree dump files matching SUFFIX which were generated for
5395 File: gccint.info, Node: Ada Tests, Next: C Tests, Prev: Test Directives, Up: Testsuites
5397 7.3 Ada Language Testsuites
5398 ===========================
5400 The Ada testsuite includes executable tests from the ACATS 2.5
5401 testsuite, publicly available at
5402 `http://www.adaic.org/compilers/acats/2.5'.
5404 These tests are integrated in the GCC testsuite in the `ada/acats'
5405 directory, and enabled automatically when running `make check', assuming
5406 the Ada language has been enabled when configuring GCC.
5408 You can also run the Ada testsuite independently, using `make
5409 check-ada', or run a subset of the tests by specifying which chapter to
5412 $ make check-ada CHAPTERS="c3 c9"
5414 The tests are organized by directory, each directory corresponding to
5415 a chapter of the Ada Reference Manual. So for example, `c9' corresponds
5416 to chapter 9, which deals with tasking features of the language.
5418 There is also an extra chapter called `gcc' containing a template for
5419 creating new executable tests, although this is deprecated in favor of
5420 the `gnat.dg' testsuite.
5422 The tests are run using two `sh' scripts: `run_acats' and
5423 `run_all.sh'. To run the tests using a simulator or a cross target,
5424 see the small customization section at the top of `run_all.sh'.
5426 These tests are run using the build tree: they can be run without doing
5430 File: gccint.info, Node: C Tests, Next: libgcj Tests, Prev: Ada Tests, Up: Testsuites
5432 7.4 C Language Testsuites
5433 =========================
5435 GCC contains the following C language testsuites, in the
5436 `gcc/testsuite' directory:
5439 This contains tests of particular features of the C compiler,
5440 using the more modern `dg' harness. Correctness tests for various
5441 compiler features should go here if possible.
5443 Magic comments determine whether the file is preprocessed,
5444 compiled, linked or run. In these tests, error and warning
5445 message texts are compared against expected texts or regular
5446 expressions given in comments. These tests are run with the
5447 options `-ansi -pedantic' unless other options are given in the
5448 test. Except as noted below they are not run with multiple
5449 optimization options.
5452 This subdirectory contains tests for binary compatibility using
5453 `lib/compat.exp', which in turn uses the language-independent
5454 support (*note Support for testing binary compatibility: compat
5458 This subdirectory contains tests of the preprocessor.
5461 This subdirectory contains tests for debug formats. Tests in this
5462 subdirectory are run for each debug format that the compiler
5466 This subdirectory contains tests of the `-Wformat' format
5467 checking. Tests in this directory are run with and without
5471 This subdirectory contains tests of code that should not compile
5472 and does not need any special compilation options. They are run
5473 with multiple optimization options, since sometimes invalid code
5474 crashes the compiler with optimization.
5477 FIXME: describe this.
5480 This contains particular code fragments which have historically
5481 broken easily. These tests are run with multiple optimization
5482 options, so tests for features which only break at some
5483 optimization levels belong here. This also contains tests to
5484 check that certain optimizations occur. It might be worthwhile to
5485 separate the correctness tests cleanly from the code quality
5486 tests, but it hasn't been done yet.
5488 `gcc.c-torture/compat'
5489 FIXME: describe this.
5491 This directory should probably not be used for new tests.
5493 `gcc.c-torture/compile'
5494 This testsuite contains test cases that should compile, but do not
5495 need to link or run. These test cases are compiled with several
5496 different combinations of optimization options. All warnings are
5497 disabled for these test cases, so this directory is not suitable if
5498 you wish to test for the presence or absence of compiler warnings.
5499 While special options can be set, and tests disabled on specific
5500 platforms, by the use of `.x' files, mostly these test cases
5501 should not contain platform dependencies. FIXME: discuss how
5502 defines such as `NO_LABEL_VALUES' and `STACK_SIZE' are used.
5504 `gcc.c-torture/execute'
5505 This testsuite contains test cases that should compile, link and
5506 run; otherwise the same comments as for `gcc.c-torture/compile'
5509 `gcc.c-torture/execute/ieee'
5510 This contains tests which are specific to IEEE floating point.
5512 `gcc.c-torture/unsorted'
5513 FIXME: describe this.
5515 This directory should probably not be used for new tests.
5518 This directory contains C tests that require special handling.
5519 Some of these tests have individual expect files, and others share
5520 special-purpose expect files:
5523 Test `-fbranch-probabilities' using
5524 `gcc.misc-tests/bprob.exp', which in turn uses the generic,
5525 language-independent framework (*note Support for testing
5526 profile-directed optimizations: profopt Testing.).
5529 Test `gcov' output using `gcov.exp', which in turn uses the
5530 language-independent support (*note Support for testing gcov:
5534 Test i386-specific support for data prefetch using
5535 `i386-prefetch.exp'.
5537 `gcc.test-framework'
5540 Test the testsuite itself using
5541 `gcc.test-framework/test-framework.exp'.
5544 FIXME: merge in `testsuite/README.gcc' and discuss the format of test
5545 cases and magic comments more.
5548 File: gccint.info, Node: libgcj Tests, Next: LTO Testing, Prev: C Tests, Up: Testsuites
5550 7.5 The Java library testsuites.
5551 ================================
5553 Runtime tests are executed via `make check' in the
5554 `TARGET/libjava/testsuite' directory in the build tree. Additional
5555 runtime tests can be checked into this testsuite.
5557 Regression testing of the core packages in libgcj is also covered by
5558 the Mauve testsuite. The Mauve Project develops tests for the Java
5559 Class Libraries. These tests are run as part of libgcj testing by
5560 placing the Mauve tree within the libjava testsuite sources at
5561 `libjava/testsuite/libjava.mauve/mauve', or by specifying the location
5562 of that tree when invoking `make', as in `make MAUVEDIR=~/mauve check'.
5564 To detect regressions, a mechanism in `mauve.exp' compares the
5565 failures for a test run against the list of expected failures in
5566 `libjava/testsuite/libjava.mauve/xfails' from the source hierarchy.
5567 Update this file when adding new failing tests to Mauve, or when fixing
5568 bugs in libgcj that had caused Mauve test failures.
5570 We encourage developers to contribute test cases to Mauve.
5573 File: gccint.info, Node: LTO Testing, Next: gcov Testing, Prev: libgcj Tests, Up: Testsuites
5575 7.6 Support for testing link-time optimizations
5576 ===============================================
5578 Tests for link-time optimizations usually require multiple source files
5579 that are compiled separately, perhaps with different sets of options.
5580 There are several special-purpose test directives used for these tests.
5582 `{ dg-lto-do DO-WHAT-KEYWORD }'
5583 DO-WHAT-KEYWORD specifies how the test is compiled and whether it
5584 is executed. It is one of:
5587 Compile with `-c' to produce a relocatable object file.
5590 Compile, assemble, and link to produce an executable file.
5593 Produce and run an executable file, which is expected to
5594 return an exit code of 0.
5596 The default is `assemble'. That can be overridden for a set of
5597 tests by redefining `dg-do-what-default' within the `.exp' file
5600 Unlike `dg-do', `dg-lto-do' does not support an optional `target'
5601 or `xfail' list. Use `dg-skip-if', `dg-xfail-if', or
5604 `{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}'
5605 This directive provides a list of one or more sets of compiler
5606 options to override LTO_OPTIONS. Each test will be compiled and
5607 run with each of these sets of options.
5609 `{ dg-extra-ld-options OPTIONS }'
5610 This directive adds OPTIONS to the linker options used.
5612 `{ dg-suppress-ld-options OPTIONS }'
5613 This directive removes OPTIONS from the set of linker options used.
5616 File: gccint.info, Node: gcov Testing, Next: profopt Testing, Prev: LTO Testing, Up: Testsuites
5618 7.7 Support for testing `gcov'
5619 ==============================
5621 Language-independent support for testing `gcov', and for checking that
5622 branch profiling produces expected values, is provided by the expect
5623 file `lib/gcov.exp'. `gcov' tests also rely on procedures in
5624 `lib/gcc-dg.exp' to compile and run the test program. A typical `gcov'
5625 test contains the following DejaGnu commands within comments:
5627 { dg-options "-fprofile-arcs -ftest-coverage" }
5628 { dg-do run { target native } }
5629 { dg-final { run-gcov sourcefile } }
5631 Checks of `gcov' output can include line counts, branch percentages,
5632 and call return percentages. All of these checks are requested via
5633 commands that appear in comments in the test's source file. Commands
5634 to check line counts are processed by default. Commands to check
5635 branch percentages and call return percentages are processed if the
5636 `run-gcov' command has arguments `branches' or `calls', respectively.
5637 For example, the following specifies checking both, as well as passing
5640 { dg-final { run-gcov branches calls { -b sourcefile } } }
5642 A line count command appears within a comment on the source line that
5643 is expected to get the specified count and has the form `count(CNT)'.
5644 A test should only check line counts for lines that will get the same
5645 count for any architecture.
5647 Commands to check branch percentages (`branch') and call return
5648 percentages (`returns') are very similar to each other. A beginning
5649 command appears on or before the first of a range of lines that will
5650 report the percentage, and the ending command follows that range of
5651 lines. The beginning command can include a list of percentages, all of
5652 which are expected to be found within the range. A range is terminated
5653 by the next command of the same kind. A command `branch(end)' or
5654 `returns(end)' marks the end of a range without starting a new one.
5657 if (i > 10 && j > i && j < 20) /* branch(27 50 75) */
5661 For a call return percentage, the value specified is the percentage of
5662 calls reported to return. For a branch percentage, the value is either
5663 the expected percentage or 100 minus that value, since the direction of
5664 a branch can differ depending on the target or the optimization level.
5666 Not all branches and calls need to be checked. A test should not
5667 check for branches that might be optimized away or replaced with
5668 predicated instructions. Don't check for calls inserted by the
5669 compiler or ones that might be inlined or optimized away.
5671 A single test can check for combinations of line counts, branch
5672 percentages, and call return percentages. The command to check a line
5673 count must appear on the line that will report that count, but commands
5674 to check branch percentages and call return percentages can bracket the
5675 lines that report them.
5678 File: gccint.info, Node: profopt Testing, Next: compat Testing, Prev: gcov Testing, Up: Testsuites
5680 7.8 Support for testing profile-directed optimizations
5681 ======================================================
5683 The file `profopt.exp' provides language-independent support for
5684 checking correct execution of a test built with profile-directed
5685 optimization. This testing requires that a test program be built and
5686 executed twice. The first time it is compiled to generate profile
5687 data, and the second time it is compiled to use the data that was
5688 generated during the first execution. The second execution is to
5689 verify that the test produces the expected results.
5691 To check that the optimization actually generated better code, a test
5692 can be built and run a third time with normal optimizations to verify
5693 that the performance is better with the profile-directed optimizations.
5694 `profopt.exp' has the beginnings of this kind of support.
5696 `profopt.exp' provides generic support for profile-directed
5697 optimizations. Each set of tests that uses it provides information
5698 about a specific optimization:
5701 tool being tested, e.g., `gcc'
5704 options used to generate profile data
5707 options used to optimize using that profile data
5710 suffix of profile data files
5713 list of options with which to run each test, similar to the lists
5716 `{ dg-final-generate { LOCAL-DIRECTIVE } }'
5717 This directive is similar to `dg-final', but the LOCAL-DIRECTIVE
5718 is run after the generation of profile data.
5720 `{ dg-final-use { LOCAL-DIRECTIVE } }'
5721 The LOCAL-DIRECTIVE is run after the profile data have been used.
5724 File: gccint.info, Node: compat Testing, Next: Torture Tests, Prev: profopt Testing, Up: Testsuites
5726 7.9 Support for testing binary compatibility
5727 ============================================
5729 The file `compat.exp' provides language-independent support for binary
5730 compatibility testing. It supports testing interoperability of two
5731 compilers that follow the same ABI, or of multiple sets of compiler
5732 options that should not affect binary compatibility. It is intended to
5733 be used for testsuites that complement ABI testsuites.
5735 A test supported by this framework has three parts, each in a separate
5736 source file: a main program and two pieces that interact with each
5737 other to split up the functionality being tested.
5739 `TESTNAME_main.SUFFIX'
5740 Contains the main program, which calls a function in file
5741 `TESTNAME_x.SUFFIX'.
5744 Contains at least one call to a function in `TESTNAME_y.SUFFIX'.
5747 Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'.
5749 Within each test, the main program and one functional piece are
5750 compiled by the GCC under test. The other piece can be compiled by an
5751 alternate compiler. If no alternate compiler is specified, then all
5752 three source files are all compiled by the GCC under test. You can
5753 specify pairs of sets of compiler options. The first element of such a
5754 pair specifies options used with the GCC under test, and the second
5755 element of the pair specifies options used with the alternate compiler.
5756 Each test is compiled with each pair of options.
5758 `compat.exp' defines default pairs of compiler options. These can be
5759 overridden by defining the environment variable `COMPAT_OPTIONS' as:
5761 COMPAT_OPTIONS="[list [list {TST1} {ALT1}]
5762 ...[list {TSTN} {ALTN}]]"
5764 where TSTI and ALTI are lists of options, with TSTI used by the
5765 compiler under test and ALTI used by the alternate compiler. For
5766 example, with `[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]',
5767 the test is first built with `-g -O0' by the compiler under test and
5768 with `-O3' by the alternate compiler. The test is built a second time
5769 using `-fpic' by the compiler under test and `-fPIC -O2' by the
5772 An alternate compiler is specified by defining an environment variable
5773 to be the full pathname of an installed compiler; for C define
5774 `ALT_CC_UNDER_TEST', and for C++ define `ALT_CXX_UNDER_TEST'. These
5775 will be written to the `site.exp' file used by DejaGnu. The default is
5776 to build each test with the compiler under test using the first of each
5777 pair of compiler options from `COMPAT_OPTIONS'. When
5778 `ALT_CC_UNDER_TEST' or `ALT_CXX_UNDER_TEST' is `same', each test is
5779 built using the compiler under test but with combinations of the
5780 options from `COMPAT_OPTIONS'.
5782 To run only the C++ compatibility suite using the compiler under test
5783 and another version of GCC using specific compiler options, do the
5784 following from `OBJDIR/gcc':
5788 ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
5789 COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \
5791 RUNTESTFLAGS="compat.exp"
5793 A test that fails when the source files are compiled with different
5794 compilers, but passes when the files are compiled with the same
5795 compiler, demonstrates incompatibility of the generated code or runtime
5796 support. A test that fails for the alternate compiler but passes for
5797 the compiler under test probably tests for a bug that was fixed in the
5798 compiler under test but is present in the alternate compiler.
5800 The binary compatibility tests support a small number of test framework
5801 commands that appear within comments in a test file.
5804 These commands can be used in `TESTNAME_main.SUFFIX' to skip the
5805 test if specific support is not available on the target.
5808 The specified options are used for compiling this particular source
5809 file, appended to the options from `COMPAT_OPTIONS'. When this
5810 command appears in `TESTNAME_main.SUFFIX' the options are also
5811 used to link the test program.
5814 This command can be used in a secondary source file to specify that
5815 compilation is expected to fail for particular options on
5819 File: gccint.info, Node: Torture Tests, Prev: compat Testing, Up: Testsuites
5821 7.10 Support for torture testing using multiple options
5822 =======================================================
5824 Throughout the compiler testsuite there are several directories whose
5825 tests are run multiple times, each with a different set of options.
5826 These are known as torture tests. `lib/torture-options.exp' defines
5827 procedures to set up these lists:
5830 Initialize use of torture lists.
5832 `set-torture-options'
5833 Set lists of torture options to use for tests with and without
5834 loops. Optionally combine a set of torture options with a set of
5835 other options, as is done with Objective-C runtime options.
5838 Finalize use of torture lists.
5840 The `.exp' file for a set of tests that use torture options must
5841 include calls to these three procedures if:
5843 * It calls `gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS.
5845 * It calls ${TOOL}`-torture' or ${TOOL}`-torture-execute', where
5846 TOOL is `c', `fortran', or `objc'.
5848 * It calls `dg-pch'.
5850 It is not necessary for a `.exp' file that calls `gcc-dg-runtest' to
5851 call the torture procedures if the tests should use the list in
5852 DG_TORTURE_OPTIONS defined in `gcc-dg.exp'.
5854 Most uses of torture options can override the default lists by defining
5855 TORTURE_OPTIONS or add to the default list by defining
5856 ADDITIONAL_TORTURE_OPTIONS. Define these in a `.dejagnurc' file or add
5857 them to the `site.exp' file; for example
5859 set ADDITIONAL_TORTURE_OPTIONS [list \
5860 { -O2 -ftree-loop-linear } \
5861 { -O2 -fpeel-loops } ]
5864 File: gccint.info, Node: Options, Next: Passes, Prev: Testsuites, Up: Top
5866 8 Option specification files
5867 ****************************
5869 Most GCC command-line options are described by special option
5870 definition files, the names of which conventionally end in `.opt'.
5871 This chapter describes the format of these files.
5875 * Option file format:: The general layout of the files
5876 * Option properties:: Supported option properties
5879 File: gccint.info, Node: Option file format, Next: Option properties, Up: Options
5881 8.1 Option file format
5882 ======================
5884 Option files are a simple list of records in which each field occupies
5885 its own line and in which the records themselves are separated by blank
5886 lines. Comments may appear on their own line anywhere within the file
5887 and are preceded by semicolons. Whitespace is allowed before the
5890 The files can contain the following types of record:
5892 * A language definition record. These records have two fields: the
5893 string `Language' and the name of the language. Once a language
5894 has been declared in this way, it can be used as an option
5895 property. *Note Option properties::.
5897 * A target specific save record to save additional information. These
5898 records have two fields: the string `TargetSave', and a
5899 declaration type to go in the `cl_target_option' structure.
5901 * An option definition record. These records have the following
5903 1. the name of the option, with the leading "-" removed
5905 2. a space-separated list of option properties (*note Option
5908 3. the help text to use for `--help' (omitted if the second field
5909 contains the `Undocumented' property).
5911 By default, all options beginning with "f", "W" or "m" are
5912 implicitly assumed to take a "no-" form. This form should not be
5913 listed separately. If an option beginning with one of these
5914 letters does not have a "no-" form, you can use the
5915 `RejectNegative' property to reject it.
5917 The help text is automatically line-wrapped before being displayed.
5918 Normally the name of the option is printed on the left-hand side of
5919 the output and the help text is printed on the right. However, if
5920 the help text contains a tab character, the text to the left of
5921 the tab is used instead of the option's name and the text to the
5922 right of the tab forms the help text. This allows you to
5923 elaborate on what type of argument the option takes.
5925 * A target mask record. These records have one field of the form
5926 `Mask(X)'. The options-processing script will automatically
5927 allocate a bit in `target_flags' (*note Run-time Target::) for
5928 each mask name X and set the macro `MASK_X' to the appropriate
5929 bitmask. It will also declare a `TARGET_X' macro that has the
5930 value 1 when bit `MASK_X' is set and 0 otherwise.
5932 They are primarily intended to declare target masks that are not
5933 associated with user options, either because these masks represent
5934 internal switches or because the options are not available on all
5935 configurations and yet the masks always need to be defined.
5938 File: gccint.info, Node: Option properties, Prev: Option file format, Up: Options
5940 8.2 Option properties
5941 =====================
5943 The second field of an option record can specify any of the following
5944 properties. When an option takes an argument, it is enclosed in
5945 parentheses following the option property name. The parser that
5946 handles option files is quite simplistic, and will be tricked by any
5947 nested parentheses within the argument text itself; in this case, the
5948 entire option argument can be wrapped in curly braces within the
5949 parentheses to demarcate it, e.g.:
5951 Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
5954 The option is available for all languages and targets.
5957 The option is available for all languages but is target-specific.
5960 The option is available when compiling for the given language.
5962 It is possible to specify several different languages for the same
5963 option. Each LANGUAGE must have been declared by an earlier
5964 `Language' record. *Note Option file format::.
5967 The option does not have a "no-" form. All options beginning with
5968 "f", "W" or "m" are assumed to have a "no-" form unless this
5971 `Negative(OTHERNAME)'
5972 The option will turn off another option OTHERNAME, which is the
5973 option name with the leading "-" removed. This chain action will
5974 propagate through the `Negative' property of the option to be
5979 The option takes a mandatory argument. `Joined' indicates that
5980 the option and argument can be included in the same `argv' entry
5981 (as with `-mflush-func=NAME', for example). `Separate' indicates
5982 that the option and argument can be separate `argv' entries (as
5983 with `-o'). An option is allowed to have both of these properties.
5986 The option takes an optional argument. If the argument is given,
5987 it will be part of the same `argv' entry as the option itself.
5989 This property cannot be used alongside `Joined' or `Separate'.
5992 The option's argument is a non-negative integer. The option parser
5993 will check and convert the argument before passing it to the
5994 relevant option handler. `UInteger' should also be used on
5995 options like `-falign-loops' where both `-falign-loops' and
5996 `-falign-loops'=N are supported to make sure the saved options are
5997 given a full integer.
6000 The state of this option should be stored in variable VAR. The
6001 way that the state is stored depends on the type of option:
6003 * If the option uses the `Mask' or `InverseMask' properties,
6004 VAR is the integer variable that contains the mask.
6006 * If the option is a normal on/off switch, VAR is an integer
6007 variable that is nonzero when the option is enabled. The
6008 options parser will set the variable to 1 when the positive
6009 form of the option is used and 0 when the "no-" form is used.
6011 * If the option takes an argument and has the `UInteger'
6012 property, VAR is an integer variable that stores the value of
6015 * Otherwise, if the option takes an argument, VAR is a pointer
6016 to the argument string. The pointer will be null if the
6017 argument is optional and wasn't given.
6019 The option-processing script will usually declare VAR in
6020 `options.c' and leave it to be zero-initialized at start-up time.
6021 You can modify this behavior using `VarExists' and `Init'.
6024 The option controls an integer variable VAR and is active when VAR
6025 equals SET. The option parser will set VAR to SET when the
6026 positive form of the option is used and `!SET' when the "no-" form
6029 VAR is declared in the same way as for the single-argument form
6033 The variable specified by the `Var' property already exists. No
6034 definition should be added to `options.c' in response to this
6037 You should use this property only if the variable is declared
6038 outside `options.c'.
6041 The variable specified by the `Var' property should be statically
6042 initialized to VALUE.
6045 The option is associated with a bit in the `target_flags' variable
6046 (*note Run-time Target::) and is active when that bit is set. You
6047 may also specify `Var' to select a variable other than
6050 The options-processing script will automatically allocate a unique
6051 bit for the option. If the option is attached to `target_flags',
6052 the script will set the macro `MASK_NAME' to the appropriate
6053 bitmask. It will also declare a `TARGET_NAME' macro that has the
6054 value 1 when the option is active and 0 otherwise. If you use
6055 `Var' to attach the option to a different variable, the associated
6056 macros are called `OPTION_MASK_NAME' and `OPTION_NAME'
6059 You can disable automatic bit allocation using `MaskExists'.
6061 `InverseMask(OTHERNAME)'
6062 `InverseMask(OTHERNAME, THISNAME)'
6063 The option is the inverse of another option that has the
6064 `Mask(OTHERNAME)' property. If THISNAME is given, the
6065 options-processing script will declare a `TARGET_THISNAME' macro
6066 that is 1 when the option is active and 0 otherwise.
6069 The mask specified by the `Mask' property already exists. No
6070 `MASK' or `TARGET' definitions should be added to `options.h' in
6071 response to this option record.
6073 The main purpose of this property is to support synonymous options.
6074 The first option should use `Mask(NAME)' and the others should use
6075 `Mask(NAME) MaskExists'.
6078 The state of the option should be printed by `-fverbose-asm'.
6081 The option is deliberately missing documentation and should not be
6082 included in the `--help' output.
6085 The option should only be accepted if preprocessor condition COND
6086 is true. Note that any C declarations associated with the option
6087 will be present even if COND is false; COND simply controls
6088 whether the option is accepted and whether it is printed in the
6092 Build the `cl_target_option' structure to hold a copy of the
6093 option, add the functions `cl_target_option_save' and
6094 `cl_target_option_restore' to save and restore the options.
6097 File: gccint.info, Node: Passes, Next: GENERIC, Prev: Options, Up: Top
6099 9 Passes and Files of the Compiler
6100 **********************************
6102 This chapter is dedicated to giving an overview of the optimization and
6103 code generation passes of the compiler. In the process, it describes
6104 some of the language front end interface, though this description is no
6105 where near complete.
6109 * Parsing pass:: The language front end turns text into bits.
6110 * Gimplification pass:: The bits are turned into something we can optimize.
6111 * Pass manager:: Sequencing the optimization passes.
6112 * Tree SSA passes:: Optimizations on a high-level representation.
6113 * RTL passes:: Optimizations on a low-level representation.
6116 File: gccint.info, Node: Parsing pass, Next: Gimplification pass, Up: Passes
6121 The language front end is invoked only once, via
6122 `lang_hooks.parse_file', to parse the entire input. The language front
6123 end may use any intermediate language representation deemed
6124 appropriate. The C front end uses GENERIC trees (CROSSREF), plus a
6125 double handful of language specific tree codes defined in
6126 `c-common.def'. The Fortran front end uses a completely different
6127 private representation.
6129 At some point the front end must translate the representation used in
6130 the front end to a representation understood by the language-independent
6131 portions of the compiler. Current practice takes one of two forms.
6132 The C front end manually invokes the gimplifier (CROSSREF) on each
6133 function, and uses the gimplifier callbacks to convert the
6134 language-specific tree nodes directly to GIMPLE (CROSSREF) before
6135 passing the function off to be compiled. The Fortran front end
6136 converts from a private representation to GENERIC, which is later
6137 lowered to GIMPLE when the function is compiled. Which route to choose
6138 probably depends on how well GENERIC (plus extensions) can be made to
6139 match up with the source language and necessary parsing data structures.
6141 BUG: Gimplification must occur before nested function lowering, and
6142 nested function lowering must be done by the front end before passing
6143 the data off to cgraph.
6145 TODO: Cgraph should control nested function lowering. It would only
6146 be invoked when it is certain that the outer-most function is used.
6148 TODO: Cgraph needs a gimplify_function callback. It should be invoked
6149 when (1) it is certain that the function is used, (2) warning flags
6150 specified by the user require some amount of compilation in order to
6151 honor, (3) the language indicates that semantic analysis is not
6152 complete until gimplification occurs. Hum... this sounds overly
6153 complicated. Perhaps we should just have the front end gimplify
6154 always; in most cases it's only one function call.
6156 The front end needs to pass all function definitions and top level
6157 declarations off to the middle-end so that they can be compiled and
6158 emitted to the object file. For a simple procedural language, it is
6159 usually most convenient to do this as each top level declaration or
6160 definition is seen. There is also a distinction to be made between
6161 generating functional code and generating complete debug information.
6162 The only thing that is absolutely required for functional code is that
6163 function and data _definitions_ be passed to the middle-end. For
6164 complete debug information, function, data and type declarations should
6165 all be passed as well.
6167 In any case, the front end needs each complete top-level function or
6168 data declaration, and each data definition should be passed to
6169 `rest_of_decl_compilation'. Each complete type definition should be
6170 passed to `rest_of_type_compilation'. Each function definition should
6171 be passed to `cgraph_finalize_function'.
6173 TODO: I know rest_of_compilation currently has all sorts of RTL
6174 generation semantics. I plan to move all code generation bits (both
6175 Tree and RTL) to compile_function. Should we hide cgraph from the
6176 front ends and move back to rest_of_compilation as the official
6177 interface? Possibly we should rename all three interfaces such that
6178 the names match in some meaningful way and that is more descriptive
6181 The middle-end will, at its option, emit the function and data
6182 definitions immediately or queue them for later processing.
6185 File: gccint.info, Node: Gimplification pass, Next: Pass manager, Prev: Parsing pass, Up: Passes
6187 9.2 Gimplification pass
6188 =======================
6190 "Gimplification" is a whimsical term for the process of converting the
6191 intermediate representation of a function into the GIMPLE language
6192 (CROSSREF). The term stuck, and so words like "gimplification",
6193 "gimplify", "gimplifier" and the like are sprinkled throughout this
6196 While a front end may certainly choose to generate GIMPLE directly if
6197 it chooses, this can be a moderately complex process unless the
6198 intermediate language used by the front end is already fairly simple.
6199 Usually it is easier to generate GENERIC trees plus extensions and let
6200 the language-independent gimplifier do most of the work.
6202 The main entry point to this pass is `gimplify_function_tree' located
6203 in `gimplify.c'. From here we process the entire function gimplifying
6204 each statement in turn. The main workhorse for this pass is
6205 `gimplify_expr'. Approximately everything passes through here at least
6206 once, and it is from here that we invoke the `lang_hooks.gimplify_expr'
6209 The callback should examine the expression in question and return
6210 `GS_UNHANDLED' if the expression is not a language specific construct
6211 that requires attention. Otherwise it should alter the expression in
6212 some way to such that forward progress is made toward producing valid
6213 GIMPLE. If the callback is certain that the transformation is complete
6214 and the expression is valid GIMPLE, it should return `GS_ALL_DONE'.
6215 Otherwise it should return `GS_OK', which will cause the expression to
6216 be processed again. If the callback encounters an error during the
6217 transformation (because the front end is relying on the gimplification
6218 process to finish semantic checks), it should return `GS_ERROR'.
6221 File: gccint.info, Node: Pass manager, Next: Tree SSA passes, Prev: Gimplification pass, Up: Passes
6226 The pass manager is located in `passes.c', `tree-optimize.c' and
6227 `tree-pass.h'. Its job is to run all of the individual passes in the
6228 correct order, and take care of standard bookkeeping that applies to
6231 The theory of operation is that each pass defines a structure that
6232 represents everything we need to know about that pass--when it should
6233 be run, how it should be run, what intermediate language form or
6234 on-the-side data structures it needs. We register the pass to be run
6235 in some particular order, and the pass manager arranges for everything
6236 to happen in the correct order.
6238 The actuality doesn't completely live up to the theory at present.
6239 Command-line switches and `timevar_id_t' enumerations must still be
6240 defined elsewhere. The pass manager validates constraints but does not
6241 attempt to (re-)generate data structures or lower intermediate language
6242 form based on the requirements of the next pass. Nevertheless, what is
6243 present is useful, and a far sight better than nothing at all.
6245 Each pass should have a unique name. Each pass may have its own dump
6246 file (for GCC debugging purposes). Passes with a name starting with a
6247 star do not dump anything. Sometimes passes are supposed to share a
6248 dump file / option name. To still give these unique names, you can use
6249 a prefix that is delimited by a space from the part that is used for
6250 the dump file / option name. E.g. When the pass name is "ud dce", the
6251 name used for dump file/options is "dce".
6253 TODO: describe the global variables set up by the pass manager, and a
6254 brief description of how a new pass should use it. I need to look at
6255 what info RTL passes use first....
6258 File: gccint.info, Node: Tree SSA passes, Next: RTL passes, Prev: Pass manager, Up: Passes
6263 The following briefly describes the Tree optimization passes that are
6264 run after gimplification and what source files they are located in.
6266 * Remove useless statements
6268 This pass is an extremely simple sweep across the gimple code in
6269 which we identify obviously dead code and remove it. Here we do
6270 things like simplify `if' statements with constant conditions,
6271 remove exception handling constructs surrounding code that
6272 obviously cannot throw, remove lexical bindings that contain no
6273 variables, and other assorted simplistic cleanups. The idea is to
6274 get rid of the obvious stuff quickly rather than wait until later
6275 when it's more work to get rid of it. This pass is located in
6276 `tree-cfg.c' and described by `pass_remove_useless_stmts'.
6278 * Mudflap declaration registration
6280 If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize
6281 Options.) is enabled, we generate code to register some variable
6282 declarations with the mudflap runtime. Specifically, the runtime
6283 tracks the lifetimes of those variable declarations that have
6284 their addresses taken, or whose bounds are unknown at compile time
6285 (`extern'). This pass generates new exception handling constructs
6286 (`try'/`finally'), and so must run before those are lowered. In
6287 addition, the pass enqueues declarations of static variables whose
6288 lifetimes extend to the entire program. The pass is located in
6289 `tree-mudflap.c' and is described by `pass_mudflap_1'.
6293 If OpenMP generation (`-fopenmp') is enabled, this pass lowers
6294 OpenMP constructs into GIMPLE.
6296 Lowering of OpenMP constructs involves creating replacement
6297 expressions for local variables that have been mapped using data
6298 sharing clauses, exposing the control flow of most synchronization
6299 directives and adding region markers to facilitate the creation of
6300 the control flow graph. The pass is located in `omp-low.c' and is
6301 described by `pass_lower_omp'.
6305 If OpenMP generation (`-fopenmp') is enabled, this pass expands
6306 parallel regions into their own functions to be invoked by the
6307 thread library. The pass is located in `omp-low.c' and is
6308 described by `pass_expand_omp'.
6310 * Lower control flow
6312 This pass flattens `if' statements (`COND_EXPR') and moves lexical
6313 bindings (`BIND_EXPR') out of line. After this pass, all `if'
6314 statements will have exactly two `goto' statements in its `then'
6315 and `else' arms. Lexical binding information for each statement
6316 will be found in `TREE_BLOCK' rather than being inferred from its
6317 position under a `BIND_EXPR'. This pass is found in
6318 `gimple-low.c' and is described by `pass_lower_cf'.
6320 * Lower exception handling control flow
6322 This pass decomposes high-level exception handling constructs
6323 (`TRY_FINALLY_EXPR' and `TRY_CATCH_EXPR') into a form that
6324 explicitly represents the control flow involved. After this pass,
6325 `lookup_stmt_eh_region' will return a non-negative number for any
6326 statement that may have EH control flow semantics; examine
6327 `tree_can_throw_internal' or `tree_can_throw_external' for exact
6328 semantics. Exact control flow may be extracted from
6329 `foreach_reachable_handler'. The EH region nesting tree is defined
6330 in `except.h' and built in `except.c'. The lowering pass itself
6331 is in `tree-eh.c' and is described by `pass_lower_eh'.
6333 * Build the control flow graph
6335 This pass decomposes a function into basic blocks and creates all
6336 of the edges that connect them. It is located in `tree-cfg.c' and
6337 is described by `pass_build_cfg'.
6339 * Find all referenced variables
6341 This pass walks the entire function and collects an array of all
6342 variables referenced in the function, `referenced_vars'. The
6343 index at which a variable is found in the array is used as a UID
6344 for the variable within this function. This data is needed by the
6345 SSA rewriting routines. The pass is located in `tree-dfa.c' and
6346 is described by `pass_referenced_vars'.
6348 * Enter static single assignment form
6350 This pass rewrites the function such that it is in SSA form. After
6351 this pass, all `is_gimple_reg' variables will be referenced by
6352 `SSA_NAME', and all occurrences of other variables will be
6353 annotated with `VDEFS' and `VUSES'; PHI nodes will have been
6354 inserted as necessary for each basic block. This pass is located
6355 in `tree-ssa.c' and is described by `pass_build_ssa'.
6357 * Warn for uninitialized variables
6359 This pass scans the function for uses of `SSA_NAME's that are fed
6360 by default definition. For non-parameter variables, such uses are
6361 uninitialized. The pass is run twice, before and after
6362 optimization (if turned on). In the first pass we only warn for
6363 uses that are positively uninitialized; in the second pass we warn
6364 for uses that are possibly uninitialized. The pass is located in
6365 `tree-ssa.c' and is defined by `pass_early_warn_uninitialized' and
6366 `pass_late_warn_uninitialized'.
6368 * Dead code elimination
6370 This pass scans the function for statements without side effects
6371 whose result is unused. It does not do memory life analysis, so
6372 any value that is stored in memory is considered used. The pass
6373 is run multiple times throughout the optimization process. It is
6374 located in `tree-ssa-dce.c' and is described by `pass_dce'.
6376 * Dominator optimizations
6378 This pass performs trivial dominator-based copy and constant
6379 propagation, expression simplification, and jump threading. It is
6380 run multiple times throughout the optimization process. It is
6381 located in `tree-ssa-dom.c' and is described by `pass_dominator'.
6383 * Forward propagation of single-use variables
6385 This pass attempts to remove redundant computation by substituting
6386 variables that are used once into the expression that uses them and
6387 seeing if the result can be simplified. It is located in
6388 `tree-ssa-forwprop.c' and is described by `pass_forwprop'.
6392 This pass attempts to change the name of compiler temporaries
6393 involved in copy operations such that SSA->normal can coalesce the
6394 copy away. When compiler temporaries are copies of user
6395 variables, it also renames the compiler temporary to the user
6396 variable resulting in better use of user symbols. It is located
6397 in `tree-ssa-copyrename.c' and is described by `pass_copyrename'.
6399 * PHI node optimizations
6401 This pass recognizes forms of PHI inputs that can be represented as
6402 conditional expressions and rewrites them into straight line code.
6403 It is located in `tree-ssa-phiopt.c' and is described by
6406 * May-alias optimization
6408 This pass performs a flow sensitive SSA-based points-to analysis.
6409 The resulting may-alias, must-alias, and escape analysis
6410 information is used to promote variables from in-memory
6411 addressable objects to non-aliased variables that can be renamed
6412 into SSA form. We also update the `VDEF'/`VUSE' memory tags for
6413 non-renameable aggregates so that we get fewer false kills. The
6414 pass is located in `tree-ssa-alias.c' and is described by
6417 Interprocedural points-to information is located in
6418 `tree-ssa-structalias.c' and described by `pass_ipa_pta'.
6422 This pass rewrites the function in order to collect runtime block
6423 and value profiling data. Such data may be fed back into the
6424 compiler on a subsequent run so as to allow optimization based on
6425 expected execution frequencies. The pass is located in
6426 `predict.c' and is described by `pass_profile'.
6428 * Lower complex arithmetic
6430 This pass rewrites complex arithmetic operations into their
6431 component scalar arithmetic operations. The pass is located in
6432 `tree-complex.c' and is described by `pass_lower_complex'.
6434 * Scalar replacement of aggregates
6436 This pass rewrites suitable non-aliased local aggregate variables
6437 into a set of scalar variables. The resulting scalar variables are
6438 rewritten into SSA form, which allows subsequent optimization
6439 passes to do a significantly better job with them. The pass is
6440 located in `tree-sra.c' and is described by `pass_sra'.
6442 * Dead store elimination
6444 This pass eliminates stores to memory that are subsequently
6445 overwritten by another store, without any intervening loads. The
6446 pass is located in `tree-ssa-dse.c' and is described by `pass_dse'.
6448 * Tail recursion elimination
6450 This pass transforms tail recursion into a loop. It is located in
6451 `tree-tailcall.c' and is described by `pass_tail_recursion'.
6453 * Forward store motion
6455 This pass sinks stores and assignments down the flowgraph closer
6456 to their use point. The pass is located in `tree-ssa-sink.c' and
6457 is described by `pass_sink_code'.
6459 * Partial redundancy elimination
6461 This pass eliminates partially redundant computations, as well as
6462 performing load motion. The pass is located in `tree-ssa-pre.c'
6463 and is described by `pass_pre'.
6465 Just before partial redundancy elimination, if
6466 `-funsafe-math-optimizations' is on, GCC tries to convert
6467 divisions to multiplications by the reciprocal. The pass is
6468 located in `tree-ssa-math-opts.c' and is described by
6469 `pass_cse_reciprocal'.
6471 * Full redundancy elimination
6473 This is a simpler form of PRE that only eliminates redundancies
6474 that occur an all paths. It is located in `tree-ssa-pre.c' and
6475 described by `pass_fre'.
6479 The main driver of the pass is placed in `tree-ssa-loop.c' and
6480 described by `pass_loop'.
6482 The optimizations performed by this pass are:
6484 Loop invariant motion. This pass moves only invariants that would
6485 be hard to handle on RTL level (function calls, operations that
6486 expand to nontrivial sequences of insns). With `-funswitch-loops'
6487 it also moves operands of conditions that are invariant out of the
6488 loop, so that we can use just trivial invariantness analysis in
6489 loop unswitching. The pass also includes store motion. The pass
6490 is implemented in `tree-ssa-loop-im.c'.
6492 Canonical induction variable creation. This pass creates a simple
6493 counter for number of iterations of the loop and replaces the exit
6494 condition of the loop using it, in case when a complicated
6495 analysis is necessary to determine the number of iterations.
6496 Later optimizations then may determine the number easily. The
6497 pass is implemented in `tree-ssa-loop-ivcanon.c'.
6499 Induction variable optimizations. This pass performs standard
6500 induction variable optimizations, including strength reduction,
6501 induction variable merging and induction variable elimination.
6502 The pass is implemented in `tree-ssa-loop-ivopts.c'.
6504 Loop unswitching. This pass moves the conditional jumps that are
6505 invariant out of the loops. To achieve this, a duplicate of the
6506 loop is created for each possible outcome of conditional jump(s).
6507 The pass is implemented in `tree-ssa-loop-unswitch.c'. This pass
6508 should eventually replace the RTL level loop unswitching in
6509 `loop-unswitch.c', but currently the RTL level pass is not
6510 completely redundant yet due to deficiencies in tree level alias
6513 The optimizations also use various utility functions contained in
6514 `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and
6517 Vectorization. This pass transforms loops to operate on vector
6518 types instead of scalar types. Data parallelism across loop
6519 iterations is exploited to group data elements from consecutive
6520 iterations into a vector and operate on them in parallel.
6521 Depending on available target support the loop is conceptually
6522 unrolled by a factor `VF' (vectorization factor), which is the
6523 number of elements operated upon in parallel in each iteration,
6524 and the `VF' copies of each scalar operation are fused to form a
6525 vector operation. Additional loop transformations such as peeling
6526 and versioning may take place to align the number of iterations,
6527 and to align the memory accesses in the loop. The pass is
6528 implemented in `tree-vectorizer.c' (the main driver),
6529 `tree-vect-loop.c' and `tree-vect-loop-manip.c' (loop specific
6530 parts and general loop utilities), `tree-vect-slp' (loop-aware SLP
6531 functionality), `tree-vect-stmts.c' and `tree-vect-data-refs.c'.
6532 Analysis of data references is in `tree-data-ref.c'.
6534 SLP Vectorization. This pass performs vectorization of
6535 straight-line code. The pass is implemented in `tree-vectorizer.c'
6536 (the main driver), `tree-vect-slp.c', `tree-vect-stmts.c' and
6537 `tree-vect-data-refs.c'.
6539 Autoparallelization. This pass splits the loop iteration space to
6540 run into several threads. The pass is implemented in
6543 Graphite is a loop transformation framework based on the polyhedral
6544 model. Graphite stands for Gimple Represented as Polyhedra. The
6545 internals of this infrastructure are documented in
6546 `http://gcc.gnu.org/wiki/Graphite'. The passes working on this
6547 representation are implemented in the various `graphite-*' files.
6549 * Tree level if-conversion for vectorizer
6551 This pass applies if-conversion to simple loops to help vectorizer.
6552 We identify if convertible loops, if-convert statements and merge
6553 basic blocks in one big block. The idea is to present loop in such
6554 form so that vectorizer can have one to one mapping between
6555 statements and available vector operations. This patch
6556 re-introduces COND_EXPR at GIMPLE level. This pass is located in
6557 `tree-if-conv.c' and is described by `pass_if_conversion'.
6559 * Conditional constant propagation
6561 This pass relaxes a lattice of values in order to identify those
6562 that must be constant even in the presence of conditional branches.
6563 The pass is located in `tree-ssa-ccp.c' and is described by
6566 A related pass that works on memory loads and stores, and not just
6567 register values, is located in `tree-ssa-ccp.c' and described by
6570 * Conditional copy propagation
6572 This is similar to constant propagation but the lattice of values
6573 is the "copy-of" relation. It eliminates redundant copies from the
6574 code. The pass is located in `tree-ssa-copy.c' and described by
6577 A related pass that works on memory copies, and not just register
6578 copies, is located in `tree-ssa-copy.c' and described by
6579 `pass_store_copy_prop'.
6581 * Value range propagation
6583 This transformation is similar to constant propagation but instead
6584 of propagating single constant values, it propagates known value
6585 ranges. The implementation is based on Patterson's range
6586 propagation algorithm (Accurate Static Branch Prediction by Value
6587 Range Propagation, J. R. C. Patterson, PLDI '95). In contrast to
6588 Patterson's algorithm, this implementation does not propagate
6589 branch probabilities nor it uses more than a single range per SSA
6590 name. This means that the current implementation cannot be used
6591 for branch prediction (though adapting it would not be difficult).
6592 The pass is located in `tree-vrp.c' and is described by
6595 * Folding built-in functions
6597 This pass simplifies built-in functions, as applicable, with
6598 constant arguments or with inferable string lengths. It is
6599 located in `tree-ssa-ccp.c' and is described by
6600 `pass_fold_builtins'.
6602 * Split critical edges
6604 This pass identifies critical edges and inserts empty basic blocks
6605 such that the edge is no longer critical. The pass is located in
6606 `tree-cfg.c' and is described by `pass_split_crit_edges'.
6608 * Control dependence dead code elimination
6610 This pass is a stronger form of dead code elimination that can
6611 eliminate unnecessary control flow statements. It is located in
6612 `tree-ssa-dce.c' and is described by `pass_cd_dce'.
6614 * Tail call elimination
6616 This pass identifies function calls that may be rewritten into
6617 jumps. No code transformation is actually applied here, but the
6618 data and control flow problem is solved. The code transformation
6619 requires target support, and so is delayed until RTL. In the
6620 meantime `CALL_EXPR_TAILCALL' is set indicating the possibility.
6621 The pass is located in `tree-tailcall.c' and is described by
6622 `pass_tail_calls'. The RTL transformation is handled by
6623 `fixup_tail_calls' in `calls.c'.
6625 * Warn for function return without value
6627 For non-void functions, this pass locates return statements that do
6628 not specify a value and issues a warning. Such a statement may
6629 have been injected by falling off the end of the function. This
6630 pass is run last so that we have as much time as possible to prove
6631 that the statement is not reachable. It is located in
6632 `tree-cfg.c' and is described by `pass_warn_function_return'.
6634 * Mudflap statement annotation
6636 If mudflap is enabled, we rewrite some memory accesses with code to
6637 validate that the memory access is correct. In particular,
6638 expressions involving pointer dereferences (`INDIRECT_REF',
6639 `ARRAY_REF', etc.) are replaced by code that checks the selected
6640 address range against the mudflap runtime's database of valid
6641 regions. This check includes an inline lookup into a
6642 direct-mapped cache, based on shift/mask operations of the pointer
6643 value, with a fallback function call into the runtime. The pass
6644 is located in `tree-mudflap.c' and is described by
6647 * Leave static single assignment form
6649 This pass rewrites the function such that it is in normal form. At
6650 the same time, we eliminate as many single-use temporaries as
6651 possible, so the intermediate language is no longer GIMPLE, but
6652 GENERIC. The pass is located in `tree-outof-ssa.c' and is
6653 described by `pass_del_ssa'.
6655 * Merge PHI nodes that feed into one another
6657 This is part of the CFG cleanup passes. It attempts to join PHI
6658 nodes from a forwarder CFG block into another block with PHI
6659 nodes. The pass is located in `tree-cfgcleanup.c' and is
6660 described by `pass_merge_phi'.
6662 * Return value optimization
6664 If a function always returns the same local variable, and that
6665 local variable is an aggregate type, then the variable is replaced
6666 with the return value for the function (i.e., the function's
6667 DECL_RESULT). This is equivalent to the C++ named return value
6668 optimization applied to GIMPLE. The pass is located in
6669 `tree-nrv.c' and is described by `pass_nrv'.
6671 * Return slot optimization
6673 If a function returns a memory object and is called as `var =
6674 foo()', this pass tries to change the call so that the address of
6675 `var' is sent to the caller to avoid an extra memory copy. This
6676 pass is located in `tree-nrv.c' and is described by
6679 * Optimize calls to `__builtin_object_size'
6681 This is a propagation pass similar to CCP that tries to remove
6682 calls to `__builtin_object_size' when the size of the object can be
6683 computed at compile-time. This pass is located in
6684 `tree-object-size.c' and is described by `pass_object_sizes'.
6686 * Loop invariant motion
6688 This pass removes expensive loop-invariant computations out of
6689 loops. The pass is located in `tree-ssa-loop.c' and described by
6692 * Loop nest optimizations
6694 This is a family of loop transformations that works on loop nests.
6695 It includes loop interchange, scaling, skewing and reversal and
6696 they are all geared to the optimization of data locality in array
6697 traversals and the removal of dependencies that hamper
6698 optimizations such as loop parallelization and vectorization. The
6699 pass is located in `tree-loop-linear.c' and described by
6700 `pass_linear_transform'.
6702 * Removal of empty loops
6704 This pass removes loops with no code in them. The pass is located
6705 in `tree-ssa-loop-ivcanon.c' and described by `pass_empty_loop'.
6707 * Unrolling of small loops
6709 This pass completely unrolls loops with few iterations. The pass
6710 is located in `tree-ssa-loop-ivcanon.c' and described by
6711 `pass_complete_unroll'.
6713 * Predictive commoning
6715 This pass makes the code reuse the computations from the previous
6716 iterations of the loops, especially loads and stores to memory.
6717 It does so by storing the values of these computations to a bank
6718 of temporary variables that are rotated at the end of loop. To
6719 avoid the need for this rotation, the loop is then unrolled and
6720 the copies of the loop body are rewritten to use the appropriate
6721 version of the temporary variable. This pass is located in
6722 `tree-predcom.c' and described by `pass_predcom'.
6726 This pass issues prefetch instructions for array references inside
6727 loops. The pass is located in `tree-ssa-loop-prefetch.c' and
6728 described by `pass_loop_prefetch'.
6732 This pass rewrites arithmetic expressions to enable optimizations
6733 that operate on them, like redundancy elimination and
6734 vectorization. The pass is located in `tree-ssa-reassoc.c' and
6735 described by `pass_reassoc'.
6737 * Optimization of `stdarg' functions
6739 This pass tries to avoid the saving of register arguments into the
6740 stack on entry to `stdarg' functions. If the function doesn't use
6741 any `va_start' macros, no registers need to be saved. If
6742 `va_start' macros are used, the `va_list' variables don't escape
6743 the function, it is only necessary to save registers that will be
6744 used in `va_arg' macros. For instance, if `va_arg' is only used
6745 with integral types in the function, floating point registers
6746 don't need to be saved. This pass is located in `tree-stdarg.c'
6747 and described by `pass_stdarg'.
6751 File: gccint.info, Node: RTL passes, Prev: Tree SSA passes, Up: Passes
6756 The following briefly describes the RTL generation and optimization
6757 passes that are run after the Tree optimization passes.
6761 The source files for RTL generation include `stmt.c', `calls.c',
6762 `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and
6763 `emit-rtl.c'. Also, the file `insn-emit.c', generated from the
6764 machine description by the program `genemit', is used in this
6765 pass. The header file `expr.h' is used for communication within
6768 The header files `insn-flags.h' and `insn-codes.h', generated from
6769 the machine description by the programs `genflags' and `gencodes',
6770 tell this pass which standard names are available for use and
6771 which patterns correspond to them.
6773 * Generation of exception landing pads
6775 This pass generates the glue that handles communication between the
6776 exception handling library routines and the exception handlers
6777 within the function. Entry points in the function that are
6778 invoked by the exception handling library are called "landing
6779 pads". The code for this pass is located in `except.c'.
6781 * Control flow graph cleanup
6783 This pass removes unreachable code, simplifies jumps to next,
6784 jumps to jump, jumps across jumps, etc. The pass is run multiple
6785 times. For historical reasons, it is occasionally referred to as
6786 the "jump optimization pass". The bulk of the code for this pass
6787 is in `cfgcleanup.c', and there are support routines in `cfgrtl.c'
6790 * Forward propagation of single-def values
6792 This pass attempts to remove redundant computation by substituting
6793 variables that come from a single definition, and seeing if the
6794 result can be simplified. It performs copy propagation and
6795 addressing mode selection. The pass is run twice, with values
6796 being propagated into loops only on the second run. The code is
6797 located in `fwprop.c'.
6799 * Common subexpression elimination
6801 This pass removes redundant computation within basic blocks, and
6802 optimizes addressing modes based on cost. The pass is run twice.
6803 The code for this pass is located in `cse.c'.
6805 * Global common subexpression elimination
6807 This pass performs two different types of GCSE depending on
6808 whether you are optimizing for size or not (LCM based GCSE tends
6809 to increase code size for a gain in speed, while Morel-Renvoise
6810 based GCSE does not). When optimizing for size, GCSE is done
6811 using Morel-Renvoise Partial Redundancy Elimination, with the
6812 exception that it does not try to move invariants out of
6813 loops--that is left to the loop optimization pass. If MR PRE
6814 GCSE is done, code hoisting (aka unification) is also done, as
6815 well as load motion. If you are optimizing for speed, LCM (lazy
6816 code motion) based GCSE is done. LCM is based on the work of
6817 Knoop, Ruthing, and Steffen. LCM based GCSE also does loop
6818 invariant code motion. We also perform load and store motion when
6819 optimizing for speed. Regardless of which type of GCSE is used,
6820 the GCSE pass also performs global constant and copy propagation.
6821 The source file for this pass is `gcse.c', and the LCM routines
6826 This pass performs several loop related optimizations. The source
6827 files `cfgloopanal.c' and `cfgloopmanip.c' contain generic loop
6828 analysis and manipulation code. Initialization and finalization
6829 of loop structures is handled by `loop-init.c'. A loop invariant
6830 motion pass is implemented in `loop-invariant.c'. Basic block
6831 level optimizations--unrolling, peeling and unswitching loops--
6832 are implemented in `loop-unswitch.c' and `loop-unroll.c'.
6833 Replacing of the exit condition of loops by special
6834 machine-dependent instructions is handled by `loop-doloop.c'.
6838 This pass is an aggressive form of GCSE that transforms the control
6839 flow graph of a function by propagating constants into conditional
6840 branch instructions. The source file for this pass is `gcse.c'.
6844 This pass attempts to replace conditional branches and surrounding
6845 assignments with arithmetic, boolean value producing comparison
6846 instructions, and conditional move instructions. In the very last
6847 invocation after reload, it will generate predicated instructions
6848 when supported by the target. The code is located in `ifcvt.c'.
6852 This pass splits independent uses of each pseudo-register. This
6853 can improve effect of the other transformation, such as CSE or
6854 register allocation. The code for this pass is located in `web.c'.
6856 * Instruction combination
6858 This pass attempts to combine groups of two or three instructions
6859 that are related by data flow into single instructions. It
6860 combines the RTL expressions for the instructions by substitution,
6861 simplifies the result using algebra, and then attempts to match
6862 the result against the machine description. The code is located
6867 This pass looks for cases where matching constraints would force an
6868 instruction to need a reload, and this reload would be a
6869 register-to-register move. It then attempts to change the
6870 registers used by the instruction to avoid the move instruction.
6871 The code is located in `regmove.c'.
6873 * Mode switching optimization
6875 This pass looks for instructions that require the processor to be
6876 in a specific "mode" and minimizes the number of mode changes
6877 required to satisfy all users. What these modes are, and what
6878 they apply to are completely target-specific. The code for this
6879 pass is located in `mode-switching.c'.
6883 This pass looks at innermost loops and reorders their instructions
6884 by overlapping different iterations. Modulo scheduling is
6885 performed immediately before instruction scheduling. The code for
6886 this pass is located in `modulo-sched.c'.
6888 * Instruction scheduling
6890 This pass looks for instructions whose output will not be
6891 available by the time that it is used in subsequent instructions.
6892 Memory loads and floating point instructions often have this
6893 behavior on RISC machines. It re-orders instructions within a
6894 basic block to try to separate the definition and use of items
6895 that otherwise would cause pipeline stalls. This pass is
6896 performed twice, before and after register allocation. The code
6897 for this pass is located in `haifa-sched.c', `sched-deps.c',
6898 `sched-ebb.c', `sched-rgn.c' and `sched-vis.c'.
6900 * Register allocation
6902 These passes make sure that all occurrences of pseudo registers are
6903 eliminated, either by allocating them to a hard register, replacing
6904 them by an equivalent expression (e.g. a constant) or by placing
6905 them on the stack. This is done in several subpasses:
6907 * Register move optimizations. This pass makes some simple RTL
6908 code transformations which improve the subsequent register
6909 allocation. The source file is `regmove.c'.
6911 * The integrated register allocator (IRA). It is called
6912 integrated because coalescing, register live range splitting,
6913 and hard register preferencing are done on-the-fly during
6914 coloring. It also has better integration with the reload
6915 pass. Pseudo-registers spilled by the allocator or the
6916 reload have still a chance to get hard-registers if the
6917 reload evicts some pseudo-registers from hard-registers. The
6918 allocator helps to choose better pseudos for spilling based
6919 on their live ranges and to coalesce stack slots allocated
6920 for the spilled pseudo-registers. IRA is a regional register
6921 allocator which is transformed into Chaitin-Briggs allocator
6922 if there is one region. By default, IRA chooses regions using
6923 register pressure but the user can force it to use one region
6924 or regions corresponding to all loops.
6926 Source files of the allocator are `ira.c', `ira-build.c',
6927 `ira-costs.c', `ira-conflicts.c', `ira-color.c',
6928 `ira-emit.c', `ira-lives', plus header files `ira.h' and
6929 `ira-int.h' used for the communication between the allocator
6930 and the rest of the compiler and between the IRA files.
6932 * Reloading. This pass renumbers pseudo registers with the
6933 hardware registers numbers they were allocated. Pseudo
6934 registers that did not get hard registers are replaced with
6935 stack slots. Then it finds instructions that are invalid
6936 because a value has failed to end up in a register, or has
6937 ended up in a register of the wrong kind. It fixes up these
6938 instructions by reloading the problematical values
6939 temporarily into registers. Additional instructions are
6940 generated to do the copying.
6942 The reload pass also optionally eliminates the frame pointer
6943 and inserts instructions to save and restore call-clobbered
6944 registers around calls.
6946 Source files are `reload.c' and `reload1.c', plus the header
6947 `reload.h' used for communication between them.
6949 * Basic block reordering
6951 This pass implements profile guided code positioning. If profile
6952 information is not available, various types of static analysis are
6953 performed to make the predictions normally coming from the profile
6954 feedback (IE execution frequency, branch probability, etc). It is
6955 implemented in the file `bb-reorder.c', and the various prediction
6956 routines are in `predict.c'.
6960 This pass computes where the variables are stored at each position
6961 in code and generates notes describing the variable locations to
6962 RTL code. The location lists are then generated according to these
6963 notes to debug information if the debugging information format
6964 supports location lists. The code is located in `var-tracking.c'.
6966 * Delayed branch scheduling
6968 This optional pass attempts to find instructions that can go into
6969 the delay slots of other instructions, usually jumps and calls.
6970 The code for this pass is located in `reorg.c'.
6974 On many RISC machines, branch instructions have a limited range.
6975 Thus, longer sequences of instructions must be used for long
6976 branches. In this pass, the compiler figures out what how far
6977 each instruction will be from each other instruction, and
6978 therefore whether the usual instructions, or the longer sequences,
6979 must be used for each branch. The code for this pass is located
6982 * Register-to-stack conversion
6984 Conversion from usage of some hard registers to usage of a register
6985 stack may be done at this point. Currently, this is supported only
6986 for the floating-point registers of the Intel 80387 coprocessor.
6987 The code for this pass is located in `reg-stack.c'.
6991 This pass outputs the assembler code for the function. The source
6992 files are `final.c' plus `insn-output.c'; the latter is generated
6993 automatically from the machine description by the tool `genoutput'.
6994 The header file `conditions.h' is used for communication between
6995 these files. If mudflap is enabled, the queue of deferred
6996 declarations and any addressed constants (e.g., string literals)
6997 is processed by `mudflap_finish_file' into a synthetic constructor
6998 function containing calls into the mudflap runtime.
7000 * Debugging information output
7002 This is run after final because it must output the stack slot
7003 offsets for pseudo registers that did not get hard registers.
7004 Source files are `dbxout.c' for DBX symbol table format,
7005 `sdbout.c' for SDB symbol table format, `dwarfout.c' for DWARF
7006 symbol table format, files `dwarf2out.c' and `dwarf2asm.c' for
7007 DWARF2 symbol table format, and `vmsdbgout.c' for VMS debug symbol
7012 File: gccint.info, Node: RTL, Next: Control Flow, Prev: Tree SSA, Up: Top
7014 10 RTL Representation
7015 *********************
7017 The last part of the compiler work is done on a low-level intermediate
7018 representation called Register Transfer Language. In this language, the
7019 instructions to be output are described, pretty much one by one, in an
7020 algebraic form that describes what the instruction does.
7022 RTL is inspired by Lisp lists. It has both an internal form, made up
7023 of structures that point at other structures, and a textual form that
7024 is used in the machine description and in printed debugging dumps. The
7025 textual form uses nested parentheses to indicate the pointers in the
7030 * RTL Objects:: Expressions vs vectors vs strings vs integers.
7031 * RTL Classes:: Categories of RTL expression objects, and their structure.
7032 * Accessors:: Macros to access expression operands or vector elts.
7033 * Special Accessors:: Macros to access specific annotations on RTL.
7034 * Flags:: Other flags in an RTL expression.
7035 * Machine Modes:: Describing the size and format of a datum.
7036 * Constants:: Expressions with constant values.
7037 * Regs and Memory:: Expressions representing register contents or memory.
7038 * Arithmetic:: Expressions representing arithmetic on other expressions.
7039 * Comparisons:: Expressions representing comparison of expressions.
7040 * Bit-Fields:: Expressions representing bit-fields in memory or reg.
7041 * Vector Operations:: Expressions involving vector datatypes.
7042 * Conversions:: Extending, truncating, floating or fixing.
7043 * RTL Declarations:: Declaring volatility, constancy, etc.
7044 * Side Effects:: Expressions for storing in registers, etc.
7045 * Incdec:: Embedded side-effects for autoincrement addressing.
7046 * Assembler:: Representing `asm' with operands.
7047 * Debug Information:: Expressions representing debugging information.
7048 * Insns:: Expression types for entire insns.
7049 * Calls:: RTL representation of function call insns.
7050 * Sharing:: Some expressions are unique; others *must* be copied.
7051 * Reading RTL:: Reading textual RTL from a file.
7054 File: gccint.info, Node: RTL Objects, Next: RTL Classes, Up: RTL
7056 10.1 RTL Object Types
7057 =====================
7059 RTL uses five kinds of objects: expressions, integers, wide integers,
7060 strings and vectors. Expressions are the most important ones. An RTL
7061 expression ("RTX", for short) is a C structure, but it is usually
7062 referred to with a pointer; a type that is given the typedef name `rtx'.
7064 An integer is simply an `int'; their written form uses decimal digits.
7065 A wide integer is an integral object whose type is `HOST_WIDE_INT';
7066 their written form uses decimal digits.
7068 A string is a sequence of characters. In core it is represented as a
7069 `char *' in usual C fashion, and it is written in C syntax as well.
7070 However, strings in RTL may never be null. If you write an empty
7071 string in a machine description, it is represented in core as a null
7072 pointer rather than as a pointer to a null character. In certain
7073 contexts, these null pointers instead of strings are valid. Within RTL
7074 code, strings are most commonly found inside `symbol_ref' expressions,
7075 but they appear in other contexts in the RTL expressions that make up
7076 machine descriptions.
7078 In a machine description, strings are normally written with double
7079 quotes, as you would in C. However, strings in machine descriptions may
7080 extend over many lines, which is invalid C, and adjacent string
7081 constants are not concatenated as they are in C. Any string constant
7082 may be surrounded with a single set of parentheses. Sometimes this
7083 makes the machine description easier to read.
7085 There is also a special syntax for strings, which can be useful when C
7086 code is embedded in a machine description. Wherever a string can
7087 appear, it is also valid to write a C-style brace block. The entire
7088 brace block, including the outermost pair of braces, is considered to be
7089 the string constant. Double quote characters inside the braces are not
7090 special. Therefore, if you write string constants in the C code, you
7091 need not escape each quote character with a backslash.
7093 A vector contains an arbitrary number of pointers to expressions. The
7094 number of elements in the vector is explicitly present in the vector.
7095 The written form of a vector consists of square brackets (`[...]')
7096 surrounding the elements, in sequence and with whitespace separating
7097 them. Vectors of length zero are not created; null pointers are used
7100 Expressions are classified by "expression codes" (also called RTX
7101 codes). The expression code is a name defined in `rtl.def', which is
7102 also (in uppercase) a C enumeration constant. The possible expression
7103 codes and their meanings are machine-independent. The code of an RTX
7104 can be extracted with the macro `GET_CODE (X)' and altered with
7105 `PUT_CODE (X, NEWCODE)'.
7107 The expression code determines how many operands the expression
7108 contains, and what kinds of objects they are. In RTL, unlike Lisp, you
7109 cannot tell by looking at an operand what kind of object it is.
7110 Instead, you must know from its context--from the expression code of
7111 the containing expression. For example, in an expression of code
7112 `subreg', the first operand is to be regarded as an expression and the
7113 second operand as an integer. In an expression of code `plus', there
7114 are two operands, both of which are to be regarded as expressions. In
7115 a `symbol_ref' expression, there is one operand, which is to be
7116 regarded as a string.
7118 Expressions are written as parentheses containing the name of the
7119 expression type, its flags and machine mode if any, and then the
7120 operands of the expression (separated by spaces).
7122 Expression code names in the `md' file are written in lowercase, but
7123 when they appear in C code they are written in uppercase. In this
7124 manual, they are shown as follows: `const_int'.
7126 In a few contexts a null pointer is valid where an expression is
7127 normally wanted. The written form of this is `(nil)'.
7130 File: gccint.info, Node: RTL Classes, Next: Accessors, Prev: RTL Objects, Up: RTL
7132 10.2 RTL Classes and Formats
7133 ============================
7135 The various expression codes are divided into several "classes", which
7136 are represented by single characters. You can determine the class of
7137 an RTX code with the macro `GET_RTX_CLASS (CODE)'. Currently,
7138 `rtl.def' defines these classes:
7141 An RTX code that represents an actual object, such as a register
7142 (`REG') or a memory location (`MEM', `SYMBOL_REF'). `LO_SUM') is
7143 also included; instead, `SUBREG' and `STRICT_LOW_PART' are not in
7144 this class, but in class `x'.
7147 An RTX code that represents a constant object. `HIGH' is also
7148 included in this class.
7151 An RTX code for a non-symmetric comparison, such as `GEU' or `LT'.
7154 An RTX code for a symmetric (commutative) comparison, such as `EQ'
7158 An RTX code for a unary arithmetic operation, such as `NEG',
7159 `NOT', or `ABS'. This category also includes value extension
7160 (sign or zero) and conversions between integer and floating point.
7163 An RTX code for a commutative binary operation, such as `PLUS' or
7164 `AND'. `NE' and `EQ' are comparisons, so they have class `<'.
7167 An RTX code for a non-commutative binary operation, such as
7168 `MINUS', `DIV', or `ASHIFTRT'.
7171 An RTX code for a bit-field operation. Currently only
7172 `ZERO_EXTRACT' and `SIGN_EXTRACT'. These have three inputs and
7173 are lvalues (so they can be used for insertion as well). *Note
7177 An RTX code for other three input operations. Currently only
7178 `IF_THEN_ELSE' and `VEC_MERGE'.
7181 An RTX code for an entire instruction: `INSN', `JUMP_INSN', and
7182 `CALL_INSN'. *Note Insns::.
7185 An RTX code for something that matches in insns, such as
7186 `MATCH_DUP'. These only occur in machine descriptions.
7189 An RTX code for an auto-increment addressing mode, such as
7193 All other RTX codes. This category includes the remaining codes
7194 used only in machine descriptions (`DEFINE_*', etc.). It also
7195 includes all the codes describing side effects (`SET', `USE',
7196 `CLOBBER', etc.) and the non-insns that may appear on an insn
7197 chain, such as `NOTE', `BARRIER', and `CODE_LABEL'. `SUBREG' is
7198 also part of this class.
7200 For each expression code, `rtl.def' specifies the number of contained
7201 objects and their kinds using a sequence of characters called the
7202 "format" of the expression code. For example, the format of `subreg'
7205 These are the most commonly used format characters:
7208 An expression (actually a pointer to an expression).
7220 A vector of expressions.
7222 A few other format characters are used occasionally:
7225 `u' is equivalent to `e' except that it is printed differently in
7226 debugging dumps. It is used for pointers to insns.
7229 `n' is equivalent to `i' except that it is printed differently in
7230 debugging dumps. It is used for the line number or code number of
7234 `S' indicates a string which is optional. In the RTL objects in
7235 core, `S' is equivalent to `s', but when the object is read, from
7236 an `md' file, the string value of this operand may be omitted. An
7237 omitted string is taken to be the null string.
7240 `V' indicates a vector which is optional. In the RTL objects in
7241 core, `V' is equivalent to `E', but when the object is read from
7242 an `md' file, the vector value of this operand may be omitted. An
7243 omitted vector is effectively the same as a vector of no elements.
7246 `B' indicates a pointer to basic block structure.
7249 `0' means a slot whose contents do not fit any normal category.
7250 `0' slots are not printed at all in dumps, and are often used in
7251 special ways by small parts of the compiler.
7253 There are macros to get the number of operands and the format of an
7256 `GET_RTX_LENGTH (CODE)'
7257 Number of operands of an RTX of code CODE.
7259 `GET_RTX_FORMAT (CODE)'
7260 The format of an RTX of code CODE, as a C string.
7262 Some classes of RTX codes always have the same format. For example, it
7263 is safe to assume that all comparison operations have format `ee'.
7266 All codes of this class have format `e'.
7271 All codes of these classes have format `ee'.
7275 All codes of these classes have format `eee'.
7278 All codes of this class have formats that begin with `iuueiee'.
7279 *Note Insns::. Note that not all RTL objects linked onto an insn
7280 chain are of class `i'.
7285 You can make no assumptions about the format of these codes.
7288 File: gccint.info, Node: Accessors, Next: Special Accessors, Prev: RTL Classes, Up: RTL
7290 10.3 Access to Operands
7291 =======================
7293 Operands of expressions are accessed using the macros `XEXP', `XINT',
7294 `XWINT' and `XSTR'. Each of these macros takes two arguments: an
7295 expression-pointer (RTX) and an operand number (counting from zero).
7300 accesses operand 2 of expression X, as an expression.
7304 accesses the same operand as an integer. `XSTR', used in the same
7305 fashion, would access it as a string.
7307 Any operand can be accessed as an integer, as an expression or as a
7308 string. You must choose the correct method of access for the kind of
7309 value actually stored in the operand. You would do this based on the
7310 expression code of the containing expression. That is also how you
7311 would know how many operands there are.
7313 For example, if X is a `subreg' expression, you know that it has two
7314 operands which can be correctly accessed as `XEXP (X, 0)' and `XINT (X,
7315 1)'. If you did `XINT (X, 0)', you would get the address of the
7316 expression operand but cast as an integer; that might occasionally be
7317 useful, but it would be cleaner to write `(int) XEXP (X, 0)'. `XEXP
7318 (X, 1)' would also compile without error, and would return the second,
7319 integer operand cast as an expression pointer, which would probably
7320 result in a crash when accessed. Nothing stops you from writing `XEXP
7321 (X, 28)' either, but this will access memory past the end of the
7322 expression with unpredictable results.
7324 Access to operands which are vectors is more complicated. You can use
7325 the macro `XVEC' to get the vector-pointer itself, or the macros
7326 `XVECEXP' and `XVECLEN' to access the elements and length of a vector.
7329 Access the vector-pointer which is operand number IDX in EXP.
7331 `XVECLEN (EXP, IDX)'
7332 Access the length (number of elements) in the vector which is in
7333 operand number IDX in EXP. This value is an `int'.
7335 `XVECEXP (EXP, IDX, ELTNUM)'
7336 Access element number ELTNUM in the vector which is in operand
7337 number IDX in EXP. This value is an RTX.
7339 It is up to you to make sure that ELTNUM is not negative and is
7340 less than `XVECLEN (EXP, IDX)'.
7342 All the macros defined in this section expand into lvalues and
7343 therefore can be used to assign the operands, lengths and vector
7344 elements as well as to access them.
7347 File: gccint.info, Node: Special Accessors, Next: Flags, Prev: Accessors, Up: RTL
7349 10.4 Access to Special Operands
7350 ===============================
7352 Some RTL nodes have special annotations associated with them.
7357 If 0, X is not in any alias set, and may alias anything.
7358 Otherwise, X can only alias `MEM's in a conflicting alias
7359 set. This value is set in a language-dependent manner in the
7360 front-end, and should not be altered in the back-end. In
7361 some front-ends, these numbers may correspond in some way to
7362 types, or other language-level entities, but they need not,
7363 and the back-end makes no such assumptions. These set
7364 numbers are tested with `alias_sets_conflict_p'.
7367 If this register is known to hold the value of some user-level
7368 declaration, this is that tree node. It may also be a
7369 `COMPONENT_REF', in which case this is some field reference,
7370 and `TREE_OPERAND (X, 0)' contains the declaration, or
7371 another `COMPONENT_REF', or null if there is no compile-time
7372 object associated with the reference.
7375 The offset from the start of `MEM_EXPR' as a `CONST_INT' rtx.
7378 The size in bytes of the memory reference as a `CONST_INT'
7379 rtx. This is mostly relevant for `BLKmode' references as
7380 otherwise the size is implied by the mode.
7383 The known alignment in bits of the memory reference.
7385 `MEM_ADDR_SPACE (X)'
7386 The address space of the memory reference. This will
7387 commonly be zero for the generic address space.
7391 `ORIGINAL_REGNO (X)'
7392 This field holds the number the register "originally" had;
7393 for a pseudo register turned into a hard reg this will hold
7394 the old pseudo register number.
7397 If this register is known to hold the value of some user-level
7398 declaration, this is that tree node.
7401 If this register is known to hold the value of some user-level
7402 declaration, this is the offset into that logical storage.
7406 `SYMBOL_REF_DECL (X)'
7407 If the `symbol_ref' X was created for a `VAR_DECL' or a
7408 `FUNCTION_DECL', that tree is recorded here. If this value is
7409 null, then X was created by back end code generation routines,
7410 and there is no associated front end symbol table entry.
7412 `SYMBOL_REF_DECL' may also point to a tree of class `'c'',
7413 that is, some sort of constant. In this case, the
7414 `symbol_ref' is an entry in the per-file constant pool;
7415 again, there is no associated front end symbol table entry.
7417 `SYMBOL_REF_CONSTANT (X)'
7418 If `CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant
7419 pool entry for X. It is null otherwise.
7421 `SYMBOL_REF_DATA (X)'
7422 A field of opaque type used to store `SYMBOL_REF_DECL' or
7423 `SYMBOL_REF_CONSTANT'.
7425 `SYMBOL_REF_FLAGS (X)'
7426 In a `symbol_ref', this is used to communicate various
7427 predicates about the symbol. Some of these are common enough
7428 to be computed by common code, some are specific to the
7429 target. The common bits are:
7431 `SYMBOL_FLAG_FUNCTION'
7432 Set if the symbol refers to a function.
7435 Set if the symbol is local to this "module". See
7436 `TARGET_BINDS_LOCAL_P'.
7438 `SYMBOL_FLAG_EXTERNAL'
7439 Set if this symbol is not defined in this translation
7440 unit. Note that this is not the inverse of
7441 `SYMBOL_FLAG_LOCAL'.
7444 Set if the symbol is located in the small data section.
7445 See `TARGET_IN_SMALL_DATA_P'.
7447 `SYMBOL_REF_TLS_MODEL (X)'
7448 This is a multi-bit field accessor that returns the
7449 `tls_model' to be used for a thread-local storage
7450 symbol. It returns zero for non-thread-local symbols.
7452 `SYMBOL_FLAG_HAS_BLOCK_INFO'
7453 Set if the symbol has `SYMBOL_REF_BLOCK' and
7454 `SYMBOL_REF_BLOCK_OFFSET' fields.
7456 `SYMBOL_FLAG_ANCHOR'
7457 Set if the symbol is used as a section anchor. "Section
7458 anchors" are symbols that have a known position within
7459 an `object_block' and that can be used to access nearby
7460 members of that block. They are used to implement
7461 `-fsection-anchors'.
7463 If this flag is set, then `SYMBOL_FLAG_HAS_BLOCK_INFO'
7466 Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for
7469 `SYMBOL_REF_BLOCK (X)'
7470 If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the `object_block'
7471 structure to which the symbol belongs, or `NULL' if it has not
7472 been assigned a block.
7474 `SYMBOL_REF_BLOCK_OFFSET (X)'
7475 If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from
7476 the first object in `SYMBOL_REF_BLOCK (X)'. The value is negative
7477 if X has not yet been assigned to a block, or it has not been
7478 given an offset within that block.
7481 File: gccint.info, Node: Flags, Next: Machine Modes, Prev: Special Accessors, Up: RTL
7483 10.5 Flags in an RTL Expression
7484 ===============================
7486 RTL expressions contain several flags (one-bit bit-fields) that are
7487 used in certain types of expression. Most often they are accessed with
7488 the following macros, which expand into lvalues.
7490 `CONSTANT_POOL_ADDRESS_P (X)'
7491 Nonzero in a `symbol_ref' if it refers to part of the current
7492 function's constant pool. For most targets these addresses are in
7493 a `.rodata' section entirely separate from the function, but for
7494 some targets the addresses are close to the beginning of the
7495 function. In either case GCC assumes these addresses can be
7496 addressed directly, perhaps with the help of base registers.
7497 Stored in the `unchanging' field and printed as `/u'.
7499 `RTL_CONST_CALL_P (X)'
7500 In a `call_insn' indicates that the insn represents a call to a
7501 const function. Stored in the `unchanging' field and printed as
7504 `RTL_PURE_CALL_P (X)'
7505 In a `call_insn' indicates that the insn represents a call to a
7506 pure function. Stored in the `return_val' field and printed as
7509 `RTL_CONST_OR_PURE_CALL_P (X)'
7510 In a `call_insn', true if `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P'
7513 `RTL_LOOPING_CONST_OR_PURE_CALL_P (X)'
7514 In a `call_insn' indicates that the insn represents a possibly
7515 infinite looping call to a const or pure function. Stored in the
7516 `call' field and printed as `/c'. Only true if one of
7517 `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P' is true.
7519 `INSN_ANNULLED_BRANCH_P (X)'
7520 In a `jump_insn', `call_insn', or `insn' indicates that the branch
7521 is an annulling one. See the discussion under `sequence' below.
7522 Stored in the `unchanging' field and printed as `/u'.
7524 `INSN_DELETED_P (X)'
7525 In an `insn', `call_insn', `jump_insn', `code_label', `barrier',
7526 or `note', nonzero if the insn has been deleted. Stored in the
7527 `volatil' field and printed as `/v'.
7529 `INSN_FROM_TARGET_P (X)'
7530 In an `insn' or `jump_insn' or `call_insn' in a delay slot of a
7531 branch, indicates that the insn is from the target of the branch.
7532 If the branch insn has `INSN_ANNULLED_BRANCH_P' set, this insn
7533 will only be executed if the branch is taken. For annulled
7534 branches with `INSN_FROM_TARGET_P' clear, the insn will be
7535 executed only if the branch is not taken. When
7536 `INSN_ANNULLED_BRANCH_P' is not set, this insn will always be
7537 executed. Stored in the `in_struct' field and printed as `/s'.
7539 `LABEL_PRESERVE_P (X)'
7540 In a `code_label' or `note', indicates that the label is
7541 referenced by code or data not visible to the RTL of a given
7542 function. Labels referenced by a non-local goto will have this
7543 bit set. Stored in the `in_struct' field and printed as `/s'.
7545 `LABEL_REF_NONLOCAL_P (X)'
7546 In `label_ref' and `reg_label' expressions, nonzero if this is a
7547 reference to a non-local label. Stored in the `volatil' field and
7550 `MEM_IN_STRUCT_P (X)'
7551 In `mem' expressions, nonzero for reference to an entire structure,
7552 union or array, or to a component of one. Zero for references to a
7553 scalar variable or through a pointer to a scalar. If both this
7554 flag and `MEM_SCALAR_P' are clear, then we don't know whether this
7555 `mem' is in a structure or not. Both flags should never be
7556 simultaneously set. Stored in the `in_struct' field and printed
7559 `MEM_KEEP_ALIAS_SET_P (X)'
7560 In `mem' expressions, 1 if we should keep the alias set for this
7561 mem unchanged when we access a component. Set to 1, for example,
7562 when we are already in a non-addressable component of an aggregate.
7563 Stored in the `jump' field and printed as `/j'.
7566 In `mem' expressions, nonzero for reference to a scalar known not
7567 to be a member of a structure, union, or array. Zero for such
7568 references and for indirections through pointers, even pointers
7569 pointing to scalar types. If both this flag and `MEM_IN_STRUCT_P'
7570 are clear, then we don't know whether this `mem' is in a structure
7571 or not. Both flags should never be simultaneously set. Stored in
7572 the `return_val' field and printed as `/i'.
7574 `MEM_VOLATILE_P (X)'
7575 In `mem', `asm_operands', and `asm_input' expressions, nonzero for
7576 volatile memory references. Stored in the `volatil' field and
7580 In `mem', nonzero for memory references that will not trap.
7581 Stored in the `call' field and printed as `/c'.
7584 Nonzero in a `mem' if the memory reference holds a pointer.
7585 Stored in the `frame_related' field and printed as `/f'.
7587 `REG_FUNCTION_VALUE_P (X)'
7588 Nonzero in a `reg' if it is the place in which this function's
7589 value is going to be returned. (This happens only in a hard
7590 register.) Stored in the `return_val' field and printed as `/i'.
7593 Nonzero in a `reg' if the register holds a pointer. Stored in the
7594 `frame_related' field and printed as `/f'.
7597 In a `reg', nonzero if it corresponds to a variable present in the
7598 user's source code. Zero for temporaries generated internally by
7599 the compiler. Stored in the `volatil' field and printed as `/v'.
7601 The same hard register may be used also for collecting the values
7602 of functions called by this one, but `REG_FUNCTION_VALUE_P' is zero
7603 in this kind of use.
7605 `RTX_FRAME_RELATED_P (X)'
7606 Nonzero in an `insn', `call_insn', `jump_insn', `barrier', or
7607 `set' which is part of a function prologue and sets the stack
7608 pointer, sets the frame pointer, or saves a register. This flag
7609 should also be set on an instruction that sets up a temporary
7610 register to use in place of the frame pointer. Stored in the
7611 `frame_related' field and printed as `/f'.
7613 In particular, on RISC targets where there are limits on the sizes
7614 of immediate constants, it is sometimes impossible to reach the
7615 register save area directly from the stack pointer. In that case,
7616 a temporary register is used that is near enough to the register
7617 save area, and the Canonical Frame Address, i.e., DWARF2's logical
7618 frame pointer, register must (temporarily) be changed to be this
7619 temporary register. So, the instruction that sets this temporary
7620 register must be marked as `RTX_FRAME_RELATED_P'.
7622 If the marked instruction is overly complex (defined in terms of
7623 what `dwarf2out_frame_debug_expr' can handle), you will also have
7624 to create a `REG_FRAME_RELATED_EXPR' note and attach it to the
7625 instruction. This note should contain a simple expression of the
7626 computation performed by this instruction, i.e., one that
7627 `dwarf2out_frame_debug_expr' can handle.
7629 This flag is required for exception handling support on targets
7632 `MEM_READONLY_P (X)'
7633 Nonzero in a `mem', if the memory is statically allocated and
7636 Read-only in this context means never modified during the lifetime
7637 of the program, not necessarily in ROM or in write-disabled pages.
7638 A common example of the later is a shared library's global offset
7639 table. This table is initialized by the runtime loader, so the
7640 memory is technically writable, but after control is transfered
7641 from the runtime loader to the application, this memory will never
7642 be subsequently modified.
7644 Stored in the `unchanging' field and printed as `/u'.
7647 During instruction scheduling, in an `insn', `call_insn' or
7648 `jump_insn', indicates that the previous insn must be scheduled
7649 together with this insn. This is used to ensure that certain
7650 groups of instructions will not be split up by the instruction
7651 scheduling pass, for example, `use' insns before a `call_insn' may
7652 not be separated from the `call_insn'. Stored in the `in_struct'
7653 field and printed as `/s'.
7655 `SET_IS_RETURN_P (X)'
7656 For a `set', nonzero if it is for a return. Stored in the `jump'
7657 field and printed as `/j'.
7659 `SIBLING_CALL_P (X)'
7660 For a `call_insn', nonzero if the insn is a sibling call. Stored
7661 in the `jump' field and printed as `/j'.
7663 `STRING_POOL_ADDRESS_P (X)'
7664 For a `symbol_ref' expression, nonzero if it addresses this
7665 function's string constant pool. Stored in the `frame_related'
7666 field and printed as `/f'.
7668 `SUBREG_PROMOTED_UNSIGNED_P (X)'
7669 Returns a value greater then zero for a `subreg' that has
7670 `SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is
7671 kept zero-extended, zero if it is kept sign-extended, and less
7672 then zero if it is extended some other way via the `ptr_extend'
7673 instruction. Stored in the `unchanging' field and `volatil'
7674 field, printed as `/u' and `/v'. This macro may only be used to
7675 get the value it may not be used to change the value. Use
7676 `SUBREG_PROMOTED_UNSIGNED_SET' to change the value.
7678 `SUBREG_PROMOTED_UNSIGNED_SET (X)'
7679 Set the `unchanging' and `volatil' fields in a `subreg' to reflect
7680 zero, sign, or other extension. If `volatil' is zero, then
7681 `unchanging' as nonzero means zero extension and as zero means
7682 sign extension. If `volatil' is nonzero then some other type of
7683 extension was done via the `ptr_extend' instruction.
7685 `SUBREG_PROMOTED_VAR_P (X)'
7686 Nonzero in a `subreg' if it was made when accessing an object that
7687 was promoted to a wider mode in accord with the `PROMOTED_MODE'
7688 machine description macro (*note Storage Layout::). In this case,
7689 the mode of the `subreg' is the declared mode of the object and
7690 the mode of `SUBREG_REG' is the mode of the register that holds
7691 the object. Promoted variables are always either sign- or
7692 zero-extended to the wider mode on every assignment. Stored in
7693 the `in_struct' field and printed as `/s'.
7695 `SYMBOL_REF_USED (X)'
7696 In a `symbol_ref', indicates that X has been used. This is
7697 normally only used to ensure that X is only declared external
7698 once. Stored in the `used' field.
7700 `SYMBOL_REF_WEAK (X)'
7701 In a `symbol_ref', indicates that X has been declared weak.
7702 Stored in the `return_val' field and printed as `/i'.
7704 `SYMBOL_REF_FLAG (X)'
7705 In a `symbol_ref', this is used as a flag for machine-specific
7706 purposes. Stored in the `volatil' field and printed as `/v'.
7708 Most uses of `SYMBOL_REF_FLAG' are historic and may be subsumed by
7709 `SYMBOL_REF_FLAGS'. Certainly use of `SYMBOL_REF_FLAGS' is
7710 mandatory if the target requires more than one bit of storage.
7712 `PREFETCH_SCHEDULE_BARRIER_P (X)'
7713 In a `prefetch', indicates that the prefetch is a scheduling
7714 barrier. No other INSNs will be moved over it. Stored in the
7715 `volatil' field and printed as `/v'.
7717 These are the fields to which the above macros refer:
7720 In a `mem', 1 means that the memory reference will not trap.
7722 In a `call', 1 means that this pure or const call may possibly
7725 In an RTL dump, this flag is represented as `/c'.
7728 In an `insn' or `set' expression, 1 means that it is part of a
7729 function prologue and sets the stack pointer, sets the frame
7730 pointer, saves a register, or sets up a temporary register to use
7731 in place of the frame pointer.
7733 In `reg' expressions, 1 means that the register holds a pointer.
7735 In `mem' expressions, 1 means that the memory reference holds a
7738 In `symbol_ref' expressions, 1 means that the reference addresses
7739 this function's string constant pool.
7741 In an RTL dump, this flag is represented as `/f'.
7744 In `mem' expressions, it is 1 if the memory datum referred to is
7745 all or part of a structure or array; 0 if it is (or might be) a
7746 scalar variable. A reference through a C pointer has 0 because
7747 the pointer might point to a scalar variable. This information
7748 allows the compiler to determine something about possible cases of
7751 In `reg' expressions, it is 1 if the register has its entire life
7752 contained within the test expression of some loop.
7754 In `subreg' expressions, 1 means that the `subreg' is accessing an
7755 object that has had its mode promoted from a wider mode.
7757 In `label_ref' expressions, 1 means that the referenced label is
7758 outside the innermost loop containing the insn in which the
7759 `label_ref' was found.
7761 In `code_label' expressions, it is 1 if the label may never be
7762 deleted. This is used for labels which are the target of
7763 non-local gotos. Such a label that would have been deleted is
7764 replaced with a `note' of type `NOTE_INSN_DELETED_LABEL'.
7766 In an `insn' during dead-code elimination, 1 means that the insn is
7769 In an `insn' or `jump_insn' during reorg for an insn in the delay
7770 slot of a branch, 1 means that this insn is from the target of the
7773 In an `insn' during instruction scheduling, 1 means that this insn
7774 must be scheduled as part of a group together with the previous
7777 In an RTL dump, this flag is represented as `/s'.
7780 In `reg' expressions, 1 means the register contains the value to
7781 be returned by the current function. On machines that pass
7782 parameters in registers, the same register number may be used for
7783 parameters as well, but this flag is not set on such uses.
7785 In `mem' expressions, 1 means the memory reference is to a scalar
7786 known not to be a member of a structure, union, or array.
7788 In `symbol_ref' expressions, 1 means the referenced symbol is weak.
7790 In `call' expressions, 1 means the call is pure.
7792 In an RTL dump, this flag is represented as `/i'.
7795 In a `mem' expression, 1 means we should keep the alias set for
7796 this mem unchanged when we access a component.
7798 In a `set', 1 means it is for a return.
7800 In a `call_insn', 1 means it is a sibling call.
7802 In an RTL dump, this flag is represented as `/j'.
7805 In `reg' and `mem' expressions, 1 means that the value of the
7806 expression never changes.
7808 In `subreg' expressions, it is 1 if the `subreg' references an
7809 unsigned object whose mode has been promoted to a wider mode.
7811 In an `insn' or `jump_insn' in the delay slot of a branch
7812 instruction, 1 means an annulling branch should be used.
7814 In a `symbol_ref' expression, 1 means that this symbol addresses
7815 something in the per-function constant pool.
7817 In a `call_insn' 1 means that this instruction is a call to a const
7820 In an RTL dump, this flag is represented as `/u'.
7823 This flag is used directly (without an access macro) at the end of
7824 RTL generation for a function, to count the number of times an
7825 expression appears in insns. Expressions that appear more than
7826 once are copied, according to the rules for shared structure
7829 For a `reg', it is used directly (without an access macro) by the
7830 leaf register renumbering code to ensure that each register is only
7833 In a `symbol_ref', it indicates that an external declaration for
7834 the symbol has already been written.
7837 In a `mem', `asm_operands', or `asm_input' expression, it is 1 if
7838 the memory reference is volatile. Volatile memory references may
7839 not be deleted, reordered or combined.
7841 In a `symbol_ref' expression, it is used for machine-specific
7844 In a `reg' expression, it is 1 if the value is a user-level
7845 variable. 0 indicates an internal compiler temporary.
7847 In an `insn', 1 means the insn has been deleted.
7849 In `label_ref' and `reg_label' expressions, 1 means a reference to
7852 In `prefetch' expressions, 1 means that the containing insn is a
7855 In an RTL dump, this flag is represented as `/v'.
7858 File: gccint.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL
7863 A machine mode describes a size of data object and the representation
7864 used for it. In the C code, machine modes are represented by an
7865 enumeration type, `enum machine_mode', defined in `machmode.def'. Each
7866 RTL expression has room for a machine mode and so do certain kinds of
7867 tree expressions (declarations and types, to be precise).
7869 In debugging dumps and machine descriptions, the machine mode of an RTL
7870 expression is written after the expression code with a colon to separate
7871 them. The letters `mode' which appear at the end of each machine mode
7872 name are omitted. For example, `(reg:SI 38)' is a `reg' expression
7873 with machine mode `SImode'. If the mode is `VOIDmode', it is not
7876 Here is a table of machine modes. The term "byte" below refers to an
7877 object of `BITS_PER_UNIT' bits (*note Storage Layout::).
7880 "Bit" mode represents a single bit, for predicate registers.
7883 "Quarter-Integer" mode represents a single byte treated as an
7887 "Half-Integer" mode represents a two-byte integer.
7890 "Partial Single Integer" mode represents an integer which occupies
7891 four bytes but which doesn't really use all four. On some
7892 machines, this is the right mode to use for pointers.
7895 "Single Integer" mode represents a four-byte integer.
7898 "Partial Double Integer" mode represents an integer which occupies
7899 eight bytes but which doesn't really use all eight. On some
7900 machines, this is the right mode to use for certain pointers.
7903 "Double Integer" mode represents an eight-byte integer.
7906 "Tetra Integer" (?) mode represents a sixteen-byte integer.
7909 "Octa Integer" (?) mode represents a thirty-two-byte integer.
7912 "Quarter-Floating" mode represents a quarter-precision (single
7913 byte) floating point number.
7916 "Half-Floating" mode represents a half-precision (two byte)
7917 floating point number.
7920 "Three-Quarter-Floating" (?) mode represents a
7921 three-quarter-precision (three byte) floating point number.
7924 "Single Floating" mode represents a four byte floating point
7925 number. In the common case, of a processor with IEEE arithmetic
7926 and 8-bit bytes, this is a single-precision IEEE floating point
7927 number; it can also be used for double-precision (on processors
7928 with 16-bit bytes) and single-precision VAX and IBM types.
7931 "Double Floating" mode represents an eight byte floating point
7932 number. In the common case, of a processor with IEEE arithmetic
7933 and 8-bit bytes, this is a double-precision IEEE floating point
7937 "Extended Floating" mode represents an IEEE extended floating point
7938 number. This mode only has 80 meaningful bits (ten bytes). Some
7939 processors require such numbers to be padded to twelve bytes,
7940 others to sixteen; this mode is used for either.
7943 "Single Decimal Floating" mode represents a four byte decimal
7944 floating point number (as distinct from conventional binary
7948 "Double Decimal Floating" mode represents an eight byte decimal
7949 floating point number.
7952 "Tetra Decimal Floating" mode represents a sixteen byte decimal
7953 floating point number all 128 of whose bits are meaningful.
7956 "Tetra Floating" mode represents a sixteen byte floating point
7957 number all 128 of whose bits are meaningful. One common use is the
7958 IEEE quad-precision format.
7961 "Quarter-Fractional" mode represents a single byte treated as a
7962 signed fractional number. The default format is "s.7".
7965 "Half-Fractional" mode represents a two-byte signed fractional
7966 number. The default format is "s.15".
7969 "Single Fractional" mode represents a four-byte signed fractional
7970 number. The default format is "s.31".
7973 "Double Fractional" mode represents an eight-byte signed
7974 fractional number. The default format is "s.63".
7977 "Tetra Fractional" mode represents a sixteen-byte signed
7978 fractional number. The default format is "s.127".
7981 "Unsigned Quarter-Fractional" mode represents a single byte
7982 treated as an unsigned fractional number. The default format is
7986 "Unsigned Half-Fractional" mode represents a two-byte unsigned
7987 fractional number. The default format is ".16".
7990 "Unsigned Single Fractional" mode represents a four-byte unsigned
7991 fractional number. The default format is ".32".
7994 "Unsigned Double Fractional" mode represents an eight-byte unsigned
7995 fractional number. The default format is ".64".
7998 "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned
7999 fractional number. The default format is ".128".
8002 "Half-Accumulator" mode represents a two-byte signed accumulator.
8003 The default format is "s8.7".
8006 "Single Accumulator" mode represents a four-byte signed
8007 accumulator. The default format is "s16.15".
8010 "Double Accumulator" mode represents an eight-byte signed
8011 accumulator. The default format is "s32.31".
8014 "Tetra Accumulator" mode represents a sixteen-byte signed
8015 accumulator. The default format is "s64.63".
8018 "Unsigned Half-Accumulator" mode represents a two-byte unsigned
8019 accumulator. The default format is "8.8".
8022 "Unsigned Single Accumulator" mode represents a four-byte unsigned
8023 accumulator. The default format is "16.16".
8026 "Unsigned Double Accumulator" mode represents an eight-byte
8027 unsigned accumulator. The default format is "32.32".
8030 "Unsigned Tetra Accumulator" mode represents a sixteen-byte
8031 unsigned accumulator. The default format is "64.64".
8034 "Condition Code" mode represents the value of a condition code,
8035 which is a machine-specific set of bits used to represent the
8036 result of a comparison operation. Other machine-specific modes
8037 may also be used for the condition code. These modes are not used
8038 on machines that use `cc0' (see *note Condition Code::).
8041 "Block" mode represents values that are aggregates to which none of
8042 the other modes apply. In RTL, only memory references can have
8043 this mode, and only if they appear in string-move or vector
8044 instructions. On machines which have no such instructions,
8045 `BLKmode' will not appear in RTL.
8048 Void mode means the absence of a mode or an unspecified mode. For
8049 example, RTL expressions of code `const_int' have mode `VOIDmode'
8050 because they can be taken to have whatever mode the context
8051 requires. In debugging dumps of RTL, `VOIDmode' is expressed by
8052 the absence of any mode.
8054 `QCmode, HCmode, SCmode, DCmode, XCmode, TCmode'
8055 These modes stand for a complex number represented as a pair of
8056 floating point values. The floating point values are in `QFmode',
8057 `HFmode', `SFmode', `DFmode', `XFmode', and `TFmode', respectively.
8059 `CQImode, CHImode, CSImode, CDImode, CTImode, COImode'
8060 These modes stand for a complex number represented as a pair of
8061 integer values. The integer values are in `QImode', `HImode',
8062 `SImode', `DImode', `TImode', and `OImode', respectively.
8064 The machine description defines `Pmode' as a C macro which expands
8065 into the machine mode used for addresses. Normally this is the mode
8066 whose size is `BITS_PER_WORD', `SImode' on 32-bit machines.
8068 The only modes which a machine description must support are `QImode',
8069 and the modes corresponding to `BITS_PER_WORD', `FLOAT_TYPE_SIZE' and
8070 `DOUBLE_TYPE_SIZE'. The compiler will attempt to use `DImode' for
8071 8-byte structures and unions, but this can be prevented by overriding
8072 the definition of `MAX_FIXED_MODE_SIZE'. Alternatively, you can have
8073 the compiler use `TImode' for 16-byte structures and unions. Likewise,
8074 you can arrange for the C type `short int' to avoid using `HImode'.
8076 Very few explicit references to machine modes remain in the compiler
8077 and these few references will soon be removed. Instead, the machine
8078 modes are divided into mode classes. These are represented by the
8079 enumeration type `enum mode_class' defined in `machmode.h'. The
8080 possible mode classes are:
8083 Integer modes. By default these are `BImode', `QImode', `HImode',
8084 `SImode', `DImode', `TImode', and `OImode'.
8087 The "partial integer" modes, `PQImode', `PHImode', `PSImode' and
8091 Floating point modes. By default these are `QFmode', `HFmode',
8092 `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'.
8094 `MODE_DECIMAL_FLOAT'
8095 Decimal floating point modes. By default these are `SDmode',
8096 `DDmode' and `TDmode'.
8099 Signed fractional modes. By default these are `QQmode', `HQmode',
8100 `SQmode', `DQmode' and `TQmode'.
8103 Unsigned fractional modes. By default these are `UQQmode',
8104 `UHQmode', `USQmode', `UDQmode' and `UTQmode'.
8107 Signed accumulator modes. By default these are `HAmode',
8108 `SAmode', `DAmode' and `TAmode'.
8111 Unsigned accumulator modes. By default these are `UHAmode',
8112 `USAmode', `UDAmode' and `UTAmode'.
8115 Complex integer modes. (These are not currently implemented).
8117 `MODE_COMPLEX_FLOAT'
8118 Complex floating point modes. By default these are `QCmode',
8119 `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'.
8122 Algol or Pascal function variables including a static chain.
8123 (These are not currently implemented).
8126 Modes representing condition code values. These are `CCmode' plus
8127 any `CC_MODE' modes listed in the `MACHINE-modes.def'. *Note Jump
8128 Patterns::, also see *Note Condition Code::.
8131 This is a catchall mode class for modes which don't fit into the
8132 above classes. Currently `VOIDmode' and `BLKmode' are in
8135 Here are some C macros that relate to machine modes:
8138 Returns the machine mode of the RTX X.
8140 `PUT_MODE (X, NEWMODE)'
8141 Alters the machine mode of the RTX X to be NEWMODE.
8144 Stands for the number of machine modes available on the target
8145 machine. This is one greater than the largest numeric value of any
8149 Returns the name of mode M as a string.
8151 `GET_MODE_CLASS (M)'
8152 Returns the mode class of mode M.
8154 `GET_MODE_WIDER_MODE (M)'
8155 Returns the next wider natural mode. For example, the expression
8156 `GET_MODE_WIDER_MODE (QImode)' returns `HImode'.
8159 Returns the size in bytes of a datum of mode M.
8161 `GET_MODE_BITSIZE (M)'
8162 Returns the size in bits of a datum of mode M.
8165 Returns the number of integral bits of a datum of fixed-point mode
8169 Returns the number of fractional bits of a datum of fixed-point
8173 Returns a bitmask containing 1 for all bits in a word that fit
8174 within mode M. This macro can only be used for modes whose
8175 bitsize is less than or equal to `HOST_BITS_PER_INT'.
8177 `GET_MODE_ALIGNMENT (M)'
8178 Return the required alignment, in bits, for an object of mode M.
8180 `GET_MODE_UNIT_SIZE (M)'
8181 Returns the size in bytes of the subunits of a datum of mode M.
8182 This is the same as `GET_MODE_SIZE' except in the case of complex
8183 modes. For them, the unit size is the size of the real or
8186 `GET_MODE_NUNITS (M)'
8187 Returns the number of units contained in a mode, i.e.,
8188 `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'.
8190 `GET_CLASS_NARROWEST_MODE (C)'
8191 Returns the narrowest mode in mode class C.
8193 The global variables `byte_mode' and `word_mode' contain modes whose
8194 classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or
8195 `BITS_PER_WORD', respectively. On 32-bit machines, these are `QImode'
8196 and `SImode', respectively.
8199 File: gccint.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL
8201 10.7 Constant Expression Types
8202 ==============================
8204 The simplest RTL expressions are those that represent constant values.
8207 This type of expression represents the integer value I. I is
8208 customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)',
8209 which is equivalent to `XWINT (EXP, 0)'.
8211 Constants generated for modes with fewer bits than `HOST_WIDE_INT'
8212 must be sign extended to full width (e.g., with `gen_int_mode').
8214 There is only one expression object for the integer value zero; it
8215 is the value of the variable `const0_rtx'. Likewise, the only
8216 expression for integer value one is found in `const1_rtx', the only
8217 expression for integer value two is found in `const2_rtx', and the
8218 only expression for integer value negative one is found in
8219 `constm1_rtx'. Any attempt to create an expression of code
8220 `const_int' and value zero, one, two or negative one will return
8221 `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as
8224 Similarly, there is only one object for the integer whose value is
8225 `STORE_FLAG_VALUE'. It is found in `const_true_rtx'. If
8226 `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will
8227 point to the same object. If `STORE_FLAG_VALUE' is -1,
8228 `const_true_rtx' and `constm1_rtx' will point to the same object.
8230 `(const_double:M I0 I1 ...)'
8231 Represents either a floating-point constant of mode M or an
8232 integer constant too large to fit into `HOST_BITS_PER_WIDE_INT'
8233 bits but small enough to fit within twice that number of bits (GCC
8234 does not provide a mechanism to represent even larger constants).
8235 In the latter case, M will be `VOIDmode'.
8237 If M is `VOIDmode', the bits of the value are stored in I0 and I1.
8238 I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and
8239 I1 with `CONST_DOUBLE_HIGH'.
8241 If the constant is floating point (regardless of its precision),
8242 then the number of integers used to store the value depends on the
8243 size of `REAL_VALUE_TYPE' (*note Floating Point::). The integers
8244 represent a floating point number, but not precisely in the target
8245 machine's or host machine's floating point format. To convert
8246 them to the precise bit pattern used by the target machine, use
8247 the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data
8250 `(const_fixed:M ...)'
8251 Represents a fixed-point constant of mode M. The operand is a
8252 data structure of type `struct fixed_value' and is accessed with
8253 the macro `CONST_FIXED_VALUE'. The high part of data is accessed
8254 with `CONST_FIXED_VALUE_HIGH'; the low part is accessed with
8255 `CONST_FIXED_VALUE_LOW'.
8257 `(const_vector:M [X0 X1 ...])'
8258 Represents a vector constant. The square brackets stand for the
8259 vector containing the constant elements. X0, X1 and so on are the
8260 `const_int', `const_double' or `const_fixed' elements.
8262 The number of units in a `const_vector' is obtained with the macro
8263 `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'.
8265 Individual elements in a vector constant are accessed with the
8266 macro `CONST_VECTOR_ELT' as in `CONST_VECTOR_ELT (V, N)' where V
8267 is the vector constant and N is the element desired.
8269 `(const_string STR)'
8270 Represents a constant string with value STR. Currently this is
8271 used only for insn attributes (*note Insn Attributes::) since
8272 constant strings in C are placed in memory.
8274 `(symbol_ref:MODE SYMBOL)'
8275 Represents the value of an assembler label for data. SYMBOL is a
8276 string that describes the name of the assembler label. If it
8277 starts with a `*', the label is the rest of SYMBOL not including
8278 the `*'. Otherwise, the label is SYMBOL, usually prefixed with
8281 The `symbol_ref' contains a mode, which is usually `Pmode'.
8282 Usually that is the only mode for which a symbol is directly valid.
8284 `(label_ref:MODE LABEL)'
8285 Represents the value of an assembler label for code. It contains
8286 one operand, an expression, which must be a `code_label' or a
8287 `note' of type `NOTE_INSN_DELETED_LABEL' that appears in the
8288 instruction sequence to identify the place where the label should
8291 The reason for using a distinct expression type for code label
8292 references is so that jump optimization can distinguish them.
8294 The `label_ref' contains a mode, which is usually `Pmode'.
8295 Usually that is the only mode for which a label is directly valid.
8298 Represents a constant that is the result of an assembly-time
8299 arithmetic computation. The operand, EXP, is an expression that
8300 contains only constants (`const_int', `symbol_ref' and `label_ref'
8301 expressions) combined with `plus' and `minus'. However, not all
8302 combinations are valid, since the assembler cannot do arbitrary
8303 arithmetic on relocatable symbols.
8305 M should be `Pmode'.
8308 Represents the high-order bits of EXP, usually a `symbol_ref'.
8309 The number of bits is machine-dependent and is normally the number
8310 of bits specified in an instruction that initializes the high
8311 order bits of a register. It is used with `lo_sum' to represent
8312 the typical two-instruction sequence used in RISC machines to
8313 reference a global memory location.
8315 M should be `Pmode'.
8317 The macro `CONST0_RTX (MODE)' refers to an expression with value 0 in
8318 mode MODE. If mode MODE is of mode class `MODE_INT', it returns
8319 `const0_rtx'. If mode MODE is of mode class `MODE_FLOAT', it returns a
8320 `CONST_DOUBLE' expression in mode MODE. Otherwise, it returns a
8321 `CONST_VECTOR' expression in mode MODE. Similarly, the macro
8322 `CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE
8323 and similarly for `CONST2_RTX'. The `CONST1_RTX' and `CONST2_RTX'
8324 macros are undefined for vector modes.
8327 File: gccint.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL
8329 10.8 Registers and Memory
8330 =========================
8332 Here are the RTL expression types for describing access to machine
8333 registers and to main memory.
8336 For small values of the integer N (those that are less than
8337 `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine
8338 register number N: a "hard register". For larger values of N, it
8339 stands for a temporary value or "pseudo register". The compiler's
8340 strategy is to generate code assuming an unlimited number of such
8341 pseudo registers, and later convert them into hard registers or
8342 into memory references.
8344 M is the machine mode of the reference. It is necessary because
8345 machines can generally refer to each register in more than one
8346 mode. For example, a register may contain a full word but there
8347 may be instructions to refer to it as a half word or as a single
8348 byte, as well as instructions to refer to it as a floating point
8349 number of various precisions.
8351 Even for a register that the machine can access in only one mode,
8352 the mode must always be specified.
8354 The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine
8355 description, since the number of hard registers on the machine is
8356 an invariant characteristic of the machine. Note, however, that
8357 not all of the machine registers must be general registers. All
8358 the machine registers that can be used for storage of data are
8359 given hard register numbers, even those that can be used only in
8360 certain instructions or can hold only certain types of data.
8362 A hard register may be accessed in various modes throughout one
8363 function, but each pseudo register is given a natural mode and is
8364 accessed only in that mode. When it is necessary to describe an
8365 access to a pseudo register using a nonnatural mode, a `subreg'
8368 A `reg' expression with a machine mode that specifies more than
8369 one word of data may actually stand for several consecutive
8370 registers. If in addition the register number specifies a
8371 hardware register, then it actually represents several consecutive
8372 hardware registers starting with the specified one.
8374 Each pseudo register number used in a function's RTL code is
8375 represented by a unique `reg' expression.
8377 Some pseudo register numbers, those within the range of
8378 `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear
8379 during the RTL generation phase and are eliminated before the
8380 optimization phases. These represent locations in the stack frame
8381 that cannot be determined until RTL generation for the function
8382 has been completed. The following virtual register numbers are
8385 `VIRTUAL_INCOMING_ARGS_REGNUM'
8386 This points to the first word of the incoming arguments
8387 passed on the stack. Normally these arguments are placed
8388 there by the caller, but the callee may have pushed some
8389 arguments that were previously passed in registers.
8391 When RTL generation is complete, this virtual register is
8392 replaced by the sum of the register given by
8393 `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'.
8395 `VIRTUAL_STACK_VARS_REGNUM'
8396 If `FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this
8397 points to immediately above the first variable on the stack.
8398 Otherwise, it points to the first variable on the stack.
8400 `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the
8401 register given by `FRAME_POINTER_REGNUM' and the value
8402 `STARTING_FRAME_OFFSET'.
8404 `VIRTUAL_STACK_DYNAMIC_REGNUM'
8405 This points to the location of dynamically allocated memory
8406 on the stack immediately after the stack pointer has been
8407 adjusted by the amount of memory desired.
8409 This virtual register is replaced by the sum of the register
8410 given by `STACK_POINTER_REGNUM' and the value
8411 `STACK_DYNAMIC_OFFSET'.
8413 `VIRTUAL_OUTGOING_ARGS_REGNUM'
8414 This points to the location in the stack at which outgoing
8415 arguments should be written when the stack is pre-pushed
8416 (arguments pushed using push insns should always use
8417 `STACK_POINTER_REGNUM').
8419 This virtual register is replaced by the sum of the register
8420 given by `STACK_POINTER_REGNUM' and the value
8421 `STACK_POINTER_OFFSET'.
8423 `(subreg:M1 REG:M2 BYTENUM)'
8424 `subreg' expressions are used to refer to a register in a machine
8425 mode other than its natural one, or to refer to one register of a
8426 multi-part `reg' that actually refers to several registers.
8428 Each pseudo register has a natural mode. If it is necessary to
8429 operate on it in a different mode, the register must be enclosed
8432 There are currently three supported types for the first operand of
8434 * pseudo registers This is the most common case. Most
8435 `subreg's have pseudo `reg's as their first operand.
8437 * mem `subreg's of `mem' were common in earlier versions of GCC
8438 and are still supported. During the reload pass these are
8439 replaced by plain `mem's. On machines that do not do
8440 instruction scheduling, use of `subreg's of `mem' are still
8441 used, but this is no longer recommended. Such `subreg's are
8442 considered to be `register_operand's rather than
8443 `memory_operand's before and during reload. Because of this,
8444 the scheduling passes cannot properly schedule instructions
8445 with `subreg's of `mem', so for machines that do scheduling,
8446 `subreg's of `mem' should never be used. To support this,
8447 the combine and recog passes have explicit code to inhibit
8448 the creation of `subreg's of `mem' when `INSN_SCHEDULING' is
8451 The use of `subreg's of `mem' after the reload pass is an area
8452 that is not well understood and should be avoided. There is
8453 still some code in the compiler to support this, but this
8454 code has possibly rotted. This use of `subreg's is
8455 discouraged and will most likely not be supported in the
8458 * hard registers It is seldom necessary to wrap hard registers
8459 in `subreg's; such registers would normally reduce to a
8460 single `reg' rtx. This use of `subreg's is discouraged and
8461 may not be supported in the future.
8464 `subreg's of `subreg's are not supported. Using
8465 `simplify_gen_subreg' is the recommended way to avoid this problem.
8467 `subreg's come in two distinct flavors, each having its own usage
8471 When M1 is strictly wider than M2, the `subreg' expression is
8472 called "paradoxical". The canonical test for this class of
8475 GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2)
8477 Paradoxical `subreg's can be used as both lvalues and rvalues.
8478 When used as an lvalue, the low-order bits of the source value
8479 are stored in REG and the high-order bits are discarded.
8480 When used as an rvalue, the low-order bits of the `subreg' are
8481 taken from REG while the high-order bits may or may not be
8484 The high-order bits of rvalues are in the following
8487 * `subreg's of `mem' When M2 is smaller than a word, the
8488 macro `LOAD_EXTEND_OP', can control how the high-order
8491 * `subreg' of `reg's The upper bits are defined when
8492 `SUBREG_PROMOTED_VAR_P' is true.
8493 `SUBREG_PROMOTED_UNSIGNED_P' describes what the upper
8494 bits hold. Such subregs usually represent local
8495 variables, register variables and parameter pseudo
8496 variables that have been promoted to a wider mode.
8499 BYTENUM is always zero for a paradoxical `subreg', even on
8502 For example, the paradoxical `subreg':
8504 (set (subreg:SI (reg:HI X) 0) Y)
8506 stores the lower 2 bytes of Y in X and discards the upper 2
8507 bytes. A subsequent:
8509 (set Z (subreg:SI (reg:HI X) 0))
8511 would set the lower two bytes of Z to Y and set the upper two
8512 bytes to an unknown value assuming `SUBREG_PROMOTED_VAR_P' is
8516 When M1 is at least as narrow as M2 the `subreg' expression
8519 Normal `subreg's restrict consideration to certain bits of
8520 REG. There are two cases. If M1 is smaller than a word, the
8521 `subreg' refers to the least-significant part (or "lowpart")
8522 of one word of REG. If M1 is word-sized or greater, the
8523 `subreg' refers to one or more complete words.
8525 When used as an lvalue, `subreg' is a word-based accessor.
8526 Storing to a `subreg' modifies all the words of REG that
8527 overlap the `subreg', but it leaves the other words of REG
8530 When storing to a normal `subreg' that is smaller than a word,
8531 the other bits of the referenced word are usually left in an
8532 undefined state. This laxity makes it easier to generate
8533 efficient code for such instructions. To represent an
8534 instruction that preserves all the bits outside of those in
8535 the `subreg', use `strict_low_part' or `zero_extract' around
8538 BYTENUM must identify the offset of the first byte of the
8539 `subreg' from the start of REG, assuming that REG is laid out
8540 in memory order. The memory order of bytes is defined by two
8541 target macros, `WORDS_BIG_ENDIAN' and `BYTES_BIG_ENDIAN':
8543 * `WORDS_BIG_ENDIAN', if set to 1, says that byte number
8544 zero is part of the most significant word; otherwise, it
8545 is part of the least significant word.
8547 * `BYTES_BIG_ENDIAN', if set to 1, says that byte number
8548 zero is the most significant byte within a word;
8549 otherwise, it is the least significant byte within a
8552 On a few targets, `FLOAT_WORDS_BIG_ENDIAN' disagrees with
8553 `WORDS_BIG_ENDIAN'. However, most parts of the compiler treat
8554 floating point values as if they had the same endianness as
8555 integer values. This works because they handle them solely
8556 as a collection of integer values, with no particular
8557 numerical value. Only real.c and the runtime libraries care
8558 about `FLOAT_WORDS_BIG_ENDIAN'.
8562 (subreg:HI (reg:SI X) 2)
8564 on a `BYTES_BIG_ENDIAN', `UNITS_PER_WORD == 4' target is the
8567 (subreg:HI (reg:SI X) 0)
8569 on a little-endian, `UNITS_PER_WORD == 4' target. Both
8570 `subreg's access the lower two bytes of register X.
8573 A `MODE_PARTIAL_INT' mode behaves as if it were as wide as the
8574 corresponding `MODE_INT' mode, except that it has an unknown
8575 number of undefined bits. For example:
8577 (subreg:PSI (reg:SI 0) 0)
8579 accesses the whole of `(reg:SI 0)', but the exact relationship
8580 between the `PSImode' value and the `SImode' value is not defined.
8581 If we assume `UNITS_PER_WORD <= 4', then the following two
8584 (subreg:PSI (reg:DI 0) 0)
8585 (subreg:PSI (reg:DI 0) 4)
8587 represent independent 4-byte accesses to the two halves of
8588 `(reg:DI 0)'. Both `subreg's have an unknown number of undefined
8591 If `UNITS_PER_WORD <= 2' then these two `subreg's:
8593 (subreg:HI (reg:PSI 0) 0)
8594 (subreg:HI (reg:PSI 0) 2)
8596 represent independent 2-byte accesses that together span the whole
8597 of `(reg:PSI 0)'. Storing to the first `subreg' does not affect
8598 the value of the second, and vice versa. `(reg:PSI 0)' has an
8599 unknown number of undefined bits, so the assignment:
8601 (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
8603 does not guarantee that `(subreg:HI (reg:PSI 0) 0)' has the value
8606 The rules above apply to both pseudo REGs and hard REGs. If the
8607 semantics are not correct for particular combinations of M1, M2
8608 and hard REG, the target-specific code must ensure that those
8609 combinations are never used. For example:
8611 CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS)
8613 must be true for every class CLASS that includes REG.
8615 The first operand of a `subreg' expression is customarily accessed
8616 with the `SUBREG_REG' macro and the second operand is customarily
8617 accessed with the `SUBREG_BYTE' macro.
8619 It has been several years since a platform in which
8620 `BYTES_BIG_ENDIAN' not equal to `WORDS_BIG_ENDIAN' has been
8621 tested. Anyone wishing to support such a platform in the future
8622 may be confronted with code rot.
8625 This represents a scratch register that will be required for the
8626 execution of a single instruction and not used subsequently. It is
8627 converted into a `reg' by either the local register allocator or
8630 `scratch' is usually present inside a `clobber' operation (*note
8634 This refers to the machine's condition code register. It has no
8635 operands and may not have a machine mode. There are two ways to
8638 * To stand for a complete set of condition code flags. This is
8639 best on most machines, where each comparison sets the entire
8642 With this technique, `(cc0)' may be validly used in only two
8643 contexts: as the destination of an assignment (in test and
8644 compare instructions) and in comparison operators comparing
8645 against zero (`const_int' with value zero; that is to say,
8648 * To stand for a single flag that is the result of a single
8649 condition. This is useful on machines that have only a
8650 single flag bit, and in which comparison instructions must
8651 specify the condition to test.
8653 With this technique, `(cc0)' may be validly used in only two
8654 contexts: as the destination of an assignment (in test and
8655 compare instructions) where the source is a comparison
8656 operator, and as the first operand of `if_then_else' (in a
8657 conditional branch).
8659 There is only one expression object of code `cc0'; it is the value
8660 of the variable `cc0_rtx'. Any attempt to create an expression of
8661 code `cc0' will return `cc0_rtx'.
8663 Instructions can set the condition code implicitly. On many
8664 machines, nearly all instructions set the condition code based on
8665 the value that they compute or store. It is not necessary to
8666 record these actions explicitly in the RTL because the machine
8667 description includes a prescription for recognizing the
8668 instructions that do so (by means of the macro
8669 `NOTICE_UPDATE_CC'). *Note Condition Code::. Only instructions
8670 whose sole purpose is to set the condition code, and instructions
8671 that use the condition code, need mention `(cc0)'.
8673 On some machines, the condition code register is given a register
8674 number and a `reg' is used instead of `(cc0)'. This is usually the
8675 preferable approach if only a small subset of instructions modify
8676 the condition code. Other machines store condition codes in
8677 general registers; in such cases a pseudo register should be used.
8679 Some machines, such as the SPARC and RS/6000, have two sets of
8680 arithmetic instructions, one that sets and one that does not set
8681 the condition code. This is best handled by normally generating
8682 the instruction that does not set the condition code, and making a
8683 pattern that both performs the arithmetic and sets the condition
8684 code register (which would not be `(cc0)' in this case). For
8685 examples, search for `addcc' and `andcc' in `sparc.md'.
8688 This represents the machine's program counter. It has no operands
8689 and may not have a machine mode. `(pc)' may be validly used only
8690 in certain specific contexts in jump instructions.
8692 There is only one expression object of code `pc'; it is the value
8693 of the variable `pc_rtx'. Any attempt to create an expression of
8694 code `pc' will return `pc_rtx'.
8696 All instructions that do not jump alter the program counter
8697 implicitly by incrementing it, but there is no need to mention
8700 `(mem:M ADDR ALIAS)'
8701 This RTX represents a reference to main memory at an address
8702 represented by the expression ADDR. M specifies how large a unit
8703 of memory is accessed. ALIAS specifies an alias set for the
8704 reference. In general two items are in different alias sets if
8705 they cannot reference the same memory address.
8707 The construct `(mem:BLK (scratch))' is considered to alias all
8708 other memories. Thus it may be used as a memory barrier in
8709 epilogue stack deallocation patterns.
8712 This RTX represents the concatenation of two other RTXs. This is
8713 used for complex values. It should only appear in the RTL
8714 attached to declarations and during RTL generation. It should not
8715 appear in the ordinary insn chain.
8717 `(concatnM [RTX ...])'
8718 This RTX represents the concatenation of all the RTX to make a
8719 single value. Like `concat', this should only appear in
8720 declarations, and not in the insn chain.
8723 File: gccint.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL
8725 10.9 RTL Expressions for Arithmetic
8726 ===================================
8728 Unless otherwise specified, all the operands of arithmetic expressions
8729 must be valid for mode M. An operand is valid for mode M if it has
8730 mode M, or if it is a `const_int' or `const_double' and M is a mode of
8733 For commutative binary operations, constants should be placed in the
8739 These three expressions all represent the sum of the values
8740 represented by X and Y carried out in machine mode M. They differ
8741 in their behavior on overflow of integer modes. `plus' wraps
8742 round modulo the width of M; `ss_plus' saturates at the maximum
8743 signed value representable in M; `us_plus' saturates at the
8744 maximum unsigned value.
8747 This expression represents the sum of X and the low-order bits of
8748 Y. It is used with `high' (*note Constants::) to represent the
8749 typical two-instruction sequence used in RISC machines to
8750 reference a global memory location.
8752 The number of low order bits is machine-dependent but is normally
8753 the number of bits in a `Pmode' item minus the number of bits set
8756 M should be `Pmode'.
8761 These three expressions represent the result of subtracting Y from
8762 X, carried out in mode M. Behavior on overflow is the same as for
8763 the three variants of `plus' (see above).
8766 Represents the result of subtracting Y from X for purposes of
8767 comparison. The result is computed without overflow, as if with
8770 Of course, machines can't really subtract with infinite precision.
8771 However, they can pretend to do so when only the sign of the
8772 result will be used, which is the case when the result is stored
8773 in the condition code. And that is the _only_ way this kind of
8774 expression may validly be used: as a value to be stored in the
8775 condition codes, either `(cc0)' or a register. *Note
8778 The mode M is not related to the modes of X and Y, but instead is
8779 the mode of the condition code value. If `(cc0)' is used, it is
8780 `VOIDmode'. Otherwise it is some mode in class `MODE_CC', often
8781 `CCmode'. *Note Condition Code::. If M is `VOIDmode' or
8782 `CCmode', the operation returns sufficient information (in an
8783 unspecified format) so that any comparison operator can be applied
8784 to the result of the `COMPARE' operation. For other modes in
8785 class `MODE_CC', the operation only returns a subset of this
8788 Normally, X and Y must have the same mode. Otherwise, `compare'
8789 is valid only if the mode of X is in class `MODE_INT' and Y is a
8790 `const_int' or `const_double' with mode `VOIDmode'. The mode of X
8791 determines what mode the comparison is to be done in; thus it must
8794 If one of the operands is a constant, it should be placed in the
8795 second operand and the comparison code adjusted as appropriate.
8797 A `compare' specifying two `VOIDmode' constants is not valid since
8798 there is no way to know in what mode the comparison is to be
8799 performed; the comparison must either be folded during the
8800 compilation or the first operand must be loaded into a register
8801 while its mode is still known.
8806 These two expressions represent the negation (subtraction from
8807 zero) of the value represented by X, carried out in mode M. They
8808 differ in the behavior on overflow of integer modes. In the case
8809 of `neg', the negation of the operand may be a number not
8810 representable in mode M, in which case it is truncated to M.
8811 `ss_neg' and `us_neg' ensure that an out-of-bounds result
8812 saturates to the maximum or minimum signed or unsigned value.
8817 Represents the signed product of the values represented by X and Y
8818 carried out in machine mode M. `ss_mult' and `us_mult' ensure
8819 that an out-of-bounds result saturates to the maximum or minimum
8820 signed or unsigned value.
8822 Some machines support a multiplication that generates a product
8823 wider than the operands. Write the pattern for this as
8825 (mult:M (sign_extend:M X) (sign_extend:M Y))
8827 where M is wider than the modes of X and Y, which need not be the
8830 For unsigned widening multiplication, use the same idiom, but with
8831 `zero_extend' instead of `sign_extend'.
8835 Represents the quotient in signed division of X by Y, carried out
8836 in machine mode M. If M is a floating point mode, it represents
8837 the exact quotient; otherwise, the integerized quotient. `ss_div'
8838 ensures that an out-of-bounds result saturates to the maximum or
8839 minimum signed value.
8841 Some machines have division instructions in which the operands and
8842 quotient widths are not all the same; you should represent such
8843 instructions using `truncate' and `sign_extend' as in,
8845 (truncate:M1 (div:M2 X (sign_extend:M2 Y)))
8849 Like `div' but represents unsigned division. `us_div' ensures
8850 that an out-of-bounds result saturates to the maximum or minimum
8855 Like `div' and `udiv' but represent the remainder instead of the
8860 Represents the smaller (for `smin') or larger (for `smax') of X
8861 and Y, interpreted as signed values in mode M. When used with
8862 floating point, if both operands are zeros, or if either operand
8863 is `NaN', then it is unspecified which of the two operands is
8864 returned as the result.
8868 Like `smin' and `smax', but the values are interpreted as unsigned
8872 Represents the bitwise complement of the value represented by X,
8873 carried out in mode M, which must be a fixed-point machine mode.
8876 Represents the bitwise logical-and of the values represented by X
8877 and Y, carried out in machine mode M, which must be a fixed-point
8881 Represents the bitwise inclusive-or of the values represented by X
8882 and Y, carried out in machine mode M, which must be a fixed-point
8886 Represents the bitwise exclusive-or of the values represented by X
8887 and Y, carried out in machine mode M, which must be a fixed-point
8893 These three expressions represent the result of arithmetically
8894 shifting X left by C places. They differ in their behavior on
8895 overflow of integer modes. An `ashift' operation is a plain shift
8896 with no special behavior in case of a change in the sign bit;
8897 `ss_ashift' and `us_ashift' saturates to the minimum or maximum
8898 representable value if any of the bits shifted out differs from
8901 X have mode M, a fixed-point machine mode. C be a fixed-point
8902 mode or be a constant with mode `VOIDmode'; which mode is
8903 determined by the mode called for in the machine description entry
8904 for the left-shift instruction. For example, on the VAX, the mode
8905 of C is `QImode' regardless of M.
8909 Like `ashift' but for right shift. Unlike the case for left shift,
8910 these two operations are distinct.
8914 Similar but represent left and right rotate. If C is a constant,
8920 Represents the absolute value of X, computed in mode M. `ss_abs'
8921 ensures that an out-of-bounds result saturates to the maximum
8925 Represents the square root of X, computed in mode M. Most often M
8926 will be a floating point mode.
8929 Represents one plus the index of the least significant 1-bit in X,
8930 represented as an integer of mode M. (The value is zero if X is
8931 zero.) The mode of X need not be M; depending on the target
8932 machine, various mode combinations may be valid.
8935 Represents the number of leading 0-bits in X, represented as an
8936 integer of mode M, starting at the most significant bit position.
8937 If X is zero, the value is determined by
8938 `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Note that this is one
8939 of the few expressions that is not invariant under widening. The
8940 mode of X will usually be an integer mode.
8943 Represents the number of trailing 0-bits in X, represented as an
8944 integer of mode M, starting at the least significant bit position.
8945 If X is zero, the value is determined by
8946 `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Except for this case,
8947 `ctz(x)' is equivalent to `ffs(X) - 1'. The mode of X will
8948 usually be an integer mode.
8951 Represents the number of 1-bits in X, represented as an integer of
8952 mode M. The mode of X will usually be an integer mode.
8955 Represents the number of 1-bits modulo 2 in X, represented as an
8956 integer of mode M. The mode of X will usually be an integer mode.
8959 Represents the value X with the order of bytes reversed, carried
8960 out in mode M, which must be a fixed-point machine mode.
8963 File: gccint.info, Node: Comparisons, Next: Bit-Fields, Prev: Arithmetic, Up: RTL
8965 10.10 Comparison Operations
8966 ===========================
8968 Comparison operators test a relation on two operands and are considered
8969 to represent a machine-dependent nonzero value described by, but not
8970 necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::) if the relation
8971 holds, or zero if it does not, for comparison operators whose results
8972 have a `MODE_INT' mode, `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the
8973 relation holds, or zero if it does not, for comparison operators that
8974 return floating-point values, and a vector of either
8975 `VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of
8976 zeros if it does not, for comparison operators that return vector
8977 results. The mode of the comparison operation is independent of the
8978 mode of the data being compared. If the comparison operation is being
8979 tested (e.g., the first operand of an `if_then_else'), the mode must be
8982 There are two ways that comparison operations may be used. The
8983 comparison operators may be used to compare the condition codes `(cc0)'
8984 against zero, as in `(eq (cc0) (const_int 0))'. Such a construct
8985 actually refers to the result of the preceding instruction in which the
8986 condition codes were set. The instruction setting the condition code
8987 must be adjacent to the instruction using the condition code; only
8988 `note' insns may separate them.
8990 Alternatively, a comparison operation may directly compare two data
8991 objects. The mode of the comparison is determined by the operands; they
8992 must both be valid for a common machine mode. A comparison with both
8993 operands constant would be invalid as the machine mode could not be
8994 deduced from it, but such a comparison should never exist in RTL due to
8997 In the example above, if `(cc0)' were last set to `(compare X Y)', the
8998 comparison operation is identical to `(eq X Y)'. Usually only one style
8999 of comparisons is supported on a particular machine, but the combine
9000 pass will try to merge the operations to produce the `eq' shown in case
9001 it exists in the context of the particular insn involved.
9003 Inequality comparisons come in two flavors, signed and unsigned. Thus,
9004 there are distinct expression codes `gt' and `gtu' for signed and
9005 unsigned greater-than. These can produce different results for the same
9006 pair of integer values: for example, 1 is signed greater-than -1 but not
9007 unsigned greater-than, because -1 when regarded as unsigned is actually
9008 `0xffffffff' which is greater than 1.
9010 The signed comparisons are also used for floating point values.
9011 Floating point comparisons are distinguished by the machine modes of
9015 `STORE_FLAG_VALUE' if the values represented by X and Y are equal,
9019 `STORE_FLAG_VALUE' if the values represented by X and Y are not
9023 `STORE_FLAG_VALUE' if the X is greater than Y. If they are
9024 fixed-point, the comparison is done in a signed sense.
9027 Like `gt' but does unsigned comparison, on fixed-point numbers
9032 Like `gt' and `gtu' but test for "less than".
9036 Like `gt' and `gtu' but test for "greater than or equal".
9040 Like `gt' and `gtu' but test for "less than or equal".
9042 `(if_then_else COND THEN ELSE)'
9043 This is not a comparison operation but is listed here because it is
9044 always used in conjunction with a comparison operation. To be
9045 precise, COND is a comparison expression. This expression
9046 represents a choice, according to COND, between the value
9047 represented by THEN and the one represented by ELSE.
9049 On most machines, `if_then_else' expressions are valid only to
9050 express conditional jumps.
9052 `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)'
9053 Similar to `if_then_else', but more general. Each of TEST1,
9054 TEST2, ... is performed in turn. The result of this expression is
9055 the VALUE corresponding to the first nonzero test, or DEFAULT if
9056 none of the tests are nonzero expressions.
9058 This is currently not valid for instruction patterns and is
9059 supported only for insn attributes. *Note Insn Attributes::.
9062 File: gccint.info, Node: Bit-Fields, Next: Vector Operations, Prev: Comparisons, Up: RTL
9067 Special expression codes exist to represent bit-field instructions.
9069 `(sign_extract:M LOC SIZE POS)'
9070 This represents a reference to a sign-extended bit-field contained
9071 or starting in LOC (a memory or register reference). The bit-field
9072 is SIZE bits wide and starts at bit POS. The compilation option
9073 `BITS_BIG_ENDIAN' says which end of the memory unit POS counts
9076 If LOC is in memory, its mode must be a single-byte integer mode.
9077 If LOC is in a register, the mode to use is specified by the
9078 operand of the `insv' or `extv' pattern (*note Standard Names::)
9079 and is usually a full-word integer mode, which is the default if
9082 The mode of POS is machine-specific and is also specified in the
9083 `insv' or `extv' pattern.
9085 The mode M is the same as the mode that would be used for LOC if
9088 A `sign_extract' can not appear as an lvalue, or part thereof, in
9091 `(zero_extract:M LOC SIZE POS)'
9092 Like `sign_extract' but refers to an unsigned or zero-extended
9093 bit-field. The same sequence of bits are extracted, but they are
9094 filled to an entire word with zeros instead of by sign-extension.
9096 Unlike `sign_extract', this type of expressions can be lvalues in
9097 RTL; they may appear on the left side of an assignment, indicating
9098 insertion of a value into the specified bit-field.
9101 File: gccint.info, Node: Vector Operations, Next: Conversions, Prev: Bit-Fields, Up: RTL
9103 10.12 Vector Operations
9104 =======================
9106 All normal RTL expressions can be used with vector modes; they are
9107 interpreted as operating on each part of the vector independently.
9108 Additionally, there are a few new expressions to describe specific
9111 `(vec_merge:M VEC1 VEC2 ITEMS)'
9112 This describes a merge operation between two vectors. The result
9113 is a vector of mode M; its elements are selected from either VEC1
9114 or VEC2. Which elements are selected is described by ITEMS, which
9115 is a bit mask represented by a `const_int'; a zero bit indicates
9116 the corresponding element in the result vector is taken from VEC2
9117 while a set bit indicates it is taken from VEC1.
9119 `(vec_select:M VEC1 SELECTION)'
9120 This describes an operation that selects parts of a vector. VEC1
9121 is the source vector, and SELECTION is a `parallel' that contains a
9122 `const_int' for each of the subparts of the result vector, giving
9123 the number of the source subpart that should be stored into it.
9124 The result mode M is either the submode for a single element of
9125 VEC1 (if only one subpart is selected), or another vector mode
9126 with that element submode (if multiple subparts are selected).
9128 `(vec_concat:M VEC1 VEC2)'
9129 Describes a vector concat operation. The result is a
9130 concatenation of the vectors VEC1 and VEC2; its length is the sum
9131 of the lengths of the two inputs.
9133 `(vec_duplicate:M VEC)'
9134 This operation converts a small vector into a larger one by
9135 duplicating the input values. The output vector mode must have
9136 the same submodes as the input vector mode, and the number of
9137 output parts must be an integer multiple of the number of input
9142 File: gccint.info, Node: Conversions, Next: RTL Declarations, Prev: Vector Operations, Up: RTL
9147 All conversions between machine modes must be represented by explicit
9148 conversion operations. For example, an expression which is the sum of
9149 a byte and a full word cannot be written as `(plus:SI (reg:QI 34)
9150 (reg:SI 80))' because the `plus' operation requires two operands of the
9151 same machine mode. Therefore, the byte-sized operand is enclosed in a
9152 conversion operation, as in
9154 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
9156 The conversion operation is not a mere placeholder, because there may
9157 be more than one way of converting from a given starting mode to the
9158 desired final mode. The conversion operation code says how to do it.
9160 For all conversion operations, X must not be `VOIDmode' because the
9161 mode in which to do the conversion would not be known. The conversion
9162 must either be done at compile-time or X must be placed into a register.
9165 Represents the result of sign-extending the value X to machine
9166 mode M. M must be a fixed-point mode and X a fixed-point value of
9167 a mode narrower than M.
9170 Represents the result of zero-extending the value X to machine
9171 mode M. M must be a fixed-point mode and X a fixed-point value of
9172 a mode narrower than M.
9174 `(float_extend:M X)'
9175 Represents the result of extending the value X to machine mode M.
9176 M must be a floating point mode and X a floating point value of a
9177 mode narrower than M.
9180 Represents the result of truncating the value X to machine mode M.
9181 M must be a fixed-point mode and X a fixed-point value of a mode
9185 Represents the result of truncating the value X to machine mode M,
9186 using signed saturation in the case of overflow. Both M and the
9187 mode of X must be fixed-point modes.
9190 Represents the result of truncating the value X to machine mode M,
9191 using unsigned saturation in the case of overflow. Both M and the
9192 mode of X must be fixed-point modes.
9194 `(float_truncate:M X)'
9195 Represents the result of truncating the value X to machine mode M.
9196 M must be a floating point mode and X a floating point value of a
9200 Represents the result of converting fixed point value X, regarded
9201 as signed, to floating point mode M.
9203 `(unsigned_float:M X)'
9204 Represents the result of converting fixed point value X, regarded
9205 as unsigned, to floating point mode M.
9208 When M is a floating-point mode, represents the result of
9209 converting floating point value X (valid for mode M) to an
9210 integer, still represented in floating point mode M, by rounding
9213 When M is a fixed-point mode, represents the result of converting
9214 floating point value X to mode M, regarded as signed. How
9215 rounding is done is not specified, so this operation may be used
9216 validly in compiling C code only for integer-valued operands.
9218 `(unsigned_fix:M X)'
9219 Represents the result of converting floating point value X to
9220 fixed point mode M, regarded as unsigned. How rounding is done is
9223 `(fract_convert:M X)'
9224 Represents the result of converting fixed-point value X to
9225 fixed-point mode M, signed integer value X to fixed-point mode M,
9226 floating-point value X to fixed-point mode M, fixed-point value X
9227 to integer mode M regarded as signed, or fixed-point value X to
9228 floating-point mode M. When overflows or underflows happen, the
9229 results are undefined.
9232 Represents the result of converting fixed-point value X to
9233 fixed-point mode M, signed integer value X to fixed-point mode M,
9234 or floating-point value X to fixed-point mode M. When overflows
9235 or underflows happen, the results are saturated to the maximum or
9238 `(unsigned_fract_convert:M X)'
9239 Represents the result of converting fixed-point value X to integer
9240 mode M regarded as unsigned, or unsigned integer value X to
9241 fixed-point mode M. When overflows or underflows happen, the
9242 results are undefined.
9244 `(unsigned_sat_fract:M X)'
9245 Represents the result of converting unsigned integer value X to
9246 fixed-point mode M. When overflows or underflows happen, the
9247 results are saturated to the maximum or the minimum.
9250 File: gccint.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL
9255 Declaration expression codes do not represent arithmetic operations but
9256 rather state assertions about their operands.
9258 `(strict_low_part (subreg:M (reg:N R) 0))'
9259 This expression code is used in only one context: as the
9260 destination operand of a `set' expression. In addition, the
9261 operand of this expression must be a non-paradoxical `subreg'
9264 The presence of `strict_low_part' says that the part of the
9265 register which is meaningful in mode N, but is not part of mode M,
9266 is not to be altered. Normally, an assignment to such a subreg is
9267 allowed to have undefined effects on the rest of the register when
9268 M is less than a word.
9271 File: gccint.info, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL
9273 10.15 Side Effect Expressions
9274 =============================
9276 The expression codes described so far represent values, not actions.
9277 But machine instructions never produce values; they are meaningful only
9278 for their side effects on the state of the machine. Special expression
9279 codes are used to represent side effects.
9281 The body of an instruction is always one of these side effect codes;
9282 the codes described above, which represent values, appear only as the
9286 Represents the action of storing the value of X into the place
9287 represented by LVAL. LVAL must be an expression representing a
9288 place that can be stored in: `reg' (or `subreg', `strict_low_part'
9289 or `zero_extract'), `mem', `pc', `parallel', or `cc0'.
9291 If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then
9292 X must be valid for that mode.
9294 If LVAL is a `reg' whose machine mode is less than the full width
9295 of the register, then it means that the part of the register
9296 specified by the machine mode is given the specified value and the
9297 rest of the register receives an undefined value. Likewise, if
9298 LVAL is a `subreg' whose machine mode is narrower than the mode of
9299 the register, the rest of the register can be changed in an
9302 If LVAL is a `strict_low_part' of a subreg, then the part of the
9303 register specified by the machine mode of the `subreg' is given
9304 the value X and the rest of the register is not changed.
9306 If LVAL is a `zero_extract', then the referenced part of the
9307 bit-field (a memory or register reference) specified by the
9308 `zero_extract' is given the value X and the rest of the bit-field
9309 is not changed. Note that `sign_extract' can not appear in LVAL.
9311 If LVAL is `(cc0)', it has no machine mode, and X may be either a
9312 `compare' expression or a value that may have any mode. The
9313 latter case represents a "test" instruction. The expression `(set
9314 (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare (reg:M N)
9315 (const_int 0)))'. Use the former expression to save space during
9318 If LVAL is a `parallel', it is used to represent the case of a
9319 function returning a structure in multiple registers. Each element
9320 of the `parallel' is an `expr_list' whose first operand is a `reg'
9321 and whose second operand is a `const_int' representing the offset
9322 (in bytes) into the structure at which the data in that register
9323 corresponds. The first element may be null to indicate that the
9324 structure is also passed partly in memory.
9326 If LVAL is `(pc)', we have a jump instruction, and the
9327 possibilities for X are very limited. It may be a `label_ref'
9328 expression (unconditional jump). It may be an `if_then_else'
9329 (conditional jump), in which case either the second or the third
9330 operand must be `(pc)' (for the case which does not jump) and the
9331 other of the two must be a `label_ref' (for the case which does
9332 jump). X may also be a `mem' or `(plus:SI (pc) Y)', where Y may
9333 be a `reg' or a `mem'; these unusual patterns are used to
9334 represent jumps through branch tables.
9336 If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not
9337 be `VOIDmode' and the mode of X must be valid for the mode of LVAL.
9339 LVAL is customarily accessed with the `SET_DEST' macro and X with
9340 the `SET_SRC' macro.
9343 As the sole expression in a pattern, represents a return from the
9344 current function, on machines where this can be done with one
9345 instruction, such as VAXen. On machines where a multi-instruction
9346 "epilogue" must be executed in order to return from the function,
9347 returning is done by jumping to a label which precedes the
9348 epilogue, and the `return' expression code is never used.
9350 Inside an `if_then_else' expression, represents the value to be
9351 placed in `pc' to return to the caller.
9353 Note that an insn pattern of `(return)' is logically equivalent to
9354 `(set (pc) (return))', but the latter form is never used.
9356 `(call FUNCTION NARGS)'
9357 Represents a function call. FUNCTION is a `mem' expression whose
9358 address is the address of the function to be called. NARGS is an
9359 expression which can be used for two purposes: on some machines it
9360 represents the number of bytes of stack argument; on others, it
9361 represents the number of argument registers.
9363 Each machine has a standard machine mode which FUNCTION must have.
9364 The machine description defines macro `FUNCTION_MODE' to expand
9365 into the requisite mode name. The purpose of this mode is to
9366 specify what kind of addressing is allowed, on machines where the
9367 allowed kinds of addressing depend on the machine mode being
9371 Represents the storing or possible storing of an unpredictable,
9372 undescribed value into X, which must be a `reg', `scratch',
9373 `parallel' or `mem' expression.
9375 One place this is used is in string instructions that store
9376 standard values into particular hard registers. It may not be
9377 worth the trouble to describe the values that are stored, but it
9378 is essential to inform the compiler that the registers will be
9379 altered, lest it attempt to keep data in them across the string
9382 If X is `(mem:BLK (const_int 0))' or `(mem:BLK (scratch))', it
9383 means that all memory locations must be presumed clobbered. If X
9384 is a `parallel', it has the same meaning as a `parallel' in a
9387 Note that the machine description classifies certain hard
9388 registers as "call-clobbered". All function call instructions are
9389 assumed by default to clobber these registers, so there is no need
9390 to use `clobber' expressions to indicate this fact. Also, each
9391 function call is assumed to have the potential to alter any memory
9392 location, unless the function is declared `const'.
9394 If the last group of expressions in a `parallel' are each a
9395 `clobber' expression whose arguments are `reg' or `match_scratch'
9396 (*note RTL Template::) expressions, the combiner phase can add the
9397 appropriate `clobber' expressions to an insn it has constructed
9398 when doing so will cause a pattern to be matched.
9400 This feature can be used, for example, on a machine that whose
9401 multiply and add instructions don't use an MQ register but which
9402 has an add-accumulate instruction that does clobber the MQ
9403 register. Similarly, a combined instruction might require a
9404 temporary register while the constituent instructions might not.
9406 When a `clobber' expression for a register appears inside a
9407 `parallel' with other side effects, the register allocator
9408 guarantees that the register is unoccupied both before and after
9409 that insn if it is a hard register clobber. For pseudo-register
9410 clobber, the register allocator and the reload pass do not assign
9411 the same hard register to the clobber and the input operands if
9412 there is an insn alternative containing the `&' constraint (*note
9413 Modifiers::) for the clobber and the hard register is in register
9414 classes of the clobber in the alternative. You can clobber either
9415 a specific hard register, a pseudo register, or a `scratch'
9416 expression; in the latter two cases, GCC will allocate a hard
9417 register that is available there for use as a temporary.
9419 For instructions that require a temporary register, you should use
9420 `scratch' instead of a pseudo-register because this will allow the
9421 combiner phase to add the `clobber' when required. You do this by
9422 coding (`clobber' (`match_scratch' ...)). If you do clobber a
9423 pseudo register, use one which appears nowhere else--generate a
9424 new one each time. Otherwise, you may confuse CSE.
9426 There is one other known use for clobbering a pseudo register in a
9427 `parallel': when one of the input operands of the insn is also
9428 clobbered by the insn. In this case, using the same pseudo
9429 register in the clobber and elsewhere in the insn produces the
9433 Represents the use of the value of X. It indicates that the value
9434 in X at this point in the program is needed, even though it may
9435 not be apparent why this is so. Therefore, the compiler will not
9436 attempt to delete previous instructions whose only effect is to
9437 store a value in X. X must be a `reg' expression.
9439 In some situations, it may be tempting to add a `use' of a
9440 register in a `parallel' to describe a situation where the value
9441 of a special register will modify the behavior of the instruction.
9442 A hypothetical example might be a pattern for an addition that can
9443 either wrap around or use saturating addition depending on the
9444 value of a special control register:
9446 (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
9450 This will not work, several of the optimizers only look at
9451 expressions locally; it is very likely that if you have multiple
9452 insns with identical inputs to the `unspec', they will be
9453 optimized away even if register 1 changes in between.
9455 This means that `use' can _only_ be used to describe that the
9456 register is live. You should think twice before adding `use'
9457 statements, more often you will want to use `unspec' instead. The
9458 `use' RTX is most commonly useful to describe that a fixed
9459 register is implicitly used in an insn. It is also safe to use in
9460 patterns where the compiler knows for other reasons that the result
9461 of the whole pattern is variable, such as `movmemM' or `call'
9464 During the reload phase, an insn that has a `use' as pattern can
9465 carry a reg_equal note. These `use' insns will be deleted before
9466 the reload phase exits.
9468 During the delayed branch scheduling phase, X may be an insn.
9469 This indicates that X previously was located at this place in the
9470 code and its data dependencies need to be taken into account.
9471 These `use' insns will be deleted before the delayed branch
9472 scheduling phase exits.
9474 `(parallel [X0 X1 ...])'
9475 Represents several side effects performed in parallel. The square
9476 brackets stand for a vector; the operand of `parallel' is a vector
9477 of expressions. X0, X1 and so on are individual side effect
9478 expressions--expressions of code `set', `call', `return',
9481 "In parallel" means that first all the values used in the
9482 individual side-effects are computed, and second all the actual
9483 side-effects are performed. For example,
9485 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
9486 (set (mem:SI (reg:SI 1)) (reg:SI 1))])
9488 says unambiguously that the values of hard register 1 and the
9489 memory location addressed by it are interchanged. In both places
9490 where `(reg:SI 1)' appears as a memory address it refers to the
9491 value in register 1 _before_ the execution of the insn.
9493 It follows that it is _incorrect_ to use `parallel' and expect the
9494 result of one `set' to be available for the next one. For
9495 example, people sometimes attempt to represent a jump-if-zero
9496 instruction this way:
9498 (parallel [(set (cc0) (reg:SI 34))
9499 (set (pc) (if_then_else
9500 (eq (cc0) (const_int 0))
9504 But this is incorrect, because it says that the jump condition
9505 depends on the condition code value _before_ this instruction, not
9506 on the new value that is set by this instruction.
9508 Peephole optimization, which takes place together with final
9509 assembly code output, can produce insns whose patterns consist of
9510 a `parallel' whose elements are the operands needed to output the
9511 resulting assembler code--often `reg', `mem' or constant
9512 expressions. This would not be well-formed RTL at any other stage
9513 in compilation, but it is ok then because no further optimization
9514 remains to be done. However, the definition of the macro
9515 `NOTICE_UPDATE_CC', if any, must deal with such insns if you
9516 define any peephole optimizations.
9518 `(cond_exec [COND EXPR])'
9519 Represents a conditionally executed expression. The EXPR is
9520 executed only if the COND is nonzero. The COND expression must
9521 not have side-effects, but the EXPR may very well have
9524 `(sequence [INSNS ...])'
9525 Represents a sequence of insns. Each of the INSNS that appears in
9526 the vector is suitable for appearing in the chain of insns, so it
9527 must be an `insn', `jump_insn', `call_insn', `code_label',
9528 `barrier' or `note'.
9530 A `sequence' RTX is never placed in an actual insn during RTL
9531 generation. It represents the sequence of insns that result from a
9532 `define_expand' _before_ those insns are passed to `emit_insn' to
9533 insert them in the chain of insns. When actually inserted, the
9534 individual sub-insns are separated out and the `sequence' is
9537 After delay-slot scheduling is completed, an insn and all the
9538 insns that reside in its delay slots are grouped together into a
9539 `sequence'. The insn requiring the delay slot is the first insn
9540 in the vector; subsequent insns are to be placed in the delay slot.
9542 `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
9543 indicate that a branch insn should be used that will conditionally
9544 annul the effect of the insns in the delay slots. In such a case,
9545 `INSN_FROM_TARGET_P' indicates that the insn is from the target of
9546 the branch and should be executed only if the branch is taken;
9547 otherwise the insn should be executed only if the branch is not
9548 taken. *Note Delay Slots::.
9550 These expression codes appear in place of a side effect, as the body of
9551 an insn, though strictly speaking they do not always describe side
9555 Represents literal assembler code as described by the string S.
9557 `(unspec [OPERANDS ...] INDEX)'
9558 `(unspec_volatile [OPERANDS ...] INDEX)'
9559 Represents a machine-specific operation on OPERANDS. INDEX
9560 selects between multiple machine-specific operations.
9561 `unspec_volatile' is used for volatile operations and operations
9562 that may trap; `unspec' is used for other operations.
9564 These codes may appear inside a `pattern' of an insn, inside a
9565 `parallel', or inside an expression.
9567 `(addr_vec:M [LR0 LR1 ...])'
9568 Represents a table of jump addresses. The vector elements LR0,
9569 etc., are `label_ref' expressions. The mode M specifies how much
9570 space is given to each address; normally M would be `Pmode'.
9572 `(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)'
9573 Represents a table of jump addresses expressed as offsets from
9574 BASE. The vector elements LR0, etc., are `label_ref' expressions
9575 and so is BASE. The mode M specifies how much space is given to
9576 each address-difference. MIN and MAX are set up by branch
9577 shortening and hold a label with a minimum and a maximum address,
9578 respectively. FLAGS indicates the relative position of BASE, MIN
9579 and MAX to the containing insn and of MIN and MAX to BASE. See
9580 rtl.def for details.
9582 `(prefetch:M ADDR RW LOCALITY)'
9583 Represents prefetch of memory at address ADDR. Operand RW is 1 if
9584 the prefetch is for data to be written, 0 otherwise; targets that
9585 do not support write prefetches should treat this as a normal
9586 prefetch. Operand LOCALITY specifies the amount of temporal
9587 locality; 0 if there is none or 1, 2, or 3 for increasing levels
9588 of temporal locality; targets that do not support locality hints
9591 This insn is used to minimize cache-miss latency by moving data
9592 into a cache before it is accessed. It should use only
9593 non-faulting data prefetch instructions.
9596 File: gccint.info, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL
9598 10.16 Embedded Side-Effects on Addresses
9599 ========================================
9601 Six special side-effect expression codes appear as memory addresses.
9604 Represents the side effect of decrementing X by a standard amount
9605 and represents also the value that X has after being decremented.
9606 X must be a `reg' or `mem', but most machines allow only a `reg'.
9607 M must be the machine mode for pointers on the machine in use.
9608 The amount X is decremented by is the length in bytes of the
9609 machine mode of the containing memory reference of which this
9610 expression serves as the address. Here is an example of its use:
9612 (mem:DF (pre_dec:SI (reg:SI 39)))
9614 This says to decrement pseudo register 39 by the length of a
9615 `DFmode' value and use the result to address a `DFmode' value.
9618 Similar, but specifies incrementing X instead of decrementing it.
9621 Represents the same side effect as `pre_dec' but a different
9622 value. The value represented here is the value X has before being
9626 Similar, but specifies incrementing X instead of decrementing it.
9628 `(post_modify:M X Y)'
9629 Represents the side effect of setting X to Y and represents X
9630 before X is modified. X must be a `reg' or `mem', but most
9631 machines allow only a `reg'. M must be the machine mode for
9632 pointers on the machine in use.
9634 The expression Y must be one of three forms: `(plus:M X Z)',
9635 `(minus:M X Z)', or `(plus:M X I)', where Z is an index register
9636 and I is a constant.
9638 Here is an example of its use:
9640 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
9643 This says to modify pseudo register 42 by adding the contents of
9644 pseudo register 48 to it, after the use of what ever 42 points to.
9646 `(pre_modify:M X EXPR)'
9647 Similar except side effects happen before the use.
9649 These embedded side effect expressions must be used with care.
9650 Instruction patterns may not use them. Until the `flow' pass of the
9651 compiler, they may occur only to represent pushes onto the stack. The
9652 `flow' pass finds cases where registers are incremented or decremented
9653 in one instruction and used as an address shortly before or after;
9654 these cases are then transformed to use pre- or post-increment or
9657 If a register used as the operand of these expressions is used in
9658 another address in an insn, the original value of the register is used.
9659 Uses of the register outside of an address are not permitted within the
9660 same insn as a use in an embedded side effect expression because such
9661 insns behave differently on different machines and hence must be treated
9662 as ambiguous and disallowed.
9664 An instruction that can be represented with an embedded side effect
9665 could also be represented using `parallel' containing an additional
9666 `set' to describe how the address register is altered. This is not
9667 done because machines that allow these operations at all typically
9668 allow them wherever a memory address is called for. Describing them as
9669 additional parallel stores would require doubling the number of entries
9670 in the machine description.
9673 File: gccint.info, Node: Assembler, Next: Debug Information, Prev: Incdec, Up: RTL
9675 10.17 Assembler Instructions as Expressions
9676 ===========================================
9678 The RTX code `asm_operands' represents a value produced by a
9679 user-specified assembler instruction. It is used to represent an `asm'
9680 statement with arguments. An `asm' statement with a single output
9683 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
9685 is represented using a single `asm_operands' RTX which represents the
9686 value that is stored in `outputvar':
9688 (set RTX-FOR-OUTPUTVAR
9689 (asm_operands "foo %1,%2,%0" "a" 0
9690 [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
9692 (asm_input:M2 "di")]))
9694 Here the operands of the `asm_operands' RTX are the assembler template
9695 string, the output-operand's constraint, the index-number of the output
9696 operand among the output operands specified, a vector of input operand
9697 RTX's, and a vector of input-operand modes and constraints. The mode
9698 M1 is the mode of the sum `x+y'; M2 is that of `*z'.
9700 When an `asm' statement has multiple output values, its insn has
9701 several such `set' RTX's inside of a `parallel'. Each `set' contains
9702 an `asm_operands'; all of these share the same assembler template and
9703 vectors, but each contains the constraint for the respective output
9704 operand. They are also distinguished by the output-operand index
9705 number, which is 0, 1, ... for successive output operands.
9708 File: gccint.info, Node: Debug Information, Next: Insns, Prev: Assembler, Up: RTL
9710 10.18 Variable Location Debug Information in RTL
9711 ================================================
9713 Variable tracking relies on `MEM_EXPR' and `REG_EXPR' annotations to
9714 determine what user variables memory and register references refer to.
9716 Variable tracking at assignments uses these notes only when they refer
9717 to variables that live at fixed locations (e.g., addressable variables,
9718 global non-automatic variables). For variables whose location may
9719 vary, it relies on the following types of notes.
9721 `(var_location:MODE VAR EXP STAT)'
9722 Binds variable `var', a tree, to value EXP, an RTL expression. It
9723 appears only in `NOTE_INSN_VAR_LOCATION' and `DEBUG_INSN's, with
9724 slightly different meanings. MODE, if present, represents the
9725 mode of EXP, which is useful if it is a modeless expression. STAT
9726 is only meaningful in notes, indicating whether the variable is
9727 known to be initialized or uninitialized.
9729 `(debug_expr:MODE DECL)'
9730 Stands for the value bound to the `DEBUG_EXPR_DECL' DECL, that
9731 points back to it, within value expressions in `VAR_LOCATION'
9736 File: gccint.info, Node: Insns, Next: Calls, Prev: Debug Information, Up: RTL
9741 The RTL representation of the code for a function is a doubly-linked
9742 chain of objects called "insns". Insns are expressions with special
9743 codes that are used for no other purpose. Some insns are actual
9744 instructions; others represent dispatch tables for `switch' statements;
9745 others represent labels to jump to or various sorts of declarative
9748 In addition to its own specific data, each insn must have a unique
9749 id-number that distinguishes it from all other insns in the current
9750 function (after delayed branch scheduling, copies of an insn with the
9751 same id-number may be present in multiple places in a function, but
9752 these copies will always be identical and will only appear inside a
9753 `sequence'), and chain pointers to the preceding and following insns.
9754 These three fields occupy the same position in every insn, independent
9755 of the expression code of the insn. They could be accessed with `XEXP'
9756 and `XINT', but instead three special macros are always used:
9759 Accesses the unique id of insn I.
9762 Accesses the chain pointer to the insn preceding I. If I is the
9763 first insn, this is a null pointer.
9766 Accesses the chain pointer to the insn following I. If I is the
9767 last insn, this is a null pointer.
9769 The first insn in the chain is obtained by calling `get_insns'; the
9770 last insn is the result of calling `get_last_insn'. Within the chain
9771 delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must
9772 always correspond: if INSN is not the first insn,
9774 NEXT_INSN (PREV_INSN (INSN)) == INSN
9776 is always true and if INSN is not the last insn,
9778 PREV_INSN (NEXT_INSN (INSN)) == INSN
9782 After delay slot scheduling, some of the insns in the chain might be
9783 `sequence' expressions, which contain a vector of insns. The value of
9784 `NEXT_INSN' in all but the last of these insns is the next insn in the
9785 vector; the value of `NEXT_INSN' of the last insn in the vector is the
9786 same as the value of `NEXT_INSN' for the `sequence' in which it is
9787 contained. Similar rules apply for `PREV_INSN'.
9789 This means that the above invariants are not necessarily true for insns
9790 inside `sequence' expressions. Specifically, if INSN is the first insn
9791 in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn containing
9792 the `sequence' expression, as is the value of `PREV_INSN (NEXT_INSN
9793 (INSN))' if INSN is the last insn in the `sequence' expression. You
9794 can use these expressions to find the containing `sequence' expression.
9796 Every insn has one of the following expression codes:
9799 The expression code `insn' is used for instructions that do not
9800 jump and do not do function calls. `sequence' expressions are
9801 always contained in insns with code `insn' even if one of those
9802 insns should jump or do function calls.
9804 Insns with code `insn' have four additional fields beyond the three
9805 mandatory ones listed above. These four are described in a table
9809 The expression code `jump_insn' is used for instructions that may
9810 jump (or, more generally, may contain `label_ref' expressions to
9811 which `pc' can be set in that instruction). If there is an
9812 instruction to return from the current function, it is recorded as
9815 `jump_insn' insns have the same extra fields as `insn' insns,
9816 accessed in the same way and in addition contain a field
9817 `JUMP_LABEL' which is defined once jump optimization has completed.
9819 For simple conditional and unconditional jumps, this field contains
9820 the `code_label' to which this insn will (possibly conditionally)
9821 branch. In a more complex jump, `JUMP_LABEL' records one of the
9822 labels that the insn refers to; other jump target labels are
9823 recorded as `REG_LABEL_TARGET' notes. The exception is `addr_vec'
9824 and `addr_diff_vec', where `JUMP_LABEL' is `NULL_RTX' and the only
9825 way to find the labels is to scan the entire body of the insn.
9827 Return insns count as jumps, but since they do not refer to any
9828 labels, their `JUMP_LABEL' is `NULL_RTX'.
9831 The expression code `call_insn' is used for instructions that may
9832 do function calls. It is important to distinguish these
9833 instructions because they imply that certain registers and memory
9834 locations may be altered unpredictably.
9836 `call_insn' insns have the same extra fields as `insn' insns,
9837 accessed in the same way and in addition contain a field
9838 `CALL_INSN_FUNCTION_USAGE', which contains a list (chain of
9839 `expr_list' expressions) containing `use' and `clobber'
9840 expressions that denote hard registers and `MEM's used or
9841 clobbered by the called function.
9843 A `MEM' generally points to a stack slots in which arguments passed
9844 to the libcall by reference (*note TARGET_PASS_BY_REFERENCE:
9845 Register Arguments.) are stored. If the argument is caller-copied
9846 (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot
9847 will be mentioned in `CLOBBER' and `USE' entries; if it's
9848 callee-copied, only a `USE' will appear, and the `MEM' may point
9849 to addresses that are not stack slots.
9851 `CLOBBER'ed registers in this list augment registers specified in
9852 `CALL_USED_REGISTERS' (*note Register Basics::).
9855 A `code_label' insn represents a label that a jump insn can jump
9856 to. It contains two special fields of data in addition to the
9857 three standard ones. `CODE_LABEL_NUMBER' is used to hold the
9858 "label number", a number that identifies this label uniquely among
9859 all the labels in the compilation (not just in the current
9860 function). Ultimately, the label is represented in the assembler
9861 output as an assembler label, usually of the form `LN' where N is
9864 When a `code_label' appears in an RTL expression, it normally
9865 appears within a `label_ref' which represents the address of the
9868 Besides as a `code_label', a label can also be represented as a
9869 `note' of type `NOTE_INSN_DELETED_LABEL'.
9871 The field `LABEL_NUSES' is only defined once the jump optimization
9872 phase is completed. It contains the number of times this label is
9873 referenced in the current function.
9875 The field `LABEL_KIND' differentiates four different types of
9876 labels: `LABEL_NORMAL', `LABEL_STATIC_ENTRY',
9877 `LABEL_GLOBAL_ENTRY', and `LABEL_WEAK_ENTRY'. The only labels
9878 that do not have type `LABEL_NORMAL' are "alternate entry points"
9879 to the current function. These may be static (visible only in the
9880 containing translation unit), global (exposed to all translation
9881 units), or weak (global, but can be overridden by another symbol
9882 with the same name).
9884 Much of the compiler treats all four kinds of label identically.
9885 Some of it needs to know whether or not a label is an alternate
9886 entry point; for this purpose, the macro `LABEL_ALT_ENTRY_P' is
9887 provided. It is equivalent to testing whether `LABEL_KIND (label)
9888 == LABEL_NORMAL'. The only place that cares about the distinction
9889 between static, global, and weak alternate entry points, besides
9890 the front-end code that creates them, is the function
9891 `output_alternate_entry_point', in `final.c'.
9893 To set the kind of a label, use the `SET_LABEL_KIND' macro.
9896 Barriers are placed in the instruction stream when control cannot
9897 flow past them. They are placed after unconditional jump
9898 instructions to indicate that the jumps are unconditional and
9899 after calls to `volatile' functions, which do not return (e.g.,
9900 `exit'). They contain no information beyond the three standard
9904 `note' insns are used to represent additional debugging and
9905 declarative information. They contain two nonstandard fields, an
9906 integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
9907 string accessed with `NOTE_SOURCE_FILE'.
9909 If `NOTE_LINE_NUMBER' is positive, the note represents the
9910 position of a source line and `NOTE_SOURCE_FILE' is the source
9911 file name that the line came from. These notes control generation
9912 of line number data in the assembler output.
9914 Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
9915 code with one of the following values (and `NOTE_SOURCE_FILE' must
9916 contain a null pointer):
9919 Such a note is completely ignorable. Some passes of the
9920 compiler delete insns by altering them into notes of this
9923 `NOTE_INSN_DELETED_LABEL'
9924 This marks what used to be a `code_label', but was not used
9925 for other purposes than taking its address and was
9926 transformed to mark that no code jumps to it.
9928 `NOTE_INSN_BLOCK_BEG'
9929 `NOTE_INSN_BLOCK_END'
9930 These types of notes indicate the position of the beginning
9931 and end of a level of scoping of variable names. They
9932 control the output of debugging information.
9934 `NOTE_INSN_EH_REGION_BEG'
9935 `NOTE_INSN_EH_REGION_END'
9936 These types of notes indicate the position of the beginning
9937 and end of a level of scoping for exception handling.
9938 `NOTE_BLOCK_NUMBER' identifies which `CODE_LABEL' or `note'
9939 of type `NOTE_INSN_DELETED_LABEL' is associated with the
9942 `NOTE_INSN_LOOP_BEG'
9943 `NOTE_INSN_LOOP_END'
9944 These types of notes indicate the position of the beginning
9945 and end of a `while' or `for' loop. They enable the loop
9946 optimizer to find loops quickly.
9948 `NOTE_INSN_LOOP_CONT'
9949 Appears at the place in a loop that `continue' statements
9952 `NOTE_INSN_LOOP_VTOP'
9953 This note indicates the place in a loop where the exit test
9954 begins for those loops in which the exit test has been
9955 duplicated. This position becomes another virtual start of
9956 the loop when considering loop invariants.
9958 `NOTE_INSN_FUNCTION_BEG'
9959 Appears at the start of the function body, after the function
9962 `NOTE_INSN_VAR_LOCATION'
9963 This note is used to generate variable location debugging
9964 information. It indicates that the user variable in its
9965 `VAR_LOCATION' operand is at the location given in the RTL
9966 expression, or holds a value that can be computed by
9967 evaluating the RTL expression from that static point in the
9968 program up to the next such note for the same user variable.
9971 These codes are printed symbolically when they appear in debugging
9975 The expression code `debug_insn' is used for pseudo-instructions
9976 that hold debugging information for variable tracking at
9977 assignments (see `-fvar-tracking-assignments' option). They are
9978 the RTL representation of `GIMPLE_DEBUG' statements (*Note
9979 `GIMPLE_DEBUG'::), with a `VAR_LOCATION' operand that binds a user
9980 variable tree to an RTL representation of the `value' in the
9981 corresponding statement. A `DEBUG_EXPR' in it stands for the
9982 value bound to the corresponding `DEBUG_EXPR_DECL'.
9984 Throughout optimization passes, binding information is kept in
9985 pseudo-instruction form, so that, unlike notes, it gets the same
9986 treatment and adjustments that regular instructions would. It is
9987 the variable tracking pass that turns these pseudo-instructions
9988 into var location notes, analyzing control flow, value
9989 equivalences and changes to registers and memory referenced in
9990 value expressions, propagating the values of debug temporaries and
9991 determining expressions that can be used to compute the value of
9992 each user variable at as many points (ranges, actually) in the
9993 program as possible.
9995 Unlike `NOTE_INSN_VAR_LOCATION', the value expression in an
9996 `INSN_VAR_LOCATION' denotes a value at that specific point in the
9997 program, rather than an expression that can be evaluated at any
9998 later point before an overriding `VAR_LOCATION' is encountered.
9999 E.g., if a user variable is bound to a `REG' and then a subsequent
10000 insn modifies the `REG', the note location would keep mapping the
10001 user variable to the register across the insn, whereas the insn
10002 location would keep the variable bound to the value, so that the
10003 variable tracking pass would emit another location note for the
10004 variable at the point in which the register is modified.
10007 The machine mode of an insn is normally `VOIDmode', but some phases
10008 use the mode for various purposes.
10010 The common subexpression elimination pass sets the mode of an insn to
10011 `QImode' when it is the first insn in a block that has already been
10014 The second Haifa scheduling pass, for targets that can multiple issue,
10015 sets the mode of an insn to `TImode' when it is believed that the
10016 instruction begins an issue group. That is, when the instruction
10017 cannot issue simultaneously with the previous. This may be relied on
10018 by later passes, in particular machine-dependent reorg.
10020 Here is a table of the extra fields of `insn', `jump_insn' and
10024 An expression for the side effect performed by this insn. This
10025 must be one of the following codes: `set', `call', `use',
10026 `clobber', `return', `asm_input', `asm_output', `addr_vec',
10027 `addr_diff_vec', `trap_if', `unspec', `unspec_volatile',
10028 `parallel', `cond_exec', or `sequence'. If it is a `parallel',
10029 each element of the `parallel' must be one these codes, except that
10030 `parallel' expressions cannot be nested and `addr_vec' and
10031 `addr_diff_vec' are not permitted inside a `parallel' expression.
10034 An integer that says which pattern in the machine description
10035 matches this insn, or -1 if the matching has not yet been
10038 Such matching is never attempted and this field remains -1 on an
10039 insn whose pattern consists of a single `use', `clobber',
10040 `asm_input', `addr_vec' or `addr_diff_vec' expression.
10042 Matching is also never attempted on insns that result from an `asm'
10043 statement. These contain at least one `asm_operands' expression.
10044 The function `asm_noperands' returns a non-negative value for such
10047 In the debugging output, this field is printed as a number
10048 followed by a symbolic representation that locates the pattern in
10049 the `md' file as some small positive or negative offset from a
10053 A list (chain of `insn_list' expressions) giving information about
10054 dependencies between instructions within a basic block. Neither a
10055 jump nor a label may come between the related insns. These are
10056 only used by the schedulers and by combine. This is a deprecated
10057 data structure. Def-use and use-def chains are now preferred.
10060 A list (chain of `expr_list' and `insn_list' expressions) giving
10061 miscellaneous information about the insn. It is often information
10062 pertaining to the registers used in this insn.
10064 The `LOG_LINKS' field of an insn is a chain of `insn_list'
10065 expressions. Each of these has two operands: the first is an insn, and
10066 the second is another `insn_list' expression (the next one in the
10067 chain). The last `insn_list' in the chain has a null pointer as second
10068 operand. The significant thing about the chain is which insns appear
10069 in it (as first operands of `insn_list' expressions). Their order is
10072 This list is originally set up by the flow analysis pass; it is a null
10073 pointer until then. Flow only adds links for those data dependencies
10074 which can be used for instruction combination. For each insn, the flow
10075 analysis pass adds a link to insns which store into registers values
10076 that are used for the first time in this insn.
10078 The `REG_NOTES' field of an insn is a chain similar to the `LOG_LINKS'
10079 field but it includes `expr_list' expressions in addition to
10080 `insn_list' expressions. There are several kinds of register notes,
10081 which are distinguished by the machine mode, which in a register note
10082 is really understood as being an `enum reg_note'. The first operand OP
10083 of the note is data whose meaning depends on the kind of note.
10085 The macro `REG_NOTE_KIND (X)' returns the kind of register note. Its
10086 counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the
10087 register note type of X to be NEWKIND.
10089 Register notes are of three classes: They may say something about an
10090 input to an insn, they may say something about an output of an insn, or
10091 they may create a linkage between two insns. There are also a set of
10092 values that are only used in `LOG_LINKS'.
10094 These register notes annotate inputs to an insn:
10097 The value in OP dies in this insn; that is to say, altering the
10098 value immediately after this insn would not affect the future
10099 behavior of the program.
10101 It does not follow that the register OP has no useful value after
10102 this insn since OP is not necessarily modified by this insn.
10103 Rather, no subsequent instruction uses the contents of OP.
10106 The register OP being set by this insn will not be used in a
10107 subsequent insn. This differs from a `REG_DEAD' note, which
10108 indicates that the value in an input will not be used subsequently.
10109 These two notes are independent; both may be present for the same
10113 The register OP is incremented (or decremented; at this level
10114 there is no distinction) by an embedded side effect inside this
10115 insn. This means it appears in a `post_inc', `pre_inc',
10116 `post_dec' or `pre_dec' expression.
10119 The register OP is known to have a nonnegative value when this
10120 insn is reached. This is used so that decrement and branch until
10121 zero instructions, such as the m68k dbra, can be matched.
10123 The `REG_NONNEG' note is added to insns only if the machine
10124 description has a `decrement_and_branch_until_zero' pattern.
10126 `REG_LABEL_OPERAND'
10127 This insn uses OP, a `code_label' or a `note' of type
10128 `NOTE_INSN_DELETED_LABEL', but is not a `jump_insn', or it is a
10129 `jump_insn' that refers to the operand as an ordinary operand.
10130 The label may still eventually be a jump target, but if so in an
10131 indirect jump in a subsequent insn. The presence of this note
10132 allows jump optimization to be aware that OP is, in fact, being
10133 used, and flow optimization to build an accurate flow graph.
10136 This insn is a `jump_insn' but not an `addr_vec' or
10137 `addr_diff_vec'. It uses OP, a `code_label' as a direct or
10138 indirect jump target. Its purpose is similar to that of
10139 `REG_LABEL_OPERAND'. This note is only present if the insn has
10140 multiple targets; the last label in the insn (in the highest
10141 numbered insn-field) goes into the `JUMP_LABEL' field and does not
10142 have a `REG_LABEL_TARGET' note. *Note JUMP_LABEL: Insns.
10144 `REG_CROSSING_JUMP'
10145 This insn is a branching instruction (either an unconditional jump
10146 or an indirect jump) which crosses between hot and cold sections,
10147 which could potentially be very far apart in the executable. The
10148 presence of this note indicates to other optimizations that this
10149 branching instruction should not be "collapsed" into a simpler
10150 branching construct. It is used when the optimization to
10151 partition basic blocks into hot and cold sections is turned on.
10154 Appears attached to each `CALL_INSN' to `setjmp' or a related
10157 The following notes describe attributes of outputs of an insn:
10161 This note is only valid on an insn that sets only one register and
10162 indicates that that register will be equal to OP at run time; the
10163 scope of this equivalence differs between the two types of notes.
10164 The value which the insn explicitly copies into the register may
10165 look different from OP, but they will be equal at run time. If the
10166 output of the single `set' is a `strict_low_part' expression, the
10167 note refers to the register that is contained in `SUBREG_REG' of
10168 the `subreg' expression.
10170 For `REG_EQUIV', the register is equivalent to OP throughout the
10171 entire function, and could validly be replaced in all its
10172 occurrences by OP. ("Validly" here refers to the data flow of the
10173 program; simple replacement may make some insns invalid.) For
10174 example, when a constant is loaded into a register that is never
10175 assigned any other value, this kind of note is used.
10177 When a parameter is copied into a pseudo-register at entry to a
10178 function, a note of this kind records that the register is
10179 equivalent to the stack slot where the parameter was passed.
10180 Although in this case the register may be set by other insns, it
10181 is still valid to replace the register by the stack slot
10182 throughout the function.
10184 A `REG_EQUIV' note is also used on an instruction which copies a
10185 register parameter into a pseudo-register at entry to a function,
10186 if there is a stack slot where that parameter could be stored.
10187 Although other insns may set the pseudo-register, it is valid for
10188 the compiler to replace the pseudo-register by stack slot
10189 throughout the function, provided the compiler ensures that the
10190 stack slot is properly initialized by making the replacement in
10191 the initial copy instruction as well. This is used on machines
10192 for which the calling convention allocates stack space for
10193 register parameters. See `REG_PARM_STACK_SPACE' in *Note Stack
10196 In the case of `REG_EQUAL', the register that is set by this insn
10197 will be equal to OP at run time at the end of this insn but not
10198 necessarily elsewhere in the function. In this case, OP is
10199 typically an arithmetic expression. For example, when a sequence
10200 of insns such as a library call is used to perform an arithmetic
10201 operation, this kind of note is attached to the insn that produces
10202 or copies the final value.
10204 These two notes are used in different ways by the compiler passes.
10205 `REG_EQUAL' is used by passes prior to register allocation (such as
10206 common subexpression elimination and loop optimization) to tell
10207 them how to think of that value. `REG_EQUIV' notes are used by
10208 register allocation to indicate that there is an available
10209 substitute expression (either a constant or a `mem' expression for
10210 the location of a parameter on the stack) that may be used in
10211 place of a register if insufficient registers are available.
10213 Except for stack homes for parameters, which are indicated by a
10214 `REG_EQUIV' note and are not useful to the early optimization
10215 passes and pseudo registers that are equivalent to a memory
10216 location throughout their entire life, which is not detected until
10217 later in the compilation, all equivalences are initially indicated
10218 by an attached `REG_EQUAL' note. In the early stages of register
10219 allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note
10220 if OP is a constant and the insn represents the only set of its
10221 destination register.
10223 Thus, compiler passes prior to register allocation need only check
10224 for `REG_EQUAL' notes and passes subsequent to register allocation
10225 need only check for `REG_EQUIV' notes.
10227 These notes describe linkages between insns. They occur in pairs: one
10228 insn has one of a pair of notes that points to a second insn, which has
10229 the inverse note pointing back to the first insn.
10233 On machines that use `cc0', the insns which set and use `cc0' set
10234 and use `cc0' are adjacent. However, when branch delay slot
10235 filling is done, this may no longer be true. In this case a
10236 `REG_CC_USER' note will be placed on the insn setting `cc0' to
10237 point to the insn using `cc0' and a `REG_CC_SETTER' note will be
10238 placed on the insn using `cc0' to point to the insn setting `cc0'.
10240 These values are only used in the `LOG_LINKS' field, and indicate the
10241 type of dependency that each link represents. Links which indicate a
10242 data dependence (a read after write dependence) do not use any code,
10243 they simply have mode `VOIDmode', and are printed without any
10247 This indicates a true dependence (a read after write dependence).
10250 This indicates an output dependence (a write after write
10254 This indicates an anti dependence (a write after read dependence).
10257 These notes describe information gathered from gcov profile data. They
10258 are stored in the `REG_NOTES' field of an insn as an `expr_list'.
10261 This is used to specify the ratio of branches to non-branches of a
10262 branch insn according to the profile data. The value is stored as
10263 a value between 0 and REG_BR_PROB_BASE; larger values indicate a
10264 higher probability that the branch will be taken.
10267 These notes are found in JUMP insns after delayed branch scheduling
10268 has taken place. They indicate both the direction and the
10269 likelihood of the JUMP. The format is a bitmask of ATTR_FLAG_*
10272 `REG_FRAME_RELATED_EXPR'
10273 This is used on an RTX_FRAME_RELATED_P insn wherein the attached
10274 expression is used in place of the actual insn pattern. This is
10275 done in cases where the pattern is either complex or misleading.
10277 For convenience, the machine mode in an `insn_list' or `expr_list' is
10278 printed using these symbolic codes in debugging dumps.
10280 The only difference between the expression codes `insn_list' and
10281 `expr_list' is that the first operand of an `insn_list' is assumed to
10282 be an insn and is printed in debugging dumps as the insn's unique id;
10283 the first operand of an `expr_list' is printed in the ordinary way as
10287 File: gccint.info, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL
10289 10.20 RTL Representation of Function-Call Insns
10290 ===============================================
10292 Insns that call subroutines have the RTL expression code `call_insn'.
10293 These insns must satisfy special rules, and their bodies must use a
10294 special RTL expression code, `call'.
10296 A `call' expression has two operands, as follows:
10298 (call (mem:FM ADDR) NBYTES)
10300 Here NBYTES is an operand that represents the number of bytes of
10301 argument data being passed to the subroutine, FM is a machine mode
10302 (which must equal as the definition of the `FUNCTION_MODE' macro in the
10303 machine description) and ADDR represents the address of the subroutine.
10305 For a subroutine that returns no value, the `call' expression as shown
10306 above is the entire body of the insn, except that the insn might also
10307 contain `use' or `clobber' expressions.
10309 For a subroutine that returns a value whose mode is not `BLKmode', the
10310 value is returned in a hard register. If this register's number is R,
10311 then the body of the call insn looks like this:
10314 (call (mem:FM ADDR) NBYTES))
10316 This RTL expression makes it clear (to the optimizer passes) that the
10317 appropriate register receives a useful value in this insn.
10319 When a subroutine returns a `BLKmode' value, it is handled by passing
10320 to the subroutine the address of a place to store the value. So the
10321 call insn itself does not "return" any value, and it has the same RTL
10322 form as a call that returns nothing.
10324 On some machines, the call instruction itself clobbers some register,
10325 for example to contain the return address. `call_insn' insns on these
10326 machines should have a body which is a `parallel' that contains both
10327 the `call' expression and `clobber' expressions that indicate which
10328 registers are destroyed. Similarly, if the call instruction requires
10329 some register other than the stack pointer that is not explicitly
10330 mentioned in its RTL, a `use' subexpression should mention that
10333 Functions that are called are assumed to modify all registers listed in
10334 the configuration macro `CALL_USED_REGISTERS' (*note Register Basics::)
10335 and, with the exception of `const' functions and library calls, to
10336 modify all of memory.
10338 Insns containing just `use' expressions directly precede the
10339 `call_insn' insn to indicate which registers contain inputs to the
10340 function. Similarly, if registers other than those in
10341 `CALL_USED_REGISTERS' are clobbered by the called function, insns
10342 containing a single `clobber' follow immediately after the call to
10343 indicate which registers.
10346 File: gccint.info, Node: Sharing, Next: Reading RTL, Prev: Calls, Up: RTL
10348 10.21 Structure Sharing Assumptions
10349 ===================================
10351 The compiler assumes that certain kinds of RTL expressions are unique;
10352 there do not exist two distinct objects representing the same value.
10353 In other cases, it makes an opposite assumption: that no RTL expression
10354 object of a certain kind appears in more than one place in the
10355 containing structure.
10357 These assumptions refer to a single function; except for the RTL
10358 objects that describe global variables and external functions, and a
10359 few standard objects such as small integer constants, no RTL objects
10360 are common to two functions.
10362 * Each pseudo-register has only a single `reg' object to represent
10363 it, and therefore only a single machine mode.
10365 * For any symbolic label, there is only one `symbol_ref' object
10368 * All `const_int' expressions with equal values are shared.
10370 * There is only one `pc' expression.
10372 * There is only one `cc0' expression.
10374 * There is only one `const_double' expression with value 0 for each
10375 floating point mode. Likewise for values 1 and 2.
10377 * There is only one `const_vector' expression with value 0 for each
10378 vector mode, be it an integer or a double constant vector.
10380 * No `label_ref' or `scratch' appears in more than one place in the
10381 RTL structure; in other words, it is safe to do a tree-walk of all
10382 the insns in the function and assume that each time a `label_ref'
10383 or `scratch' is seen it is distinct from all others that are seen.
10385 * Only one `mem' object is normally created for each static variable
10386 or stack slot, so these objects are frequently shared in all the
10387 places they appear. However, separate but equal objects for these
10388 variables are occasionally made.
10390 * When a single `asm' statement has multiple output operands, a
10391 distinct `asm_operands' expression is made for each output operand.
10392 However, these all share the vector which contains the sequence of
10393 input operands. This sharing is used later on to test whether two
10394 `asm_operands' expressions come from the same statement, so all
10395 optimizations must carefully preserve the sharing if they copy the
10398 * No RTL object appears in more than one place in the RTL structure
10399 except as described above. Many passes of the compiler rely on
10400 this by assuming that they can modify RTL objects in place without
10401 unwanted side-effects on other insns.
10403 * During initial RTL generation, shared structure is freely
10404 introduced. After all the RTL for a function has been generated,
10405 all shared structure is copied by `unshare_all_rtl' in
10406 `emit-rtl.c', after which the above rules are guaranteed to be
10409 * During the combiner pass, shared structure within an insn can exist
10410 temporarily. However, the shared structure is copied before the
10411 combiner is finished with the insn. This is done by calling
10412 `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'.
10415 File: gccint.info, Node: Reading RTL, Prev: Sharing, Up: RTL
10420 To read an RTL object from a file, call `read_rtx'. It takes one
10421 argument, a stdio stream, and returns a single RTL object. This routine
10422 is defined in `read-rtl.c'. It is not available in the compiler
10423 itself, only the various programs that generate the compiler back end
10424 from the machine description.
10426 People frequently have the idea of using RTL stored as text in a file
10427 as an interface between a language front end and the bulk of GCC. This
10428 idea is not feasible.
10430 GCC was designed to use RTL internally only. Correct RTL for a given
10431 program is very dependent on the particular target machine. And the RTL
10432 does not contain all the information about the program.
10434 The proper way to interface GCC to a new language front end is with
10435 the "tree" data structure, described in the files `tree.h' and
10436 `tree.def'. The documentation for this structure (*note GENERIC::) is
10440 File: gccint.info, Node: GENERIC, Next: GIMPLE, Prev: Passes, Up: Top
10445 The purpose of GENERIC is simply to provide a language-independent way
10446 of representing an entire function in trees. To this end, it was
10447 necessary to add a few new tree codes to the back end, but most
10448 everything was already there. If you can express it with the codes in
10449 `gcc/tree.def', it's GENERIC.
10451 Early on, there was a great deal of debate about how to think about
10452 statements in a tree IL. In GENERIC, a statement is defined as any
10453 expression whose value, if any, is ignored. A statement will always
10454 have `TREE_SIDE_EFFECTS' set (or it will be discarded), but a
10455 non-statement expression may also have side effects. A `CALL_EXPR',
10458 It would be possible for some local optimizations to work on the
10459 GENERIC form of a function; indeed, the adapted tree inliner works fine
10460 on GENERIC, but the current compiler performs inlining after lowering
10461 to GIMPLE (a restricted form described in the next section). Indeed,
10462 currently the frontends perform this lowering before handing off to
10463 `tree_rest_of_compilation', but this seems inelegant.
10467 * Deficiencies:: Topics net yet covered in this document.
10468 * Tree overview:: All about `tree's.
10469 * Types:: Fundamental and aggregate types.
10470 * Declarations:: Type declarations and variables.
10471 * Attributes:: Declaration and type attributes.
10472 * Expressions: Expression trees. Operating on data.
10473 * Statements:: Control flow and related trees.
10474 * Functions:: Function bodies, linkage, and other aspects.
10475 * Language-dependent trees:: Topics and trees specific to language front ends.
10476 * C and C++ Trees:: Trees specific to C and C++.
10477 * Java Trees:: Trees specific to Java.
10480 File: gccint.info, Node: Deficiencies, Next: Tree overview, Up: GENERIC
10485 There are many places in which this document is incomplet and incorrekt.
10486 It is, as of yet, only _preliminary_ documentation.
10489 File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: GENERIC
10494 The central data structure used by the internal representation is the
10495 `tree'. These nodes, while all of the C type `tree', are of many
10496 varieties. A `tree' is a pointer type, but the object to which it
10497 points may be of a variety of types. From this point forward, we will
10498 refer to trees in ordinary type, rather than in `this font', except
10499 when talking about the actual C type `tree'.
10501 You can tell what kind of node a particular tree is by using the
10502 `TREE_CODE' macro. Many, many macros take trees as input and return
10503 trees as output. However, most macros require a certain kind of tree
10504 node as input. In other words, there is a type-system for trees, but
10505 it is not reflected in the C type-system.
10507 For safety, it is useful to configure GCC with `--enable-checking'.
10508 Although this results in a significant performance penalty (since all
10509 tree types are checked at run-time), and is therefore inappropriate in a
10510 release version, it is extremely helpful during the development process.
10512 Many macros behave as predicates. Many, although not all, of these
10513 predicates end in `_P'. Do not rely on the result type of these macros
10514 being of any particular type. You may, however, rely on the fact that
10515 the type can be compared to `0', so that statements like
10516 if (TEST_P (t) && !TEST_P (y))
10519 int i = (TEST_P (t) != 0);
10520 are legal. Macros that return `int' values now may be changed to
10521 return `tree' values, or other pointers in the future. Even those that
10522 continue to return `int' may return multiple nonzero codes where
10523 previously they returned only zero and one. Therefore, you should not
10525 if (TEST_P (t) == 1)
10526 as this code is not guaranteed to work correctly in the future.
10528 You should not take the address of values returned by the macros or
10529 functions described here. In particular, no guarantee is given that the
10530 values are lvalues.
10532 In general, the names of macros are all in uppercase, while the names
10533 of functions are entirely in lowercase. There are rare exceptions to
10534 this rule. You should assume that any macro or function whose name is
10535 made up entirely of uppercase letters may evaluate its arguments more
10536 than once. You may assume that a macro or function whose name is made
10537 up entirely of lowercase letters will evaluate its arguments only once.
10539 The `error_mark_node' is a special tree. Its tree code is
10540 `ERROR_MARK', but since there is only ever one node with that code, the
10541 usual practice is to compare the tree against `error_mark_node'. (This
10542 test is just a test for pointer equality.) If an error has occurred
10543 during front-end processing the flag `errorcount' will be set. If the
10544 front end has encountered code it cannot handle, it will issue a
10545 message to the user and set `sorrycount'. When these flags are set,
10546 any macro or function which normally returns a tree of a particular
10547 kind may instead return the `error_mark_node'. Thus, if you intend to
10548 do any processing of erroneous code, you must be prepared to deal with
10549 the `error_mark_node'.
10551 Occasionally, a particular tree slot (like an operand to an expression,
10552 or a particular field in a declaration) will be referred to as
10553 "reserved for the back end". These slots are used to store RTL when
10554 the tree is converted to RTL for use by the GCC back end. However, if
10555 that process is not taking place (e.g., if the front end is being hooked
10556 up to an intelligent editor), then those slots may be used by the back
10557 end presently in use.
10559 If you encounter situations that do not match this documentation, such
10560 as tree nodes of types not mentioned here, or macros documented to
10561 return entities of a particular kind that instead return entities of
10562 some different kind, you have found a bug, either in the front end or in
10563 the documentation. Please report these bugs as you would any other bug.
10567 * Macros and Functions::Macros and functions that can be used with all trees.
10568 * Identifiers:: The names of things.
10569 * Containers:: Lists and vectors.
10572 File: gccint.info, Node: Macros and Functions, Next: Identifiers, Up: Tree overview
10577 All GENERIC trees have two fields in common. First, `TREE_CHAIN' is a
10578 pointer that can be used as a singly-linked list to other trees. The
10579 other is `TREE_TYPE'. Many trees store the type of an expression or
10580 declaration in this field.
10582 These are some other functions for handling trees:
10585 Return the number of bytes a tree takes.
10594 These functions build a tree and supply values to put in each
10595 parameter. The basic signature is `code, type, [operands]'.
10596 `code' is the `TREE_CODE', and `type' is a tree representing the
10597 `TREE_TYPE'. These are followed by the operands, each of which is
10602 File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview
10607 An `IDENTIFIER_NODE' represents a slightly more general concept that
10608 the standard C or C++ concept of identifier. In particular, an
10609 `IDENTIFIER_NODE' may contain a `$', or other extraordinary characters.
10611 There are never two distinct `IDENTIFIER_NODE's representing the same
10612 identifier. Therefore, you may use pointer equality to compare
10613 `IDENTIFIER_NODE's, rather than using a routine like `strcmp'. Use
10614 `get_identifier' to obtain the unique `IDENTIFIER_NODE' for a supplied
10617 You can use the following macros to access identifiers:
10618 `IDENTIFIER_POINTER'
10619 The string represented by the identifier, represented as a
10620 `char*'. This string is always `NUL'-terminated, and contains no
10621 embedded `NUL' characters.
10623 `IDENTIFIER_LENGTH'
10624 The length of the string returned by `IDENTIFIER_POINTER', not
10625 including the trailing `NUL'. This value of `IDENTIFIER_LENGTH
10626 (x)' is always the same as `strlen (IDENTIFIER_POINTER (x))'.
10628 `IDENTIFIER_OPNAME_P'
10629 This predicate holds if the identifier represents the name of an
10630 overloaded operator. In this case, you should not depend on the
10631 contents of either the `IDENTIFIER_POINTER' or the
10632 `IDENTIFIER_LENGTH'.
10634 `IDENTIFIER_TYPENAME_P'
10635 This predicate holds if the identifier represents the name of a
10636 user-defined conversion operator. In this case, the `TREE_TYPE' of
10637 the `IDENTIFIER_NODE' holds the type to which the conversion
10642 File: gccint.info, Node: Containers, Prev: Identifiers, Up: Tree overview
10647 Two common container data structures can be represented directly with
10648 tree nodes. A `TREE_LIST' is a singly linked list containing two trees
10649 per node. These are the `TREE_PURPOSE' and `TREE_VALUE' of each node.
10650 (Often, the `TREE_PURPOSE' contains some kind of tag, or additional
10651 information, while the `TREE_VALUE' contains the majority of the
10652 payload. In other cases, the `TREE_PURPOSE' is simply `NULL_TREE',
10653 while in still others both the `TREE_PURPOSE' and `TREE_VALUE' are of
10654 equal stature.) Given one `TREE_LIST' node, the next node is found by
10655 following the `TREE_CHAIN'. If the `TREE_CHAIN' is `NULL_TREE', then
10656 you have reached the end of the list.
10658 A `TREE_VEC' is a simple vector. The `TREE_VEC_LENGTH' is an integer
10659 (not a tree) giving the number of nodes in the vector. The nodes
10660 themselves are accessed using the `TREE_VEC_ELT' macro, which takes two
10661 arguments. The first is the `TREE_VEC' in question; the second is an
10662 integer indicating which element in the vector is desired. The
10663 elements are indexed from zero.
10666 File: gccint.info, Node: Types, Next: Declarations, Prev: Tree overview, Up: GENERIC
10671 All types have corresponding tree nodes. However, you should not assume
10672 that there is exactly one tree node corresponding to each type. There
10673 are often multiple nodes corresponding to the same type.
10675 For the most part, different kinds of types have different tree codes.
10676 (For example, pointer types use a `POINTER_TYPE' code while arrays use
10677 an `ARRAY_TYPE' code.) However, pointers to member functions use the
10678 `RECORD_TYPE' code. Therefore, when writing a `switch' statement that
10679 depends on the code associated with a particular type, you should take
10680 care to handle pointers to member functions under the `RECORD_TYPE'
10683 The following functions and macros deal with cv-qualification of types:
10684 `TYPE_MAIN_VARIANT'
10685 This macro returns the unqualified version of a type. It may be
10686 applied to an unqualified type, but it is not always the identity
10687 function in that case.
10689 A few other macros and functions are usable with all types:
10691 The number of bits required to represent the type, represented as
10692 an `INTEGER_CST'. For an incomplete type, `TYPE_SIZE' will be
10696 The alignment of the type, in bits, represented as an `int'.
10699 This macro returns a declaration (in the form of a `TYPE_DECL') for
10700 the type. (Note this macro does _not_ return an
10701 `IDENTIFIER_NODE', as you might expect, given its name!) You can
10702 look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual
10703 name of the type. The `TYPE_NAME' will be `NULL_TREE' for a type
10704 that is not a built-in type, the result of a typedef, or a named
10708 This macro returns the "canonical" type for the given type node.
10709 Canonical types are used to improve performance in the C++ and
10710 Objective-C++ front ends by allowing efficient comparison between
10711 two type nodes in `same_type_p': if the `TYPE_CANONICAL' values of
10712 the types are equal, the types are equivalent; otherwise, the types
10713 are not equivalent. The notion of equivalence for canonical types
10714 is the same as the notion of type equivalence in the language
10715 itself. For instance,
10717 When `TYPE_CANONICAL' is `NULL_TREE', there is no canonical type
10718 for the given type node. In this case, comparison between this
10719 type and any other type requires the compiler to perform a deep,
10720 "structural" comparison to see if the two type nodes have the same
10721 form and properties.
10723 The canonical type for a node is always the most fundamental type
10724 in the equivalence class of types. For instance, `int' is its own
10725 canonical type. A typedef `I' of `int' will have `int' as its
10726 canonical type. Similarly, `I*' and a typedef `IP' (defined to
10727 `I*') will has `int*' as their canonical type. When building a new
10728 type node, be sure to set `TYPE_CANONICAL' to the appropriate
10729 canonical type. If the new type is a compound type (built from
10730 other types), and any of those other types require structural
10731 equality, use `SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the
10732 new type also requires structural equality. Finally, if for some
10733 reason you cannot guarantee that `TYPE_CANONICAL' will point to
10734 the canonical type, use `SET_TYPE_STRUCTURAL_EQUALITY' to make
10735 sure that the new type-and any type constructed based on
10736 it-requires structural equality. If you suspect that the canonical
10737 type system is miscomparing types, pass `--param
10738 verify-canonical-types=1' to the compiler or configure with
10739 `--enable-checking' to force the compiler to verify its
10740 canonical-type comparisons against the structural comparisons; the
10741 compiler will then print any warnings if the canonical types
10744 `TYPE_STRUCTURAL_EQUALITY_P'
10745 This predicate holds when the node requires structural equality
10746 checks, e.g., when `TYPE_CANONICAL' is `NULL_TREE'.
10748 `SET_TYPE_STRUCTURAL_EQUALITY'
10749 This macro states that the type node it is given requires
10750 structural equality checks, e.g., it sets `TYPE_CANONICAL' to
10754 This predicate takes two types as input, and holds if they are the
10755 same type. For example, if one type is a `typedef' for the other,
10756 or both are `typedef's for the same type. This predicate also
10757 holds if the two trees given as input are simply copies of one
10758 another; i.e., there is no difference between them at the source
10759 level, but, for whatever reason, a duplicate has been made in the
10760 representation. You should never use `==' (pointer equality) to
10761 compare types; always use `same_type_p' instead.
10763 Detailed below are the various kinds of types, and the macros that can
10764 be used to access them. Although other kinds of types are used
10765 elsewhere in G++, the types described here are the only ones that you
10766 will encounter while examining the intermediate representation.
10769 Used to represent the `void' type.
10772 Used to represent the various integral types, including `char',
10773 `short', `int', `long', and `long long'. This code is not used
10774 for enumeration types, nor for the `bool' type. The
10775 `TYPE_PRECISION' is the number of bits used in the representation,
10776 represented as an `unsigned int'. (Note that in the general case
10777 this is not the same value as `TYPE_SIZE'; suppose that there were
10778 a 24-bit integer type, but that alignment requirements for the ABI
10779 required 32-bit alignment. Then, `TYPE_SIZE' would be an
10780 `INTEGER_CST' for 32, while `TYPE_PRECISION' would be 24.) The
10781 integer type is unsigned if `TYPE_UNSIGNED' holds; otherwise, it
10784 The `TYPE_MIN_VALUE' is an `INTEGER_CST' for the smallest integer
10785 that may be represented by this type. Similarly, the
10786 `TYPE_MAX_VALUE' is an `INTEGER_CST' for the largest integer that
10787 may be represented by this type.
10790 Used to represent the `float', `double', and `long double' types.
10791 The number of bits in the floating-point representation is given
10792 by `TYPE_PRECISION', as in the `INTEGER_TYPE' case.
10795 Used to represent the `short _Fract', `_Fract', `long _Fract',
10796 `long long _Fract', `short _Accum', `_Accum', `long _Accum', and
10797 `long long _Accum' types. The number of bits in the fixed-point
10798 representation is given by `TYPE_PRECISION', as in the
10799 `INTEGER_TYPE' case. There may be padding bits, fractional bits
10800 and integral bits. The number of fractional bits is given by
10801 `TYPE_FBIT', and the number of integral bits is given by
10802 `TYPE_IBIT'. The fixed-point type is unsigned if `TYPE_UNSIGNED'
10803 holds; otherwise, it is signed. The fixed-point type is
10804 saturating if `TYPE_SATURATING' holds; otherwise, it is not
10808 Used to represent GCC built-in `__complex__' data types. The
10809 `TREE_TYPE' is the type of the real and imaginary parts.
10812 Used to represent an enumeration type. The `TYPE_PRECISION' gives
10813 (as an `int'), the number of bits used to represent the type. If
10814 there are no negative enumeration constants, `TYPE_UNSIGNED' will
10815 hold. The minimum and maximum enumeration constants may be
10816 obtained with `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE', respectively;
10817 each of these macros returns an `INTEGER_CST'.
10819 The actual enumeration constants themselves may be obtained by
10820 looking at the `TYPE_VALUES'. This macro will return a
10821 `TREE_LIST', containing the constants. The `TREE_PURPOSE' of each
10822 node will be an `IDENTIFIER_NODE' giving the name of the constant;
10823 the `TREE_VALUE' will be an `INTEGER_CST' giving the value
10824 assigned to that constant. These constants will appear in the
10825 order in which they were declared. The `TREE_TYPE' of each of
10826 these constants will be the type of enumeration type itself.
10829 Used to represent the `bool' type.
10832 Used to represent pointer types, and pointer to data member types.
10833 The `TREE_TYPE' gives the type to which this type points.
10836 Used to represent reference types. The `TREE_TYPE' gives the type
10837 to which this type refers.
10840 Used to represent the type of non-member functions and of static
10841 member functions. The `TREE_TYPE' gives the return type of the
10842 function. The `TYPE_ARG_TYPES' are a `TREE_LIST' of the argument
10843 types. The `TREE_VALUE' of each node in this list is the type of
10844 the corresponding argument; the `TREE_PURPOSE' is an expression
10845 for the default argument value, if any. If the last node in the
10846 list is `void_list_node' (a `TREE_LIST' node whose `TREE_VALUE' is
10847 the `void_type_node'), then functions of this type do not take
10848 variable arguments. Otherwise, they do take a variable number of
10851 Note that in C (but not in C++) a function declared like `void f()'
10852 is an unprototyped function taking a variable number of arguments;
10853 the `TYPE_ARG_TYPES' of such a function will be `NULL'.
10856 Used to represent the type of a non-static member function. Like a
10857 `FUNCTION_TYPE', the return type is given by the `TREE_TYPE'. The
10858 type of `*this', i.e., the class of which functions of this type
10859 are a member, is given by the `TYPE_METHOD_BASETYPE'. The
10860 `TYPE_ARG_TYPES' is the parameter list, as for a `FUNCTION_TYPE',
10861 and includes the `this' argument.
10864 Used to represent array types. The `TREE_TYPE' gives the type of
10865 the elements in the array. If the array-bound is present in the
10866 type, the `TYPE_DOMAIN' is an `INTEGER_TYPE' whose
10867 `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE' will be the lower and upper
10868 bounds of the array, respectively. The `TYPE_MIN_VALUE' will
10869 always be an `INTEGER_CST' for zero, while the `TYPE_MAX_VALUE'
10870 will be one less than the number of elements in the array, i.e.,
10871 the highest value which may be used to index an element in the
10875 Used to represent `struct' and `class' types, as well as pointers
10876 to member functions and similar constructs in other languages.
10877 `TYPE_FIELDS' contains the items contained in this type, each of
10878 which can be a `FIELD_DECL', `VAR_DECL', `CONST_DECL', or
10879 `TYPE_DECL'. You may not make any assumptions about the ordering
10880 of the fields in the type or whether one or more of them overlap.
10883 Used to represent `union' types. Similar to `RECORD_TYPE' except
10884 that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position
10888 Used to represent part of a variant record in Ada. Similar to
10889 `UNION_TYPE' except that each `FIELD_DECL' has a `DECL_QUALIFIER'
10890 field, which contains a boolean expression that indicates whether
10891 the field is present in the object. The type will only have one
10892 field, so each field's `DECL_QUALIFIER' is only evaluated if none
10893 of the expressions in the previous fields in `TYPE_FIELDS' are
10894 nonzero. Normally these expressions will reference a field in the
10895 outer object using a `PLACEHOLDER_EXPR'.
10898 This node is used to represent a language-specific type. The front
10899 end must handle it.
10902 This node is used to represent a pointer-to-data member. For a
10903 data member `X::m' the `TYPE_OFFSET_BASETYPE' is `X' and the
10904 `TREE_TYPE' is the type of `m'.
10907 There are variables whose values represent some of the basic types.
10912 `integer_type_node'
10915 `unsigned_type_node.'
10916 A node for `unsigned int'.
10920 It may sometimes be useful to compare one of these variables with a
10921 type in hand, using `same_type_p'.
10924 File: gccint.info, Node: Declarations, Next: Attributes, Prev: Types, Up: GENERIC
10929 This section covers the various kinds of declarations that appear in the
10930 internal representation, except for declarations of functions
10931 (represented by `FUNCTION_DECL' nodes), which are described in *Note
10936 * Working with declarations:: Macros and functions that work on
10938 * Internal structure:: How declaration nodes are represented.
10941 File: gccint.info, Node: Working with declarations, Next: Internal structure, Up: Declarations
10943 11.4.1 Working with declarations
10944 --------------------------------
10946 Some macros can be used with any kind of declaration. These include:
10948 This macro returns an `IDENTIFIER_NODE' giving the name of the
10952 This macro returns the type of the entity declared.
10955 This macro returns the name of the file in which the entity was
10956 declared, as a `char*'. For an entity declared implicitly by the
10957 compiler (like `__builtin_memcpy'), this will be the string
10961 This macro returns the line number at which the entity was
10962 declared, as an `int'.
10965 This predicate holds if the declaration was implicitly generated
10966 by the compiler. For example, this predicate will hold of an
10967 implicitly declared member function, or of the `TYPE_DECL'
10968 implicitly generated for a class type. Recall that in C++ code
10971 is roughly equivalent to C code like:
10973 typedef struct S S;
10974 The implicitly generated `typedef' declaration is represented by a
10975 `TYPE_DECL' for which `DECL_ARTIFICIAL' holds.
10978 The various kinds of declarations include:
10980 These nodes are used to represent labels in function bodies. For
10981 more information, see *Note Functions::. These nodes only appear
10985 These nodes are used to represent enumeration constants. The
10986 value of the constant is given by `DECL_INITIAL' which will be an
10987 `INTEGER_CST' with the same type as the `TREE_TYPE' of the
10988 `CONST_DECL', i.e., an `ENUMERAL_TYPE'.
10991 These nodes represent the value returned by a function. When a
10992 value is assigned to a `RESULT_DECL', that indicates that the
10993 value should be returned, via bitwise copy, by the function. You
10994 can use `DECL_SIZE' and `DECL_ALIGN' on a `RESULT_DECL', just as
10998 These nodes represent `typedef' declarations. The `TREE_TYPE' is
10999 the type declared to have the name given by `DECL_NAME'. In some
11000 cases, there is no associated name.
11003 These nodes represent variables with namespace or block scope, as
11004 well as static data members. The `DECL_SIZE' and `DECL_ALIGN' are
11005 analogous to `TYPE_SIZE' and `TYPE_ALIGN'. For a declaration, you
11006 should always use the `DECL_SIZE' and `DECL_ALIGN' rather than the
11007 `TYPE_SIZE' and `TYPE_ALIGN' given by the `TREE_TYPE', since
11008 special attributes may have been applied to the variable to give
11009 it a particular size and alignment. You may use the predicates
11010 `DECL_THIS_STATIC' or `DECL_THIS_EXTERN' to test whether the
11011 storage class specifiers `static' or `extern' were used to declare
11014 If this variable is initialized (but does not require a
11015 constructor), the `DECL_INITIAL' will be an expression for the
11016 initializer. The initializer should be evaluated, and a bitwise
11017 copy into the variable performed. If the `DECL_INITIAL' is the
11018 `error_mark_node', there is an initializer, but it is given by an
11019 explicit statement later in the code; no bitwise copy is required.
11021 GCC provides an extension that allows either automatic variables,
11022 or global variables, to be placed in particular registers. This
11023 extension is being used for a particular `VAR_DECL' if
11024 `DECL_REGISTER' holds for the `VAR_DECL', and if
11025 `DECL_ASSEMBLER_NAME' is not equal to `DECL_NAME'. In that case,
11026 `DECL_ASSEMBLER_NAME' is the name of the register into which the
11027 variable will be placed.
11030 Used to represent a parameter to a function. Treat these nodes
11031 similarly to `VAR_DECL' nodes. These nodes only appear in the
11032 `DECL_ARGUMENTS' for a `FUNCTION_DECL'.
11034 The `DECL_ARG_TYPE' for a `PARM_DECL' is the type that will
11035 actually be used when a value is passed to this function. It may
11036 be a wider type than the `TREE_TYPE' of the parameter; for
11037 example, the ordinary type might be `short' while the
11038 `DECL_ARG_TYPE' is `int'.
11041 Used to represent an anonymous debug-information temporary created
11042 to hold an expression as it is optimized away, so that its value
11043 can be referenced in debug bind statements.
11046 These nodes represent non-static data members. The `DECL_SIZE' and
11047 `DECL_ALIGN' behave as for `VAR_DECL' nodes. The position of the
11048 field within the parent record is specified by a combination of
11049 three attributes. `DECL_FIELD_OFFSET' is the position, counting
11050 in bytes, of the `DECL_OFFSET_ALIGN'-bit sized word containing the
11051 bit of the field closest to the beginning of the structure.
11052 `DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the
11053 field within this word; this may be nonzero even for fields that
11054 are not bit-fields, since `DECL_OFFSET_ALIGN' may be greater than
11055 the natural alignment of the field's type.
11057 If `DECL_C_BIT_FIELD' holds, this field is a bit-field. In a
11058 bit-field, `DECL_BIT_FIELD_TYPE' also contains the type that was
11059 originally specified for it, while DECL_TYPE may be a modified
11060 type with lesser precision, according to the size of the bit field.
11063 Namespaces provide a name hierarchy for other declarations. They
11064 appear in the `DECL_CONTEXT' of other `_DECL' nodes.
11068 File: gccint.info, Node: Internal structure, Prev: Working with declarations, Up: Declarations
11070 11.4.2 Internal structure
11071 -------------------------
11073 `DECL' nodes are represented internally as a hierarchy of structures.
11077 * Current structure hierarchy:: The current DECL node structure
11079 * Adding new DECL node types:: How to add a new DECL node to a
11083 File: gccint.info, Node: Current structure hierarchy, Next: Adding new DECL node types, Up: Internal structure
11085 11.4.2.1 Current structure hierarchy
11086 ....................................
11088 `struct tree_decl_minimal'
11089 This is the minimal structure to inherit from in order for common
11090 `DECL' macros to work. The fields it contains are a unique ID,
11091 source location, context, and name.
11093 `struct tree_decl_common'
11094 This structure inherits from `struct tree_decl_minimal'. It
11095 contains fields that most `DECL' nodes need, such as a field to
11096 store alignment, machine mode, size, and attributes.
11098 `struct tree_field_decl'
11099 This structure inherits from `struct tree_decl_common'. It is
11100 used to represent `FIELD_DECL'.
11102 `struct tree_label_decl'
11103 This structure inherits from `struct tree_decl_common'. It is
11104 used to represent `LABEL_DECL'.
11106 `struct tree_translation_unit_decl'
11107 This structure inherits from `struct tree_decl_common'. It is
11108 used to represent `TRANSLATION_UNIT_DECL'.
11110 `struct tree_decl_with_rtl'
11111 This structure inherits from `struct tree_decl_common'. It
11112 contains a field to store the low-level RTL associated with a
11115 `struct tree_result_decl'
11116 This structure inherits from `struct tree_decl_with_rtl'. It is
11117 used to represent `RESULT_DECL'.
11119 `struct tree_const_decl'
11120 This structure inherits from `struct tree_decl_with_rtl'. It is
11121 used to represent `CONST_DECL'.
11123 `struct tree_parm_decl'
11124 This structure inherits from `struct tree_decl_with_rtl'. It is
11125 used to represent `PARM_DECL'.
11127 `struct tree_decl_with_vis'
11128 This structure inherits from `struct tree_decl_with_rtl'. It
11129 contains fields necessary to store visibility information, as well
11130 as a section name and assembler name.
11132 `struct tree_var_decl'
11133 This structure inherits from `struct tree_decl_with_vis'. It is
11134 used to represent `VAR_DECL'.
11136 `struct tree_function_decl'
11137 This structure inherits from `struct tree_decl_with_vis'. It is
11138 used to represent `FUNCTION_DECL'.
11142 File: gccint.info, Node: Adding new DECL node types, Prev: Current structure hierarchy, Up: Internal structure
11144 11.4.2.2 Adding new DECL node types
11145 ...................................
11147 Adding a new `DECL' tree consists of the following steps
11149 Add a new tree code for the `DECL' node
11150 For language specific `DECL' nodes, there is a `.def' file in each
11151 frontend directory where the tree code should be added. For
11152 `DECL' nodes that are part of the middle-end, the code should be
11153 added to `tree.def'.
11155 Create a new structure type for the `DECL' node
11156 These structures should inherit from one of the existing
11157 structures in the language hierarchy by using that structure as
11160 struct tree_foo_decl
11162 struct tree_decl_with_vis common;
11165 Would create a structure name `tree_foo_decl' that inherits from
11166 `struct tree_decl_with_vis'.
11168 For language specific `DECL' nodes, this new structure type should
11169 go in the appropriate `.h' file. For `DECL' nodes that are part
11170 of the middle-end, the structure type should go in `tree.h'.
11172 Add a member to the tree structure enumerator for the node
11173 For garbage collection and dynamic checking purposes, each `DECL'
11174 node structure type is required to have a unique enumerator value
11175 specified with it. For language specific `DECL' nodes, this new
11176 enumerator value should go in the appropriate `.def' file. For
11177 `DECL' nodes that are part of the middle-end, the enumerator
11178 values are specified in `treestruct.def'.
11180 Update `union tree_node'
11181 In order to make your new structure type usable, it must be added
11182 to `union tree_node'. For language specific `DECL' nodes, a new
11183 entry should be added to the appropriate `.h' file of the form
11184 struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl;
11185 For `DECL' nodes that are part of the middle-end, the additional
11186 member goes directly into `union tree_node' in `tree.h'.
11188 Update dynamic checking info
11189 In order to be able to check whether accessing a named portion of
11190 `union tree_node' is legal, and whether a certain `DECL' node
11191 contains one of the enumerated `DECL' node structures in the
11192 hierarchy, a simple lookup table is used. This lookup table needs
11193 to be kept up to date with the tree structure hierarchy, or else
11194 checking and containment macros will fail inappropriately.
11196 For language specific `DECL' nodes, their is an `init_ts' function
11197 in an appropriate `.c' file, which initializes the lookup table.
11198 Code setting up the table for new `DECL' nodes should be added
11199 there. For each `DECL' tree code and enumerator value
11200 representing a member of the inheritance hierarchy, the table
11201 should contain 1 if that tree code inherits (directly or
11202 indirectly) from that member. Thus, a `FOO_DECL' node derived
11203 from `struct decl_with_rtl', and enumerator value `TS_FOO_DECL',
11204 would be set up as follows
11205 tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
11206 tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
11207 tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
11208 tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
11210 For `DECL' nodes that are part of the middle-end, the setup code
11211 goes into `tree.c'.
11213 Add macros to access any new fields and flags
11214 Each added field or flag should have a macro that is used to access
11215 it, that performs appropriate checking to ensure only the right
11216 type of `DECL' nodes access the field.
11218 These macros generally take the following form
11219 #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname
11220 However, if the structure is simply a base class for further
11221 structures, something like the following should be used
11222 #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT)
11223 #define BASE_STRUCT_FIELDNAME(NODE) \
11224 (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname
11228 File: gccint.info, Node: Attributes, Next: Expression trees, Prev: Declarations, Up: GENERIC
11230 11.5 Attributes in trees
11231 ========================
11233 Attributes, as specified using the `__attribute__' keyword, are
11234 represented internally as a `TREE_LIST'. The `TREE_PURPOSE' is the
11235 name of the attribute, as an `IDENTIFIER_NODE'. The `TREE_VALUE' is a
11236 `TREE_LIST' of the arguments of the attribute, if any, or `NULL_TREE'
11237 if there are no arguments; the arguments are stored as the `TREE_VALUE'
11238 of successive entries in the list, and may be identifiers or
11239 expressions. The `TREE_CHAIN' of the attribute is the next attribute
11240 in a list of attributes applying to the same declaration or type, or
11241 `NULL_TREE' if there are no further attributes in the list.
11243 Attributes may be attached to declarations and to types; these
11244 attributes may be accessed with the following macros. All attributes
11245 are stored in this way, and many also cause other changes to the
11246 declaration or type or to other internal compiler data structures.
11248 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL)
11249 This macro returns the attributes on the declaration DECL.
11251 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE)
11252 This macro returns the attributes on the type TYPE.
11255 File: gccint.info, Node: Expression trees, Next: Statements, Prev: Attributes, Up: GENERIC
11260 The internal representation for expressions is for the most part quite
11261 straightforward. However, there are a few facts that one must bear in
11262 mind. In particular, the expression "tree" is actually a directed
11263 acyclic graph. (For example there may be many references to the integer
11264 constant zero throughout the source program; many of these will be
11265 represented by the same expression node.) You should not rely on
11266 certain kinds of node being shared, nor should you rely on certain
11267 kinds of nodes being unshared.
11269 The following macros can be used with all expression nodes:
11272 Returns the type of the expression. This value may not be
11273 precisely the same type that would be given the expression in the
11276 In what follows, some nodes that one might expect to always have type
11277 `bool' are documented to have either integral or boolean type. At some
11278 point in the future, the C front end may also make use of this same
11279 intermediate representation, and at this point these nodes will
11280 certainly have integral type. The previous sentence is not meant to
11281 imply that the C++ front end does not or will not give these nodes
11284 Below, we list the various kinds of expression nodes. Except where
11285 noted otherwise, the operands to an expression are accessed using the
11286 `TREE_OPERAND' macro. For example, to access the first operand to a
11287 binary plus expression `expr', use:
11289 TREE_OPERAND (expr, 0)
11290 As this example indicates, the operands are zero-indexed.
11294 * Constants: Constant expressions.
11295 * Storage References::
11296 * Unary and Binary Expressions::
11300 File: gccint.info, Node: Constant expressions, Next: Storage References, Up: Expression trees
11302 11.6.1 Constant expressions
11303 ---------------------------
11305 The table below begins with constants, moves on to unary expressions,
11306 then proceeds to binary expressions, and concludes with various other
11307 kinds of expressions:
11310 These nodes represent integer constants. Note that the type of
11311 these constants is obtained with `TREE_TYPE'; they are not always
11312 of type `int'. In particular, `char' constants are represented
11313 with `INTEGER_CST' nodes. The value of the integer constant `e' is
11315 ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT)
11316 + TREE_INST_CST_LOW (e))
11317 HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms.
11318 Both `TREE_INT_CST_HIGH' and `TREE_INT_CST_LOW' return a
11319 `HOST_WIDE_INT'. The value of an `INTEGER_CST' is interpreted as
11320 a signed or unsigned quantity depending on the type of the
11321 constant. In general, the expression given above will overflow,
11322 so it should not be used to calculate the value of the constant.
11324 The variable `integer_zero_node' is an integer constant with value
11325 zero. Similarly, `integer_one_node' is an integer constant with
11326 value one. The `size_zero_node' and `size_one_node' variables are
11327 analogous, but have type `size_t' rather than `int'.
11329 The function `tree_int_cst_lt' is a predicate which holds if its
11330 first argument is less than its second. Both constants are
11331 assumed to have the same signedness (i.e., either both should be
11332 signed or both should be unsigned.) The full width of the
11333 constant is used when doing the comparison; the usual rules about
11334 promotions and conversions are ignored. Similarly,
11335 `tree_int_cst_equal' holds if the two constants are equal. The
11336 `tree_int_cst_sgn' function returns the sign of a constant. The
11337 value is `1', `0', or `-1' according on whether the constant is
11338 greater than, equal to, or less than zero. Again, the signedness
11339 of the constant's type is taken into account; an unsigned constant
11340 is never less than zero, no matter what its bit-pattern.
11343 FIXME: Talk about how to obtain representations of this constant,
11344 do comparisons, and so forth.
11347 These nodes represent fixed-point constants. The type of these
11348 constants is obtained with `TREE_TYPE'. `TREE_FIXED_CST_PTR'
11349 points to a `struct fixed_value'; `TREE_FIXED_CST' returns the
11350 structure itself. `struct fixed_value' contains `data' with the
11351 size of two `HOST_BITS_PER_WIDE_INT' and `mode' as the associated
11352 fixed-point machine mode for `data'.
11355 These nodes are used to represent complex number constants, that
11356 is a `__complex__' whose parts are constant nodes. The
11357 `TREE_REALPART' and `TREE_IMAGPART' return the real and the
11358 imaginary parts respectively.
11361 These nodes are used to represent vector constants, whose parts are
11362 constant nodes. Each individual constant node is either an
11363 integer or a double constant node. The first operand is a
11364 `TREE_LIST' of the constant nodes and is accessed through
11365 `TREE_VECTOR_CST_ELTS'.
11368 These nodes represent string-constants. The `TREE_STRING_LENGTH'
11369 returns the length of the string, as an `int'. The
11370 `TREE_STRING_POINTER' is a `char*' containing the string itself.
11371 The string may not be `NUL'-terminated, and it may contain
11372 embedded `NUL' characters. Therefore, the `TREE_STRING_LENGTH'
11373 includes the trailing `NUL' if it is present.
11375 For wide string constants, the `TREE_STRING_LENGTH' is the number
11376 of bytes in the string, and the `TREE_STRING_POINTER' points to an
11377 array of the bytes of the string, as represented on the target
11378 system (that is, as integers in the target endianness). Wide and
11379 non-wide string constants are distinguished only by the `TREE_TYPE'
11380 of the `STRING_CST'.
11382 FIXME: The formats of string constants are not well-defined when
11383 the target system bytes are not the same width as host system
11388 File: gccint.info, Node: Storage References, Next: Unary and Binary Expressions, Prev: Constant expressions, Up: Expression trees
11390 11.6.2 References to storage
11391 ----------------------------
11394 These nodes represent array accesses. The first operand is the
11395 array; the second is the index. To calculate the address of the
11396 memory accessed, you must scale the index by the size of the type
11397 of the array elements. The type of these expressions must be the
11398 type of a component of the array. The third and fourth operands
11399 are used after gimplification to represent the lower bound and
11400 component size but should not be used directly; call
11401 `array_ref_low_bound' and `array_ref_element_size' instead.
11404 These nodes represent access to a range (or "slice") of an array.
11405 The operands are the same as that for `ARRAY_REF' and have the same
11406 meanings. The type of these expressions must be an array whose
11407 component type is the same as that of the first operand. The
11408 range of that array type determines the amount of data these
11409 expressions access.
11412 These nodes represent memory accesses whose address directly map to
11413 an addressing mode of the target architecture. The first argument
11414 is `TMR_SYMBOL' and must be a `VAR_DECL' of an object with a fixed
11415 address. The second argument is `TMR_BASE' and the third one is
11416 `TMR_INDEX'. The fourth argument is `TMR_STEP' and must be an
11417 `INTEGER_CST'. The fifth argument is `TMR_OFFSET' and must be an
11418 `INTEGER_CST'. Any of the arguments may be NULL if the
11419 appropriate component does not appear in the address. Address of
11420 the `TARGET_MEM_REF' is determined in the following way.
11422 &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
11424 The sixth argument is the reference to the original memory access,
11425 which is preserved for the purposes of the RTL alias analysis.
11426 The seventh argument is a tag representing the results of tree
11427 level alias analysis.
11430 These nodes are used to represent the address of an object. (These
11431 expressions will always have pointer or reference type.) The
11432 operand may be another expression, or it may be a declaration.
11434 As an extension, GCC allows users to take the address of a label.
11435 In this case, the operand of the `ADDR_EXPR' will be a
11436 `LABEL_DECL'. The type of such an expression is `void*'.
11438 If the object addressed is not an lvalue, a temporary is created,
11439 and the address of the temporary is used.
11442 These nodes are used to represent the object pointed to by a
11443 pointer. The operand is the pointer being dereferenced; it will
11444 always have pointer or reference type.
11447 These nodes represent non-static data member accesses. The first
11448 operand is the object (rather than a pointer to it); the second
11449 operand is the `FIELD_DECL' for the data member. The third
11450 operand represents the byte offset of the field, but should not be
11451 used directly; call `component_ref_field_offset' instead.
11455 File: gccint.info, Node: Unary and Binary Expressions, Next: Vectors, Prev: Storage References, Up: Expression trees
11457 11.6.3 Unary and Binary Expressions
11458 -----------------------------------
11461 These nodes represent unary negation of the single operand, for
11462 both integer and floating-point types. The type of negation can be
11463 determined by looking at the type of the expression.
11465 The behavior of this operation on signed arithmetic overflow is
11466 controlled by the `flag_wrapv' and `flag_trapv' variables.
11469 These nodes represent the absolute value of the single operand, for
11470 both integer and floating-point types. This is typically used to
11471 implement the `abs', `labs' and `llabs' builtins for integer
11472 types, and the `fabs', `fabsf' and `fabsl' builtins for floating
11473 point types. The type of abs operation can be determined by
11474 looking at the type of the expression.
11476 This node is not used for complex types. To represent the modulus
11477 or complex abs of a complex value, use the `BUILT_IN_CABS',
11478 `BUILT_IN_CABSF' or `BUILT_IN_CABSL' builtins, as used to
11479 implement the C99 `cabs', `cabsf' and `cabsl' built-in functions.
11482 These nodes represent bitwise complement, and will always have
11483 integral type. The only operand is the value to be complemented.
11486 These nodes represent logical negation, and will always have
11487 integral (or boolean) type. The operand is the value being
11488 negated. The type of the operand and that of the result are
11489 always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
11491 `PREDECREMENT_EXPR'
11492 `PREINCREMENT_EXPR'
11493 `POSTDECREMENT_EXPR'
11494 `POSTINCREMENT_EXPR'
11495 These nodes represent increment and decrement expressions. The
11496 value of the single operand is computed, and the operand
11497 incremented or decremented. In the case of `PREDECREMENT_EXPR' and
11498 `PREINCREMENT_EXPR', the value of the expression is the value
11499 resulting after the increment or decrement; in the case of
11500 `POSTDECREMENT_EXPR' and `POSTINCREMENT_EXPR' is the value before
11501 the increment or decrement occurs. The type of the operand, like
11502 that of the result, will be either integral, boolean, or
11506 These nodes represent conversion of a floating-point value to an
11507 integer. The single operand will have a floating-point type, while
11508 the complete expression will have an integral (or boolean) type.
11509 The operand is rounded towards zero.
11512 These nodes represent conversion of an integral (or boolean) value
11513 to a floating-point value. The single operand will have integral
11514 type, while the complete expression will have a floating-point
11517 FIXME: How is the operand supposed to be rounded? Is this
11518 dependent on `-mieee'?
11521 These nodes are used to represent complex numbers constructed from
11522 two expressions of the same (integer or real) type. The first
11523 operand is the real part and the second operand is the imaginary
11527 These nodes represent the conjugate of their operand.
11531 These nodes represent respectively the real and the imaginary parts
11532 of complex numbers (their sole argument).
11535 These nodes indicate that their one and only operand is not an
11536 lvalue. A back end can treat these identically to the single
11540 These nodes are used to represent conversions that do not require
11541 any code-generation. For example, conversion of a `char*' to an
11542 `int*' does not require any code be generated; such a conversion is
11543 represented by a `NOP_EXPR'. The single operand is the expression
11544 to be converted. The conversion from a pointer to a reference is
11545 also represented with a `NOP_EXPR'.
11548 These nodes are similar to `NOP_EXPR's, but are used in those
11549 situations where code may need to be generated. For example, if an
11550 `int*' is converted to an `int' code may need to be generated on
11551 some platforms. These nodes are never used for C++-specific
11552 conversions, like conversions between pointers to different
11553 classes in an inheritance hierarchy. Any adjustments that need to
11554 be made in such cases are always indicated explicitly. Similarly,
11555 a user-defined conversion is never represented by a
11556 `CONVERT_EXPR'; instead, the function calls are made explicit.
11558 `FIXED_CONVERT_EXPR'
11559 These nodes are used to represent conversions that involve
11560 fixed-point values. For example, from a fixed-point value to
11561 another fixed-point value, from an integer to a fixed-point value,
11562 from a fixed-point value to an integer, from a floating-point
11563 value to a fixed-point value, or from a fixed-point value to a
11564 floating-point value.
11568 These nodes represent left and right shifts, respectively. The
11569 first operand is the value to shift; it will always be of integral
11570 type. The second operand is an expression for the number of bits
11571 by which to shift. Right shift should be treated as arithmetic,
11572 i.e., the high-order bits should be zero-filled when the
11573 expression has unsigned type and filled with the sign bit when the
11574 expression has signed type. Note that the result is undefined if
11575 the second operand is larger than or equal to the first operand's
11581 These nodes represent bitwise inclusive or, bitwise exclusive or,
11582 and bitwise and, respectively. Both operands will always have
11587 These nodes represent logical "and" and logical "or", respectively.
11588 These operators are not strict; i.e., the second operand is
11589 evaluated only if the value of the expression is not determined by
11590 evaluation of the first operand. The type of the operands and
11591 that of the result are always of `BOOLEAN_TYPE' or `INTEGER_TYPE'.
11596 These nodes represent logical and, logical or, and logical
11597 exclusive or. They are strict; both arguments are always
11598 evaluated. There are no corresponding operators in C or C++, but
11599 the front end will sometimes generate these expressions anyhow, if
11600 it can tell that strictness does not matter. The type of the
11601 operands and that of the result are always of `BOOLEAN_TYPE' or
11604 `POINTER_PLUS_EXPR'
11605 This node represents pointer arithmetic. The first operand is
11606 always a pointer/reference type. The second operand is always an
11607 unsigned integer type compatible with sizetype. This is the only
11608 binary arithmetic operand that can operate on pointer types.
11613 These nodes represent various binary arithmetic operations.
11614 Respectively, these operations are addition, subtraction (of the
11615 second operand from the first) and multiplication. Their operands
11616 may have either integral or floating type, but there will never be
11617 case in which one operand is of floating type and the other is of
11620 The behavior of these operations on signed arithmetic overflow is
11621 controlled by the `flag_wrapv' and `flag_trapv' variables.
11624 This node represents a floating point division operation.
11630 These nodes represent integer division operations that return an
11631 integer result. `TRUNC_DIV_EXPR' rounds towards zero,
11632 `FLOOR_DIV_EXPR' rounds towards negative infinity, `CEIL_DIV_EXPR'
11633 rounds towards positive infinity and `ROUND_DIV_EXPR' rounds to
11634 the closest integer. Integer division in C and C++ is truncating,
11635 i.e. `TRUNC_DIV_EXPR'.
11637 The behavior of these operations on signed arithmetic overflow,
11638 when dividing the minimum signed integer by minus one, is
11639 controlled by the `flag_wrapv' and `flag_trapv' variables.
11645 These nodes represent the integer remainder or modulus operation.
11646 The integer modulus of two operands `a' and `b' is defined as `a -
11647 (a/b)*b' where the division calculated using the corresponding
11648 division operator. Hence for `TRUNC_MOD_EXPR' this definition
11649 assumes division using truncation towards zero, i.e.
11650 `TRUNC_DIV_EXPR'. Integer remainder in C and C++ uses truncating
11651 division, i.e. `TRUNC_MOD_EXPR'.
11654 The `EXACT_DIV_EXPR' code is used to represent integer divisions
11655 where the numerator is known to be an exact multiple of the
11656 denominator. This allows the backend to choose between the faster
11657 of `TRUNC_DIV_EXPR', `CEIL_DIV_EXPR' and `FLOOR_DIV_EXPR' for the
11666 These nodes represent the less than, less than or equal to, greater
11667 than, greater than or equal to, equal, and not equal comparison
11668 operators. The first and second operand with either be both of
11669 integral type or both of floating type. The result type of these
11670 expressions will always be of integral or boolean type. These
11671 operations return the result type's zero value for false, and the
11672 result type's one value for true.
11674 For floating point comparisons, if we honor IEEE NaNs and either
11675 operand is NaN, then `NE_EXPR' always returns true and the
11676 remaining operators always return false. On some targets,
11677 comparisons against an IEEE NaN, other than equality and
11678 inequality, may generate a floating point exception.
11682 These nodes represent non-trapping ordered and unordered comparison
11683 operators. These operations take two floating point operands and
11684 determine whether they are ordered or unordered relative to each
11685 other. If either operand is an IEEE NaN, their comparison is
11686 defined to be unordered, otherwise the comparison is defined to be
11687 ordered. The result type of these expressions will always be of
11688 integral or boolean type. These operations return the result
11689 type's zero value for false, and the result type's one value for
11698 These nodes represent the unordered comparison operators. These
11699 operations take two floating point operands and determine whether
11700 the operands are unordered or are less than, less than or equal to,
11701 greater than, greater than or equal to, or equal respectively. For
11702 example, `UNLT_EXPR' returns true if either operand is an IEEE NaN
11703 or the first operand is less than the second. With the possible
11704 exception of `LTGT_EXPR', all of these operations are guaranteed
11705 not to generate a floating point exception. The result type of
11706 these expressions will always be of integral or boolean type.
11707 These operations return the result type's zero value for false,
11708 and the result type's one value for true.
11711 These nodes represent assignment. The left-hand side is the first
11712 operand; the right-hand side is the second operand. The left-hand
11713 side will be a `VAR_DECL', `INDIRECT_REF', `COMPONENT_REF', or
11716 These nodes are used to represent not only assignment with `=' but
11717 also compound assignments (like `+='), by reduction to `='
11718 assignment. In other words, the representation for `i += 3' looks
11719 just like that for `i = i + 3'.
11722 These nodes are just like `MODIFY_EXPR', but are used only when a
11723 variable is initialized, rather than assigned to subsequently.
11724 This means that we can assume that the target of the
11725 initialization is not used in computing its own value; any
11726 reference to the lhs in computing the rhs is undefined.
11729 These nodes represent comma-expressions. The first operand is an
11730 expression whose value is computed and thrown away prior to the
11731 evaluation of the second operand. The value of the entire
11732 expression is the value of the second operand.
11735 These nodes represent `?:' expressions. The first operand is of
11736 boolean or integral type. If it evaluates to a nonzero value, the
11737 second operand should be evaluated, and returned as the value of
11738 the expression. Otherwise, the third operand is evaluated, and
11739 returned as the value of the expression.
11741 The second operand must have the same type as the entire
11742 expression, unless it unconditionally throws an exception or calls
11743 a noreturn function, in which case it should have void type. The
11744 same constraints apply to the third operand. This allows array
11745 bounds checks to be represented conveniently as `(i >= 0 && i <
11746 10) ? i : abort()'.
11748 As a GNU extension, the C language front-ends allow the second
11749 operand of the `?:' operator may be omitted in the source. For
11750 example, `x ? : 3' is equivalent to `x ? x : 3', assuming that `x'
11751 is an expression without side-effects. In the tree
11752 representation, however, the second operand is always present,
11753 possibly protected by `SAVE_EXPR' if the first argument does cause
11757 These nodes are used to represent calls to functions, including
11758 non-static member functions. `CALL_EXPR's are implemented as
11759 expression nodes with a variable number of operands. Rather than
11760 using `TREE_OPERAND' to extract them, it is preferable to use the
11761 specialized accessor macros and functions that operate
11762 specifically on `CALL_EXPR' nodes.
11764 `CALL_EXPR_FN' returns a pointer to the function to call; it is
11765 always an expression whose type is a `POINTER_TYPE'.
11767 The number of arguments to the call is returned by
11768 `call_expr_nargs', while the arguments themselves can be accessed
11769 with the `CALL_EXPR_ARG' macro. The arguments are zero-indexed
11770 and numbered left-to-right. You can iterate over the arguments
11771 using `FOR_EACH_CALL_EXPR_ARG', as in:
11774 call_expr_arg_iterator iter;
11775 FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
11776 /* arg is bound to successive arguments of call. */
11779 For non-static member functions, there will be an operand
11780 corresponding to the `this' pointer. There will always be
11781 expressions corresponding to all of the arguments, even if the
11782 function is declared with default arguments and some arguments are
11783 not explicitly provided at the call sites.
11785 `CALL_EXPR's also have a `CALL_EXPR_STATIC_CHAIN' operand that is
11786 used to implement nested functions. This operand is otherwise
11789 `CLEANUP_POINT_EXPR'
11790 These nodes represent full-expressions. The single operand is an
11791 expression to evaluate. Any destructor calls engendered by the
11792 creation of temporaries during the evaluation of that expression
11793 should be performed immediately after the expression is evaluated.
11796 These nodes represent the brace-enclosed initializers for a
11797 structure or array. The first operand is reserved for use by the
11798 back end. The second operand is a `TREE_LIST'. If the
11799 `TREE_TYPE' of the `CONSTRUCTOR' is a `RECORD_TYPE' or
11800 `UNION_TYPE', then the `TREE_PURPOSE' of each node in the
11801 `TREE_LIST' will be a `FIELD_DECL' and the `TREE_VALUE' of each
11802 node will be the expression used to initialize that field.
11804 If the `TREE_TYPE' of the `CONSTRUCTOR' is an `ARRAY_TYPE', then
11805 the `TREE_PURPOSE' of each element in the `TREE_LIST' will be an
11806 `INTEGER_CST' or a `RANGE_EXPR' of two `INTEGER_CST's. A single
11807 `INTEGER_CST' indicates which element of the array (indexed from
11808 zero) is being assigned to. A `RANGE_EXPR' indicates an inclusive
11809 range of elements to initialize. In both cases the `TREE_VALUE'
11810 is the corresponding initializer. It is re-evaluated for each
11811 element of a `RANGE_EXPR'. If the `TREE_PURPOSE' is `NULL_TREE',
11812 then the initializer is for the next available array element.
11814 In the front end, you should not depend on the fields appearing in
11815 any particular order. However, in the middle end, fields must
11816 appear in declaration order. You should not assume that all
11817 fields will be represented. Unrepresented fields will be set to
11820 `COMPOUND_LITERAL_EXPR'
11821 These nodes represent ISO C99 compound literals. The
11822 `COMPOUND_LITERAL_EXPR_DECL_EXPR' is a `DECL_EXPR' containing an
11823 anonymous `VAR_DECL' for the unnamed object represented by the
11824 compound literal; the `DECL_INITIAL' of that `VAR_DECL' is a
11825 `CONSTRUCTOR' representing the brace-enclosed list of initializers
11826 in the compound literal. That anonymous `VAR_DECL' can also be
11827 accessed directly by the `COMPOUND_LITERAL_EXPR_DECL' macro.
11830 A `SAVE_EXPR' represents an expression (possibly involving
11831 side-effects) that is used more than once. The side-effects should
11832 occur only the first time the expression is evaluated. Subsequent
11833 uses should just reuse the computed value. The first operand to
11834 the `SAVE_EXPR' is the expression to evaluate. The side-effects
11835 should be executed where the `SAVE_EXPR' is first encountered in a
11836 depth-first preorder traversal of the expression tree.
11839 A `TARGET_EXPR' represents a temporary object. The first operand
11840 is a `VAR_DECL' for the temporary variable. The second operand is
11841 the initializer for the temporary. The initializer is evaluated
11842 and, if non-void, copied (bitwise) into the temporary. If the
11843 initializer is void, that means that it will perform the
11844 initialization itself.
11846 Often, a `TARGET_EXPR' occurs on the right-hand side of an
11847 assignment, or as the second operand to a comma-expression which is
11848 itself the right-hand side of an assignment, etc. In this case,
11849 we say that the `TARGET_EXPR' is "normal"; otherwise, we say it is
11850 "orphaned". For a normal `TARGET_EXPR' the temporary variable
11851 should be treated as an alias for the left-hand side of the
11852 assignment, rather than as a new temporary variable.
11854 The third operand to the `TARGET_EXPR', if present, is a
11855 cleanup-expression (i.e., destructor call) for the temporary. If
11856 this expression is orphaned, then this expression must be executed
11857 when the statement containing this expression is complete. These
11858 cleanups must always be executed in the order opposite to that in
11859 which they were encountered. Note that if a temporary is created
11860 on one branch of a conditional operator (i.e., in the second or
11861 third operand to a `COND_EXPR'), the cleanup must be run only if
11862 that branch is actually executed.
11865 This node is used to implement support for the C/C++ variable
11866 argument-list mechanism. It represents expressions like `va_arg
11867 (ap, type)'. Its `TREE_TYPE' yields the tree representation for
11868 `type' and its sole argument yields the representation for `ap'.
11872 File: gccint.info, Node: Vectors, Prev: Unary and Binary Expressions, Up: Expression trees
11879 These nodes represent whole vector left and right shifts,
11880 respectively. The first operand is the vector to shift; it will
11881 always be of vector type. The second operand is an expression for
11882 the number of bits by which to shift. Note that the result is
11883 undefined if the second operand is larger than or equal to the
11884 first operand's type size.
11886 `VEC_WIDEN_MULT_HI_EXPR'
11887 `VEC_WIDEN_MULT_LO_EXPR'
11888 These nodes represent widening vector multiplication of the high
11889 and low parts of the two input vectors, respectively. Their
11890 operands are vectors that contain the same number of elements
11891 (`N') of the same integral type. The result is a vector that
11892 contains half as many elements, of an integral type whose size is
11893 twice as wide. In the case of `VEC_WIDEN_MULT_HI_EXPR' the high
11894 `N/2' elements of the two vector are multiplied to produce the
11895 vector of `N/2' products. In the case of `VEC_WIDEN_MULT_LO_EXPR'
11896 the low `N/2' elements of the two vector are multiplied to produce
11897 the vector of `N/2' products.
11899 `VEC_UNPACK_HI_EXPR'
11900 `VEC_UNPACK_LO_EXPR'
11901 These nodes represent unpacking of the high and low parts of the
11902 input vector, respectively. The single operand is a vector that
11903 contains `N' elements of the same integral or floating point type.
11904 The result is a vector that contains half as many elements, of an
11905 integral or floating point type whose size is twice as wide. In
11906 the case of `VEC_UNPACK_HI_EXPR' the high `N/2' elements of the
11907 vector are extracted and widened (promoted). In the case of
11908 `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the vector are
11909 extracted and widened (promoted).
11911 `VEC_UNPACK_FLOAT_HI_EXPR'
11912 `VEC_UNPACK_FLOAT_LO_EXPR'
11913 These nodes represent unpacking of the high and low parts of the
11914 input vector, where the values are converted from fixed point to
11915 floating point. The single operand is a vector that contains `N'
11916 elements of the same integral type. The result is a vector that
11917 contains half as many elements of a floating point type whose size
11918 is twice as wide. In the case of `VEC_UNPACK_HI_EXPR' the high
11919 `N/2' elements of the vector are extracted, converted and widened.
11920 In the case of `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the
11921 vector are extracted, converted and widened.
11923 `VEC_PACK_TRUNC_EXPR'
11924 This node represents packing of truncated elements of the two
11925 input vectors into the output vector. Input operands are vectors
11926 that contain the same number of elements of the same integral or
11927 floating point type. The result is a vector that contains twice
11928 as many elements of an integral or floating point type whose size
11929 is half as wide. The elements of the two vectors are demoted and
11930 merged (concatenated) to form the output vector.
11932 `VEC_PACK_SAT_EXPR'
11933 This node represents packing of elements of the two input vectors
11934 into the output vector using saturation. Input operands are
11935 vectors that contain the same number of elements of the same
11936 integral type. The result is a vector that contains twice as many
11937 elements of an integral type whose size is half as wide. The
11938 elements of the two vectors are demoted and merged (concatenated)
11939 to form the output vector.
11941 `VEC_PACK_FIX_TRUNC_EXPR'
11942 This node represents packing of elements of the two input vectors
11943 into the output vector, where the values are converted from
11944 floating point to fixed point. Input operands are vectors that
11945 contain the same number of elements of a floating point type. The
11946 result is a vector that contains twice as many elements of an
11947 integral type whose size is half as wide. The elements of the two
11948 vectors are merged (concatenated) to form the output vector.
11950 `VEC_EXTRACT_EVEN_EXPR'
11951 `VEC_EXTRACT_ODD_EXPR'
11952 These nodes represent extracting of the even/odd elements of the
11953 two input vectors, respectively. Their operands and result are
11954 vectors that contain the same number of elements of the same type.
11956 `VEC_INTERLEAVE_HIGH_EXPR'
11957 `VEC_INTERLEAVE_LOW_EXPR'
11958 These nodes represent merging and interleaving of the high/low
11959 elements of the two input vectors, respectively. The operands and
11960 the result are vectors that contain the same number of elements
11961 (`N') of the same type. In the case of
11962 `VEC_INTERLEAVE_HIGH_EXPR', the high `N/2' elements of the first
11963 input vector are interleaved with the high `N/2' elements of the
11964 second input vector. In the case of `VEC_INTERLEAVE_LOW_EXPR', the
11965 low `N/2' elements of the first input vector are interleaved with
11966 the low `N/2' elements of the second input vector.
11970 File: gccint.info, Node: Statements, Next: Functions, Prev: Expression trees, Up: GENERIC
11975 Most statements in GIMPLE are assignment statements, represented by
11976 `GIMPLE_ASSIGN'. No other C expressions can appear at statement level;
11977 a reference to a volatile object is converted into a `GIMPLE_ASSIGN'.
11979 There are also several varieties of complex statements.
11983 * Basic Statements::
11985 * Statement Sequences::
11986 * Empty Statements::
11992 File: gccint.info, Node: Basic Statements, Next: Blocks, Up: Statements
11994 11.7.1 Basic Statements
11995 -----------------------
11998 Used to represent an inline assembly statement. For an inline
11999 assembly statement like:
12001 The `ASM_STRING' macro will return a `STRING_CST' node for `"mov
12002 x, y"'. If the original statement made use of the
12003 extended-assembly syntax, then `ASM_OUTPUTS', `ASM_INPUTS', and
12004 `ASM_CLOBBERS' will be the outputs, inputs, and clobbers for the
12005 statement, represented as `STRING_CST' nodes. The
12006 extended-assembly syntax looks like:
12007 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
12008 The first string is the `ASM_STRING', containing the instruction
12009 template. The next two strings are the output and inputs,
12010 respectively; this statement has no clobbers. As this example
12011 indicates, "plain" assembly statements are merely a special case
12012 of extended assembly statements; they have no cv-qualifiers,
12013 outputs, inputs, or clobbers. All of the strings will be
12014 `NUL'-terminated, and will contain no embedded `NUL'-characters.
12016 If the assembly statement is declared `volatile', or if the
12017 statement was not an extended assembly statement, and is therefore
12018 implicitly volatile, then the predicate `ASM_VOLATILE_P' will hold
12022 Used to represent a local declaration. The `DECL_EXPR_DECL' macro
12023 can be used to obtain the entity declared. This declaration may
12024 be a `LABEL_DECL', indicating that the label declared is a local
12025 label. (As an extension, GCC allows the declaration of labels
12026 with scope.) In C, this declaration may be a `FUNCTION_DECL',
12027 indicating the use of the GCC nested function extension. For more
12028 information, *note Functions::.
12031 Used to represent a label. The `LABEL_DECL' declared by this
12032 statement can be obtained with the `LABEL_EXPR_LABEL' macro. The
12033 `IDENTIFIER_NODE' giving the name of the label can be obtained from
12034 the `LABEL_DECL' with `DECL_NAME'.
12037 Used to represent a `goto' statement. The `GOTO_DESTINATION' will
12038 usually be a `LABEL_DECL'. However, if the "computed goto"
12039 extension has been used, the `GOTO_DESTINATION' will be an
12040 arbitrary expression indicating the destination. This expression
12041 will always have pointer type.
12044 Used to represent a `return' statement. Operand 0 represents the
12045 value to return. It should either be the `RESULT_DECL' for the
12046 containing function, or a `MODIFY_EXPR' or `INIT_EXPR' setting the
12047 function's `RESULT_DECL'. It will be `NULL_TREE' if the statement
12052 These nodes represent "infinite" loops. The `LOOP_EXPR_BODY'
12053 represents the body of the loop. It should be executed forever,
12054 unless an `EXIT_EXPR' is encountered.
12057 These nodes represent conditional exits from the nearest enclosing
12058 `LOOP_EXPR'. The single operand is the condition; if it is
12059 nonzero, then the loop should be exited. An `EXIT_EXPR' will only
12060 appear within a `LOOP_EXPR'.
12063 Used to represent a `switch' statement. The `SWITCH_STMT_COND' is
12064 the expression on which the switch is occurring. See the
12065 documentation for an `IF_STMT' for more information on the
12066 representation used for the condition. The `SWITCH_STMT_BODY' is
12067 the body of the switch statement. The `SWITCH_STMT_TYPE' is the
12068 original type of switch expression as given in the source, before
12069 any compiler conversions.
12072 Use to represent a `case' label, range of `case' labels, or a
12073 `default' label. If `CASE_LOW' is `NULL_TREE', then this is a
12074 `default' label. Otherwise, if `CASE_HIGH' is `NULL_TREE', then
12075 this is an ordinary `case' label. In this case, `CASE_LOW' is an
12076 expression giving the value of the label. Both `CASE_LOW' and
12077 `CASE_HIGH' are `INTEGER_CST' nodes. These values will have the
12078 same type as the condition expression in the switch statement.
12080 Otherwise, if both `CASE_LOW' and `CASE_HIGH' are defined, the
12081 statement is a range of case labels. Such statements originate
12082 with the extension that allows users to write things of the form:
12084 The first value will be `CASE_LOW', while the second will be
12089 File: gccint.info, Node: Blocks, Next: Statement Sequences, Prev: Basic Statements, Up: Statements
12094 Block scopes and the variables they declare in GENERIC are expressed
12095 using the `BIND_EXPR' code, which in previous versions of GCC was
12096 primarily used for the C statement-expression extension.
12098 Variables in a block are collected into `BIND_EXPR_VARS' in
12099 declaration order through their `TREE_CHAIN' field. Any runtime
12100 initialization is moved out of `DECL_INITIAL' and into a statement in
12101 the controlled block. When gimplifying from C or C++, this
12102 initialization replaces the `DECL_STMT'. These variables will never
12103 require cleanups. The scope of these variables is just the body
12105 Variable-length arrays (VLAs) complicate this process, as their size
12106 often refers to variables initialized earlier in the block. To handle
12107 this, we currently split the block at that point, and move the VLA into
12108 a new, inner `BIND_EXPR'. This strategy may change in the future.
12110 A C++ program will usually contain more `BIND_EXPR's than there are
12111 syntactic blocks in the source code, since several C++ constructs have
12112 implicit scopes associated with them. On the other hand, although the
12113 C++ front end uses pseudo-scopes to handle cleanups for objects with
12114 destructors, these don't translate into the GIMPLE form; multiple
12115 declarations at the same level use the same `BIND_EXPR'.
12118 File: gccint.info, Node: Statement Sequences, Next: Empty Statements, Prev: Blocks, Up: Statements
12120 11.7.3 Statement Sequences
12121 --------------------------
12123 Multiple statements at the same nesting level are collected into a
12124 `STATEMENT_LIST'. Statement lists are modified and traversed using the
12125 interface in `tree-iterator.h'.
12128 File: gccint.info, Node: Empty Statements, Next: Jumps, Prev: Statement Sequences, Up: Statements
12130 11.7.4 Empty Statements
12131 -----------------------
12133 Whenever possible, statements with no effect are discarded. But if
12134 they are nested within another construct which cannot be discarded for
12135 some reason, they are instead replaced with an empty statement,
12136 generated by `build_empty_stmt'. Initially, all empty statements were
12137 shared, after the pattern of the Java front end, but this caused a lot
12138 of trouble in practice.
12140 An empty statement is represented as `(void)0'.
12143 File: gccint.info, Node: Jumps, Next: Cleanups, Prev: Empty Statements, Up: Statements
12148 Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'.
12150 The operand of a `GOTO_EXPR' must be either a label or a variable
12151 containing the address to jump to.
12153 The operand of a `RETURN_EXPR' is either `NULL_TREE', `RESULT_DECL',
12154 or a `MODIFY_EXPR' which sets the return value. It would be nice to
12155 move the `MODIFY_EXPR' into a separate statement, but the special
12156 return semantics in `expand_return' make that difficult. It may still
12157 happen in the future, perhaps by moving most of that logic into
12158 `expand_assignment'.
12161 File: gccint.info, Node: Cleanups, Next: OpenMP, Prev: Jumps, Up: Statements
12166 Destructors for local C++ objects and similar dynamic cleanups are
12167 represented in GIMPLE by a `TRY_FINALLY_EXPR'. `TRY_FINALLY_EXPR' has
12168 two operands, both of which are a sequence of statements to execute.
12169 The first sequence is executed. When it completes the second sequence
12172 The first sequence may complete in the following ways:
12174 1. Execute the last statement in the sequence and fall off the end.
12176 2. Execute a goto statement (`GOTO_EXPR') to an ordinary label
12177 outside the sequence.
12179 3. Execute a return statement (`RETURN_EXPR').
12181 4. Throw an exception. This is currently not explicitly represented
12185 The second sequence is not executed if the first sequence completes by
12186 calling `setjmp' or `exit' or any other function that does not return.
12187 The second sequence is also not executed if the first sequence
12188 completes via a non-local goto or a computed goto (in general the
12189 compiler does not know whether such a goto statement exits the first
12190 sequence or not, so we assume that it doesn't).
12192 After the second sequence is executed, if it completes normally by
12193 falling off the end, execution continues wherever the first sequence
12194 would have continued, by falling off the end, or doing a goto, etc.
12196 `TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs
12197 to appear on every edge out of the controlled block; this reduces the
12198 freedom to move code across these edges. Therefore, the EH lowering
12199 pass which runs before most of the optimization passes eliminates these
12200 expressions by explicitly adding the cleanup to each edge. Rethrowing
12201 the exception is represented using `RESX_EXPR'.
12204 File: gccint.info, Node: OpenMP, Prev: Cleanups, Up: Statements
12209 All the statements starting with `OMP_' represent directives and
12210 clauses used by the OpenMP API `http://www.openmp.org/'.
12213 Represents `#pragma omp parallel [clause1 ... clauseN]'. It has
12216 Operand `OMP_PARALLEL_BODY' is valid while in GENERIC and High
12217 GIMPLE forms. It contains the body of code to be executed by all
12218 the threads. During GIMPLE lowering, this operand becomes `NULL'
12219 and the body is emitted linearly after `OMP_PARALLEL'.
12221 Operand `OMP_PARALLEL_CLAUSES' is the list of clauses associated
12222 with the directive.
12224 Operand `OMP_PARALLEL_FN' is created by `pass_lower_omp', it
12225 contains the `FUNCTION_DECL' for the function that will contain
12226 the body of the parallel region.
12228 Operand `OMP_PARALLEL_DATA_ARG' is also created by
12229 `pass_lower_omp'. If there are shared variables to be communicated
12230 to the children threads, this operand will contain the `VAR_DECL'
12231 that contains all the shared values and variables.
12234 Represents `#pragma omp for [clause1 ... clauseN]'. It has 5
12237 Operand `OMP_FOR_BODY' contains the loop body.
12239 Operand `OMP_FOR_CLAUSES' is the list of clauses associated with
12242 Operand `OMP_FOR_INIT' is the loop initialization code of the form
12245 Operand `OMP_FOR_COND' is the loop conditional expression of the
12246 form `VAR {<,>,<=,>=} N2'.
12248 Operand `OMP_FOR_INCR' is the loop index increment of the form
12249 `VAR {+=,-=} INCR'.
12251 Operand `OMP_FOR_PRE_BODY' contains side-effect code from operands
12252 `OMP_FOR_INIT', `OMP_FOR_COND' and `OMP_FOR_INC'. These
12253 side-effects are part of the `OMP_FOR' block but must be evaluated
12254 before the start of loop body.
12256 The loop index variable `VAR' must be a signed integer variable,
12257 which is implicitly private to each thread. Bounds `N1' and `N2'
12258 and the increment expression `INCR' are required to be loop
12259 invariant integer expressions that are evaluated without any
12260 synchronization. The evaluation order, frequency of evaluation and
12261 side-effects are unspecified by the standard.
12264 Represents `#pragma omp sections [clause1 ... clauseN]'.
12266 Operand `OMP_SECTIONS_BODY' contains the sections body, which in
12267 turn contains a set of `OMP_SECTION' nodes for each of the
12268 concurrent sections delimited by `#pragma omp section'.
12270 Operand `OMP_SECTIONS_CLAUSES' is the list of clauses associated
12271 with the directive.
12274 Section delimiter for `OMP_SECTIONS'.
12277 Represents `#pragma omp single'.
12279 Operand `OMP_SINGLE_BODY' contains the body of code to be executed
12280 by a single thread.
12282 Operand `OMP_SINGLE_CLAUSES' is the list of clauses associated
12283 with the directive.
12286 Represents `#pragma omp master'.
12288 Operand `OMP_MASTER_BODY' contains the body of code to be executed
12289 by the master thread.
12292 Represents `#pragma omp ordered'.
12294 Operand `OMP_ORDERED_BODY' contains the body of code to be
12295 executed in the sequential order dictated by the loop index
12299 Represents `#pragma omp critical [name]'.
12301 Operand `OMP_CRITICAL_BODY' is the critical section.
12303 Operand `OMP_CRITICAL_NAME' is an optional identifier to label the
12307 This does not represent any OpenMP directive, it is an artificial
12308 marker to indicate the end of the body of an OpenMP. It is used by
12309 the flow graph (`tree-cfg.c') and OpenMP region building code
12313 Similarly, this instruction does not represent an OpenMP
12314 directive, it is used by `OMP_FOR' and `OMP_SECTIONS' to mark the
12315 place where the code needs to loop to the next iteration (in the
12316 case of `OMP_FOR') or the next section (in the case of
12319 In some cases, `OMP_CONTINUE' is placed right before `OMP_RETURN'.
12320 But if there are cleanups that need to occur right after the
12321 looping body, it will be emitted between `OMP_CONTINUE' and
12325 Represents `#pragma omp atomic'.
12327 Operand 0 is the address at which the atomic operation is to be
12330 Operand 1 is the expression to evaluate. The gimplifier tries
12331 three alternative code generation strategies. Whenever possible,
12332 an atomic update built-in is used. If that fails, a
12333 compare-and-swap loop is attempted. If that also fails, a regular
12334 critical section around the expression is used.
12337 Represents clauses associated with one of the `OMP_' directives.
12338 Clauses are represented by separate sub-codes defined in `tree.h'.
12339 Clauses codes can be one of: `OMP_CLAUSE_PRIVATE',
12340 `OMP_CLAUSE_SHARED', `OMP_CLAUSE_FIRSTPRIVATE',
12341 `OMP_CLAUSE_LASTPRIVATE', `OMP_CLAUSE_COPYIN',
12342 `OMP_CLAUSE_COPYPRIVATE', `OMP_CLAUSE_IF',
12343 `OMP_CLAUSE_NUM_THREADS', `OMP_CLAUSE_SCHEDULE',
12344 `OMP_CLAUSE_NOWAIT', `OMP_CLAUSE_ORDERED', `OMP_CLAUSE_DEFAULT',
12345 and `OMP_CLAUSE_REDUCTION'. Each code represents the
12346 corresponding OpenMP clause.
12348 Clauses associated with the same directive are chained together
12349 via `OMP_CLAUSE_CHAIN'. Those clauses that accept a list of
12350 variables are restricted to exactly one, accessed with
12351 `OMP_CLAUSE_VAR'. Therefore, multiple variables under the same
12352 clause `C' need to be represented as multiple `C' clauses chained
12353 together. This facilitates adding new clauses during compilation.
12357 File: gccint.info, Node: Functions, Next: Language-dependent trees, Prev: Statements, Up: GENERIC
12362 A function is represented by a `FUNCTION_DECL' node. It stores the
12363 basic pieces of the function such as body, parameters, and return type
12364 as well as information on the surrounding context, visibility, and
12369 * Function Basics:: Function names, body, and parameters.
12370 * Function Properties:: Context, linkage, etc.
12373 File: gccint.info, Node: Function Basics, Next: Function Properties, Up: Functions
12375 11.8.1 Function Basics
12376 ----------------------
12378 A function has four core parts: the name, the parameters, the result,
12379 and the body. The following macros and functions access these parts of
12380 a `FUNCTION_DECL' as well as other basic features:
12382 This macro returns the unqualified name of the function, as an
12383 `IDENTIFIER_NODE'. For an instantiation of a function template,
12384 the `DECL_NAME' is the unqualified name of the template, not
12385 something like `f<int>'. The value of `DECL_NAME' is undefined
12386 when used on a constructor, destructor, overloaded operator, or
12387 type-conversion operator, or any function that is implicitly
12388 generated by the compiler. See below for macros that can be used
12389 to distinguish these cases.
12391 `DECL_ASSEMBLER_NAME'
12392 This macro returns the mangled name of the function, also an
12393 `IDENTIFIER_NODE'. This name does not contain leading underscores
12394 on systems that prefix all identifiers with underscores. The
12395 mangled name is computed in the same way on all platforms; if
12396 special processing is required to deal with the object file format
12397 used on a particular platform, it is the responsibility of the
12398 back end to perform those modifications. (Of course, the back end
12399 should not modify `DECL_ASSEMBLER_NAME' itself.)
12401 Using `DECL_ASSEMBLER_NAME' will cause additional memory to be
12402 allocated (for the mangled name of the entity) so it should be used
12403 only when emitting assembly code. It should not be used within the
12404 optimizers to determine whether or not two declarations are the
12405 same, even though some of the existing optimizers do use it in
12406 that way. These uses will be removed over time.
12409 This macro returns the `PARM_DECL' for the first argument to the
12410 function. Subsequent `PARM_DECL' nodes can be obtained by
12411 following the `TREE_CHAIN' links.
12414 This macro returns the `RESULT_DECL' for the function.
12417 This macro returns the complete body of the function.
12420 This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the
12424 A function that has a definition in the current translation unit
12425 will have a non-`NULL' `DECL_INITIAL'. However, back ends should
12426 not make use of the particular value given by `DECL_INITIAL'.
12428 It should contain a tree of `BLOCK' nodes that mirrors the scopes
12429 that variables are bound in the function. Each block contains a
12430 list of decls declared in a basic block, a pointer to a chain of
12431 blocks at the next lower scope level, then a pointer to the next
12432 block at the same level and a backpointer to the parent `BLOCK' or
12433 `FUNCTION_DECL'. So given a function as follows:
12444 you would get the following:
12446 tree foo = FUNCTION_DECL;
12447 tree decl_a = VAR_DECL;
12448 tree decl_b = VAR_DECL;
12449 tree decl_c = VAR_DECL;
12450 tree block_a = BLOCK;
12451 tree block_b = BLOCK;
12452 tree block_c = BLOCK;
12453 BLOCK_VARS(block_a) = decl_a;
12454 BLOCK_SUBBLOCKS(block_a) = block_b;
12455 BLOCK_CHAIN(block_a) = block_c;
12456 BLOCK_SUPERCONTEXT(block_a) = foo;
12457 BLOCK_VARS(block_b) = decl_b;
12458 BLOCK_SUPERCONTEXT(block_b) = block_a;
12459 BLOCK_VARS(block_c) = decl_c;
12460 BLOCK_SUPERCONTEXT(block_c) = foo;
12461 DECL_INITIAL(foo) = block_a;
12465 File: gccint.info, Node: Function Properties, Prev: Function Basics, Up: Functions
12467 11.8.2 Function Properties
12468 --------------------------
12470 To determine the scope of a function, you can use the `DECL_CONTEXT'
12471 macro. This macro will return the class (either a `RECORD_TYPE' or a
12472 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
12473 is a member. For a virtual function, this macro returns the class in
12474 which the function was actually defined, not the base class in which
12475 the virtual declaration occurred.
12477 In C, the `DECL_CONTEXT' for a function maybe another function. This
12478 representation indicates that the GNU nested function extension is in
12479 use. For details on the semantics of nested functions, see the GCC
12480 Manual. The nested function can refer to local variables in its
12481 containing function. Such references are not explicitly marked in the
12482 tree structure; back ends must look at the `DECL_CONTEXT' for the
12483 referenced `VAR_DECL'. If the `DECL_CONTEXT' for the referenced
12484 `VAR_DECL' is not the same as the function currently being processed,
12485 and neither `DECL_EXTERNAL' nor `TREE_STATIC' hold, then the reference
12486 is to a local variable in a containing function, and the back end must
12487 take appropriate action.
12490 This predicate holds if the function is undefined.
12493 This predicate holds if the function has external linkage.
12496 This predicate holds if the function has been defined.
12498 `TREE_THIS_VOLATILE'
12499 This predicate holds if the function does not return normally.
12502 This predicate holds if the function can only read its arguments.
12505 This predicate holds if the function can only read its arguments,
12506 but may also read global memory.
12509 This predicate holds if the function is virtual.
12512 This macro holds if the function was implicitly generated by the
12513 compiler, rather than explicitly declared. In addition to
12514 implicitly generated class member functions, this macro holds for
12515 the special functions created to implement static initialization
12516 and destruction, to compute run-time type information, and so
12519 `DECL_FUNCTION_SPECIFIC_TARGET'
12520 This macro returns a tree node that holds the target options that
12521 are to be used to compile this particular function or `NULL_TREE'
12522 if the function is to be compiled with the target options
12523 specified on the command line.
12525 `DECL_FUNCTION_SPECIFIC_OPTIMIZATION'
12526 This macro returns a tree node that holds the optimization options
12527 that are to be used to compile this particular function or
12528 `NULL_TREE' if the function is to be compiled with the
12529 optimization options specified on the command line.
12532 11.8.2.1 Statements
12533 ...................
12535 There are tree nodes corresponding to all of the source-level statement
12536 constructs, used within the C and C++ frontends. These are enumerated
12537 here, together with a list of the various macros that can be used to
12538 obtain information about them. There are a few macros that can be used
12539 with all statements:
12542 File: gccint.info, Node: Language-dependent trees, Next: C and C++ Trees, Prev: Functions, Up: GENERIC
12544 11.9 Language-dependent trees
12545 =============================
12547 Front ends may wish to keep some state associated with various GENERIC
12548 trees while parsing. To support this, trees provide a set of flags
12549 that may be used by the front end. They are accessed using
12550 `TREE_LANG_FLAG_n' where `n' is currently 0 through 6.
12552 If necessary, a front end can use some language-dependent tree codes
12553 in its GENERIC representation, so long as it provides a hook for
12554 converting them to GIMPLE and doesn't expect them to work with any
12555 (hypothetical) optimizers that run before the conversion to GIMPLE. The
12556 intermediate representation used while parsing C and C++ looks very
12557 little like GENERIC, but the C and C++ gimplifier hooks are perfectly
12558 happy to take it as input and spit out GIMPLE.
12561 File: gccint.info, Node: C and C++ Trees, Next: Java Trees, Prev: Language-dependent trees, Up: GENERIC
12563 11.10 C and C++ Trees
12564 =====================
12566 This section documents the internal representation used by GCC to
12567 represent C and C++ source programs. When presented with a C or C++
12568 source program, GCC parses the program, performs semantic analysis
12569 (including the generation of error messages), and then produces the
12570 internal representation described here. This representation contains a
12571 complete representation for the entire translation unit provided as
12572 input to the front end. This representation is then typically processed
12573 by a code-generator in order to produce machine code, but could also be
12574 used in the creation of source browsers, intelligent editors, automatic
12575 documentation generators, interpreters, and any other programs needing
12576 the ability to process C or C++ code.
12578 This section explains the internal representation. In particular, it
12579 documents the internal representation for C and C++ source constructs,
12580 and the macros, functions, and variables that can be used to access
12581 these constructs. The C++ representation is largely a superset of the
12582 representation used in the C front end. There is only one construct
12583 used in C that does not appear in the C++ front end and that is the GNU
12584 "nested function" extension. Many of the macros documented here do not
12585 apply in C because the corresponding language constructs do not appear
12588 The C and C++ front ends generate a mix of GENERIC trees and ones
12589 specific to C and C++. These language-specific trees are higher-level
12590 constructs than the ones in GENERIC to make the parser's job easier.
12591 This section describes those trees that aren't part of GENERIC as well
12592 as aspects of GENERIC trees that are treated in a language-specific
12595 If you are developing a "back end", be it is a code-generator or some
12596 other tool, that uses this representation, you may occasionally find
12597 that you need to ask questions not easily answered by the functions and
12598 macros available here. If that situation occurs, it is quite likely
12599 that GCC already supports the functionality you desire, but that the
12600 interface is simply not documented here. In that case, you should ask
12601 the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting
12602 the functionality you require. Similarly, if you find yourself writing
12603 functions that do not deal directly with your back end, but instead
12604 might be useful to other people using the GCC front end, you should
12605 submit your patches for inclusion in GCC.
12609 * Types for C++:: Fundamental and aggregate types.
12610 * Namespaces:: Namespaces.
12611 * Classes:: Classes.
12612 * Functions for C++:: Overloading and accessors for C++.
12613 * Statements for C++:: Statements specific to C and C++.
12614 * C++ Expressions:: From `typeid' to `throw'.
12617 File: gccint.info, Node: Types for C++, Next: Namespaces, Up: C and C++ Trees
12619 11.10.1 Types for C++
12620 ---------------------
12622 In C++, an array type is not qualified; rather the type of the array
12623 elements is qualified. This situation is reflected in the intermediate
12624 representation. The macros described here will always examine the
12625 qualification of the underlying element type when applied to an array
12626 type. (If the element type is itself an array, then the recursion
12627 continues until a non-array type is found, and the qualification of this
12628 type is examined.) So, for example, `CP_TYPE_CONST_P' will hold of the
12629 type `const int ()[7]', denoting an array of seven `int's.
12631 The following functions and macros deal with cv-qualification of types:
12633 This macro returns the set of type qualifiers applied to this type.
12634 This value is `TYPE_UNQUALIFIED' if no qualifiers have been
12635 applied. The `TYPE_QUAL_CONST' bit is set if the type is
12636 `const'-qualified. The `TYPE_QUAL_VOLATILE' bit is set if the
12637 type is `volatile'-qualified. The `TYPE_QUAL_RESTRICT' bit is set
12638 if the type is `restrict'-qualified.
12641 This macro holds if the type is `const'-qualified.
12643 `CP_TYPE_VOLATILE_P'
12644 This macro holds if the type is `volatile'-qualified.
12646 `CP_TYPE_RESTRICT_P'
12647 This macro holds if the type is `restrict'-qualified.
12649 `CP_TYPE_CONST_NON_VOLATILE_P'
12650 This predicate holds for a type that is `const'-qualified, but
12651 _not_ `volatile'-qualified; other cv-qualifiers are ignored as
12652 well: only the `const'-ness is tested.
12655 A few other macros and functions are usable with all types:
12657 The number of bits required to represent the type, represented as
12658 an `INTEGER_CST'. For an incomplete type, `TYPE_SIZE' will be
12662 The alignment of the type, in bits, represented as an `int'.
12665 This macro returns a declaration (in the form of a `TYPE_DECL') for
12666 the type. (Note this macro does _not_ return an
12667 `IDENTIFIER_NODE', as you might expect, given its name!) You can
12668 look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual
12669 name of the type. The `TYPE_NAME' will be `NULL_TREE' for a type
12670 that is not a built-in type, the result of a typedef, or a named
12674 This predicate holds if the type is an integral type. Notice that
12675 in C++, enumerations are _not_ integral types.
12677 `ARITHMETIC_TYPE_P'
12678 This predicate holds if the type is an integral type (in the C++
12679 sense) or a floating point type.
12682 This predicate holds for a class-type.
12685 This predicate holds for a built-in type.
12688 This predicate holds if the type is a pointer to data member.
12691 This predicate holds if the type is a pointer type, and the
12692 pointee is not a data member.
12695 This predicate holds for a pointer to function type.
12698 This predicate holds for a pointer to object type. Note however
12699 that it does not hold for the generic pointer to object type `void
12700 *'. You may use `TYPE_PTROBV_P' to test for a pointer to object
12701 type as well as `void *'.
12704 The table below describes types specific to C and C++ as well as
12705 language-dependent info about GENERIC types.
12708 Used to represent pointer types, and pointer to data member types.
12709 If `TREE_TYPE' is a pointer to data member type, then
12710 `TYPE_PTRMEM_P' will hold. For a pointer to data member type of
12711 the form `T X::*', `TYPE_PTRMEM_CLASS_TYPE' will be the type `X',
12712 while `TYPE_PTRMEM_POINTED_TO_TYPE' will be the type `T'.
12715 Used to represent `struct' and `class' types in C and C++. If
12716 `TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member
12717 type. In that case, the `TYPE_PTRMEMFUNC_FN_TYPE' is a
12718 `POINTER_TYPE' pointing to a `METHOD_TYPE'. The `METHOD_TYPE' is
12719 the type of a function pointed to by the pointer-to-member
12720 function. If `TYPE_PTRMEMFUNC_P' does not hold, this type is a
12721 class type. For more information, see *note Classes::.
12724 This node is used to represent a type the knowledge of which is
12725 insufficient for a sound processing.
12728 Used to represent a construct of the form `typename T::A'. The
12729 `TYPE_CONTEXT' is `T'; the `TYPE_NAME' is an `IDENTIFIER_NODE' for
12730 `A'. If the type is specified via a template-id, then
12731 `TYPENAME_TYPE_FULLNAME' yields a `TEMPLATE_ID_EXPR'. The
12732 `TREE_TYPE' is non-`NULL' if the node is implicitly generated in
12733 support for the implicit typename extension; in which case the
12734 `TREE_TYPE' is a type node for the base-class.
12737 Used to represent the `__typeof__' extension. The `TYPE_FIELDS'
12738 is the expression the type of which is being represented.
12742 File: gccint.info, Node: Namespaces, Next: Classes, Prev: Types for C++, Up: C and C++ Trees
12747 The root of the entire intermediate representation is the variable
12748 `global_namespace'. This is the namespace specified with `::' in C++
12749 source code. All other namespaces, types, variables, functions, and so
12750 forth can be found starting with this namespace.
12752 However, except for the fact that it is distinguished as the root of
12753 the representation, the global namespace is no different from any other
12754 namespace. Thus, in what follows, we describe namespaces generally,
12755 rather than the global namespace in particular.
12757 A namespace is represented by a `NAMESPACE_DECL' node.
12759 The following macros and functions can be used on a `NAMESPACE_DECL':
12762 This macro is used to obtain the `IDENTIFIER_NODE' corresponding to
12763 the unqualified name of the name of the namespace (*note
12764 Identifiers::). The name of the global namespace is `::', even
12765 though in C++ the global namespace is unnamed. However, you
12766 should use comparison with `global_namespace', rather than
12767 `DECL_NAME' to determine whether or not a namespace is the global
12768 one. An unnamed namespace will have a `DECL_NAME' equal to
12769 `anonymous_namespace_name'. Within a single translation unit, all
12770 unnamed namespaces will have the same name.
12773 This macro returns the enclosing namespace. The `DECL_CONTEXT' for
12774 the `global_namespace' is `NULL_TREE'.
12776 `DECL_NAMESPACE_ALIAS'
12777 If this declaration is for a namespace alias, then
12778 `DECL_NAMESPACE_ALIAS' is the namespace for which this one is an
12781 Do not attempt to use `cp_namespace_decls' for a namespace which is
12782 an alias. Instead, follow `DECL_NAMESPACE_ALIAS' links until you
12783 reach an ordinary, non-alias, namespace, and call
12784 `cp_namespace_decls' there.
12786 `DECL_NAMESPACE_STD_P'
12787 This predicate holds if the namespace is the special `::std'
12790 `cp_namespace_decls'
12791 This function will return the declarations contained in the
12792 namespace, including types, overloaded functions, other
12793 namespaces, and so forth. If there are no declarations, this
12794 function will return `NULL_TREE'. The declarations are connected
12795 through their `TREE_CHAIN' fields.
12797 Although most entries on this list will be declarations,
12798 `TREE_LIST' nodes may also appear. In this case, the `TREE_VALUE'
12799 will be an `OVERLOAD'. The value of the `TREE_PURPOSE' is
12800 unspecified; back ends should ignore this value. As with the
12801 other kinds of declarations returned by `cp_namespace_decls', the
12802 `TREE_CHAIN' will point to the next declaration in this list.
12804 For more information on the kinds of declarations that can occur
12805 on this list, *Note Declarations::. Some declarations will not
12806 appear on this list. In particular, no `FIELD_DECL',
12807 `LABEL_DECL', or `PARM_DECL' nodes will appear here.
12809 This function cannot be used with namespaces that have
12810 `DECL_NAMESPACE_ALIAS' set.
12814 File: gccint.info, Node: Classes, Next: Functions for C++, Prev: Namespaces, Up: C and C++ Trees
12819 Besides namespaces, the other high-level scoping construct in C++ is the
12820 class. (Throughout this manual the term "class" is used to mean the
12821 types referred to in the ANSI/ISO C++ Standard as classes; these include
12822 types defined with the `class', `struct', and `union' keywords.)
12824 A class type is represented by either a `RECORD_TYPE' or a
12825 `UNION_TYPE'. A class declared with the `union' tag is represented by
12826 a `UNION_TYPE', while classes declared with either the `struct' or the
12827 `class' tag are represented by `RECORD_TYPE's. You can use the
12828 `CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular
12829 type is a `class' as opposed to a `struct'. This macro will be true
12830 only for classes declared with the `class' tag.
12832 Almost all non-function members are available on the `TYPE_FIELDS'
12833 list. Given one member, the next can be found by following the
12834 `TREE_CHAIN'. You should not depend in any way on the order in which
12835 fields appear on this list. All nodes on this list will be `DECL'
12836 nodes. A `FIELD_DECL' is used to represent a non-static data member, a
12837 `VAR_DECL' is used to represent a static data member, and a `TYPE_DECL'
12838 is used to represent a type. Note that the `CONST_DECL' for an
12839 enumeration constant will appear on this list, if the enumeration type
12840 was declared in the class. (Of course, the `TYPE_DECL' for the
12841 enumeration type will appear here as well.) There are no entries for
12842 base classes on this list. In particular, there is no `FIELD_DECL' for
12843 the "base-class portion" of an object.
12845 The `TYPE_VFIELD' is a compiler-generated field used to point to
12846 virtual function tables. It may or may not appear on the `TYPE_FIELDS'
12847 list. However, back ends should handle the `TYPE_VFIELD' just like all
12848 the entries on the `TYPE_FIELDS' list.
12850 The function members are available on the `TYPE_METHODS' list. Again,
12851 subsequent members are found by following the `TREE_CHAIN' field. If a
12852 function is overloaded, each of the overloaded functions appears; no
12853 `OVERLOAD' nodes appear on the `TYPE_METHODS' list. Implicitly
12854 declared functions (including default constructors, copy constructors,
12855 assignment operators, and destructors) will appear on this list as well.
12857 Every class has an associated "binfo", which can be obtained with
12858 `TYPE_BINFO'. Binfos are used to represent base-classes. The binfo
12859 given by `TYPE_BINFO' is the degenerate case, whereby every class is
12860 considered to be its own base-class. The base binfos for a particular
12861 binfo are held in a vector, whose length is obtained with
12862 `BINFO_N_BASE_BINFOS'. The base binfos themselves are obtained with
12863 `BINFO_BASE_BINFO' and `BINFO_BASE_ITERATE'. To add a new binfo, use
12864 `BINFO_BASE_APPEND'. The vector of base binfos can be obtained with
12865 `BINFO_BASE_BINFOS', but normally you do not need to use that. The
12866 class type associated with a binfo is given by `BINFO_TYPE'. It is not
12867 always the case that `BINFO_TYPE (TYPE_BINFO (x))', because of typedefs
12868 and qualified types. Neither is it the case that `TYPE_BINFO
12869 (BINFO_TYPE (y))' is the same binfo as `y'. The reason is that if `y'
12870 is a binfo representing a base-class `B' of a derived class `D', then
12871 `BINFO_TYPE (y)' will be `B', and `TYPE_BINFO (BINFO_TYPE (y))' will be
12872 `B' as its own base-class, rather than as a base-class of `D'.
12874 The access to a base type can be found with `BINFO_BASE_ACCESS'. This
12875 will produce `access_public_node', `access_private_node' or
12876 `access_protected_node'. If bases are always public,
12877 `BINFO_BASE_ACCESSES' may be `NULL'.
12879 `BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited
12880 virtually or not. The other flags, `BINFO_MARKED_P' and `BINFO_FLAG_1'
12881 to `BINFO_FLAG_6' can be used for language specific use.
12883 The following macros can be used on a tree node representing a
12887 This predicate holds if the class is local class _i.e._ declared
12888 inside a function body.
12890 `TYPE_POLYMORPHIC_P'
12891 This predicate holds if the class has at least one virtual function
12892 (declared or inherited).
12894 `TYPE_HAS_DEFAULT_CONSTRUCTOR'
12895 This predicate holds whenever its argument represents a class-type
12896 with default constructor.
12898 `CLASSTYPE_HAS_MUTABLE'
12899 `TYPE_HAS_MUTABLE_P'
12900 These predicates hold for a class-type having a mutable data
12903 `CLASSTYPE_NON_POD_P'
12904 This predicate holds only for class-types that are not PODs.
12906 `TYPE_HAS_NEW_OPERATOR'
12907 This predicate holds for a class-type that defines `operator new'.
12909 `TYPE_HAS_ARRAY_NEW_OPERATOR'
12910 This predicate holds for a class-type for which `operator new[]'
12913 `TYPE_OVERLOADS_CALL_EXPR'
12914 This predicate holds for class-type for which the function call
12915 `operator()' is overloaded.
12917 `TYPE_OVERLOADS_ARRAY_REF'
12918 This predicate holds for a class-type that overloads `operator[]'
12920 `TYPE_OVERLOADS_ARROW'
12921 This predicate holds for a class-type for which `operator->' is
12926 File: gccint.info, Node: Functions for C++, Next: Statements for C++, Prev: Classes, Up: C and C++ Trees
12928 11.10.4 Functions for C++
12929 -------------------------
12931 A function is represented by a `FUNCTION_DECL' node. A set of
12932 overloaded functions is sometimes represented by an `OVERLOAD' node.
12934 An `OVERLOAD' node is not a declaration, so none of the `DECL_' macros
12935 should be used on an `OVERLOAD'. An `OVERLOAD' node is similar to a
12936 `TREE_LIST'. Use `OVL_CURRENT' to get the function associated with an
12937 `OVERLOAD' node; use `OVL_NEXT' to get the next `OVERLOAD' node in the
12938 list of overloaded functions. The macros `OVL_CURRENT' and `OVL_NEXT'
12939 are actually polymorphic; you can use them to work with `FUNCTION_DECL'
12940 nodes as well as with overloads. In the case of a `FUNCTION_DECL',
12941 `OVL_CURRENT' will always return the function itself, and `OVL_NEXT'
12942 will always be `NULL_TREE'.
12944 To determine the scope of a function, you can use the `DECL_CONTEXT'
12945 macro. This macro will return the class (either a `RECORD_TYPE' or a
12946 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function
12947 is a member. For a virtual function, this macro returns the class in
12948 which the function was actually defined, not the base class in which
12949 the virtual declaration occurred.
12951 If a friend function is defined in a class scope, the
12952 `DECL_FRIEND_CONTEXT' macro can be used to determine the class in which
12953 it was defined. For example, in
12954 class C { friend void f() {} };
12955 the `DECL_CONTEXT' for `f' will be the `global_namespace', but the
12956 `DECL_FRIEND_CONTEXT' will be the `RECORD_TYPE' for `C'.
12958 The following macros and functions can be used on a `FUNCTION_DECL':
12960 This predicate holds for a function that is the program entry point
12963 `DECL_LOCAL_FUNCTION_P'
12964 This predicate holds if the function was declared at block scope,
12965 even though it has a global scope.
12968 This predicate holds if the function is a built-in function but its
12969 prototype is not yet explicitly declared.
12971 `DECL_EXTERN_C_FUNCTION_P'
12972 This predicate holds if the function is declared as an ``extern
12976 This macro holds if multiple copies of this function may be
12977 emitted in various translation units. It is the responsibility of
12978 the linker to merge the various copies. Template instantiations
12979 are the most common example of functions for which
12980 `DECL_LINKONCE_P' holds; G++ instantiates needed templates in all
12981 translation units which require them, and then relies on the
12982 linker to remove duplicate instantiations.
12984 FIXME: This macro is not yet implemented.
12986 `DECL_FUNCTION_MEMBER_P'
12987 This macro holds if the function is a member of a class, rather
12988 than a member of a namespace.
12990 `DECL_STATIC_FUNCTION_P'
12991 This predicate holds if the function a static member function.
12993 `DECL_NONSTATIC_MEMBER_FUNCTION_P'
12994 This macro holds for a non-static member function.
12996 `DECL_CONST_MEMFUNC_P'
12997 This predicate holds for a `const'-member function.
12999 `DECL_VOLATILE_MEMFUNC_P'
13000 This predicate holds for a `volatile'-member function.
13002 `DECL_CONSTRUCTOR_P'
13003 This macro holds if the function is a constructor.
13005 `DECL_NONCONVERTING_P'
13006 This predicate holds if the constructor is a non-converting
13009 `DECL_COMPLETE_CONSTRUCTOR_P'
13010 This predicate holds for a function which is a constructor for an
13011 object of a complete type.
13013 `DECL_BASE_CONSTRUCTOR_P'
13014 This predicate holds for a function which is a constructor for a
13015 base class sub-object.
13017 `DECL_COPY_CONSTRUCTOR_P'
13018 This predicate holds for a function which is a copy-constructor.
13020 `DECL_DESTRUCTOR_P'
13021 This macro holds if the function is a destructor.
13023 `DECL_COMPLETE_DESTRUCTOR_P'
13024 This predicate holds if the function is the destructor for an
13025 object a complete type.
13027 `DECL_OVERLOADED_OPERATOR_P'
13028 This macro holds if the function is an overloaded operator.
13031 This macro holds if the function is a type-conversion operator.
13033 `DECL_GLOBAL_CTOR_P'
13034 This predicate holds if the function is a file-scope initialization
13037 `DECL_GLOBAL_DTOR_P'
13038 This predicate holds if the function is a file-scope finalization
13042 This predicate holds if the function is a thunk.
13044 These functions represent stub code that adjusts the `this' pointer
13045 and then jumps to another function. When the jumped-to function
13046 returns, control is transferred directly to the caller, without
13047 returning to the thunk. The first parameter to the thunk is
13048 always the `this' pointer; the thunk should add `THUNK_DELTA' to
13049 this value. (The `THUNK_DELTA' is an `int', not an `INTEGER_CST'.)
13051 Then, if `THUNK_VCALL_OFFSET' (an `INTEGER_CST') is nonzero the
13052 adjusted `this' pointer must be adjusted again. The complete
13053 calculation is given by the following pseudo-code:
13055 this += THUNK_DELTA
13056 if (THUNK_VCALL_OFFSET)
13057 this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
13059 Finally, the thunk should jump to the location given by
13060 `DECL_INITIAL'; this will always be an expression for the address
13063 `DECL_NON_THUNK_FUNCTION_P'
13064 This predicate holds if the function is _not_ a thunk function.
13066 `GLOBAL_INIT_PRIORITY'
13067 If either `DECL_GLOBAL_CTOR_P' or `DECL_GLOBAL_DTOR_P' holds, then
13068 this gives the initialization priority for the function. The
13069 linker will arrange that all functions for which
13070 `DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority
13071 before `main' is called. When the program exits, all functions for
13072 which `DECL_GLOBAL_DTOR_P' holds are run in the reverse order.
13074 `TYPE_RAISES_EXCEPTIONS'
13075 This macro returns the list of exceptions that a (member-)function
13076 can raise. The returned list, if non `NULL', is comprised of nodes
13077 whose `TREE_VALUE' represents a type.
13080 This predicate holds when the exception-specification of its
13081 arguments is of the form ``()''.
13083 `DECL_ARRAY_DELETE_OPERATOR_P'
13084 This predicate holds if the function an overloaded `operator
13089 File: gccint.info, Node: Statements for C++, Next: C++ Expressions, Prev: Functions for C++, Up: C and C++ Trees
13091 11.10.5 Statements for C++
13092 --------------------------
13094 A function that has a definition in the current translation unit will
13095 have a non-`NULL' `DECL_INITIAL'. However, back ends should not make
13096 use of the particular value given by `DECL_INITIAL'.
13098 The `DECL_SAVED_TREE' macro will give the complete body of the
13101 11.10.5.1 Statements
13102 ....................
13104 There are tree nodes corresponding to all of the source-level statement
13105 constructs, used within the C and C++ frontends. These are enumerated
13106 here, together with a list of the various macros that can be used to
13107 obtain information about them. There are a few macros that can be used
13108 with all statements:
13110 `STMT_IS_FULL_EXPR_P'
13111 In C++, statements normally constitute "full expressions";
13112 temporaries created during a statement are destroyed when the
13113 statement is complete. However, G++ sometimes represents
13114 expressions by statements; these statements will not have
13115 `STMT_IS_FULL_EXPR_P' set. Temporaries created during such
13116 statements should be destroyed when the innermost enclosing
13117 statement with `STMT_IS_FULL_EXPR_P' set is exited.
13120 Here is the list of the various statement nodes, and the macros used to
13121 access them. This documentation describes the use of these nodes in
13122 non-template functions (including instantiations of template functions).
13123 In template functions, the same nodes are used, but sometimes in
13124 slightly different ways.
13126 Many of the statements have substatements. For example, a `while'
13127 loop will have a body, which is itself a statement. If the substatement
13128 is `NULL_TREE', it is considered equivalent to a statement consisting
13129 of a single `;', i.e., an expression statement in which the expression
13130 has been omitted. A substatement may in fact be a list of statements,
13131 connected via their `TREE_CHAIN's. So, you should always process the
13132 statement tree by looping over substatements, like this:
13133 void process_stmt (stmt)
13138 switch (TREE_CODE (stmt))
13141 process_stmt (THEN_CLAUSE (stmt));
13142 /* More processing here. */
13148 stmt = TREE_CHAIN (stmt);
13151 In other words, while the `then' clause of an `if' statement in C++
13152 can be only one statement (although that one statement may be a
13153 compound statement), the intermediate representation will sometimes use
13154 several statements chained together.
13157 Used to represent a `break' statement. There are no additional
13161 Used to represent an action that should take place upon exit from
13162 the enclosing scope. Typically, these actions are calls to
13163 destructors for local objects, but back ends cannot rely on this
13164 fact. If these nodes are in fact representing such destructors,
13165 `CLEANUP_DECL' will be the `VAR_DECL' destroyed. Otherwise,
13166 `CLEANUP_DECL' will be `NULL_TREE'. In any case, the
13167 `CLEANUP_EXPR' is the expression to execute. The cleanups
13168 executed on exit from a scope should be run in the reverse order
13169 of the order in which the associated `CLEANUP_STMT's were
13173 Used to represent a `continue' statement. There are no additional
13177 Used to mark the beginning (if `CTOR_BEGIN_P' holds) or end (if
13178 `CTOR_END_P' holds of the main body of a constructor. See also
13179 `SUBOBJECT' for more information on how to use these nodes.
13182 Used to represent a `do' loop. The body of the loop is given by
13183 `DO_BODY' while the termination condition for the loop is given by
13184 `DO_COND'. The condition for a `do'-statement is always an
13188 Used to represent a temporary object of a class with no data whose
13189 address is never taken. (All such objects are interchangeable.)
13190 The `TREE_TYPE' represents the type of the object.
13193 Used to represent an expression statement. Use `EXPR_STMT_EXPR' to
13194 obtain the expression.
13197 Used to represent a `for' statement. The `FOR_INIT_STMT' is the
13198 initialization statement for the loop. The `FOR_COND' is the
13199 termination condition. The `FOR_EXPR' is the expression executed
13200 right before the `FOR_COND' on each loop iteration; often, this
13201 expression increments a counter. The body of the loop is given by
13202 `FOR_BODY'. Note that `FOR_INIT_STMT' and `FOR_BODY' return
13203 statements, while `FOR_COND' and `FOR_EXPR' return expressions.
13206 Used to represent a C++ `catch' block. The `HANDLER_TYPE' is the
13207 type of exception that will be caught by this handler; it is equal
13208 (by pointer equality) to `NULL' if this handler is for all types.
13209 `HANDLER_PARMS' is the `DECL_STMT' for the catch parameter, and
13210 `HANDLER_BODY' is the code for the block itself.
13213 Used to represent an `if' statement. The `IF_COND' is the
13216 If the condition is a `TREE_LIST', then the `TREE_PURPOSE' is a
13217 statement (usually a `DECL_STMT'). Each time the condition is
13218 evaluated, the statement should be executed. Then, the
13219 `TREE_VALUE' should be used as the conditional expression itself.
13220 This representation is used to handle C++ code like this:
13222 C++ distinguishes between this and `COND_EXPR' for handling
13227 where there is a new local variable (or variables) declared within
13230 The `THEN_CLAUSE' represents the statement given by the `then'
13231 condition, while the `ELSE_CLAUSE' represents the statement given
13232 by the `else' condition.
13235 In a constructor, these nodes are used to mark the point at which a
13236 subobject of `this' is fully constructed. If, after this point, an
13237 exception is thrown before a `CTOR_STMT' with `CTOR_END_P' set is
13238 encountered, the `SUBOBJECT_CLEANUP' must be executed. The
13239 cleanups must be executed in the reverse order in which they
13243 Used to represent a `switch' statement. The `SWITCH_STMT_COND' is
13244 the expression on which the switch is occurring. See the
13245 documentation for an `IF_STMT' for more information on the
13246 representation used for the condition. The `SWITCH_STMT_BODY' is
13247 the body of the switch statement. The `SWITCH_STMT_TYPE' is the
13248 original type of switch expression as given in the source, before
13249 any compiler conversions.
13252 Used to represent a `try' block. The body of the try block is
13253 given by `TRY_STMTS'. Each of the catch blocks is a `HANDLER'
13254 node. The first handler is given by `TRY_HANDLERS'. Subsequent
13255 handlers are obtained by following the `TREE_CHAIN' link from one
13256 handler to the next. The body of the handler is given by
13259 If `CLEANUP_P' holds of the `TRY_BLOCK', then the `TRY_HANDLERS'
13260 will not be a `HANDLER' node. Instead, it will be an expression
13261 that should be executed if an exception is thrown in the try
13262 block. It must rethrow the exception after executing that code.
13263 And, if an exception is thrown while the expression is executing,
13264 `terminate' must be called.
13267 Used to represent a `using' directive. The namespace is given by
13268 `USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL. This node
13269 is needed inside template functions, to implement using directives
13270 during instantiation.
13273 Used to represent a `while' loop. The `WHILE_COND' is the
13274 termination condition for the loop. See the documentation for an
13275 `IF_STMT' for more information on the representation used for the
13278 The `WHILE_BODY' is the body of the loop.
13282 File: gccint.info, Node: C++ Expressions, Prev: Statements for C++, Up: C and C++ Trees
13284 11.10.6 C++ Expressions
13285 -----------------------
13287 This section describes expressions specific to the C and C++ front ends.
13290 Used to represent a `typeid' expression.
13294 Used to represent a call to `new' and `new[]' respectively.
13298 Used to represent a call to `delete' and `delete[]' respectively.
13301 Represents a reference to a member of a class.
13304 Represents an instance of `throw' in the program. Operand 0,
13305 which is the expression to throw, may be `NULL_TREE'.
13308 An `AGGR_INIT_EXPR' represents the initialization as the return
13309 value of a function call, or as the result of a constructor. An
13310 `AGGR_INIT_EXPR' will only appear as a full-expression, or as the
13311 second operand of a `TARGET_EXPR'. `AGGR_INIT_EXPR's have a
13312 representation similar to that of `CALL_EXPR's. You can use the
13313 `AGGR_INIT_EXPR_FN' and `AGGR_INIT_EXPR_ARG' macros to access the
13314 function to call and the arguments to pass.
13316 If `AGGR_INIT_VIA_CTOR_P' holds of the `AGGR_INIT_EXPR', then the
13317 initialization is via a constructor call. The address of the
13318 `AGGR_INIT_EXPR_SLOT' operand, which is always a `VAR_DECL', is
13319 taken, and this value replaces the first argument in the argument
13322 In either case, the expression is void.
13326 File: gccint.info, Node: Java Trees, Prev: C and C++ Trees, Up: GENERIC
13332 File: gccint.info, Node: GIMPLE, Next: Tree SSA, Prev: GENERIC, Up: Top
13337 GIMPLE is a three-address representation derived from GENERIC by
13338 breaking down GENERIC expressions into tuples of no more than 3
13339 operands (with some exceptions like function calls). GIMPLE was
13340 heavily influenced by the SIMPLE IL used by the McCAT compiler project
13341 at McGill University, though we have made some different choices. For
13342 one thing, SIMPLE doesn't support `goto'.
13344 Temporaries are introduced to hold intermediate values needed to
13345 compute complex expressions. Additionally, all the control structures
13346 used in GENERIC are lowered into conditional jumps, lexical scopes are
13347 removed and exception regions are converted into an on the side
13348 exception region tree.
13350 The compiler pass which converts GENERIC into GIMPLE is referred to as
13351 the `gimplifier'. The gimplifier works recursively, generating GIMPLE
13352 tuples out of the original GENERIC expressions.
13354 One of the early implementation strategies used for the GIMPLE
13355 representation was to use the same internal data structures used by
13356 front ends to represent parse trees. This simplified implementation
13357 because we could leverage existing functionality and interfaces.
13358 However, GIMPLE is a much more restrictive representation than abstract
13359 syntax trees (AST), therefore it does not require the full structural
13360 complexity provided by the main tree data structure.
13362 The GENERIC representation of a function is stored in the
13363 `DECL_SAVED_TREE' field of the associated `FUNCTION_DECL' tree node.
13364 It is converted to GIMPLE by a call to `gimplify_function_tree'.
13366 If a front end wants to include language-specific tree codes in the
13367 tree representation which it provides to the back end, it must provide a
13368 definition of `LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the
13369 front end trees to GIMPLE. Usually such a hook will involve much of
13370 the same code for expanding front end trees to RTL. This function can
13371 return fully lowered GIMPLE, or it can return GENERIC trees and let the
13372 main gimplifier lower them the rest of the way; this is often simpler.
13373 GIMPLE that is not fully lowered is known as "High GIMPLE" and consists
13374 of the IL before the pass `pass_lower_cf'. High GIMPLE contains some
13375 container statements like lexical scopes (represented by `GIMPLE_BIND')
13376 and nested expressions (e.g., `GIMPLE_TRY'), while "Low GIMPLE" exposes
13377 all of the implicit jumps for control and exception expressions
13378 directly in the IL and EH region trees.
13380 The C and C++ front ends currently convert directly from front end
13381 trees to GIMPLE, and hand that off to the back end rather than first
13382 converting to GENERIC. Their gimplifier hooks know about all the
13383 `_STMT' nodes and how to convert them to GENERIC forms. There was some
13384 work done on a genericization pass which would run first, but the
13385 existence of `STMT_EXPR' meant that in order to convert all of the C
13386 statements into GENERIC equivalents would involve walking the entire
13387 tree anyway, so it was simpler to lower all the way. This might change
13388 in the future if someone writes an optimization pass which would work
13389 better with higher-level trees, but currently the optimizers all expect
13392 You can request to dump a C-like representation of the GIMPLE form
13393 with the flag `-fdump-tree-gimple'.
13397 * Tuple representation::
13398 * GIMPLE instruction set::
13399 * GIMPLE Exception Handling::
13402 * Manipulating GIMPLE statements::
13403 * Tuple specific accessors::
13404 * GIMPLE sequences::
13405 * Sequence iterators::
13406 * Adding a new GIMPLE statement code::
13407 * Statement and operand traversals::
13410 File: gccint.info, Node: Tuple representation, Next: GIMPLE instruction set, Up: GIMPLE
13412 12.1 Tuple representation
13413 =========================
13415 GIMPLE instructions are tuples of variable size divided in two groups:
13416 a header describing the instruction and its locations, and a variable
13417 length body with all the operands. Tuples are organized into a
13418 hierarchy with 3 main classes of tuples.
13420 12.1.1 `gimple_statement_base' (gsbase)
13421 ---------------------------------------
13423 This is the root of the hierarchy, it holds basic information needed by
13424 most GIMPLE statements. There are some fields that may not be relevant
13425 to every GIMPLE statement, but those were moved into the base structure
13426 to take advantage of holes left by other fields (thus making the
13427 structure more compact). The structure takes 4 words (32 bytes) on 64
13435 `nontemporal_move' 1
13438 `has_volatile_ops' 1
13439 `references_memory_p' 1
13445 Total size 32 bytes
13447 * `code' Main identifier for a GIMPLE instruction.
13449 * `subcode' Used to distinguish different variants of the same basic
13450 instruction or provide flags applicable to a given code. The
13451 `subcode' flags field has different uses depending on the code of
13452 the instruction, but mostly it distinguishes instructions of the
13453 same family. The most prominent use of this field is in
13454 assignments, where subcode indicates the operation done on the RHS
13455 of the assignment. For example, a = b + c is encoded as
13456 `GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'.
13458 * `no_warning' Bitflag to indicate whether a warning has already
13459 been issued on this statement.
13461 * `visited' General purpose "visited" marker. Set and cleared by
13462 each pass when needed.
13464 * `nontemporal_move' Bitflag used in assignments that represent
13465 non-temporal moves. Although this bitflag is only used in
13466 assignments, it was moved into the base to take advantage of the
13467 bit holes left by the previous fields.
13469 * `plf' Pass Local Flags. This 2-bit mask can be used as general
13470 purpose markers by any pass. Passes are responsible for clearing
13471 and setting these two flags accordingly.
13473 * `modified' Bitflag to indicate whether the statement has been
13474 modified. Used mainly by the operand scanner to determine when to
13475 re-scan a statement for operands.
13477 * `has_volatile_ops' Bitflag to indicate whether this statement
13478 contains operands that have been marked volatile.
13480 * `references_memory_p' Bitflag to indicate whether this statement
13481 contains memory references (i.e., its operands are either global
13482 variables, or pointer dereferences or anything that must reside in
13485 * `uid' This is an unsigned integer used by passes that want to
13486 assign IDs to every statement. These IDs must be assigned and used
13489 * `location' This is a `location_t' identifier to specify source code
13490 location for this statement. It is inherited from the front end.
13492 * `num_ops' Number of operands that this statement has. This
13493 specifies the size of the operand vector embedded in the tuple.
13494 Only used in some tuples, but it is declared in the base tuple to
13495 take advantage of the 32-bit hole left by the previous fields.
13497 * `bb' Basic block holding the instruction.
13499 * `block' Lexical block holding this statement. Also used for debug
13500 information generation.
13502 12.1.2 `gimple_statement_with_ops'
13503 ----------------------------------
13505 This tuple is actually split in two: `gimple_statement_with_ops_base'
13506 and `gimple_statement_with_ops'. This is needed to accommodate the way
13507 the operand vector is allocated. The operand vector is defined to be an
13508 array of 1 element. So, to allocate a dynamic number of operands, the
13509 memory allocator (`gimple_alloc') simply allocates enough memory to
13510 hold the structure itself plus `N - 1' operands which run "off the end"
13511 of the structure. For example, to allocate space for a tuple with 3
13512 operands, `gimple_alloc' reserves `sizeof (struct
13513 gimple_statement_with_ops) + 2 * sizeof (tree)' bytes.
13515 On the other hand, several fields in this tuple need to be shared with
13516 the `gimple_statement_with_memory_ops' tuple. So, these common fields
13517 are placed in `gimple_statement_with_ops_base' which is then inherited
13518 from the other two tuples.
13521 `addresses_taken' 64
13524 `op' `num_ops' * 64
13525 Total size 56 + 8 * `num_ops' bytes
13527 * `gsbase' Inherited from `struct gimple_statement_base'.
13529 * `addresses_taken' Bitmap holding the UIDs of all the `VAR_DECL's
13530 whose addresses are taken by this statement. For example, a
13531 statement of the form `p = &b' will have the UID for symbol `b' in
13534 * `def_ops' Array of pointers into the operand array indicating all
13535 the slots that contain a variable written-to by the statement.
13536 This array is also used for immediate use chaining. Note that it
13537 would be possible to not rely on this array, but the changes
13538 required to implement this are pretty invasive.
13540 * `use_ops' Similar to `def_ops' but for variables read by the
13543 * `op' Array of trees with `num_ops' slots.
13545 12.1.3 `gimple_statement_with_memory_ops'
13546 -----------------------------------------
13548 This tuple is essentially identical to `gimple_statement_with_ops',
13549 except that it contains 4 additional fields to hold vectors related
13550 memory stores and loads. Similar to the previous case, the structure
13551 is split in two to accommodate for the operand vector
13552 (`gimple_statement_with_memory_ops_base' and
13553 `gimple_statement_with_memory_ops').
13557 `addresses_taken' 64
13564 `op' `num_ops' * 64
13565 Total size 88 + 8 * `num_ops' bytes
13567 * `vdef_ops' Similar to `def_ops' but for `VDEF' operators. There is
13568 one entry per memory symbol written by this statement. This is
13569 used to maintain the memory SSA use-def and def-def chains.
13571 * `vuse_ops' Similar to `use_ops' but for `VUSE' operators. There is
13572 one entry per memory symbol loaded by this statement. This is used
13573 to maintain the memory SSA use-def chains.
13575 * `stores' Bitset with all the UIDs for the symbols written-to by the
13576 statement. This is different than `vdef_ops' in that all the
13577 affected symbols are mentioned in this set. If memory
13578 partitioning is enabled, the `vdef_ops' vector will refer to memory
13579 partitions. Furthermore, no SSA information is stored in this set.
13581 * `loads' Similar to `stores', but for memory loads. (Note that there
13582 is some amount of redundancy here, it should be possible to reduce
13583 memory utilization further by removing these sets).
13585 All the other tuples are defined in terms of these three basic ones.
13586 Each tuple will add some fields. The main gimple type is defined to be
13587 the union of all these structures (`GTY' markers elided for clarity):
13589 union gimple_statement_d
13591 struct gimple_statement_base gsbase;
13592 struct gimple_statement_with_ops gsops;
13593 struct gimple_statement_with_memory_ops gsmem;
13594 struct gimple_statement_omp omp;
13595 struct gimple_statement_bind gimple_bind;
13596 struct gimple_statement_catch gimple_catch;
13597 struct gimple_statement_eh_filter gimple_eh_filter;
13598 struct gimple_statement_phi gimple_phi;
13599 struct gimple_statement_resx gimple_resx;
13600 struct gimple_statement_try gimple_try;
13601 struct gimple_statement_wce gimple_wce;
13602 struct gimple_statement_asm gimple_asm;
13603 struct gimple_statement_omp_critical gimple_omp_critical;
13604 struct gimple_statement_omp_for gimple_omp_for;
13605 struct gimple_statement_omp_parallel gimple_omp_parallel;
13606 struct gimple_statement_omp_task gimple_omp_task;
13607 struct gimple_statement_omp_sections gimple_omp_sections;
13608 struct gimple_statement_omp_single gimple_omp_single;
13609 struct gimple_statement_omp_continue gimple_omp_continue;
13610 struct gimple_statement_omp_atomic_load gimple_omp_atomic_load;
13611 struct gimple_statement_omp_atomic_store gimple_omp_atomic_store;
13615 File: gccint.info, Node: GIMPLE instruction set, Next: GIMPLE Exception Handling, Prev: Tuple representation, Up: GIMPLE
13617 12.2 GIMPLE instruction set
13618 ===========================
13620 The following table briefly describes the GIMPLE instruction set.
13622 Instruction High GIMPLE Low GIMPLE
13624 `GIMPLE_ASSIGN' x x
13630 `GIMPLE_EH_FILTER' x
13634 `GIMPLE_OMP_ATOMIC_LOAD' x x
13635 `GIMPLE_OMP_ATOMIC_STORE' x x
13636 `GIMPLE_OMP_CONTINUE' x x
13637 `GIMPLE_OMP_CRITICAL' x x
13638 `GIMPLE_OMP_FOR' x x
13639 `GIMPLE_OMP_MASTER' x x
13640 `GIMPLE_OMP_ORDERED' x x
13641 `GIMPLE_OMP_PARALLEL' x x
13642 `GIMPLE_OMP_RETURN' x x
13643 `GIMPLE_OMP_SECTION' x x
13644 `GIMPLE_OMP_SECTIONS' x x
13645 `GIMPLE_OMP_SECTIONS_SWITCH' x x
13646 `GIMPLE_OMP_SINGLE' x x
13649 `GIMPLE_RETURN' x x
13650 `GIMPLE_SWITCH' x x
13654 File: gccint.info, Node: GIMPLE Exception Handling, Next: Temporaries, Prev: GIMPLE instruction set, Up: GIMPLE
13656 12.3 Exception Handling
13657 =======================
13659 Other exception handling constructs are represented using
13660 `GIMPLE_TRY_CATCH'. `GIMPLE_TRY_CATCH' has two operands. The first
13661 operand is a sequence of statements to execute. If executing these
13662 statements does not throw an exception, then the second operand is
13663 ignored. Otherwise, if an exception is thrown, then the second operand
13664 of the `GIMPLE_TRY_CATCH' is checked. The second operand may have the
13667 1. A sequence of statements to execute. When an exception occurs,
13668 these statements are executed, and then the exception is rethrown.
13670 2. A sequence of `GIMPLE_CATCH' statements. Each `GIMPLE_CATCH' has
13671 a list of applicable exception types and handler code. If the
13672 thrown exception matches one of the caught types, the associated
13673 handler code is executed. If the handler code falls off the
13674 bottom, execution continues after the original `GIMPLE_TRY_CATCH'.
13676 3. A `GIMPLE_EH_FILTER' statement. This has a list of permitted
13677 exception types, and code to handle a match failure. If the
13678 thrown exception does not match one of the allowed types, the
13679 associated match failure code is executed. If the thrown exception
13680 does match, it continues unwinding the stack looking for the next
13684 Currently throwing an exception is not directly represented in GIMPLE,
13685 since it is implemented by calling a function. At some point in the
13686 future we will want to add some way to express that the call will throw
13687 an exception of a known type.
13689 Just before running the optimizers, the compiler lowers the high-level
13690 EH constructs above into a set of `goto's, magic labels, and EH
13691 regions. Continuing to unwind at the end of a cleanup is represented
13692 with a `GIMPLE_RESX'.
13695 File: gccint.info, Node: Temporaries, Next: Operands, Prev: GIMPLE Exception Handling, Up: GIMPLE
13700 When gimplification encounters a subexpression that is too complex, it
13701 creates a new temporary variable to hold the value of the
13702 subexpression, and adds a new statement to initialize it before the
13703 current statement. These special temporaries are known as `expression
13704 temporaries', and are allocated using `get_formal_tmp_var'. The
13705 compiler tries to always evaluate identical expressions into the same
13706 temporary, to simplify elimination of redundant calculations.
13708 We can only use expression temporaries when we know that it will not
13709 be reevaluated before its value is used, and that it will not be
13710 otherwise modified(1). Other temporaries can be allocated using
13711 `get_initialized_tmp_var' or `create_tmp_var'.
13713 Currently, an expression like `a = b + 5' is not reduced any further.
13714 We tried converting it to something like
13717 but this bloated the representation for minimal benefit. However, a
13718 variable which must live in memory cannot appear in an expression; its
13719 value is explicitly loaded into a temporary first. Similarly, storing
13720 the value of an expression to a memory variable goes through a
13723 ---------- Footnotes ----------
13725 (1) These restrictions are derived from those in Morgan 4.8.
13728 File: gccint.info, Node: Operands, Next: Manipulating GIMPLE statements, Prev: Temporaries, Up: GIMPLE
13733 In general, expressions in GIMPLE consist of an operation and the
13734 appropriate number of simple operands; these operands must either be a
13735 GIMPLE rvalue (`is_gimple_val'), i.e. a constant or a register
13736 variable. More complex operands are factored out into temporaries, so
13743 The same rule holds for arguments to a `GIMPLE_CALL'.
13745 The target of an assignment is usually a variable, but can also be an
13746 `INDIRECT_REF' or a compound lvalue as described below.
13750 * Compound Expressions::
13751 * Compound Lvalues::
13752 * Conditional Expressions::
13753 * Logical Operators::
13756 File: gccint.info, Node: Compound Expressions, Next: Compound Lvalues, Up: Operands
13758 12.5.1 Compound Expressions
13759 ---------------------------
13761 The left-hand side of a C comma expression is simply moved into a
13762 separate statement.
13765 File: gccint.info, Node: Compound Lvalues, Next: Conditional Expressions, Prev: Compound Expressions, Up: Operands
13767 12.5.2 Compound Lvalues
13768 -----------------------
13770 Currently compound lvalues involving array and structure field
13771 references are not broken down; an expression like `a.b[2] = 42' is not
13772 reduced any further (though complex array subscripts are). This
13773 restriction is a workaround for limitations in later optimizers; if we
13774 were to convert this to
13779 alias analysis would not remember that the reference to `T1[2]' came
13780 by way of `a.b', so it would think that the assignment could alias
13781 another member of `a'; this broke `struct-alias-1.c'. Future optimizer
13782 improvements may make this limitation unnecessary.
13785 File: gccint.info, Node: Conditional Expressions, Next: Logical Operators, Prev: Compound Lvalues, Up: Operands
13787 12.5.3 Conditional Expressions
13788 ------------------------------
13790 A C `?:' expression is converted into an `if' statement with each
13791 branch assigning to the same temporary. So,
13801 The GIMPLE level if-conversion pass re-introduces `?:' expression, if
13802 appropriate. It is used to vectorize loops with conditions using vector
13803 conditional operations.
13805 Note that in GIMPLE, `if' statements are represented using
13806 `GIMPLE_COND', as described below.
13809 File: gccint.info, Node: Logical Operators, Prev: Conditional Expressions, Up: Operands
13811 12.5.4 Logical Operators
13812 ------------------------
13814 Except when they appear in the condition operand of a `GIMPLE_COND',
13815 logical `and' and `or' operators are simplified as follows: `a = b &&
13823 Note that `T1' in this example cannot be an expression temporary,
13824 because it has two different assignments.
13826 12.5.5 Manipulating operands
13827 ----------------------------
13829 All gimple operands are of type `tree'. But only certain types of
13830 trees are allowed to be used as operand tuples. Basic validation is
13831 controlled by the function `get_gimple_rhs_class', which given a tree
13832 code, returns an `enum' with the following values of type `enum
13835 * `GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand.
13837 * `GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation.
13839 * `GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation.
13841 * `GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be
13842 split into simpler operands (for instance, `SSA_NAME', `VAR_DECL',
13843 `COMPONENT_REF', etc).
13845 This operand class also acts as an escape hatch for tree nodes
13846 that may be flattened out into the operand vector, but would need
13847 more than two slots on the RHS. For instance, a `COND_EXPR'
13848 expression of the form `(a op b) ? x : y' could be flattened out
13849 on the operand vector using 4 slots, but it would also require
13850 additional processing to distinguish `c = a op b' from `c = a op b
13851 ? x : y'. Something similar occurs with `ASSERT_EXPR'. In time,
13852 these special case tree expressions should be flattened into the
13855 For tree nodes in the categories `GIMPLE_BINARY_RHS' and
13856 `GIMPLE_UNARY_RHS', they cannot be stored inside tuples directly. They
13857 first need to be flattened and separated into individual components.
13858 For instance, given the GENERIC expression
13862 its tree representation is:
13864 MODIFY_EXPR <VAR_DECL <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>>
13866 In this case, the GIMPLE form for this statement is logically
13867 identical to its GENERIC form but in GIMPLE, the `PLUS_EXPR' on the RHS
13868 of the assignment is not represented as a tree, instead the two
13869 operands are taken out of the `PLUS_EXPR' sub-tree and flattened into
13870 the GIMPLE tuple as follows:
13872 GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>>
13874 12.5.6 Operand vector allocation
13875 --------------------------------
13877 The operand vector is stored at the bottom of the three tuple
13878 structures that accept operands. This means, that depending on the code
13879 of a given statement, its operand vector will be at different offsets
13880 from the base of the structure. To access tuple operands use the
13881 following accessors
13883 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
13884 Returns the number of operands in statement G.
13886 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
13887 Returns operand `I' from statement `G'.
13889 -- GIMPLE function: tree *gimple_ops (gimple g)
13890 Returns a pointer into the operand vector for statement `G'. This
13891 is computed using an internal table called `gimple_ops_offset_'[].
13892 This table is indexed by the gimple code of `G'.
13894 When the compiler is built, this table is filled-in using the
13895 sizes of the structures used by each statement code defined in
13896 gimple.def. Since the operand vector is at the bottom of the
13897 structure, for a gimple code `C' the offset is computed as sizeof
13898 (struct-of `C') - sizeof (tree).
13900 This mechanism adds one memory indirection to every access when
13901 using `gimple_op'(), if this becomes a bottleneck, a pass can
13902 choose to memoize the result from `gimple_ops'() and use that to
13903 access the operands.
13905 12.5.7 Operand validation
13906 -------------------------
13908 When adding a new operand to a gimple statement, the operand will be
13909 validated according to what each tuple accepts in its operand vector.
13910 These predicates are called by the `gimple_<name>_set_...()'. Each
13911 tuple will use one of the following predicates (Note, this list is not
13914 -- GIMPLE function: is_gimple_operand (tree t)
13915 This is the most permissive of the predicates. It essentially
13916 checks whether t has a `gimple_rhs_class' of `GIMPLE_SINGLE_RHS'.
13918 -- GIMPLE function: is_gimple_val (tree t)
13919 Returns true if t is a "GIMPLE value", which are all the
13920 non-addressable stack variables (variables for which
13921 `is_gimple_reg' returns true) and constants (expressions for which
13922 `is_gimple_min_invariant' returns true).
13924 -- GIMPLE function: is_gimple_addressable (tree t)
13925 Returns true if t is a symbol or memory reference whose address
13928 -- GIMPLE function: is_gimple_asm_val (tree t)
13929 Similar to `is_gimple_val' but it also accepts hard registers.
13931 -- GIMPLE function: is_gimple_call_addr (tree t)
13932 Return true if t is a valid expression to use as the function
13933 called by a `GIMPLE_CALL'.
13935 -- GIMPLE function: is_gimple_constant (tree t)
13936 Return true if t is a valid gimple constant.
13938 -- GIMPLE function: is_gimple_min_invariant (tree t)
13939 Return true if t is a valid minimal invariant. This is different
13940 from constants, in that the specific value of t may not be known
13941 at compile time, but it is known that it doesn't change (e.g., the
13942 address of a function local variable).
13944 -- GIMPLE function: is_gimple_min_invariant_address (tree t)
13945 Return true if t is an `ADDR_EXPR' that does not change once a
13946 function is running.
13948 -- GIMPLE function: is_gimple_ip_invariant (tree t)
13949 Return true if t is an interprocedural invariant. This means that
13950 t is a valid invariant in all functions (e.g. it can be an address
13951 of a global variable but not of a local one).
13953 -- GIMPLE function: is_gimple_ip_invariant_address (tree t)
13954 Return true if t is an `ADDR_EXPR' that does not change once the
13955 program is running (and which is valid in all functions).
13957 12.5.8 Statement validation
13958 ---------------------------
13960 -- GIMPLE function: is_gimple_assign (gimple g)
13961 Return true if the code of g is `GIMPLE_ASSIGN'.
13963 -- GIMPLE function: is_gimple_call (gimple g)
13964 Return true if the code of g is `GIMPLE_CALL'.
13966 -- GIMPLE function: is_gimple_debug (gimple g)
13967 Return true if the code of g is `GIMPLE_DEBUG'.
13969 -- GIMPLE function: gimple_assign_cast_p (gimple g)
13970 Return true if g is a `GIMPLE_ASSIGN' that performs a type cast
13973 -- GIMPLE function: gimple_debug_bind_p (gimple g)
13974 Return true if g is a `GIMPLE_DEBUG' that binds the value of an
13975 expression to a variable.
13978 File: gccint.info, Node: Manipulating GIMPLE statements, Next: Tuple specific accessors, Prev: Operands, Up: GIMPLE
13980 12.6 Manipulating GIMPLE statements
13981 ===================================
13983 This section documents all the functions available to handle each of
13984 the GIMPLE instructions.
13986 12.6.1 Common accessors
13987 -----------------------
13989 The following are common accessors for gimple statements.
13991 -- GIMPLE function: enum gimple_code gimple_code (gimple g)
13992 Return the code for statement `G'.
13994 -- GIMPLE function: basic_block gimple_bb (gimple g)
13995 Return the basic block to which statement `G' belongs to.
13997 -- GIMPLE function: tree gimple_block (gimple g)
13998 Return the lexical scope block holding statement `G'.
14000 -- GIMPLE function: tree gimple_expr_type (gimple stmt)
14001 Return the type of the main expression computed by `STMT'. Return
14002 `void_type_node' if `STMT' computes nothing. This will only return
14003 something meaningful for `GIMPLE_ASSIGN', `GIMPLE_COND' and
14004 `GIMPLE_CALL'. For all other tuple codes, it will return
14007 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt)
14008 Return the tree code for the expression computed by `STMT'. This
14009 is only meaningful for `GIMPLE_CALL', `GIMPLE_ASSIGN' and
14010 `GIMPLE_COND'. If `STMT' is `GIMPLE_CALL', it will return
14011 `CALL_EXPR'. For `GIMPLE_COND', it returns the code of the
14012 comparison predicate. For `GIMPLE_ASSIGN' it returns the code of
14013 the operation performed by the `RHS' of the assignment.
14015 -- GIMPLE function: void gimple_set_block (gimple g, tree block)
14016 Set the lexical scope block of `G' to `BLOCK'.
14018 -- GIMPLE function: location_t gimple_locus (gimple g)
14019 Return locus information for statement `G'.
14021 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus)
14022 Set locus information for statement `G'.
14024 -- GIMPLE function: bool gimple_locus_empty_p (gimple g)
14025 Return true if `G' does not have locus information.
14027 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt)
14028 Return true if no warnings should be emitted for statement `STMT'.
14030 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool
14032 Set the visited status on statement `STMT' to `VISITED_P'.
14034 -- GIMPLE function: bool gimple_visited_p (gimple stmt)
14035 Return the visited status on statement `STMT'.
14037 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask
14039 Set pass local flag `PLF' on statement `STMT' to `VAL_P'.
14041 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum
14043 Return the value of pass local flag `PLF' on statement `STMT'.
14045 -- GIMPLE function: bool gimple_has_ops (gimple g)
14046 Return true if statement `G' has register or memory operands.
14048 -- GIMPLE function: bool gimple_has_mem_ops (gimple g)
14049 Return true if statement `G' has memory operands.
14051 -- GIMPLE function: unsigned gimple_num_ops (gimple g)
14052 Return the number of operands for statement `G'.
14054 -- GIMPLE function: tree *gimple_ops (gimple g)
14055 Return the array of operands for statement `G'.
14057 -- GIMPLE function: tree gimple_op (gimple g, unsigned i)
14058 Return operand `I' for statement `G'.
14060 -- GIMPLE function: tree *gimple_op_ptr (gimple g, unsigned i)
14061 Return a pointer to operand `I' for statement `G'.
14063 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op)
14064 Set operand `I' of statement `G' to `OP'.
14066 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt)
14067 Return the set of symbols that have had their address taken by
14070 -- GIMPLE function: struct def_optype_d *gimple_def_ops (gimple g)
14071 Return the set of `DEF' operands for statement `G'.
14073 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct
14075 Set `DEF' to be the set of `DEF' operands for statement `G'.
14077 -- GIMPLE function: struct use_optype_d *gimple_use_ops (gimple g)
14078 Return the set of `USE' operands for statement `G'.
14080 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct
14082 Set `USE' to be the set of `USE' operands for statement `G'.
14084 -- GIMPLE function: struct voptype_d *gimple_vuse_ops (gimple g)
14085 Return the set of `VUSE' operands for statement `G'.
14087 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct
14089 Set `OPS' to be the set of `VUSE' operands for statement `G'.
14091 -- GIMPLE function: struct voptype_d *gimple_vdef_ops (gimple g)
14092 Return the set of `VDEF' operands for statement `G'.
14094 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct
14096 Set `OPS' to be the set of `VDEF' operands for statement `G'.
14098 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g)
14099 Return the set of symbols loaded by statement `G'. Each element of
14100 the set is the `DECL_UID' of the corresponding symbol.
14102 -- GIMPLE function: bitmap gimple_stored_syms (gimple g)
14103 Return the set of symbols stored by statement `G'. Each element of
14104 the set is the `DECL_UID' of the corresponding symbol.
14106 -- GIMPLE function: bool gimple_modified_p (gimple g)
14107 Return true if statement `G' has operands and the modified field
14110 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt)
14111 Return true if statement `STMT' contains volatile operands.
14113 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt,
14115 Return true if statement `STMT' contains volatile operands.
14117 -- GIMPLE function: void update_stmt (gimple s)
14118 Mark statement `S' as modified, and update it.
14120 -- GIMPLE function: void update_stmt_if_modified (gimple s)
14121 Update statement `S' if it has been marked modified.
14123 -- GIMPLE function: gimple gimple_copy (gimple stmt)
14124 Return a deep copy of statement `STMT'.
14127 File: gccint.info, Node: Tuple specific accessors, Next: GIMPLE sequences, Prev: Manipulating GIMPLE statements, Up: GIMPLE
14129 12.7 Tuple specific accessors
14130 =============================
14135 * `GIMPLE_ASSIGN'::
14141 * `GIMPLE_EH_FILTER'::
14144 * `GIMPLE_OMP_ATOMIC_LOAD'::
14145 * `GIMPLE_OMP_ATOMIC_STORE'::
14146 * `GIMPLE_OMP_CONTINUE'::
14147 * `GIMPLE_OMP_CRITICAL'::
14148 * `GIMPLE_OMP_FOR'::
14149 * `GIMPLE_OMP_MASTER'::
14150 * `GIMPLE_OMP_ORDERED'::
14151 * `GIMPLE_OMP_PARALLEL'::
14152 * `GIMPLE_OMP_RETURN'::
14153 * `GIMPLE_OMP_SECTION'::
14154 * `GIMPLE_OMP_SECTIONS'::
14155 * `GIMPLE_OMP_SINGLE'::
14158 * `GIMPLE_RETURN'::
14159 * `GIMPLE_SWITCH'::
14161 * `GIMPLE_WITH_CLEANUP_EXPR'::
14164 File: gccint.info, Node: `GIMPLE_ASM', Next: `GIMPLE_ASSIGN', Up: Tuple specific accessors
14166 12.7.1 `GIMPLE_ASM'
14167 -------------------
14169 -- GIMPLE function: gimple gimple_build_asm (const char *string,
14170 ninputs, noutputs, nclobbers, ...)
14171 Build a `GIMPLE_ASM' statement. This statement is used for
14172 building in-line assembly constructs. `STRING' is the assembly
14173 code. `NINPUT' is the number of register inputs. `NOUTPUT' is the
14174 number of register outputs. `NCLOBBERS' is the number of clobbered
14175 registers. The rest of the arguments trees for each input,
14176 output, and clobbered registers.
14178 -- GIMPLE function: gimple gimple_build_asm_vec (const char *,
14179 VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *)
14180 Identical to gimple_build_asm, but the arguments are passed in
14183 -- GIMPLE function: gimple_asm_ninputs (gimple g)
14184 Return the number of input operands for `GIMPLE_ASM' `G'.
14186 -- GIMPLE function: gimple_asm_noutputs (gimple g)
14187 Return the number of output operands for `GIMPLE_ASM' `G'.
14189 -- GIMPLE function: gimple_asm_nclobbers (gimple g)
14190 Return the number of clobber operands for `GIMPLE_ASM' `G'.
14192 -- GIMPLE function: tree gimple_asm_input_op (gimple g, unsigned index)
14193 Return input operand `INDEX' of `GIMPLE_ASM' `G'.
14195 -- GIMPLE function: void gimple_asm_set_input_op (gimple g, unsigned
14197 Set `IN_OP' to be input operand `INDEX' in `GIMPLE_ASM' `G'.
14199 -- GIMPLE function: tree gimple_asm_output_op (gimple g, unsigned
14201 Return output operand `INDEX' of `GIMPLE_ASM' `G'.
14203 -- GIMPLE function: void gimple_asm_set_output_op (gimple g, unsigned
14204 index, tree out_op)
14205 Set `OUT_OP' to be output operand `INDEX' in `GIMPLE_ASM' `G'.
14207 -- GIMPLE function: tree gimple_asm_clobber_op (gimple g, unsigned
14209 Return clobber operand `INDEX' of `GIMPLE_ASM' `G'.
14211 -- GIMPLE function: void gimple_asm_set_clobber_op (gimple g, unsigned
14212 index, tree clobber_op)
14213 Set `CLOBBER_OP' to be clobber operand `INDEX' in `GIMPLE_ASM' `G'.
14215 -- GIMPLE function: const char *gimple_asm_string (gimple g)
14216 Return the string representing the assembly instruction in
14219 -- GIMPLE function: bool gimple_asm_volatile_p (gimple g)
14220 Return true if `G' is an asm statement marked volatile.
14222 -- GIMPLE function: void gimple_asm_set_volatile (gimple g)
14223 Mark asm statement `G' as volatile.
14225 -- GIMPLE function: void gimple_asm_clear_volatile (gimple g)
14226 Remove volatile marker from asm statement `G'.
14229 File: gccint.info, Node: `GIMPLE_ASSIGN', Next: `GIMPLE_BIND', Prev: `GIMPLE_ASM', Up: Tuple specific accessors
14231 12.7.2 `GIMPLE_ASSIGN'
14232 ----------------------
14234 -- GIMPLE function: gimple gimple_build_assign (tree lhs, tree rhs)
14235 Build a `GIMPLE_ASSIGN' statement. The left-hand side is an lvalue
14236 passed in lhs. The right-hand side can be either a unary or
14237 binary tree expression. The expression tree rhs will be flattened
14238 and its operands assigned to the corresponding operand slots in
14239 the new statement. This function is useful when you already have
14240 a tree expression that you want to convert into a tuple. However,
14241 try to avoid building expression trees for the sole purpose of
14242 calling this function. If you already have the operands in
14243 separate trees, it is better to use `gimple_build_assign_with_ops'.
14245 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src,
14247 Build a new `GIMPLE_ASSIGN' tuple and append it to the end of
14250 `DST'/`SRC' are the destination and source respectively. You can pass
14251 ungimplified trees in `DST' or `SRC', in which case they will be
14252 converted to a gimple operand if necessary.
14254 This function returns the newly created `GIMPLE_ASSIGN' tuple.
14256 -- GIMPLE function: gimple gimple_build_assign_with_ops (enum
14257 tree_code subcode, tree lhs, tree op1, tree op2)
14258 This function is similar to `gimple_build_assign', but is used to
14259 build a `GIMPLE_ASSIGN' statement when the operands of the
14260 right-hand side of the assignment are already split into different
14263 The left-hand side is an lvalue passed in lhs. Subcode is the
14264 `tree_code' for the right-hand side of the assignment. Op1 and op2
14265 are the operands. If op2 is null, subcode must be a `tree_code'
14266 for a unary expression.
14268 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g)
14269 Return the code of the expression computed on the `RHS' of
14270 assignment statement `G'.
14272 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class
14274 Return the gimple rhs class of the code for the expression
14275 computed on the rhs of assignment statement `G'. This will never
14276 return `GIMPLE_INVALID_RHS'.
14278 -- GIMPLE function: tree gimple_assign_lhs (gimple g)
14279 Return the `LHS' of assignment statement `G'.
14281 -- GIMPLE function: tree *gimple_assign_lhs_ptr (gimple g)
14282 Return a pointer to the `LHS' of assignment statement `G'.
14284 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g)
14285 Return the first operand on the `RHS' of assignment statement `G'.
14287 -- GIMPLE function: tree *gimple_assign_rhs1_ptr (gimple g)
14288 Return the address of the first operand on the `RHS' of assignment
14291 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
14292 Return the second operand on the `RHS' of assignment statement `G'.
14294 -- GIMPLE function: tree *gimple_assign_rhs2_ptr (gimple g)
14295 Return the address of the second operand on the `RHS' of assignment
14298 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs)
14299 Set `LHS' to be the `LHS' operand of assignment statement `G'.
14301 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs)
14302 Set `RHS' to be the first operand on the `RHS' of assignment
14305 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g)
14306 Return the second operand on the `RHS' of assignment statement `G'.
14308 -- GIMPLE function: tree *gimple_assign_rhs2_ptr (gimple g)
14309 Return a pointer to the second operand on the `RHS' of assignment
14312 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs)
14313 Set `RHS' to be the second operand on the `RHS' of assignment
14316 -- GIMPLE function: bool gimple_assign_cast_p (gimple s)
14317 Return true if `S' is a type-cast assignment.
14320 File: gccint.info, Node: `GIMPLE_BIND', Next: `GIMPLE_CALL', Prev: `GIMPLE_ASSIGN', Up: Tuple specific accessors
14322 12.7.3 `GIMPLE_BIND'
14323 --------------------
14325 -- GIMPLE function: gimple gimple_build_bind (tree vars, gimple_seq
14327 Build a `GIMPLE_BIND' statement with a list of variables in `VARS'
14328 and a body of statements in sequence `BODY'.
14330 -- GIMPLE function: tree gimple_bind_vars (gimple g)
14331 Return the variables declared in the `GIMPLE_BIND' statement `G'.
14333 -- GIMPLE function: void gimple_bind_set_vars (gimple g, tree vars)
14334 Set `VARS' to be the set of variables declared in the `GIMPLE_BIND'
14337 -- GIMPLE function: void gimple_bind_append_vars (gimple g, tree vars)
14338 Append `VARS' to the set of variables declared in the `GIMPLE_BIND'
14341 -- GIMPLE function: gimple_seq gimple_bind_body (gimple g)
14342 Return the GIMPLE sequence contained in the `GIMPLE_BIND' statement
14345 -- GIMPLE function: void gimple_bind_set_body (gimple g, gimple_seq
14347 Set `SEQ' to be sequence contained in the `GIMPLE_BIND' statement
14350 -- GIMPLE function: void gimple_bind_add_stmt (gimple gs, gimple stmt)
14351 Append a statement to the end of a `GIMPLE_BIND''s body.
14353 -- GIMPLE function: void gimple_bind_add_seq (gimple gs, gimple_seq
14355 Append a sequence of statements to the end of a `GIMPLE_BIND''s
14358 -- GIMPLE function: tree gimple_bind_block (gimple g)
14359 Return the `TREE_BLOCK' node associated with `GIMPLE_BIND'
14360 statement `G'. This is analogous to the `BIND_EXPR_BLOCK' field in
14363 -- GIMPLE function: void gimple_bind_set_block (gimple g, tree block)
14364 Set `BLOCK' to be the `TREE_BLOCK' node associated with
14365 `GIMPLE_BIND' statement `G'.
14368 File: gccint.info, Node: `GIMPLE_CALL', Next: `GIMPLE_CATCH', Prev: `GIMPLE_BIND', Up: Tuple specific accessors
14370 12.7.4 `GIMPLE_CALL'
14371 --------------------
14373 -- GIMPLE function: gimple gimple_build_call (tree fn, unsigned nargs,
14375 Build a `GIMPLE_CALL' statement to function `FN'. The argument
14376 `FN' must be either a `FUNCTION_DECL' or a gimple call address as
14377 determined by `is_gimple_call_addr'. `NARGS' are the number of
14378 arguments. The rest of the arguments follow the argument `NARGS',
14379 and must be trees that are valid as rvalues in gimple (i.e., each
14380 operand is validated with `is_gimple_operand').
14382 -- GIMPLE function: gimple gimple_build_call_from_tree (tree call_expr)
14383 Build a `GIMPLE_CALL' from a `CALL_EXPR' node. The arguments and
14384 the function are taken from the expression directly. This routine
14385 assumes that `call_expr' is already in GIMPLE form. That is, its
14386 operands are GIMPLE values and the function call needs no further
14387 simplification. All the call flags in `call_expr' are copied over
14388 to the new `GIMPLE_CALL'.
14390 -- GIMPLE function: gimple gimple_build_call_vec (tree fn, `VEC'(tree,
14392 Identical to `gimple_build_call' but the arguments are stored in a
14395 -- GIMPLE function: tree gimple_call_lhs (gimple g)
14396 Return the `LHS' of call statement `G'.
14398 -- GIMPLE function: tree *gimple_call_lhs_ptr (gimple g)
14399 Return a pointer to the `LHS' of call statement `G'.
14401 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs)
14402 Set `LHS' to be the `LHS' operand of call statement `G'.
14404 -- GIMPLE function: tree gimple_call_fn (gimple g)
14405 Return the tree node representing the function called by call
14408 -- GIMPLE function: void gimple_call_set_fn (gimple g, tree fn)
14409 Set `FN' to be the function called by call statement `G'. This has
14410 to be a gimple value specifying the address of the called function.
14412 -- GIMPLE function: tree gimple_call_fndecl (gimple g)
14413 If a given `GIMPLE_CALL''s callee is a `FUNCTION_DECL', return it.
14414 Otherwise return `NULL'. This function is analogous to
14415 `get_callee_fndecl' in `GENERIC'.
14417 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl)
14418 Set the called function to `FNDECL'.
14420 -- GIMPLE function: tree gimple_call_return_type (gimple g)
14421 Return the type returned by call statement `G'.
14423 -- GIMPLE function: tree gimple_call_chain (gimple g)
14424 Return the static chain for call statement `G'.
14426 -- GIMPLE function: void gimple_call_set_chain (gimple g, tree chain)
14427 Set `CHAIN' to be the static chain for call statement `G'.
14429 -- GIMPLE function: gimple_call_num_args (gimple g)
14430 Return the number of arguments used by call statement `G'.
14432 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index)
14433 Return the argument at position `INDEX' for call statement `G'.
14434 The first argument is 0.
14436 -- GIMPLE function: tree *gimple_call_arg_ptr (gimple g, unsigned
14438 Return a pointer to the argument at position `INDEX' for call
14441 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned
14443 Set `ARG' to be the argument at position `INDEX' for call statement
14446 -- GIMPLE function: void gimple_call_set_tail (gimple s)
14447 Mark call statement `S' as being a tail call (i.e., a call just
14448 before the exit of a function). These calls are candidate for tail
14451 -- GIMPLE function: bool gimple_call_tail_p (gimple s)
14452 Return true if `GIMPLE_CALL' `S' is marked as a tail call.
14454 -- GIMPLE function: void gimple_call_mark_uninlinable (gimple s)
14455 Mark `GIMPLE_CALL' `S' as being uninlinable.
14457 -- GIMPLE function: bool gimple_call_cannot_inline_p (gimple s)
14458 Return true if `GIMPLE_CALL' `S' cannot be inlined.
14460 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s)
14461 Return true if `S' is a noreturn call.
14463 -- GIMPLE function: gimple gimple_call_copy_skip_args (gimple stmt,
14464 bitmap args_to_skip)
14465 Build a `GIMPLE_CALL' identical to `STMT' but skipping the
14466 arguments in the positions marked by the set `ARGS_TO_SKIP'.
14469 File: gccint.info, Node: `GIMPLE_CATCH', Next: `GIMPLE_COND', Prev: `GIMPLE_CALL', Up: Tuple specific accessors
14471 12.7.5 `GIMPLE_CATCH'
14472 ---------------------
14474 -- GIMPLE function: gimple gimple_build_catch (tree types, gimple_seq
14476 Build a `GIMPLE_CATCH' statement. `TYPES' are the tree types this
14477 catch handles. `HANDLER' is a sequence of statements with the code
14480 -- GIMPLE function: tree gimple_catch_types (gimple g)
14481 Return the types handled by `GIMPLE_CATCH' statement `G'.
14483 -- GIMPLE function: tree *gimple_catch_types_ptr (gimple g)
14484 Return a pointer to the types handled by `GIMPLE_CATCH' statement
14487 -- GIMPLE function: gimple_seq gimple_catch_handler (gimple g)
14488 Return the GIMPLE sequence representing the body of the handler of
14489 `GIMPLE_CATCH' statement `G'.
14491 -- GIMPLE function: void gimple_catch_set_types (gimple g, tree t)
14492 Set `T' to be the set of types handled by `GIMPLE_CATCH' `G'.
14494 -- GIMPLE function: void gimple_catch_set_handler (gimple g,
14495 gimple_seq handler)
14496 Set `HANDLER' to be the body of `GIMPLE_CATCH' `G'.
14499 File: gccint.info, Node: `GIMPLE_COND', Next: `GIMPLE_DEBUG', Prev: `GIMPLE_CATCH', Up: Tuple specific accessors
14501 12.7.6 `GIMPLE_COND'
14502 --------------------
14504 -- GIMPLE function: gimple gimple_build_cond (enum tree_code
14505 pred_code, tree lhs, tree rhs, tree t_label, tree f_label)
14506 Build a `GIMPLE_COND' statement. `A' `GIMPLE_COND' statement
14507 compares `LHS' and `RHS' and if the condition in `PRED_CODE' is
14508 true, jump to the label in `t_label', otherwise jump to the label
14509 in `f_label'. `PRED_CODE' are relational operator tree codes like
14510 `EQ_EXPR', `LT_EXPR', `LE_EXPR', `NE_EXPR', etc.
14512 -- GIMPLE function: gimple gimple_build_cond_from_tree (tree cond,
14513 tree t_label, tree f_label)
14514 Build a `GIMPLE_COND' statement from the conditional expression
14515 tree `COND'. `T_LABEL' and `F_LABEL' are as in
14516 `gimple_build_cond'.
14518 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g)
14519 Return the code of the predicate computed by conditional statement
14522 -- GIMPLE function: void gimple_cond_set_code (gimple g, enum
14524 Set `CODE' to be the predicate code for the conditional statement
14527 -- GIMPLE function: tree gimple_cond_lhs (gimple g)
14528 Return the `LHS' of the predicate computed by conditional statement
14531 -- GIMPLE function: void gimple_cond_set_lhs (gimple g, tree lhs)
14532 Set `LHS' to be the `LHS' operand of the predicate computed by
14533 conditional statement `G'.
14535 -- GIMPLE function: tree gimple_cond_rhs (gimple g)
14536 Return the `RHS' operand of the predicate computed by conditional
14539 -- GIMPLE function: void gimple_cond_set_rhs (gimple g, tree rhs)
14540 Set `RHS' to be the `RHS' operand of the predicate computed by
14541 conditional statement `G'.
14543 -- GIMPLE function: tree gimple_cond_true_label (gimple g)
14544 Return the label used by conditional statement `G' when its
14545 predicate evaluates to true.
14547 -- GIMPLE function: void gimple_cond_set_true_label (gimple g, tree
14549 Set `LABEL' to be the label used by conditional statement `G' when
14550 its predicate evaluates to true.
14552 -- GIMPLE function: void gimple_cond_set_false_label (gimple g, tree
14554 Set `LABEL' to be the label used by conditional statement `G' when
14555 its predicate evaluates to false.
14557 -- GIMPLE function: tree gimple_cond_false_label (gimple g)
14558 Return the label used by conditional statement `G' when its
14559 predicate evaluates to false.
14561 -- GIMPLE function: void gimple_cond_make_false (gimple g)
14562 Set the conditional `COND_STMT' to be of the form 'if (1 == 0)'.
14564 -- GIMPLE function: void gimple_cond_make_true (gimple g)
14565 Set the conditional `COND_STMT' to be of the form 'if (1 == 1)'.
14568 File: gccint.info, Node: `GIMPLE_DEBUG', Next: `GIMPLE_EH_FILTER', Prev: `GIMPLE_COND', Up: Tuple specific accessors
14570 12.7.7 `GIMPLE_DEBUG'
14571 ---------------------
14573 -- GIMPLE function: gimple gimple_build_debug_bind (tree var, tree
14574 value, gimple stmt)
14575 Build a `GIMPLE_DEBUG' statement with `GIMPLE_DEBUG_BIND' of
14576 `subcode'. The effect of this statement is to tell debug
14577 information generation machinery that the value of user variable
14578 `var' is given by `value' at that point, and to remain with that
14579 value until `var' runs out of scope, a dynamically-subsequent
14580 debug bind statement overrides the binding, or conflicting values
14581 reach a control flow merge point. Even if components of the
14582 `value' expression change afterwards, the variable is supposed to
14583 retain the same value, though not necessarily the same location.
14585 It is expected that `var' be most often a tree for automatic user
14586 variables (`VAR_DECL' or `PARM_DECL') that satisfy the
14587 requirements for gimple registers, but it may also be a tree for a
14588 scalarized component of a user variable (`ARRAY_REF',
14589 `COMPONENT_REF'), or a debug temporary (`DEBUG_EXPR_DECL').
14591 As for `value', it can be an arbitrary tree expression, but it is
14592 recommended that it be in a suitable form for a gimple assignment
14593 `RHS'. It is not expected that user variables that could appear
14594 as `var' ever appear in `value', because in the latter we'd have
14595 their `SSA_NAME's instead, but even if they were not in SSA form,
14596 user variables appearing in `value' are to be regarded as part of
14597 the executable code space, whereas those in `var' are to be
14598 regarded as part of the source code space. There is no way to
14599 refer to the value bound to a user variable within a `value'
14602 If `value' is `GIMPLE_DEBUG_BIND_NOVALUE', debug information
14603 generation machinery is informed that the variable `var' is
14604 unbound, i.e., that its value is indeterminate, which sometimes
14605 means it is really unavailable, and other times that the compiler
14606 could not keep track of it.
14608 Block and location information for the newly-created stmt are
14609 taken from `stmt', if given.
14611 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt)
14612 Return the user variable VAR that is bound at `stmt'.
14614 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt)
14615 Return the value expression that is bound to a user variable at
14618 -- GIMPLE function: tree *gimple_debug_bind_get_value_ptr (gimple stmt)
14619 Return a pointer to the value expression that is bound to a user
14620 variable at `stmt'.
14622 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree
14624 Modify the user variable bound at `stmt' to VAR.
14626 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt,
14628 Modify the value bound to the user variable bound at `stmt' to
14631 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt)
14632 Modify the value bound to the user variable bound at `stmt' so
14633 that the variable becomes unbound.
14635 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt)
14636 Return `TRUE' if `stmt' binds a user variable to a value, and
14637 `FALSE' if it unbinds the variable.
14640 File: gccint.info, Node: `GIMPLE_EH_FILTER', Next: `GIMPLE_LABEL', Prev: `GIMPLE_DEBUG', Up: Tuple specific accessors
14642 12.7.8 `GIMPLE_EH_FILTER'
14643 -------------------------
14645 -- GIMPLE function: gimple gimple_build_eh_filter (tree types,
14646 gimple_seq failure)
14647 Build a `GIMPLE_EH_FILTER' statement. `TYPES' are the filter's
14648 types. `FAILURE' is a sequence with the filter's failure action.
14650 -- GIMPLE function: tree gimple_eh_filter_types (gimple g)
14651 Return the types handled by `GIMPLE_EH_FILTER' statement `G'.
14653 -- GIMPLE function: tree *gimple_eh_filter_types_ptr (gimple g)
14654 Return a pointer to the types handled by `GIMPLE_EH_FILTER'
14657 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g)
14658 Return the sequence of statement to execute when `GIMPLE_EH_FILTER'
14661 -- GIMPLE function: void gimple_eh_filter_set_types (gimple g, tree
14663 Set `TYPES' to be the set of types handled by `GIMPLE_EH_FILTER'
14666 -- GIMPLE function: void gimple_eh_filter_set_failure (gimple g,
14667 gimple_seq failure)
14668 Set `FAILURE' to be the sequence of statements to execute on
14669 failure for `GIMPLE_EH_FILTER' `G'.
14671 -- GIMPLE function: bool gimple_eh_filter_must_not_throw (gimple g)
14672 Return the `EH_FILTER_MUST_NOT_THROW' flag.
14674 -- GIMPLE function: void gimple_eh_filter_set_must_not_throw (gimple
14676 Set the `EH_FILTER_MUST_NOT_THROW' flag.
14679 File: gccint.info, Node: `GIMPLE_LABEL', Next: `GIMPLE_NOP', Prev: `GIMPLE_EH_FILTER', Up: Tuple specific accessors
14681 12.7.9 `GIMPLE_LABEL'
14682 ---------------------
14684 -- GIMPLE function: gimple gimple_build_label (tree label)
14685 Build a `GIMPLE_LABEL' statement with corresponding to the tree
14688 -- GIMPLE function: tree gimple_label_label (gimple g)
14689 Return the `LABEL_DECL' node used by `GIMPLE_LABEL' statement `G'.
14691 -- GIMPLE function: void gimple_label_set_label (gimple g, tree label)
14692 Set `LABEL' to be the `LABEL_DECL' node used by `GIMPLE_LABEL'
14695 -- GIMPLE function: gimple gimple_build_goto (tree dest)
14696 Build a `GIMPLE_GOTO' statement to label `DEST'.
14698 -- GIMPLE function: tree gimple_goto_dest (gimple g)
14699 Return the destination of the unconditional jump `G'.
14701 -- GIMPLE function: void gimple_goto_set_dest (gimple g, tree dest)
14702 Set `DEST' to be the destination of the unconditional jump `G'.
14705 File: gccint.info, Node: `GIMPLE_NOP', Next: `GIMPLE_OMP_ATOMIC_LOAD', Prev: `GIMPLE_LABEL', Up: Tuple specific accessors
14707 12.7.10 `GIMPLE_NOP'
14708 --------------------
14710 -- GIMPLE function: gimple gimple_build_nop (void)
14711 Build a `GIMPLE_NOP' statement.
14713 -- GIMPLE function: bool gimple_nop_p (gimple g)
14714 Returns `TRUE' if statement `G' is a `GIMPLE_NOP'.
14717 File: gccint.info, Node: `GIMPLE_OMP_ATOMIC_LOAD', Next: `GIMPLE_OMP_ATOMIC_STORE', Prev: `GIMPLE_NOP', Up: Tuple specific accessors
14719 12.7.11 `GIMPLE_OMP_ATOMIC_LOAD'
14720 --------------------------------
14722 -- GIMPLE function: gimple gimple_build_omp_atomic_load (tree lhs,
14724 Build a `GIMPLE_OMP_ATOMIC_LOAD' statement. `LHS' is the left-hand
14725 side of the assignment. `RHS' is the right-hand side of the
14728 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (gimple g,
14730 Set the `LHS' of an atomic load.
14732 -- GIMPLE function: tree gimple_omp_atomic_load_lhs (gimple g)
14733 Get the `LHS' of an atomic load.
14735 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (gimple g,
14737 Set the `RHS' of an atomic set.
14739 -- GIMPLE function: tree gimple_omp_atomic_load_rhs (gimple g)
14740 Get the `RHS' of an atomic set.
14743 File: gccint.info, Node: `GIMPLE_OMP_ATOMIC_STORE', Next: `GIMPLE_OMP_CONTINUE', Prev: `GIMPLE_OMP_ATOMIC_LOAD', Up: Tuple specific accessors
14745 12.7.12 `GIMPLE_OMP_ATOMIC_STORE'
14746 ---------------------------------
14748 -- GIMPLE function: gimple gimple_build_omp_atomic_store (tree val)
14749 Build a `GIMPLE_OMP_ATOMIC_STORE' statement. `VAL' is the value to
14752 -- GIMPLE function: void gimple_omp_atomic_store_set_val (gimple g,
14754 Set the value being stored in an atomic store.
14756 -- GIMPLE function: tree gimple_omp_atomic_store_val (gimple g)
14757 Return the value being stored in an atomic store.
14760 File: gccint.info, Node: `GIMPLE_OMP_CONTINUE', Next: `GIMPLE_OMP_CRITICAL', Prev: `GIMPLE_OMP_ATOMIC_STORE', Up: Tuple specific accessors
14762 12.7.13 `GIMPLE_OMP_CONTINUE'
14763 -----------------------------
14765 -- GIMPLE function: gimple gimple_build_omp_continue (tree
14766 control_def, tree control_use)
14767 Build a `GIMPLE_OMP_CONTINUE' statement. `CONTROL_DEF' is the
14768 definition of the control variable. `CONTROL_USE' is the use of
14769 the control variable.
14771 -- GIMPLE function: tree gimple_omp_continue_control_def (gimple s)
14772 Return the definition of the control variable on a
14773 `GIMPLE_OMP_CONTINUE' in `S'.
14775 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (gimple s)
14776 Same as above, but return the pointer.
14778 -- GIMPLE function: tree gimple_omp_continue_set_control_def (gimple s)
14779 Set the control variable definition for a `GIMPLE_OMP_CONTINUE'
14782 -- GIMPLE function: tree gimple_omp_continue_control_use (gimple s)
14783 Return the use of the control variable on a `GIMPLE_OMP_CONTINUE'
14786 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (gimple s)
14787 Same as above, but return the pointer.
14789 -- GIMPLE function: tree gimple_omp_continue_set_control_use (gimple s)
14790 Set the control variable use for a `GIMPLE_OMP_CONTINUE' statement
14794 File: gccint.info, Node: `GIMPLE_OMP_CRITICAL', Next: `GIMPLE_OMP_FOR', Prev: `GIMPLE_OMP_CONTINUE', Up: Tuple specific accessors
14796 12.7.14 `GIMPLE_OMP_CRITICAL'
14797 -----------------------------
14799 -- GIMPLE function: gimple gimple_build_omp_critical (gimple_seq body,
14801 Build a `GIMPLE_OMP_CRITICAL' statement. `BODY' is the sequence of
14802 statements for which only one thread can execute. `NAME' is an
14803 optional identifier for this critical block.
14805 -- GIMPLE function: tree gimple_omp_critical_name (gimple g)
14806 Return the name associated with `OMP_CRITICAL' statement `G'.
14808 -- GIMPLE function: tree *gimple_omp_critical_name_ptr (gimple g)
14809 Return a pointer to the name associated with `OMP' critical
14812 -- GIMPLE function: void gimple_omp_critical_set_name (gimple g, tree
14814 Set `NAME' to be the name associated with `OMP' critical statement
14818 File: gccint.info, Node: `GIMPLE_OMP_FOR', Next: `GIMPLE_OMP_MASTER', Prev: `GIMPLE_OMP_CRITICAL', Up: Tuple specific accessors
14820 12.7.15 `GIMPLE_OMP_FOR'
14821 ------------------------
14823 -- GIMPLE function: gimple gimple_build_omp_for (gimple_seq body, tree
14824 clauses, tree index, tree initial, tree final, tree incr,
14825 gimple_seq pre_body, enum tree_code omp_for_cond)
14826 Build a `GIMPLE_OMP_FOR' statement. `BODY' is sequence of
14827 statements inside the for loop. `CLAUSES', are any of the `OMP'
14828 loop construct's clauses: private, firstprivate, lastprivate,
14829 reductions, ordered, schedule, and nowait. `PRE_BODY' is the
14830 sequence of statements that are loop invariant. `INDEX' is the
14831 index variable. `INITIAL' is the initial value of `INDEX'.
14832 `FINAL' is final value of `INDEX'. OMP_FOR_COND is the predicate
14833 used to compare `INDEX' and `FINAL'. `INCR' is the increment
14836 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g)
14837 Return the clauses associated with `OMP_FOR' `G'.
14839 -- GIMPLE function: tree *gimple_omp_for_clauses_ptr (gimple g)
14840 Return a pointer to the `OMP_FOR' `G'.
14842 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree
14844 Set `CLAUSES' to be the list of clauses associated with `OMP_FOR'
14847 -- GIMPLE function: tree gimple_omp_for_index (gimple g)
14848 Return the index variable for `OMP_FOR' `G'.
14850 -- GIMPLE function: tree *gimple_omp_for_index_ptr (gimple g)
14851 Return a pointer to the index variable for `OMP_FOR' `G'.
14853 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree
14855 Set `INDEX' to be the index variable for `OMP_FOR' `G'.
14857 -- GIMPLE function: tree gimple_omp_for_initial (gimple g)
14858 Return the initial value for `OMP_FOR' `G'.
14860 -- GIMPLE function: tree *gimple_omp_for_initial_ptr (gimple g)
14861 Return a pointer to the initial value for `OMP_FOR' `G'.
14863 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree
14865 Set `INITIAL' to be the initial value for `OMP_FOR' `G'.
14867 -- GIMPLE function: tree gimple_omp_for_final (gimple g)
14868 Return the final value for `OMP_FOR' `G'.
14870 -- GIMPLE function: tree *gimple_omp_for_final_ptr (gimple g)
14871 turn a pointer to the final value for `OMP_FOR' `G'.
14873 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree
14875 Set `FINAL' to be the final value for `OMP_FOR' `G'.
14877 -- GIMPLE function: tree gimple_omp_for_incr (gimple g)
14878 Return the increment value for `OMP_FOR' `G'.
14880 -- GIMPLE function: tree *gimple_omp_for_incr_ptr (gimple g)
14881 Return a pointer to the increment value for `OMP_FOR' `G'.
14883 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr)
14884 Set `INCR' to be the increment value for `OMP_FOR' `G'.
14886 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g)
14887 Return the sequence of statements to execute before the `OMP_FOR'
14888 statement `G' starts.
14890 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g,
14891 gimple_seq pre_body)
14892 Set `PRE_BODY' to be the sequence of statements to execute before
14893 the `OMP_FOR' statement `G' starts.
14895 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum
14897 Set `COND' to be the condition code for `OMP_FOR' `G'.
14899 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g)
14900 Return the condition code associated with `OMP_FOR' `G'.
14903 File: gccint.info, Node: `GIMPLE_OMP_MASTER', Next: `GIMPLE_OMP_ORDERED', Prev: `GIMPLE_OMP_FOR', Up: Tuple specific accessors
14905 12.7.16 `GIMPLE_OMP_MASTER'
14906 ---------------------------
14908 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body)
14909 Build a `GIMPLE_OMP_MASTER' statement. `BODY' is the sequence of
14910 statements to be executed by just the master.
14913 File: gccint.info, Node: `GIMPLE_OMP_ORDERED', Next: `GIMPLE_OMP_PARALLEL', Prev: `GIMPLE_OMP_MASTER', Up: Tuple specific accessors
14915 12.7.17 `GIMPLE_OMP_ORDERED'
14916 ----------------------------
14918 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body)
14919 Build a `GIMPLE_OMP_ORDERED' statement.
14921 `BODY' is the sequence of statements inside a loop that will executed
14925 File: gccint.info, Node: `GIMPLE_OMP_PARALLEL', Next: `GIMPLE_OMP_RETURN', Prev: `GIMPLE_OMP_ORDERED', Up: Tuple specific accessors
14927 12.7.18 `GIMPLE_OMP_PARALLEL'
14928 -----------------------------
14930 -- GIMPLE function: gimple gimple_build_omp_parallel (gimple_seq body,
14931 tree clauses, tree child_fn, tree data_arg)
14932 Build a `GIMPLE_OMP_PARALLEL' statement.
14934 `BODY' is sequence of statements which are executed in parallel.
14935 `CLAUSES', are the `OMP' parallel construct's clauses. `CHILD_FN' is
14936 the function created for the parallel threads to execute. `DATA_ARG'
14937 are the shared data argument(s).
14939 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g)
14940 Return true if `OMP' parallel statement `G' has the
14941 `GF_OMP_PARALLEL_COMBINED' flag set.
14943 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g)
14944 Set the `GF_OMP_PARALLEL_COMBINED' field in `OMP' parallel
14947 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g)
14948 Return the body for the `OMP' statement `G'.
14950 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq
14952 Set `BODY' to be the body for the `OMP' statement `G'.
14954 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g)
14955 Return the clauses associated with `OMP_PARALLEL' `G'.
14957 -- GIMPLE function: tree *gimple_omp_parallel_clauses_ptr (gimple g)
14958 Return a pointer to the clauses associated with `OMP_PARALLEL' `G'.
14960 -- GIMPLE function: void gimple_omp_parallel_set_clauses (gimple g,
14962 Set `CLAUSES' to be the list of clauses associated with
14963 `OMP_PARALLEL' `G'.
14965 -- GIMPLE function: tree gimple_omp_parallel_child_fn (gimple g)
14966 Return the child function used to hold the body of `OMP_PARALLEL'
14969 -- GIMPLE function: tree *gimple_omp_parallel_child_fn_ptr (gimple g)
14970 Return a pointer to the child function used to hold the body of
14971 `OMP_PARALLEL' `G'.
14973 -- GIMPLE function: void gimple_omp_parallel_set_child_fn (gimple g,
14975 Set `CHILD_FN' to be the child function for `OMP_PARALLEL' `G'.
14977 -- GIMPLE function: tree gimple_omp_parallel_data_arg (gimple g)
14978 Return the artificial argument used to send variables and values
14979 from the parent to the children threads in `OMP_PARALLEL' `G'.
14981 -- GIMPLE function: tree *gimple_omp_parallel_data_arg_ptr (gimple g)
14982 Return a pointer to the data argument for `OMP_PARALLEL' `G'.
14984 -- GIMPLE function: void gimple_omp_parallel_set_data_arg (gimple g,
14986 Set `DATA_ARG' to be the data argument for `OMP_PARALLEL' `G'.
14988 -- GIMPLE function: bool is_gimple_omp (gimple stmt)
14989 Returns true when the gimple statement `STMT' is any of the OpenMP
14993 File: gccint.info, Node: `GIMPLE_OMP_RETURN', Next: `GIMPLE_OMP_SECTION', Prev: `GIMPLE_OMP_PARALLEL', Up: Tuple specific accessors
14995 12.7.19 `GIMPLE_OMP_RETURN'
14996 ---------------------------
14998 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p)
14999 Build a `GIMPLE_OMP_RETURN' statement. `WAIT_P' is true if this is
15000 a non-waiting return.
15002 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s)
15003 Set the nowait flag on `GIMPLE_OMP_RETURN' statement `S'.
15005 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g)
15006 Return true if `OMP' return statement `G' has the
15007 `GF_OMP_RETURN_NOWAIT' flag set.
15010 File: gccint.info, Node: `GIMPLE_OMP_SECTION', Next: `GIMPLE_OMP_SECTIONS', Prev: `GIMPLE_OMP_RETURN', Up: Tuple specific accessors
15012 12.7.20 `GIMPLE_OMP_SECTION'
15013 ----------------------------
15015 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body)
15016 Build a `GIMPLE_OMP_SECTION' statement for a sections statement.
15018 `BODY' is the sequence of statements in the section.
15020 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g)
15021 Return true if `OMP' section statement `G' has the
15022 `GF_OMP_SECTION_LAST' flag set.
15024 -- GIMPLE function: void gimple_omp_section_set_last (gimple g)
15025 Set the `GF_OMP_SECTION_LAST' flag on `G'.
15028 File: gccint.info, Node: `GIMPLE_OMP_SECTIONS', Next: `GIMPLE_OMP_SINGLE', Prev: `GIMPLE_OMP_SECTION', Up: Tuple specific accessors
15030 12.7.21 `GIMPLE_OMP_SECTIONS'
15031 -----------------------------
15033 -- GIMPLE function: gimple gimple_build_omp_sections (gimple_seq body,
15035 Build a `GIMPLE_OMP_SECTIONS' statement. `BODY' is a sequence of
15036 section statements. `CLAUSES' are any of the `OMP' sections
15037 construct's clauses: private, firstprivate, lastprivate,
15038 reduction, and nowait.
15040 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void)
15041 Build a `GIMPLE_OMP_SECTIONS_SWITCH' statement.
15043 -- GIMPLE function: tree gimple_omp_sections_control (gimple g)
15044 Return the control variable associated with the
15045 `GIMPLE_OMP_SECTIONS' in `G'.
15047 -- GIMPLE function: tree *gimple_omp_sections_control_ptr (gimple g)
15048 Return a pointer to the clauses associated with the
15049 `GIMPLE_OMP_SECTIONS' in `G'.
15051 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g,
15053 Set `CONTROL' to be the set of clauses associated with the
15054 `GIMPLE_OMP_SECTIONS' in `G'.
15056 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g)
15057 Return the clauses associated with `OMP_SECTIONS' `G'.
15059 -- GIMPLE function: tree *gimple_omp_sections_clauses_ptr (gimple g)
15060 Return a pointer to the clauses associated with `OMP_SECTIONS' `G'.
15062 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g,
15064 Set `CLAUSES' to be the set of clauses associated with
15065 `OMP_SECTIONS' `G'.
15068 File: gccint.info, Node: `GIMPLE_OMP_SINGLE', Next: `GIMPLE_PHI', Prev: `GIMPLE_OMP_SECTIONS', Up: Tuple specific accessors
15070 12.7.22 `GIMPLE_OMP_SINGLE'
15071 ---------------------------
15073 -- GIMPLE function: gimple gimple_build_omp_single (gimple_seq body,
15075 Build a `GIMPLE_OMP_SINGLE' statement. `BODY' is the sequence of
15076 statements that will be executed once. `CLAUSES' are any of the
15077 `OMP' single construct's clauses: private, firstprivate,
15078 copyprivate, nowait.
15080 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g)
15081 Return the clauses associated with `OMP_SINGLE' `G'.
15083 -- GIMPLE function: tree *gimple_omp_single_clauses_ptr (gimple g)
15084 Return a pointer to the clauses associated with `OMP_SINGLE' `G'.
15086 -- GIMPLE function: void gimple_omp_single_set_clauses (gimple g, tree
15088 Set `CLAUSES' to be the clauses associated with `OMP_SINGLE' `G'.
15091 File: gccint.info, Node: `GIMPLE_PHI', Next: `GIMPLE_RESX', Prev: `GIMPLE_OMP_SINGLE', Up: Tuple specific accessors
15093 12.7.23 `GIMPLE_PHI'
15094 --------------------
15096 -- GIMPLE function: gimple make_phi_node (tree var, int len)
15097 Build a `PHI' node with len argument slots for variable var.
15099 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g)
15100 Return the maximum number of arguments supported by `GIMPLE_PHI'
15103 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g)
15104 Return the number of arguments in `GIMPLE_PHI' `G'. This must
15105 always be exactly the number of incoming edges for the basic block
15108 -- GIMPLE function: tree gimple_phi_result (gimple g)
15109 Return the `SSA' name created by `GIMPLE_PHI' `G'.
15111 -- GIMPLE function: tree *gimple_phi_result_ptr (gimple g)
15112 Return a pointer to the `SSA' name created by `GIMPLE_PHI' `G'.
15114 -- GIMPLE function: void gimple_phi_set_result (gimple g, tree result)
15115 Set `RESULT' to be the `SSA' name created by `GIMPLE_PHI' `G'.
15117 -- GIMPLE function: struct phi_arg_d *gimple_phi_arg (gimple g, index)
15118 Return the `PHI' argument corresponding to incoming edge `INDEX'
15119 for `GIMPLE_PHI' `G'.
15121 -- GIMPLE function: void gimple_phi_set_arg (gimple g, index, struct
15122 phi_arg_d * phiarg)
15123 Set `PHIARG' to be the argument corresponding to incoming edge
15124 `INDEX' for `GIMPLE_PHI' `G'.
15127 File: gccint.info, Node: `GIMPLE_RESX', Next: `GIMPLE_RETURN', Prev: `GIMPLE_PHI', Up: Tuple specific accessors
15129 12.7.24 `GIMPLE_RESX'
15130 ---------------------
15132 -- GIMPLE function: gimple gimple_build_resx (int region)
15133 Build a `GIMPLE_RESX' statement which is a statement. This
15134 statement is a placeholder for _Unwind_Resume before we know if a
15135 function call or a branch is needed. `REGION' is the exception
15136 region from which control is flowing.
15138 -- GIMPLE function: int gimple_resx_region (gimple g)
15139 Return the region number for `GIMPLE_RESX' `G'.
15141 -- GIMPLE function: void gimple_resx_set_region (gimple g, int region)
15142 Set `REGION' to be the region number for `GIMPLE_RESX' `G'.
15145 File: gccint.info, Node: `GIMPLE_RETURN', Next: `GIMPLE_SWITCH', Prev: `GIMPLE_RESX', Up: Tuple specific accessors
15147 12.7.25 `GIMPLE_RETURN'
15148 -----------------------
15150 -- GIMPLE function: gimple gimple_build_return (tree retval)
15151 Build a `GIMPLE_RETURN' statement whose return value is retval.
15153 -- GIMPLE function: tree gimple_return_retval (gimple g)
15154 Return the return value for `GIMPLE_RETURN' `G'.
15156 -- GIMPLE function: void gimple_return_set_retval (gimple g, tree
15158 Set `RETVAL' to be the return value for `GIMPLE_RETURN' `G'.
15161 File: gccint.info, Node: `GIMPLE_SWITCH', Next: `GIMPLE_TRY', Prev: `GIMPLE_RETURN', Up: Tuple specific accessors
15163 12.7.26 `GIMPLE_SWITCH'
15164 -----------------------
15166 -- GIMPLE function: gimple gimple_build_switch ( nlabels, tree index,
15167 tree default_label, ...)
15168 Build a `GIMPLE_SWITCH' statement. `NLABELS' are the number of
15169 labels excluding the default label. The default label is passed
15170 in `DEFAULT_LABEL'. The rest of the arguments are trees
15171 representing the labels. Each label is a tree of code
15174 -- GIMPLE function: gimple gimple_build_switch_vec (tree index, tree
15175 default_label, `VEC'(tree,heap) *args)
15176 This function is an alternate way of building `GIMPLE_SWITCH'
15177 statements. `INDEX' and `DEFAULT_LABEL' are as in
15178 gimple_build_switch. `ARGS' is a vector of `CASE_LABEL_EXPR' trees
15179 that contain the labels.
15181 -- GIMPLE function: unsigned gimple_switch_num_labels (gimple g)
15182 Return the number of labels associated with the switch statement
15185 -- GIMPLE function: void gimple_switch_set_num_labels (gimple g,
15187 Set `NLABELS' to be the number of labels for the switch statement
15190 -- GIMPLE function: tree gimple_switch_index (gimple g)
15191 Return the index variable used by the switch statement `G'.
15193 -- GIMPLE function: void gimple_switch_set_index (gimple g, tree index)
15194 Set `INDEX' to be the index variable for switch statement `G'.
15196 -- GIMPLE function: tree gimple_switch_label (gimple g, unsigned index)
15197 Return the label numbered `INDEX'. The default label is 0, followed
15198 by any labels in a switch statement.
15200 -- GIMPLE function: void gimple_switch_set_label (gimple g, unsigned
15202 Set the label number `INDEX' to `LABEL'. 0 is always the default
15205 -- GIMPLE function: tree gimple_switch_default_label (gimple g)
15206 Return the default label for a switch statement.
15208 -- GIMPLE function: void gimple_switch_set_default_label (gimple g,
15210 Set the default label for a switch statement.
15213 File: gccint.info, Node: `GIMPLE_TRY', Next: `GIMPLE_WITH_CLEANUP_EXPR', Prev: `GIMPLE_SWITCH', Up: Tuple specific accessors
15215 12.7.27 `GIMPLE_TRY'
15216 --------------------
15218 -- GIMPLE function: gimple gimple_build_try (gimple_seq eval,
15219 gimple_seq cleanup, unsigned int kind)
15220 Build a `GIMPLE_TRY' statement. `EVAL' is a sequence with the
15221 expression to evaluate. `CLEANUP' is a sequence of statements to
15222 run at clean-up time. `KIND' is the enumeration value
15223 `GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct
15224 or `GIMPLE_TRY_FINALLY' if this statement denotes a try/finally
15227 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g)
15228 Return the kind of try block represented by `GIMPLE_TRY' `G'. This
15229 is either `GIMPLE_TRY_CATCH' or `GIMPLE_TRY_FINALLY'.
15231 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g)
15232 Return the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
15234 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g)
15235 Return the sequence of statements used as the body for `GIMPLE_TRY'
15238 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g)
15239 Return the sequence of statements used as the cleanup body for
15242 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g,
15243 bool catch_is_cleanup)
15244 Set the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag.
15246 -- GIMPLE function: void gimple_try_set_eval (gimple g, gimple_seq
15248 Set `EVAL' to be the sequence of statements to use as the body for
15251 -- GIMPLE function: void gimple_try_set_cleanup (gimple g, gimple_seq
15253 Set `CLEANUP' to be the sequence of statements to use as the
15254 cleanup body for `GIMPLE_TRY' `G'.
15257 File: gccint.info, Node: `GIMPLE_WITH_CLEANUP_EXPR', Prev: `GIMPLE_TRY', Up: Tuple specific accessors
15259 12.7.28 `GIMPLE_WITH_CLEANUP_EXPR'
15260 ----------------------------------
15262 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup)
15263 Build a `GIMPLE_WITH_CLEANUP_EXPR' statement. `CLEANUP' is the
15264 clean-up expression.
15266 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g)
15267 Return the cleanup sequence for cleanup statement `G'.
15269 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq
15271 Set `CLEANUP' to be the cleanup sequence for `G'.
15273 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g)
15274 Return the `CLEANUP_EH_ONLY' flag for a `WCE' tuple.
15276 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g,
15278 Set the `CLEANUP_EH_ONLY' flag for a `WCE' tuple.
15281 File: gccint.info, Node: GIMPLE sequences, Next: Sequence iterators, Prev: Tuple specific accessors, Up: GIMPLE
15283 12.8 GIMPLE sequences
15284 =====================
15286 GIMPLE sequences are the tuple equivalent of `STATEMENT_LIST''s used in
15287 `GENERIC'. They are used to chain statements together, and when used
15288 in conjunction with sequence iterators, provide a framework for
15289 iterating through statements.
15291 GIMPLE sequences are of type struct `gimple_sequence', but are more
15292 commonly passed by reference to functions dealing with sequences. The
15293 type for a sequence pointer is `gimple_seq' which is the same as struct
15294 `gimple_sequence' *. When declaring a local sequence, you can define a
15295 local variable of type struct `gimple_sequence'. When declaring a
15296 sequence allocated on the garbage collected heap, use the function
15297 `gimple_seq_alloc' documented below.
15299 There are convenience functions for iterating through sequences in the
15300 section entitled Sequence Iterators.
15302 Below is a list of functions to manipulate and query sequences.
15304 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple
15306 Link a gimple statement to the end of the sequence *`SEQ' if `G' is
15307 not `NULL'. If *`SEQ' is `NULL', allocate a sequence before
15310 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest,
15312 Append sequence `SRC' to the end of sequence *`DEST' if `SRC' is
15313 not `NULL'. If *`DEST' is `NULL', allocate a new sequence before
15316 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src)
15317 Perform a deep copy of sequence `SRC' and return the result.
15319 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)
15320 Reverse the order of the statements in the sequence `SEQ'. Return
15323 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s)
15324 Return the first statement in sequence `S'.
15326 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s)
15327 Return the last statement in sequence `S'.
15329 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple
15331 Set the last statement in sequence `S' to the statement in `LAST'.
15333 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple
15335 Set the first statement in sequence `S' to the statement in
15338 -- GIMPLE function: void gimple_seq_init (gimple_seq s)
15339 Initialize sequence `S' to an empty sequence.
15341 -- GIMPLE function: gimple_seq gimple_seq_alloc (void)
15342 Allocate a new sequence in the garbage collected store and return
15345 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq
15347 Copy the sequence `SRC' into the sequence `DEST'.
15349 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)
15350 Return true if the sequence `S' is empty.
15352 -- GIMPLE function: gimple_seq bb_seq (basic_block bb)
15353 Returns the sequence of statements in `BB'.
15355 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)
15356 Sets the sequence of statements in `BB' to `SEQ'.
15358 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)
15359 Determine whether `SEQ' contains exactly one statement.
15362 File: gccint.info, Node: Sequence iterators, Next: Adding a new GIMPLE statement code, Prev: GIMPLE sequences, Up: GIMPLE
15364 12.9 Sequence iterators
15365 =======================
15367 Sequence iterators are convenience constructs for iterating through
15368 statements in a sequence. Given a sequence `SEQ', here is a typical
15369 use of gimple sequence iterators:
15371 gimple_stmt_iterator gsi;
15373 for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
15375 gimple g = gsi_stmt (gsi);
15376 /* Do something with gimple statement `G'. */
15379 Backward iterations are possible:
15381 for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi))
15383 Forward and backward iterations on basic blocks are possible with
15384 `gsi_start_bb' and `gsi_last_bb'.
15386 In the documentation below we sometimes refer to enum
15387 `gsi_iterator_update'. The valid options for this enumeration are:
15389 * `GSI_NEW_STMT' Only valid when a single statement is added. Move
15390 the iterator to it.
15392 * `GSI_SAME_STMT' Leave the iterator at the same statement.
15394 * `GSI_CONTINUE_LINKING' Move iterator to whatever position is
15395 suitable for linking other statements in the same direction.
15397 Below is a list of the functions used to manipulate and use statement
15400 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq)
15401 Return a new iterator pointing to the sequence `SEQ''s first
15402 statement. If `SEQ' is empty, the iterator's basic block is
15403 `NULL'. Use `gsi_start_bb' instead when the iterator needs to
15404 always have the correct basic block set.
15406 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb)
15407 Return a new iterator pointing to the first statement in basic
15410 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq)
15411 Return a new iterator initially pointing to the last statement of
15412 sequence `SEQ'. If `SEQ' is empty, the iterator's basic block is
15413 `NULL'. Use `gsi_last_bb' instead when the iterator needs to
15414 always have the correct basic block set.
15416 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb)
15417 Return a new iterator pointing to the last statement in basic
15420 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i)
15421 Return `TRUE' if at the end of `I'.
15423 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i)
15424 Return `TRUE' if we're one statement before the end of `I'.
15426 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i)
15427 Advance the iterator to the next gimple statement.
15429 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i)
15430 Advance the iterator to the previous gimple statement.
15432 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i)
15433 Return the current stmt.
15435 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block
15437 Return a block statement iterator that points to the first
15438 non-label statement in block `BB'.
15440 -- GIMPLE function: gimple *gsi_stmt_ptr (gimple_stmt_iterator *i)
15441 Return a pointer to the current stmt.
15443 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i)
15444 Return the basic block associated with this iterator.
15446 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i)
15447 Return the sequence associated with this iterator.
15449 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool
15451 Remove the current stmt from the sequence. The iterator is
15452 updated to point to the next statement. When `REMOVE_EH_INFO' is
15453 true we remove the statement pointed to by iterator `I' from the
15454 `EH' tables. Otherwise we do not modify the `EH' tables.
15455 Generally, `REMOVE_EH_INFO' should be true when the statement is
15456 going to be removed from the `IL' and not reinserted elsewhere.
15458 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i,
15459 gimple_seq seq, enum gsi_iterator_update mode)
15460 Links the sequence of statements `SEQ' before the statement pointed
15461 by iterator `I'. `MODE' indicates what to do with the iterator
15462 after insertion (see `enum gsi_iterator_update' above).
15464 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i,
15465 gimple g, enum gsi_iterator_update mode)
15466 Links statement `G' before the statement pointed-to by iterator
15467 `I'. Updates iterator `I' according to `MODE'.
15469 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i,
15470 gimple_seq seq, enum gsi_iterator_update mode)
15471 Links sequence `SEQ' after the statement pointed-to by iterator
15472 `I'. `MODE' is as in `gsi_insert_after'.
15474 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i,
15475 gimple g, enum gsi_iterator_update mode)
15476 Links statement `G' after the statement pointed-to by iterator `I'.
15477 `MODE' is as in `gsi_insert_after'.
15479 -- GIMPLE function: gimple_seq gsi_split_seq_after
15480 (gimple_stmt_iterator i)
15481 Move all statements in the sequence after `I' to a new sequence.
15482 Return this new sequence.
15484 -- GIMPLE function: gimple_seq gsi_split_seq_before
15485 (gimple_stmt_iterator *i)
15486 Move all statements in the sequence before `I' to a new sequence.
15487 Return this new sequence.
15489 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple
15490 stmt, bool update_eh_info)
15491 Replace the statement pointed-to by `I' to `STMT'. If
15492 `UPDATE_EH_INFO' is true, the exception handling information of
15493 the original statement is moved to the new statement.
15495 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i,
15496 gimple stmt, enum gsi_iterator_update mode)
15497 Insert statement `STMT' before the statement pointed-to by iterator
15498 `I', update `STMT''s basic block and scan it for new operands.
15499 `MODE' specifies how to update iterator `I' after insertion (see
15500 enum `gsi_iterator_update').
15502 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator
15503 *i, gimple_seq seq, enum gsi_iterator_update mode)
15504 Like `gsi_insert_before', but for all the statements in `SEQ'.
15506 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i,
15507 gimple stmt, enum gsi_iterator_update mode)
15508 Insert statement `STMT' after the statement pointed-to by iterator
15509 `I', update `STMT''s basic block and scan it for new operands.
15510 `MODE' specifies how to update iterator `I' after insertion (see
15511 enum `gsi_iterator_update').
15513 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator
15514 *i, gimple_seq seq, enum gsi_iterator_update mode)
15515 Like `gsi_insert_after', but for all the statements in `SEQ'.
15517 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt)
15518 Finds iterator for `STMT'.
15520 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from,
15521 gimple_stmt_iterator *to)
15522 Move the statement at `FROM' so it comes right after the statement
15525 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from,
15526 gimple_stmt_iterator *to)
15527 Move the statement at `FROM' so it comes right before the statement
15530 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator
15531 *from, basic_block bb)
15532 Move the statement at `FROM' to the end of basic block `BB'.
15534 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt)
15535 Add `STMT' to the pending list of edge `E'. No actual insertion is
15536 made until a call to `gsi_commit_edge_inserts'() is made.
15538 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq
15540 Add the sequence of statements in `SEQ' to the pending list of edge
15541 `E'. No actual insertion is made until a call to
15542 `gsi_commit_edge_inserts'() is made.
15544 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e,
15546 Similar to `gsi_insert_on_edge'+`gsi_commit_edge_inserts'. If a
15547 new block has to be created, it is returned.
15549 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e,
15550 basic_block *new_bb)
15551 Commit insertions pending at edge `E'. If a new block is created,
15552 set `NEW_BB' to this block, otherwise set it to `NULL'.
15554 -- GIMPLE function: void gsi_commit_edge_inserts (void)
15555 This routine will commit all pending edge insertions, creating any
15556 new basic blocks which are necessary.
15559 File: gccint.info, Node: Adding a new GIMPLE statement code, Next: Statement and operand traversals, Prev: Sequence iterators, Up: GIMPLE
15561 12.10 Adding a new GIMPLE statement code
15562 ========================================
15564 The first step in adding a new GIMPLE statement code, is modifying the
15565 file `gimple.def', which contains all the GIMPLE codes. Then you must
15566 add a corresponding structure, and an entry in `union
15567 gimple_statement_d', both of which are located in `gimple.h'. This in
15568 turn, will require you to add a corresponding `GTY' tag in
15569 `gsstruct.def', and code to handle this tag in `gss_for_code' which is
15570 located in `gimple.c'.
15572 In order for the garbage collector to know the size of the structure
15573 you created in `gimple.h', you need to add a case to handle your new
15574 GIMPLE statement in `gimple_size' which is located in `gimple.c'.
15576 You will probably want to create a function to build the new gimple
15577 statement in `gimple.c'. The function should be called
15578 `gimple_build_<`NEW_TUPLE_NAME'>', and should return the new tuple of
15581 If your new statement requires accessors for any members or operands
15582 it may have, put simple inline accessors in `gimple.h' and any
15583 non-trivial accessors in `gimple.c' with a corresponding prototype in
15587 File: gccint.info, Node: Statement and operand traversals, Prev: Adding a new GIMPLE statement code, Up: GIMPLE
15589 12.11 Statement and operand traversals
15590 ======================================
15592 There are two functions available for walking statements and sequences:
15593 `walk_gimple_stmt' and `walk_gimple_seq', accordingly, and a third
15594 function for walking the operands in a statement: `walk_gimple_op'.
15596 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi,
15597 walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct
15598 walk_stmt_info *wi)
15599 This function is used to walk the current statement in `GSI',
15600 optionally using traversal state stored in `WI'. If `WI' is
15601 `NULL', no state is kept during the traversal.
15603 The callback `CALLBACK_STMT' is called. If `CALLBACK_STMT' returns
15604 true, it means that the callback function has handled all the
15605 operands of the statement and it is not necessary to walk its
15608 If `CALLBACK_STMT' is `NULL' or it returns false, `CALLBACK_OP' is
15609 called on each operand of the statement via `walk_gimple_op'. If
15610 `walk_gimple_op' returns non-`NULL' for any operand, the remaining
15611 operands are not scanned.
15613 The return value is that returned by the last call to
15614 `walk_gimple_op', or `NULL_TREE' if no `CALLBACK_OP' is specified.
15616 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn
15617 callback_op, struct walk_stmt_info *wi)
15618 Use this function to walk the operands of statement `STMT'. Every
15619 operand is walked via `walk_tree' with optional state information
15622 `CALLBACK_OP' is called on each operand of `STMT' via `walk_tree'.
15623 Additional parameters to `walk_tree' must be stored in `WI'. For
15624 each operand `OP', `walk_tree' is called as:
15626 walk_tree (&`OP', `CALLBACK_OP', `WI', `WI'- `PSET')
15628 If `CALLBACK_OP' returns non-`NULL' for an operand, the remaining
15629 operands are not scanned. The return value is that returned by
15630 the last call to `walk_tree', or `NULL_TREE' if no `CALLBACK_OP' is
15633 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn
15634 callback_stmt, walk_tree_fn callback_op, struct
15635 walk_stmt_info *wi)
15636 This function walks all the statements in the sequence `SEQ'
15637 calling `walk_gimple_stmt' on each one. `WI' is as in
15638 `walk_gimple_stmt'. If `walk_gimple_stmt' returns non-`NULL', the
15639 walk is stopped and the value returned. Otherwise, all the
15640 statements are walked and `NULL_TREE' returned.
15643 File: gccint.info, Node: Tree SSA, Next: RTL, Prev: GIMPLE, Up: Top
15645 13 Analysis and Optimization of GIMPLE tuples
15646 *********************************************
15648 GCC uses three main intermediate languages to represent the program
15649 during compilation: GENERIC, GIMPLE and RTL. GENERIC is a
15650 language-independent representation generated by each front end. It is
15651 used to serve as an interface between the parser and optimizer.
15652 GENERIC is a common representation that is able to represent programs
15653 written in all the languages supported by GCC.
15655 GIMPLE and RTL are used to optimize the program. GIMPLE is used for
15656 target and language independent optimizations (e.g., inlining, constant
15657 propagation, tail call elimination, redundancy elimination, etc). Much
15658 like GENERIC, GIMPLE is a language independent, tree based
15659 representation. However, it differs from GENERIC in that the GIMPLE
15660 grammar is more restrictive: expressions contain no more than 3
15661 operands (except function calls), it has no control flow structures and
15662 expressions with side-effects are only allowed on the right hand side
15663 of assignments. See the chapter describing GENERIC and GIMPLE for more
15666 This chapter describes the data structures and functions used in the
15667 GIMPLE optimizers (also known as "tree optimizers" or "middle end").
15668 In particular, it focuses on all the macros, data structures, functions
15669 and programming constructs needed to implement optimization passes for
15674 * Annotations:: Attributes for variables.
15675 * SSA Operands:: SSA names referenced by GIMPLE statements.
15676 * SSA:: Static Single Assignment representation.
15677 * Alias analysis:: Representing aliased loads and stores.
15678 * Memory model:: Memory model used by the middle-end.
15681 File: gccint.info, Node: Annotations, Next: SSA Operands, Up: Tree SSA
15686 The optimizers need to associate attributes with variables during the
15687 optimization process. For instance, we need to know whether a variable
15688 has aliases. All these attributes are stored in data structures called
15689 annotations which are then linked to the field `ann' in `struct
15692 Presently, we define annotations for variables (`var_ann_t').
15693 Annotations are defined and documented in `tree-flow.h'.
15696 File: gccint.info, Node: SSA Operands, Next: SSA, Prev: Annotations, Up: Tree SSA
15701 Almost every GIMPLE statement will contain a reference to a variable or
15702 memory location. Since statements come in different shapes and sizes,
15703 their operands are going to be located at various spots inside the
15704 statement's tree. To facilitate access to the statement's operands,
15705 they are organized into lists associated inside each statement's
15706 annotation. Each element in an operand list is a pointer to a
15707 `VAR_DECL', `PARM_DECL' or `SSA_NAME' tree node. This provides a very
15708 convenient way of examining and replacing operands.
15710 Data flow analysis and optimization is done on all tree nodes
15711 representing variables. Any node for which `SSA_VAR_P' returns nonzero
15712 is considered when scanning statement operands. However, not all
15713 `SSA_VAR_P' variables are processed in the same way. For the purposes
15714 of optimization, we need to distinguish between references to local
15715 scalar variables and references to globals, statics, structures,
15716 arrays, aliased variables, etc. The reason is simple, the compiler can
15717 gather complete data flow information for a local scalar. On the other
15718 hand, a global variable may be modified by a function call, it may not
15719 be possible to keep track of all the elements of an array or the fields
15720 of a structure, etc.
15722 The operand scanner gathers two kinds of operands: "real" and
15723 "virtual". An operand for which `is_gimple_reg' returns true is
15724 considered real, otherwise it is a virtual operand. We also
15725 distinguish between uses and definitions. An operand is used if its
15726 value is loaded by the statement (e.g., the operand at the RHS of an
15727 assignment). If the statement assigns a new value to the operand, the
15728 operand is considered a definition (e.g., the operand at the LHS of an
15731 Virtual and real operands also have very different data flow
15732 properties. Real operands are unambiguous references to the full
15733 object that they represent. For instance, given
15740 Since `a' and `b' are non-aliased locals, the statement `a = b' will
15741 have one real definition and one real use because variable `a' is
15742 completely modified with the contents of variable `b'. Real definition
15743 are also known as "killing definitions". Similarly, the use of `b'
15744 reads all its bits.
15746 In contrast, virtual operands are used with variables that can have a
15747 partial or ambiguous reference. This includes structures, arrays,
15748 globals, and aliased variables. In these cases, we have two types of
15749 definitions. For globals, structures, and arrays, we can determine from
15750 a statement whether a variable of these types has a killing definition.
15751 If the variable does, then the statement is marked as having a "must
15752 definition" of that variable. However, if a statement is only defining
15753 a part of the variable (i.e. a field in a structure), or if we know
15754 that a statement might define the variable but we cannot say for sure,
15755 then we mark that statement as having a "may definition". For
15769 The assignment `*p = 5' may be a definition of `a' or `b'. If we
15770 cannot determine statically where `p' is pointing to at the time of the
15771 store operation, we create virtual definitions to mark that statement
15772 as a potential definition site for `a' and `b'. Memory loads are
15773 similarly marked with virtual use operands. Virtual operands are shown
15774 in tree dumps right before the statement that contains them. To
15775 request a tree dump with virtual operands, use the `-vops' option to
15794 Notice that `VDEF' operands have two copies of the referenced
15795 variable. This indicates that this is not a killing definition of that
15796 variable. In this case we refer to it as a "may definition" or
15797 "aliased store". The presence of the second copy of the variable in
15798 the `VDEF' operand will become important when the function is converted
15799 into SSA form. This will be used to link all the non-killing
15800 definitions to prevent optimizations from making incorrect assumptions
15803 Operands are updated as soon as the statement is finished via a call
15804 to `update_stmt'. If statement elements are changed via `SET_USE' or
15805 `SET_DEF', then no further action is required (i.e., those macros take
15806 care of updating the statement). If changes are made by manipulating
15807 the statement's tree directly, then a call must be made to
15808 `update_stmt' when complete. Calling one of the `bsi_insert' routines
15809 or `bsi_replace' performs an implicit call to `update_stmt'.
15811 13.2.1 Operand Iterators And Access Routines
15812 --------------------------------------------
15814 Operands are collected by `tree-ssa-operands.c'. They are stored
15815 inside each statement's annotation and can be accessed through either
15816 the operand iterators or an access routine.
15818 The following access routines are available for examining operands:
15820 1. `SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return
15821 NULL unless there is exactly one operand matching the specified
15822 flags. If there is exactly one operand, the operand is returned
15823 as either a `tree', `def_operand_p', or `use_operand_p'.
15825 tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
15826 use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
15827 def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
15829 2. `ZERO_SSA_OPERANDS': This macro returns true if there are no
15830 operands matching the specified flags.
15832 if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
15835 3. `NUM_SSA_OPERANDS': This macro Returns the number of operands
15836 matching 'flags'. This actually executes a loop to perform the
15837 count, so only use this if it is really needed.
15839 int count = NUM_SSA_OPERANDS (stmt, flags)
15841 If you wish to iterate over some or all operands, use the
15842 `FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator. For example, to print
15843 all the operands for a statement:
15846 print_ops (tree stmt)
15851 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
15852 print_generic_expr (stderr, var, TDF_SLIM);
15855 How to choose the appropriate iterator:
15857 1. Determine whether you are need to see the operand pointers, or
15858 just the trees, and choose the appropriate macro:
15862 use_operand_p FOR_EACH_SSA_USE_OPERAND
15863 def_operand_p FOR_EACH_SSA_DEF_OPERAND
15864 tree FOR_EACH_SSA_TREE_OPERAND
15866 2. You need to declare a variable of the type you are interested in,
15867 and an ssa_op_iter structure which serves as the loop controlling
15870 3. Determine which operands you wish to use, and specify the flags of
15871 those you are interested in. They are documented in
15872 `tree-ssa-operands.h':
15874 #define SSA_OP_USE 0x01 /* Real USE operands. */
15875 #define SSA_OP_DEF 0x02 /* Real DEF operands. */
15876 #define SSA_OP_VUSE 0x04 /* VUSE operands. */
15877 #define SSA_OP_VMAYUSE 0x08 /* USE portion of VDEFS. */
15878 #define SSA_OP_VDEF 0x10 /* DEF portion of VDEFS. */
15880 /* These are commonly grouped operand flags. */
15881 #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE | SSA_OP_VMAYUSE)
15882 #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VDEF)
15883 #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
15884 #define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
15885 #define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
15887 So if you want to look at the use pointers for all the `USE' and
15888 `VUSE' operands, you would do something like:
15890 use_operand_p use_p;
15893 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
15895 process_use_ptr (use_p);
15898 The `TREE' macro is basically the same as the `USE' and `DEF' macros,
15899 only with the use or def dereferenced via `USE_FROM_PTR (use_p)' and
15900 `DEF_FROM_PTR (def_p)'. Since we aren't using operand pointers, use
15901 and defs flags can be mixed.
15906 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
15908 print_generic_expr (stderr, var, TDF_SLIM);
15911 `VDEF's are broken into two flags, one for the `DEF' portion
15912 (`SSA_OP_VDEF') and one for the USE portion (`SSA_OP_VMAYUSE'). If all
15913 you want to look at are the `VDEF's together, there is a fourth
15914 iterator macro for this, which returns both a def_operand_p and a
15915 use_operand_p for each `VDEF' in the statement. Note that you don't
15916 need any flags for this one.
15918 use_operand_p use_p;
15919 def_operand_p def_p;
15922 FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
15927 There are many examples in the code as well, as well as the
15928 documentation in `tree-ssa-operands.h'.
15930 There are also a couple of variants on the stmt iterators regarding PHI
15933 `FOR_EACH_PHI_ARG' Works exactly like `FOR_EACH_SSA_USE_OPERAND',
15934 except it works over `PHI' arguments instead of statement operands.
15936 /* Look at every virtual PHI use. */
15937 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
15942 /* Look at every real PHI use. */
15943 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES)
15946 /* Look at every PHI use. */
15947 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
15950 `FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like
15951 `FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a
15952 statement or a `PHI' node. These should be used when it is appropriate
15953 but they are not quite as efficient as the individual `FOR_EACH_PHI'
15954 and `FOR_EACH_SSA' routines.
15956 FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
15961 FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags)
15966 13.2.2 Immediate Uses
15967 ---------------------
15969 Immediate use information is now always available. Using the immediate
15970 use iterators, you may examine every use of any `SSA_NAME'. For
15971 instance, to change each use of `ssa_var' to `ssa_var2' and call
15972 fold_stmt on each stmt after that is done:
15974 use_operand_p imm_use_p;
15975 imm_use_iterator iterator;
15976 tree ssa_var, stmt;
15979 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
15981 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
15982 SET_USE (imm_use_p, ssa_var_2);
15986 There are 2 iterators which can be used. `FOR_EACH_IMM_USE_FAST' is
15987 used when the immediate uses are not changed, i.e., you are looking at
15988 the uses, but not setting them.
15990 If they do get changed, then care must be taken that things are not
15991 changed under the iterators, so use the `FOR_EACH_IMM_USE_STMT' and
15992 `FOR_EACH_IMM_USE_ON_STMT' iterators. They attempt to preserve the
15993 sanity of the use list by moving all the uses for a statement into a
15994 controlled position, and then iterating over those uses. Then the
15995 optimization can manipulate the stmt when all the uses have been
15996 processed. This is a little slower than the FAST version since it adds
15997 a placeholder element and must sort through the list a bit for each
15998 statement. This placeholder element must be also be removed if the
15999 loop is terminated early. The macro `BREAK_FROM_IMM_USE_SAFE' is
16000 provided to do this :
16002 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
16004 if (stmt == last_stmt)
16005 BREAK_FROM_SAFE_IMM_USE (iter);
16007 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
16008 SET_USE (imm_use_p, ssa_var_2);
16012 There are checks in `verify_ssa' which verify that the immediate use
16013 list is up to date, as well as checking that an optimization didn't
16014 break from the loop without using this macro. It is safe to simply
16015 'break'; from a `FOR_EACH_IMM_USE_FAST' traverse.
16017 Some useful functions and macros:
16018 1. `has_zero_uses (ssa_var)' : Returns true if there are no uses of
16021 2. `has_single_use (ssa_var)' : Returns true if there is only a
16022 single use of `ssa_var'.
16024 3. `single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' :
16025 Returns true if there is only a single use of `ssa_var', and also
16026 returns the use pointer and statement it occurs in, in the second
16027 and third parameters.
16029 4. `num_imm_uses (ssa_var)' : Returns the number of immediate uses of
16030 `ssa_var'. It is better not to use this if possible since it simply
16031 utilizes a loop to count the uses.
16033 5. `PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a `PHI'
16034 node, return the index number for the use. An assert is triggered
16035 if the use isn't located in a `PHI' node.
16037 6. `USE_STMT (use_p)' : Return the statement a use occurs in.
16039 Note that uses are not put into an immediate use list until their
16040 statement is actually inserted into the instruction stream via a
16043 It is also still possible to utilize lazy updating of statements, but
16044 this should be used only when absolutely required. Both alias analysis
16045 and the dominator optimizations currently do this.
16047 When lazy updating is being used, the immediate use information is out
16048 of date and cannot be used reliably. Lazy updating is achieved by
16049 simply marking statements modified via calls to `mark_stmt_modified'
16050 instead of `update_stmt'. When lazy updating is no longer required,
16051 all the modified statements must have `update_stmt' called in order to
16052 bring them up to date. This must be done before the optimization is
16053 finished, or `verify_ssa' will trigger an abort.
16055 This is done with a simple loop over the instruction stream:
16056 block_stmt_iterator bsi;
16060 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
16061 update_stmt_if_modified (bsi_stmt (bsi));
16065 File: gccint.info, Node: SSA, Next: Alias analysis, Prev: SSA Operands, Up: Tree SSA
16067 13.3 Static Single Assignment
16068 =============================
16070 Most of the tree optimizers rely on the data flow information provided
16071 by the Static Single Assignment (SSA) form. We implement the SSA form
16072 as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K.
16073 Zadeck. Efficiently Computing Static Single Assignment Form and the
16074 Control Dependence Graph. ACM Transactions on Programming Languages
16075 and Systems, 13(4):451-490, October 1991'.
16077 The SSA form is based on the premise that program variables are
16078 assigned in exactly one location in the program. Multiple assignments
16079 to the same variable create new versions of that variable. Naturally,
16080 actual programs are seldom in SSA form initially because variables tend
16081 to be assigned multiple times. The compiler modifies the program
16082 representation so that every time a variable is assigned in the code, a
16083 new version of the variable is created. Different versions of the same
16084 variable are distinguished by subscripting the variable name with its
16085 version number. Variables used in the right-hand side of expressions
16086 are renamed so that their version number matches that of the most
16089 We represent variable versions using `SSA_NAME' nodes. The renaming
16090 process in `tree-ssa.c' wraps every real and virtual operand with an
16091 `SSA_NAME' node which contains the version number and the statement
16092 that created the `SSA_NAME'. Only definitions and virtual definitions
16093 may create new `SSA_NAME' nodes.
16095 Sometimes, flow of control makes it impossible to determine the most
16096 recent version of a variable. In these cases, the compiler inserts an
16097 artificial definition for that variable called "PHI function" or "PHI
16098 node". This new definition merges all the incoming versions of the
16099 variable to create a new name for it. For instance,
16108 # a_4 = PHI <a_1, a_2, a_3>
16111 Since it is not possible to determine which of the three branches will
16112 be taken at runtime, we don't know which of `a_1', `a_2' or `a_3' to
16113 use at the return statement. So, the SSA renamer creates a new version
16114 `a_4' which is assigned the result of "merging" `a_1', `a_2' and `a_3'.
16115 Hence, PHI nodes mean "one of these operands. I don't know which".
16117 The following macros can be used to examine PHI nodes
16119 -- Macro: PHI_RESULT (PHI)
16120 Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS).
16122 -- Macro: PHI_NUM_ARGS (PHI)
16123 Returns the number of arguments in PHI. This number is exactly
16124 the number of incoming edges to the basic block holding PHI.
16126 -- Macro: PHI_ARG_ELT (PHI, I)
16127 Returns a tuple representing the Ith argument of PHI. Each
16128 element of this tuple contains an `SSA_NAME' VAR and the incoming
16129 edge through which VAR flows.
16131 -- Macro: PHI_ARG_EDGE (PHI, I)
16132 Returns the incoming edge for the Ith argument of PHI.
16134 -- Macro: PHI_ARG_DEF (PHI, I)
16135 Returns the `SSA_NAME' for the Ith argument of PHI.
16137 13.3.1 Preserving the SSA form
16138 ------------------------------
16140 Some optimization passes make changes to the function that invalidate
16141 the SSA property. This can happen when a pass has added new symbols or
16142 changed the program so that variables that were previously aliased
16143 aren't anymore. Whenever something like this happens, the affected
16144 symbols must be renamed into SSA form again. Transformations that emit
16145 new code or replicate existing statements will also need to update the
16148 Since GCC implements two different SSA forms for register and virtual
16149 variables, keeping the SSA form up to date depends on whether you are
16150 updating register or virtual names. In both cases, the general idea
16151 behind incremental SSA updates is similar: when new SSA names are
16152 created, they typically are meant to replace other existing names in
16155 For instance, given the following code:
16158 2 x_1 = PHI (0, x_5)
16169 Suppose that we insert new names `x_10' and `x_11' (lines `4' and `8').
16172 2 x_1 = PHI (0, x_5)
16185 We want to replace all the uses of `x_1' with the new definitions of
16186 `x_10' and `x_11'. Note that the only uses that should be replaced are
16187 those at lines `5', `9' and `11'. Also, the use of `x_7' at line `9'
16188 should _not_ be replaced (this is why we cannot just mark symbol `x' for
16191 Additionally, we may need to insert a PHI node at line `11' because
16192 that is a merge point for `x_10' and `x_11'. So the use of `x_1' at
16193 line `11' will be replaced with the new PHI node. The insertion of PHI
16194 nodes is optional. They are not strictly necessary to preserve the SSA
16195 form, and depending on what the caller inserted, they may not even be
16196 useful for the optimizers.
16198 Updating the SSA form is a two step process. First, the pass has to
16199 identify which names need to be updated and/or which symbols need to be
16200 renamed into SSA form for the first time. When new names are
16201 introduced to replace existing names in the program, the mapping
16202 between the old and the new names are registered by calling
16203 `register_new_name_mapping' (note that if your pass creates new code by
16204 duplicating basic blocks, the call to `tree_duplicate_bb' will set up
16205 the necessary mappings automatically). On the other hand, if your pass
16206 exposes a new symbol that should be put in SSA form for the first time,
16207 the new symbol should be registered with `mark_sym_for_renaming'.
16209 After the replacement mappings have been registered and new symbols
16210 marked for renaming, a call to `update_ssa' makes the registered
16211 changes. This can be done with an explicit call or by creating `TODO'
16212 flags in the `tree_opt_pass' structure for your pass. There are
16213 several `TODO' flags that control the behavior of `update_ssa':
16215 * `TODO_update_ssa'. Update the SSA form inserting PHI nodes for
16216 newly exposed symbols and virtual names marked for updating. When
16217 updating real names, only insert PHI nodes for a real name `O_j'
16218 in blocks reached by all the new and old definitions for `O_j'.
16219 If the iterated dominance frontier for `O_j' is not pruned, we may
16220 end up inserting PHI nodes in blocks that have one or more edges
16221 with no incoming definition for `O_j'. This would lead to
16222 uninitialized warnings for `O_j''s symbol.
16224 * `TODO_update_ssa_no_phi'. Update the SSA form without inserting
16225 any new PHI nodes at all. This is used by passes that have either
16226 inserted all the PHI nodes themselves or passes that need only to
16227 patch use-def and def-def chains for virtuals (e.g., DCE).
16229 * `TODO_update_ssa_full_phi'. Insert PHI nodes everywhere they are
16230 needed. No pruning of the IDF is done. This is used by passes
16231 that need the PHI nodes for `O_j' even if it means that some
16232 arguments will come from the default definition of `O_j''s symbol
16233 (e.g., `pass_linear_transform').
16235 WARNING: If you need to use this flag, chances are that your pass
16236 may be doing something wrong. Inserting PHI nodes for an old name
16237 where not all edges carry a new replacement may lead to silent
16238 codegen errors or spurious uninitialized warnings.
16240 * `TODO_update_ssa_only_virtuals'. Passes that update the SSA form
16241 on their own may want to delegate the updating of virtual names to
16242 the generic updater. Since FUD chains are easier to maintain,
16243 this simplifies the work they need to do. NOTE: If this flag is
16244 used, any OLD->NEW mappings for real names are explicitly
16245 destroyed and only the symbols marked for renaming are processed.
16247 13.3.2 Preserving the virtual SSA form
16248 --------------------------------------
16250 The virtual SSA form is harder to preserve than the non-virtual SSA form
16251 mainly because the set of virtual operands for a statement may change at
16252 what some would consider unexpected times. In general, statement
16253 modifications should be bracketed between calls to `push_stmt_changes'
16254 and `pop_stmt_changes'. For example,
16256 munge_stmt (tree stmt)
16258 push_stmt_changes (&stmt);
16259 ... rewrite STMT ...
16260 pop_stmt_changes (&stmt);
16263 The call to `push_stmt_changes' saves the current state of the
16264 statement operands and the call to `pop_stmt_changes' compares the
16265 saved state with the current one and does the appropriate symbol
16266 marking for the SSA renamer.
16268 It is possible to modify several statements at a time, provided that
16269 `push_stmt_changes' and `pop_stmt_changes' are called in LIFO order, as
16270 when processing a stack of statements.
16272 Additionally, if the pass discovers that it did not need to make
16273 changes to the statement after calling `push_stmt_changes', it can
16274 simply discard the topmost change buffer by calling
16275 `discard_stmt_changes'. This will avoid the expensive operand re-scan
16276 operation and the buffer comparison that determines if symbols need to
16277 be marked for renaming.
16279 13.3.3 Examining `SSA_NAME' nodes
16280 ---------------------------------
16282 The following macros can be used to examine `SSA_NAME' nodes
16284 -- Macro: SSA_NAME_DEF_STMT (VAR)
16285 Returns the statement S that creates the `SSA_NAME' VAR. If S is
16286 an empty statement (i.e., `IS_EMPTY_STMT (S)' returns `true'), it
16287 means that the first reference to this variable is a USE or a VUSE.
16289 -- Macro: SSA_NAME_VERSION (VAR)
16290 Returns the version number of the `SSA_NAME' object VAR.
16292 13.3.4 Walking use-def chains
16293 -----------------------------
16295 -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA)
16296 Walks use-def chains starting at the `SSA_NAME' node VAR. Calls
16297 function FN at each reaching definition found. Function FN takes
16298 three arguments: VAR, its defining statement (DEF_STMT) and a
16299 generic pointer to whatever state information that FN may want to
16300 maintain (DATA). Function FN is able to stop the walk by
16301 returning `true', otherwise in order to continue the walk, FN
16302 should return `false'.
16304 Note, that if DEF_STMT is a `PHI' node, the semantics are slightly
16305 different. For each argument ARG of the PHI node, this function
16308 1. Walk the use-def chains for ARG.
16310 2. Call `FN (ARG, PHI, DATA)'.
16312 Note how the first argument to FN is no longer the original
16313 variable VAR, but the PHI argument currently being examined. If
16314 FN wants to get at VAR, it should call `PHI_RESULT' (PHI).
16316 13.3.5 Walking the dominator tree
16317 ---------------------------------
16319 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB)
16320 This function walks the dominator tree for the current CFG calling
16321 a set of callback functions defined in STRUCT DOM_WALK_DATA in
16322 `domwalk.h'. The call back functions you need to define give you
16323 hooks to execute custom code at various points during traversal:
16325 1. Once to initialize any local data needed while processing BB
16326 and its children. This local data is pushed into an internal
16327 stack which is automatically pushed and popped as the walker
16328 traverses the dominator tree.
16330 2. Once before traversing all the statements in the BB.
16332 3. Once for every statement inside BB.
16334 4. Once after traversing all the statements and before recursing
16335 into BB's dominator children.
16337 5. It then recurses into all the dominator children of BB.
16339 6. After recursing into all the dominator children of BB it can,
16340 optionally, traverse every statement in BB again (i.e.,
16341 repeating steps 2 and 3).
16343 7. Once after walking the statements in BB and BB's dominator
16344 children. At this stage, the block local data stack is
16348 File: gccint.info, Node: Alias analysis, Next: Memory model, Prev: SSA, Up: Tree SSA
16350 13.4 Alias analysis
16351 ===================
16353 Alias analysis in GIMPLE SSA form consists of two pieces. First the
16354 virtual SSA web ties conflicting memory accesses and provides a SSA
16355 use-def chain and SSA immediate-use chains for walking possibly
16356 dependent memory accesses. Second an alias-oracle can be queried to
16357 disambiguate explicit and implicit memory references.
16359 1. Memory SSA form.
16361 All statements that may use memory have exactly one accompanied
16362 use of a virtual SSA name that represents the state of memory at
16363 the given point in the IL.
16365 All statements that may define memory have exactly one accompanied
16366 definition of a virtual SSA name using the previous state of memory
16367 and defining the new state of memory after the given point in the
16373 # .MEM_3 = VDEF <.MEM_2(D)>
16379 The virtual SSA names in this case are `.MEM_2(D)' and `.MEM_3'.
16380 The store to the global variable `i' defines `.MEM_3' invalidating
16381 `.MEM_2(D)'. The load from `i' uses that new state `.MEM_3'.
16383 The virtual SSA web serves as constraints to SSA optimizers
16384 preventing illegitimate code-motion and optimization. It also
16385 provides a way to walk related memory statements.
16387 2. Points-to and escape analysis.
16389 Points-to analysis builds a set of constraints from the GIMPLE SSA
16390 IL representing all pointer operations and facts we do or do not
16391 know about pointers. Solving this set of constraints yields a
16392 conservatively correct solution for each pointer variable in the
16393 program (though we are only interested in SSA name pointers) as to
16394 what it may possibly point to.
16396 This points-to solution for a given SSA name pointer is stored in
16397 the `pt_solution' sub-structure of the `SSA_NAME_PTR_INFO' record.
16398 The following accessor functions are available:
16400 * `pt_solution_includes'
16402 * `pt_solutions_intersect'
16404 Points-to analysis also computes the solution for two special set
16405 of pointers, `ESCAPED' and `CALLUSED'. Those represent all memory
16406 that has escaped the scope of analysis or that is used by pure or
16407 nested const calls.
16409 3. Type-based alias analysis
16411 Type-based alias analysis is frontend dependent though generic
16412 support is provided by the middle-end in `alias.c'. TBAA code is
16413 used by both tree optimizers and RTL optimizers.
16415 Every language that wishes to perform language-specific alias
16416 analysis should define a function that computes, given a `tree'
16417 node, an alias set for the node. Nodes in different alias sets
16418 are not allowed to alias. For an example, see the C front-end
16419 function `c_get_alias_set'.
16421 4. Tree alias-oracle
16423 The tree alias-oracle provides means to disambiguate two memory
16424 references and memory references against statements. The following
16425 queries are available:
16427 * `refs_may_alias_p'
16429 * `ref_maybe_used_by_stmt_p'
16431 * `stmt_may_clobber_ref_p'
16433 In addition to those two kind of statement walkers are available
16434 walking statements related to a reference ref.
16435 `walk_non_aliased_vuses' walks over dominating memory defining
16436 statements and calls back if the statement does not clobber ref
16437 providing the non-aliased VUSE. The walk stops at the first
16438 clobbering statement or if asked to. `walk_aliased_vdefs' walks
16439 over dominating memory defining statements and calls back on each
16440 statement clobbering ref providing its aliasing VDEF. The walk
16445 File: gccint.info, Node: Memory model, Prev: Alias analysis, Up: Tree SSA
16450 The memory model used by the middle-end models that of the C/C++
16451 languages. The middle-end has the notion of an effective type of a
16452 memory region which is used for type-based alias analysis.
16454 The following is a refinement of ISO C99 6.5/6, clarifying the block
16455 copy case to follow common sense and extending the concept of a dynamic
16456 effective type to objects with a declared type as required for C++.
16458 The effective type of an object for an access to its stored value is
16459 the declared type of the object or the effective type determined by
16460 a previous store to it. If a value is stored into an object through
16461 an lvalue having a type that is not a character type, then the
16462 type of the lvalue becomes the effective type of the object for that
16463 access and for subsequent accesses that do not modify the stored value.
16464 If a value is copied into an object using `memcpy' or `memmove',
16465 or is copied as an array of character type, then the effective type
16466 of the modified object for that access and for subsequent accesses that
16467 do not modify the value is undetermined. For all other accesses to an
16468 object, the effective type of the object is simply the type of the
16469 lvalue used for the access.
16472 File: gccint.info, Node: Loop Analysis and Representation, Next: Machine Desc, Prev: Control Flow, Up: Top
16474 14 Analysis and Representation of Loops
16475 ***************************************
16477 GCC provides extensive infrastructure for work with natural loops, i.e.,
16478 strongly connected components of CFG with only one entry block. This
16479 chapter describes representation of loops in GCC, both on GIMPLE and in
16480 RTL, as well as the interfaces to loop-related analyses (induction
16481 variable analysis and number of iterations analysis).
16485 * Loop representation:: Representation and analysis of loops.
16486 * Loop querying:: Getting information about loops.
16487 * Loop manipulation:: Loop manipulation functions.
16488 * LCSSA:: Loop-closed SSA form.
16489 * Scalar evolutions:: Induction variables on GIMPLE.
16490 * loop-iv:: Induction variables on RTL.
16491 * Number of iterations:: Number of iterations analysis.
16492 * Dependency analysis:: Data dependency analysis.
16493 * Lambda:: Linear loop transformations framework.
16494 * Omega:: A solver for linear programming problems.
16497 File: gccint.info, Node: Loop representation, Next: Loop querying, Up: Loop Analysis and Representation
16499 14.1 Loop representation
16500 ========================
16502 This chapter describes the representation of loops in GCC, and functions
16503 that can be used to build, modify and analyze this representation. Most
16504 of the interfaces and data structures are declared in `cfgloop.h'. At
16505 the moment, loop structures are analyzed and this information is
16506 updated only by the optimization passes that deal with loops, but some
16507 efforts are being made to make it available throughout most of the
16508 optimization passes.
16510 In general, a natural loop has one entry block (header) and possibly
16511 several back edges (latches) leading to the header from the inside of
16512 the loop. Loops with several latches may appear if several loops share
16513 a single header, or if there is a branching in the middle of the loop.
16514 The representation of loops in GCC however allows only loops with a
16515 single latch. During loop analysis, headers of such loops are split and
16516 forwarder blocks are created in order to disambiguate their structures.
16517 Heuristic based on profile information and structure of the induction
16518 variables in the loops is used to determine whether the latches
16519 correspond to sub-loops or to control flow in a single loop. This means
16520 that the analysis sometimes changes the CFG, and if you run it in the
16521 middle of an optimization pass, you must be able to deal with the new
16522 blocks. You may avoid CFG changes by passing
16523 `LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note
16524 however that most other loop manipulation functions will not work
16525 correctly for loops with multiple latch edges (the functions that only
16526 query membership of blocks to loops and subloop relationships, or
16527 enumerate and test loop exits, can be expected to work).
16529 Body of the loop is the set of blocks that are dominated by its header,
16530 and reachable from its latch against the direction of edges in CFG. The
16531 loops are organized in a containment hierarchy (tree) such that all the
16532 loops immediately contained inside loop L are the children of L in the
16533 tree. This tree is represented by the `struct loops' structure. The
16534 root of this tree is a fake loop that contains all blocks in the
16535 function. Each of the loops is represented in a `struct loop'
16536 structure. Each loop is assigned an index (`num' field of the `struct
16537 loop' structure), and the pointer to the loop is stored in the
16538 corresponding field of the `larray' vector in the loops structure. The
16539 indices do not have to be continuous, there may be empty (`NULL')
16540 entries in the `larray' created by deleting loops. Also, there is no
16541 guarantee on the relative order of a loop and its subloops in the
16542 numbering. The index of a loop never changes.
16544 The entries of the `larray' field should not be accessed directly.
16545 The function `get_loop' returns the loop description for a loop with
16546 the given index. `number_of_loops' function returns number of loops in
16547 the function. To traverse all loops, use `FOR_EACH_LOOP' macro. The
16548 `flags' argument of the macro is used to determine the direction of
16549 traversal and the set of loops visited. Each loop is guaranteed to be
16550 visited exactly once, regardless of the changes to the loop tree, and
16551 the loops may be removed during the traversal. The newly created loops
16552 are never traversed, if they need to be visited, this must be done
16553 separately after their creation. The `FOR_EACH_LOOP' macro allocates
16554 temporary variables. If the `FOR_EACH_LOOP' loop were ended using
16555 break or goto, they would not be released; `FOR_EACH_LOOP_BREAK' macro
16556 must be used instead.
16558 Each basic block contains the reference to the innermost loop it
16559 belongs to (`loop_father'). For this reason, it is only possible to
16560 have one `struct loops' structure initialized at the same time for each
16561 CFG. The global variable `current_loops' contains the `struct loops'
16562 structure. Many of the loop manipulation functions assume that
16563 dominance information is up-to-date.
16565 The loops are analyzed through `loop_optimizer_init' function. The
16566 argument of this function is a set of flags represented in an integer
16567 bitmask. These flags specify what other properties of the loop
16568 structures should be calculated/enforced and preserved later:
16570 * `LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes
16571 to CFG will be performed in the loop analysis, in particular,
16572 loops with multiple latch edges will not be disambiguated. If a
16573 loop has multiple latches, its latch block is set to NULL. Most of
16574 the loop manipulation functions will not work for loops in this
16575 shape. No other flags that require CFG changes can be passed to
16576 loop_optimizer_init.
16578 * `LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a
16579 way that each loop has only one entry edge, and additionally, the
16580 source block of this entry edge has only one successor. This
16581 creates a natural place where the code can be moved out of the
16582 loop, and ensures that the entry edge of the loop leads from its
16583 immediate super-loop.
16585 * `LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force
16586 the latch block of each loop to have only one successor. This
16587 ensures that the latch of the loop does not belong to any of its
16588 sub-loops, and makes manipulation with the loops significantly
16589 easier. Most of the loop manipulation functions assume that the
16590 loops are in this shape. Note that with this flag, the "normal"
16591 loop without any control flow inside and with one exit consists of
16594 * `LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in
16595 the strongly connected components that are not natural loops (have
16596 more than one entry block) are marked with `BB_IRREDUCIBLE_LOOP'
16597 and `EDGE_IRREDUCIBLE_LOOP' flags. The flag is not set for blocks
16598 and edges that belong to natural loops that are in such an
16599 irreducible region (but it is set for the entry and exit edges of
16600 such a loop, if they lead to/from this region).
16602 * `LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and
16603 updated for each loop. This makes some functions (e.g.,
16604 `get_loop_exit_edges') more efficient. Some functions (e.g.,
16605 `single_exit') can be used only if the lists of exits are recorded.
16607 These properties may also be computed/enforced later, using functions
16608 `create_preheaders', `force_single_succ_latches',
16609 `mark_irreducible_loops' and `record_loop_exits'.
16611 The memory occupied by the loops structures should be freed with
16612 `loop_optimizer_finalize' function.
16614 The CFG manipulation functions in general do not update loop
16615 structures. Specialized versions that additionally do so are provided
16616 for the most common tasks. On GIMPLE, `cleanup_tree_cfg_loop' function
16617 can be used to cleanup CFG while updating the loops structures if
16618 `current_loops' is set.
16621 File: gccint.info, Node: Loop querying, Next: Loop manipulation, Prev: Loop representation, Up: Loop Analysis and Representation
16626 The functions to query the information about loops are declared in
16627 `cfgloop.h'. Some of the information can be taken directly from the
16628 structures. `loop_father' field of each basic block contains the
16629 innermost loop to that the block belongs. The most useful fields of
16630 loop structure (that are kept up-to-date at all times) are:
16632 * `header', `latch': Header and latch basic blocks of the loop.
16634 * `num_nodes': Number of basic blocks in the loop (including the
16635 basic blocks of the sub-loops).
16637 * `depth': The depth of the loop in the loops tree, i.e., the number
16638 of super-loops of the loop.
16640 * `outer', `inner', `next': The super-loop, the first sub-loop, and
16641 the sibling of the loop in the loops tree.
16643 There are other fields in the loop structures, many of them used only
16644 by some of the passes, or not updated during CFG changes; in general,
16645 they should not be accessed directly.
16647 The most important functions to query loop structures are:
16649 * `flow_loops_dump': Dumps the information about loops to a file.
16651 * `verify_loop_structure': Checks consistency of the loop structures.
16653 * `loop_latch_edge': Returns the latch edge of a loop.
16655 * `loop_preheader_edge': If loops have preheaders, returns the
16656 preheader edge of a loop.
16658 * `flow_loop_nested_p': Tests whether loop is a sub-loop of another
16661 * `flow_bb_inside_loop_p': Tests whether a basic block belongs to a
16662 loop (including its sub-loops).
16664 * `find_common_loop': Finds the common super-loop of two loops.
16666 * `superloop_at_depth': Returns the super-loop of a loop with the
16669 * `tree_num_loop_insns', `num_loop_insns': Estimates the number of
16670 insns in the loop, on GIMPLE and on RTL.
16672 * `loop_exit_edge_p': Tests whether edge is an exit from a loop.
16674 * `mark_loop_exit_edges': Marks all exit edges of all loops with
16675 `EDGE_LOOP_EXIT' flag.
16677 * `get_loop_body', `get_loop_body_in_dom_order',
16678 `get_loop_body_in_bfs_order': Enumerates the basic blocks in the
16679 loop in depth-first search order in reversed CFG, ordered by
16680 dominance relation, and breath-first search order, respectively.
16682 * `single_exit': Returns the single exit edge of the loop, or `NULL'
16683 if the loop has more than one exit. You can only use this
16684 function if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used.
16686 * `get_loop_exit_edges': Enumerates the exit edges of a loop.
16688 * `just_once_each_iteration_p': Returns true if the basic block is
16689 executed exactly once during each iteration of a loop (that is, it
16690 does not belong to a sub-loop, and it dominates the latch of the
16694 File: gccint.info, Node: Loop manipulation, Next: LCSSA, Prev: Loop querying, Up: Loop Analysis and Representation
16696 14.3 Loop manipulation
16697 ======================
16699 The loops tree can be manipulated using the following functions:
16701 * `flow_loop_tree_node_add': Adds a node to the tree.
16703 * `flow_loop_tree_node_remove': Removes a node from the tree.
16705 * `add_bb_to_loop': Adds a basic block to a loop.
16707 * `remove_bb_from_loops': Removes a basic block from loops.
16709 Most low-level CFG functions update loops automatically. The following
16710 functions handle some more complicated cases of CFG manipulations:
16712 * `remove_path': Removes an edge and all blocks it dominates.
16714 * `split_loop_exit_edge': Splits exit edge of the loop, ensuring
16715 that PHI node arguments remain in the loop (this ensures that
16716 loop-closed SSA form is preserved). Only useful on GIMPLE.
16718 Finally, there are some higher-level loop transformations implemented.
16719 While some of them are written so that they should work on non-innermost
16720 loops, they are mostly untested in that case, and at the moment, they
16721 are only reliable for the innermost loops:
16723 * `create_iv': Creates a new induction variable. Only works on
16724 GIMPLE. `standard_iv_increment_position' can be used to find a
16725 suitable place for the iv increment.
16727 * `duplicate_loop_to_header_edge',
16728 `tree_duplicate_loop_to_header_edge': These functions (on RTL and
16729 on GIMPLE) duplicate the body of the loop prescribed number of
16730 times on one of the edges entering loop header, thus performing
16731 either loop unrolling or loop peeling. `can_duplicate_loop_p'
16732 (`can_unroll_loop_p' on GIMPLE) must be true for the duplicated
16735 * `loop_version', `tree_ssa_loop_version': These function create a
16736 copy of a loop, and a branch before them that selects one of them
16737 depending on the prescribed condition. This is useful for
16738 optimizations that need to verify some assumptions in runtime (one
16739 of the copies of the loop is usually left unchanged, while the
16740 other one is transformed in some way).
16742 * `tree_unroll_loop': Unrolls the loop, including peeling the extra
16743 iterations to make the number of iterations divisible by unroll
16744 factor, updating the exit condition, and removing the exits that
16745 now cannot be taken. Works only on GIMPLE.
16748 File: gccint.info, Node: LCSSA, Next: Scalar evolutions, Prev: Loop manipulation, Up: Loop Analysis and Representation
16750 14.4 Loop-closed SSA form
16751 =========================
16753 Throughout the loop optimizations on tree level, one extra condition is
16754 enforced on the SSA form: No SSA name is used outside of the loop in
16755 that it is defined. The SSA form satisfying this condition is called
16756 "loop-closed SSA form" - LCSSA. To enforce LCSSA, PHI nodes must be
16757 created at the exits of the loops for the SSA names that are used
16758 outside of them. Only the real operands (not virtual SSA names) are
16759 held in LCSSA, in order to save memory.
16761 There are various benefits of LCSSA:
16763 * Many optimizations (value range analysis, final value replacement)
16764 are interested in the values that are defined in the loop and used
16765 outside of it, i.e., exactly those for that we create new PHI
16768 * In induction variable analysis, it is not necessary to specify the
16769 loop in that the analysis should be performed - the scalar
16770 evolution analysis always returns the results with respect to the
16771 loop in that the SSA name is defined.
16773 * It makes updating of SSA form during loop transformations simpler.
16774 Without LCSSA, operations like loop unrolling may force creation
16775 of PHI nodes arbitrarily far from the loop, while in LCSSA, the
16776 SSA form can be updated locally. However, since we only keep real
16777 operands in LCSSA, we cannot use this advantage (we could have
16778 local updating of real operands, but it is not much more efficient
16779 than to use generic SSA form updating for it as well; the amount
16780 of changes to SSA is the same).
16782 However, it also means LCSSA must be updated. This is usually
16783 straightforward, unless you create a new value in loop and use it
16784 outside, or unless you manipulate loop exit edges (functions are
16785 provided to make these manipulations simple).
16786 `rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA,
16787 and `verify_loop_closed_ssa' to check that the invariant of LCSSA is
16791 File: gccint.info, Node: Scalar evolutions, Next: loop-iv, Prev: LCSSA, Up: Loop Analysis and Representation
16793 14.5 Scalar evolutions
16794 ======================
16796 Scalar evolutions (SCEV) are used to represent results of induction
16797 variable analysis on GIMPLE. They enable us to represent variables with
16798 complicated behavior in a simple and consistent way (we only use it to
16799 express values of polynomial induction variables, but it is possible to
16800 extend it). The interfaces to SCEV analysis are declared in
16801 `tree-scalar-evolution.h'. To use scalar evolutions analysis,
16802 `scev_initialize' must be used. To stop using SCEV, `scev_finalize'
16803 should be used. SCEV analysis caches results in order to save time and
16804 memory. This cache however is made invalid by most of the loop
16805 transformations, including removal of code. If such a transformation
16806 is performed, `scev_reset' must be called to clean the caches.
16808 Given an SSA name, its behavior in loops can be analyzed using the
16809 `analyze_scalar_evolution' function. The returned SCEV however does
16810 not have to be fully analyzed and it may contain references to other
16811 SSA names defined in the loop. To resolve these (potentially
16812 recursive) references, `instantiate_parameters' or `resolve_mixers'
16813 functions must be used. `instantiate_parameters' is useful when you
16814 use the results of SCEV only for some analysis, and when you work with
16815 whole nest of loops at once. It will try replacing all SSA names by
16816 their SCEV in all loops, including the super-loops of the current loop,
16817 thus providing a complete information about the behavior of the
16818 variable in the loop nest. `resolve_mixers' is useful if you work with
16819 only one loop at a time, and if you possibly need to create code based
16820 on the value of the induction variable. It will only resolve the SSA
16821 names defined in the current loop, leaving the SSA names defined
16822 outside unchanged, even if their evolution in the outer loops is known.
16824 The SCEV is a normal tree expression, except for the fact that it may
16825 contain several special tree nodes. One of them is `SCEV_NOT_KNOWN',
16826 used for SSA names whose value cannot be expressed. The other one is
16827 `POLYNOMIAL_CHREC'. Polynomial chrec has three arguments - base, step
16828 and loop (both base and step may contain further polynomial chrecs).
16829 Type of the expression and of base and step must be the same. A
16830 variable has evolution `POLYNOMIAL_CHREC(base, step, loop)' if it is
16831 (in the specified loop) equivalent to `x_1' in the following example
16835 x_1 = phi (base, x_2);
16839 Note that this includes the language restrictions on the operations.
16840 For example, if we compile C code and `x' has signed type, then the
16841 overflow in addition would cause undefined behavior, and we may assume
16842 that this does not happen. Hence, the value with this SCEV cannot
16843 overflow (which restricts the number of iterations of such a loop).
16845 In many cases, one wants to restrict the attention just to affine
16846 induction variables. In this case, the extra expressive power of SCEV
16847 is not useful, and may complicate the optimizations. In this case,
16848 `simple_iv' function may be used to analyze a value - the result is a
16849 loop-invariant base and step.
16852 File: gccint.info, Node: loop-iv, Next: Number of iterations, Prev: Scalar evolutions, Up: Loop Analysis and Representation
16854 14.6 IV analysis on RTL
16855 =======================
16857 The induction variable on RTL is simple and only allows analysis of
16858 affine induction variables, and only in one loop at once. The interface
16859 is declared in `cfgloop.h'. Before analyzing induction variables in a
16860 loop L, `iv_analysis_loop_init' function must be called on L. After
16861 the analysis (possibly calling `iv_analysis_loop_init' for several
16862 loops) is finished, `iv_analysis_done' should be called. The following
16863 functions can be used to access the results of the analysis:
16865 * `iv_analyze': Analyzes a single register used in the given insn.
16866 If no use of the register in this insn is found, the following
16867 insns are scanned, so that this function can be called on the insn
16868 returned by get_condition.
16870 * `iv_analyze_result': Analyzes result of the assignment in the
16873 * `iv_analyze_expr': Analyzes a more complicated expression. All
16874 its operands are analyzed by `iv_analyze', and hence they must be
16875 used in the specified insn or one of the following insns.
16877 The description of the induction variable is provided in `struct
16878 rtx_iv'. In order to handle subregs, the representation is a bit
16879 complicated; if the value of the `extend' field is not `UNKNOWN', the
16880 value of the induction variable in the i-th iteration is
16882 delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
16884 with the following exception: if `first_special' is true, then the
16885 value in the first iteration (when `i' is zero) is `delta + mult *
16886 base'. However, if `extend' is equal to `UNKNOWN', then
16887 `first_special' must be false, `delta' 0, `mult' 1 and the value in the
16890 subreg_{mode} (base + i * step)
16892 The function `get_iv_value' can be used to perform these calculations.
16895 File: gccint.info, Node: Number of iterations, Next: Dependency analysis, Prev: loop-iv, Up: Loop Analysis and Representation
16897 14.7 Number of iterations analysis
16898 ==================================
16900 Both on GIMPLE and on RTL, there are functions available to determine
16901 the number of iterations of a loop, with a similar interface. The
16902 number of iterations of a loop in GCC is defined as the number of
16903 executions of the loop latch. In many cases, it is not possible to
16904 determine the number of iterations unconditionally - the determined
16905 number is correct only if some assumptions are satisfied. The analysis
16906 tries to verify these conditions using the information contained in the
16907 program; if it fails, the conditions are returned together with the
16908 result. The following information and conditions are provided by the
16911 * `assumptions': If this condition is false, the rest of the
16912 information is invalid.
16914 * `noloop_assumptions' on RTL, `may_be_zero' on GIMPLE: If this
16915 condition is true, the loop exits in the first iteration.
16917 * `infinite': If this condition is true, the loop is infinite. This
16918 condition is only available on RTL. On GIMPLE, conditions for
16919 finiteness of the loop are included in `assumptions'.
16921 * `niter_expr' on RTL, `niter' on GIMPLE: The expression that gives
16922 number of iterations. The number of iterations is defined as the
16923 number of executions of the loop latch.
16925 Both on GIMPLE and on RTL, it necessary for the induction variable
16926 analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
16927 On GIMPLE, the results are stored to `struct tree_niter_desc'
16928 structure. Number of iterations before the loop is exited through a
16929 given exit can be determined using `number_of_iterations_exit'
16930 function. On RTL, the results are returned in `struct niter_desc'
16931 structure. The corresponding function is named `check_simple_exit'.
16932 There are also functions that pass through all the exits of a loop and
16933 try to find one with easy to determine number of iterations -
16934 `find_loop_niter' on GIMPLE and `find_simple_exit' on RTL. Finally,
16935 there are functions that provide the same information, but additionally
16936 cache it, so that repeated calls to number of iterations are not so
16937 costly - `number_of_latch_executions' on GIMPLE and
16938 `get_simple_loop_desc' on RTL.
16940 Note that some of these functions may behave slightly differently than
16941 others - some of them return only the expression for the number of
16942 iterations, and fail if there are some assumptions. The function
16943 `number_of_latch_executions' works only for single-exit loops. The
16944 function `number_of_cond_exit_executions' can be used to determine
16945 number of executions of the exit condition of a single-exit loop (i.e.,
16946 the `number_of_latch_executions' increased by one).
16949 File: gccint.info, Node: Dependency analysis, Next: Lambda, Prev: Number of iterations, Up: Loop Analysis and Representation
16951 14.8 Data Dependency Analysis
16952 =============================
16954 The code for the data dependence analysis can be found in
16955 `tree-data-ref.c' and its interface and data structures are described
16956 in `tree-data-ref.h'. The function that computes the data dependences
16957 for all the array and pointer references for a given loop is
16958 `compute_data_dependences_for_loop'. This function is currently used
16959 by the linear loop transform and the vectorization passes. Before
16960 calling this function, one has to allocate two vectors: a first vector
16961 will contain the set of data references that are contained in the
16962 analyzed loop body, and the second vector will contain the dependence
16963 relations between the data references. Thus if the vector of data
16964 references is of size `n', the vector containing the dependence
16965 relations will contain `n*n' elements. However if the analyzed loop
16966 contains side effects, such as calls that potentially can interfere
16967 with the data references in the current analyzed loop, the analysis
16968 stops while scanning the loop body for data references, and inserts a
16969 single `chrec_dont_know' in the dependence relation array.
16971 The data references are discovered in a particular order during the
16972 scanning of the loop body: the loop body is analyzed in execution order,
16973 and the data references of each statement are pushed at the end of the
16974 data reference array. Two data references syntactically occur in the
16975 program in the same order as in the array of data references. This
16976 syntactic order is important in some classical data dependence tests,
16977 and mapping this order to the elements of this array avoids costly
16978 queries to the loop body representation.
16980 Three types of data references are currently handled: ARRAY_REF,
16981 INDIRECT_REF and COMPONENT_REF. The data structure for the data
16982 reference is `data_reference', where `data_reference_p' is a name of a
16983 pointer to the data reference structure. The structure contains the
16984 following elements:
16986 * `base_object_info': Provides information about the base object of
16987 the data reference and its access functions. These access functions
16988 represent the evolution of the data reference in the loop relative
16989 to its base, in keeping with the classical meaning of the data
16990 reference access function for the support of arrays. For example,
16991 for a reference `a.b[i][j]', the base object is `a.b' and the
16992 access functions, one for each array subscript, are: `{i_init, +
16993 i_step}_1, {j_init, +, j_step}_2'.
16995 * `first_location_in_loop': Provides information about the first
16996 location accessed by the data reference in the loop and about the
16997 access function used to represent evolution relative to this
16998 location. This data is used to support pointers, and is not used
16999 for arrays (for which we have base objects). Pointer accesses are
17000 represented as a one-dimensional access that starts from the first
17001 location accessed in the loop. For example:
17005 *((int *)p + i + j) = a[i][j];
17007 The access function of the pointer access is `{0, + 4B}_for2'
17008 relative to `p + i'. The access functions of the array are
17009 `{i_init, + i_step}_for1' and `{j_init, +, j_step}_for2' relative
17012 Usually, the object the pointer refers to is either unknown, or we
17013 can't prove that the access is confined to the boundaries of a
17016 Two data references can be compared only if at least one of these
17017 two representations has all its fields filled for both data
17020 The current strategy for data dependence tests is as follows: If
17021 both `a' and `b' are represented as arrays, compare
17022 `a.base_object' and `b.base_object'; if they are equal, apply
17023 dependence tests (use access functions based on base_objects).
17024 Else if both `a' and `b' are represented as pointers, compare
17025 `a.first_location' and `b.first_location'; if they are equal,
17026 apply dependence tests (use access functions based on first
17027 location). However, if `a' and `b' are represented differently,
17028 only try to prove that the bases are definitely different.
17030 * Aliasing information.
17032 * Alignment information.
17034 The structure describing the relation between two data references is
17035 `data_dependence_relation' and the shorter name for a pointer to such a
17036 structure is `ddr_p'. This structure contains:
17038 * a pointer to each data reference,
17040 * a tree node `are_dependent' that is set to `chrec_known' if the
17041 analysis has proved that there is no dependence between these two
17042 data references, `chrec_dont_know' if the analysis was not able to
17043 determine any useful result and potentially there could exist a
17044 dependence between these data references, and `are_dependent' is
17045 set to `NULL_TREE' if there exist a dependence relation between the
17046 data references, and the description of this dependence relation is
17047 given in the `subscripts', `dir_vects', and `dist_vects' arrays,
17049 * a boolean that determines whether the dependence relation can be
17050 represented by a classical distance vector,
17052 * an array `subscripts' that contains a description of each
17053 subscript of the data references. Given two array accesses a
17054 subscript is the tuple composed of the access functions for a given
17055 dimension. For example, given `A[f1][f2][f3]' and
17056 `B[g1][g2][g3]', there are three subscripts: `(f1, g1), (f2, g2),
17059 * two arrays `dir_vects' and `dist_vects' that contain classical
17060 representations of the data dependences under the form of
17061 direction and distance dependence vectors,
17063 * an array of loops `loop_nest' that contains the loops to which the
17064 distance and direction vectors refer to.
17066 Several functions for pretty printing the information extracted by the
17067 data dependence analysis are available: `dump_ddrs' prints with a
17068 maximum verbosity the details of a data dependence relations array,
17069 `dump_dist_dir_vectors' prints only the classical distance and
17070 direction vectors for a data dependence relations array, and
17071 `dump_data_references' prints the details of the data references
17072 contained in a data reference array.
17075 File: gccint.info, Node: Lambda, Next: Omega, Prev: Dependency analysis, Up: Loop Analysis and Representation
17077 14.9 Linear loop transformations framework
17078 ==========================================
17080 Lambda is a framework that allows transformations of loops using
17081 non-singular matrix based transformations of the iteration space and
17082 loop bounds. This allows compositions of skewing, scaling, interchange,
17083 and reversal transformations. These transformations are often used to
17084 improve cache behavior or remove inner loop dependencies to allow
17085 parallelization and vectorization to take place.
17087 To perform these transformations, Lambda requires that the loopnest be
17088 converted into an internal form that can be matrix transformed easily.
17089 To do this conversion, the function `gcc_loopnest_to_lambda_loopnest'
17090 is provided. If the loop cannot be transformed using lambda, this
17091 function will return NULL.
17093 Once a `lambda_loopnest' is obtained from the conversion function, it
17094 can be transformed by using `lambda_loopnest_transform', which takes a
17095 transformation matrix to apply. Note that it is up to the caller to
17096 verify that the transformation matrix is legal to apply to the loop
17097 (dependence respecting, etc). Lambda simply applies whatever matrix it
17098 is told to provide. It can be extended to make legal matrices out of
17099 any non-singular matrix, but this is not currently implemented.
17100 Legality of a matrix for a given loopnest can be verified using
17101 `lambda_transform_legal_p'.
17103 Given a transformed loopnest, conversion back into gcc IR is done by
17104 `lambda_loopnest_to_gcc_loopnest'. This function will modify the loops
17105 so that they match the transformed loopnest.
17108 File: gccint.info, Node: Omega, Prev: Lambda, Up: Loop Analysis and Representation
17110 14.10 Omega a solver for linear programming problems
17111 ====================================================
17113 The data dependence analysis contains several solvers triggered
17114 sequentially from the less complex ones to the more sophisticated. For
17115 ensuring the consistency of the results of these solvers, a data
17116 dependence check pass has been implemented based on two different
17117 solvers. The second method that has been integrated to GCC is based on
17118 the Omega dependence solver, written in the 1990's by William Pugh and
17119 David Wonnacott. Data dependence tests can be formulated using a
17120 subset of the Presburger arithmetics that can be translated to linear
17121 constraint systems. These linear constraint systems can then be solved
17122 using the Omega solver.
17124 The Omega solver is using Fourier-Motzkin's algorithm for variable
17125 elimination: a linear constraint system containing `n' variables is
17126 reduced to a linear constraint system with `n-1' variables. The Omega
17127 solver can also be used for solving other problems that can be
17128 expressed under the form of a system of linear equalities and
17129 inequalities. The Omega solver is known to have an exponential worst
17130 case, also known under the name of "omega nightmare" in the literature,
17131 but in practice, the omega test is known to be efficient for the common
17132 data dependence tests.
17134 The interface used by the Omega solver for describing the linear
17135 programming problems is described in `omega.h', and the solver is
17136 `omega_solve_problem'.
17139 File: gccint.info, Node: Control Flow, Next: Loop Analysis and Representation, Prev: RTL, Up: Top
17141 15 Control Flow Graph
17142 *********************
17144 A control flow graph (CFG) is a data structure built on top of the
17145 intermediate code representation (the RTL or `tree' instruction stream)
17146 abstracting the control flow behavior of a function that is being
17147 compiled. The CFG is a directed graph where the vertices represent
17148 basic blocks and edges represent possible transfer of control flow from
17149 one basic block to another. The data structures used to represent the
17150 control flow graph are defined in `basic-block.h'.
17154 * Basic Blocks:: The definition and representation of basic blocks.
17155 * Edges:: Types of edges and their representation.
17156 * Profile information:: Representation of frequencies and probabilities.
17157 * Maintaining the CFG:: Keeping the control flow graph and up to date.
17158 * Liveness information:: Using and maintaining liveness information.
17161 File: gccint.info, Node: Basic Blocks, Next: Edges, Up: Control Flow
17166 A basic block is a straight-line sequence of code with only one entry
17167 point and only one exit. In GCC, basic blocks are represented using
17168 the `basic_block' data type.
17170 Two pointer members of the `basic_block' structure are the pointers
17171 `next_bb' and `prev_bb'. These are used to keep doubly linked chain of
17172 basic blocks in the same order as the underlying instruction stream.
17173 The chain of basic blocks is updated transparently by the provided API
17174 for manipulating the CFG. The macro `FOR_EACH_BB' can be used to visit
17175 all the basic blocks in lexicographical order. Dominator traversals
17176 are also possible using `walk_dominator_tree'. Given two basic blocks
17177 A and B, block A dominates block B if A is _always_ executed before B.
17179 The `BASIC_BLOCK' array contains all basic blocks in an unspecified
17180 order. Each `basic_block' structure has a field that holds a unique
17181 integer identifier `index' that is the index of the block in the
17182 `BASIC_BLOCK' array. The total number of basic blocks in the function
17183 is `n_basic_blocks'. Both the basic block indices and the total number
17184 of basic blocks may vary during the compilation process, as passes
17185 reorder, create, duplicate, and destroy basic blocks. The index for
17186 any block should never be greater than `last_basic_block'.
17188 Special basic blocks represent possible entry and exit points of a
17189 function. These blocks are called `ENTRY_BLOCK_PTR' and
17190 `EXIT_BLOCK_PTR'. These blocks do not contain any code, and are not
17191 elements of the `BASIC_BLOCK' array. Therefore they have been assigned
17192 unique, negative index numbers.
17194 Each `basic_block' also contains pointers to the first instruction
17195 (the "head") and the last instruction (the "tail") or "end" of the
17196 instruction stream contained in a basic block. In fact, since the
17197 `basic_block' data type is used to represent blocks in both major
17198 intermediate representations of GCC (`tree' and RTL), there are
17199 pointers to the head and end of a basic block for both representations.
17201 For RTL, these pointers are `rtx head, end'. In the RTL function
17202 representation, the head pointer always points either to a
17203 `NOTE_INSN_BASIC_BLOCK' or to a `CODE_LABEL', if present. In the RTL
17204 representation of a function, the instruction stream contains not only
17205 the "real" instructions, but also "notes". Any function that moves or
17206 duplicates the basic blocks needs to take care of updating of these
17207 notes. Many of these notes expect that the instruction stream consists
17208 of linear regions, making such updates difficult. The
17209 `NOTE_INSN_BASIC_BLOCK' note is the only kind of note that may appear
17210 in the instruction stream contained in a basic block. The instruction
17211 stream of a basic block always follows a `NOTE_INSN_BASIC_BLOCK', but
17212 zero or more `CODE_LABEL' nodes can precede the block note. A basic
17213 block ends by control flow instruction or last instruction before
17214 following `CODE_LABEL' or `NOTE_INSN_BASIC_BLOCK'. A `CODE_LABEL'
17215 cannot appear in the instruction stream of a basic block.
17217 In addition to notes, the jump table vectors are also represented as
17218 "pseudo-instructions" inside the insn stream. These vectors never
17219 appear in the basic block and should always be placed just after the
17220 table jump instructions referencing them. After removing the
17221 table-jump it is often difficult to eliminate the code computing the
17222 address and referencing the vector, so cleaning up these vectors is
17223 postponed until after liveness analysis. Thus the jump table vectors
17224 may appear in the insn stream unreferenced and without any purpose.
17225 Before any edge is made "fall-thru", the existence of such construct in
17226 the way needs to be checked by calling `can_fallthru' function.
17228 For the `tree' representation, the head and end of the basic block are
17229 being pointed to by the `stmt_list' field, but this special `tree'
17230 should never be referenced directly. Instead, at the tree level
17231 abstract containers and iterators are used to access statements and
17232 expressions in basic blocks. These iterators are called "block
17233 statement iterators" (BSIs). Grep for `^bsi' in the various `tree-*'
17234 files. The following snippet will pretty-print all the statements of
17235 the program in the GIMPLE representation.
17239 block_stmt_iterator si;
17241 for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
17243 tree stmt = bsi_stmt (si);
17244 print_generic_stmt (stderr, stmt, 0);
17249 File: gccint.info, Node: Edges, Next: Profile information, Prev: Basic Blocks, Up: Control Flow
17254 Edges represent possible control flow transfers from the end of some
17255 basic block A to the head of another basic block B. We say that A is a
17256 predecessor of B, and B is a successor of A. Edges are represented in
17257 GCC with the `edge' data type. Each `edge' acts as a link between two
17258 basic blocks: the `src' member of an edge points to the predecessor
17259 basic block of the `dest' basic block. The members `preds' and `succs'
17260 of the `basic_block' data type point to type-safe vectors of edges to
17261 the predecessors and successors of the block.
17263 When walking the edges in an edge vector, "edge iterators" should be
17264 used. Edge iterators are constructed using the `edge_iterator' data
17265 structure and several methods are available to operate on them:
17268 This function initializes an `edge_iterator' that points to the
17269 first edge in a vector of edges.
17272 This function initializes an `edge_iterator' that points to the
17273 last edge in a vector of edges.
17276 This predicate is `true' if an `edge_iterator' represents the last
17277 edge in an edge vector.
17279 `ei_one_before_end_p'
17280 This predicate is `true' if an `edge_iterator' represents the
17281 second last edge in an edge vector.
17284 This function takes a pointer to an `edge_iterator' and makes it
17285 point to the next edge in the sequence.
17288 This function takes a pointer to an `edge_iterator' and makes it
17289 point to the previous edge in the sequence.
17292 This function returns the `edge' currently pointed to by an
17296 This function returns the `edge' currently pointed to by an
17297 `edge_iterator', but returns `NULL' if the iterator is pointing at
17298 the end of the sequence. This function has been provided for
17299 existing code makes the assumption that a `NULL' edge indicates
17300 the end of the sequence.
17303 The convenience macro `FOR_EACH_EDGE' can be used to visit all of the
17304 edges in a sequence of predecessor or successor edges. It must not be
17305 used when an element might be removed during the traversal, otherwise
17306 elements will be missed. Here is an example of how to use the macro:
17311 FOR_EACH_EDGE (e, ei, bb->succs)
17313 if (e->flags & EDGE_FALLTHRU)
17317 There are various reasons why control flow may transfer from one block
17318 to another. One possibility is that some instruction, for example a
17319 `CODE_LABEL', in a linearized instruction stream just always starts a
17320 new basic block. In this case a "fall-thru" edge links the basic block
17321 to the first following basic block. But there are several other
17322 reasons why edges may be created. The `flags' field of the `edge' data
17323 type is used to store information about the type of edge we are dealing
17324 with. Each edge is of one of the following types:
17327 No type flags are set for edges corresponding to jump instructions.
17328 These edges are used for unconditional or conditional jumps and in
17329 RTL also for table jumps. They are the easiest to manipulate as
17330 they may be freely redirected when the flow graph is not in SSA
17334 Fall-thru edges are present in case where the basic block may
17335 continue execution to the following one without branching. These
17336 edges have the `EDGE_FALLTHRU' flag set. Unlike other types of
17337 edges, these edges must come into the basic block immediately
17338 following in the instruction stream. The function
17339 `force_nonfallthru' is available to insert an unconditional jump
17340 in the case that redirection is needed. Note that this may
17341 require creation of a new basic block.
17343 _exception handling_
17344 Exception handling edges represent possible control transfers from
17345 a trapping instruction to an exception handler. The definition of
17346 "trapping" varies. In C++, only function calls can throw, but for
17347 Java, exceptions like division by zero or segmentation fault are
17348 defined and thus each instruction possibly throwing this kind of
17349 exception needs to be handled as control flow instruction.
17350 Exception edges have the `EDGE_ABNORMAL' and `EDGE_EH' flags set.
17352 When updating the instruction stream it is easy to change possibly
17353 trapping instruction to non-trapping, by simply removing the
17354 exception edge. The opposite conversion is difficult, but should
17355 not happen anyway. The edges can be eliminated via
17356 `purge_dead_edges' call.
17358 In the RTL representation, the destination of an exception edge is
17359 specified by `REG_EH_REGION' note attached to the insn. In case
17360 of a trapping call the `EDGE_ABNORMAL_CALL' flag is set too. In
17361 the `tree' representation, this extra flag is not set.
17363 In the RTL representation, the predicate `may_trap_p' may be used
17364 to check whether instruction still may trap or not. For the tree
17365 representation, the `tree_could_trap_p' predicate is available,
17366 but this predicate only checks for possible memory traps, as in
17367 dereferencing an invalid pointer location.
17370 Sibling calls or tail calls terminate the function in a
17371 non-standard way and thus an edge to the exit must be present.
17372 `EDGE_SIBCALL' and `EDGE_ABNORMAL' are set in such case. These
17373 edges only exist in the RTL representation.
17376 Computed jumps contain edges to all labels in the function
17377 referenced from the code. All those edges have `EDGE_ABNORMAL'
17378 flag set. The edges used to represent computed jumps often cause
17379 compile time performance problems, since functions consisting of
17380 many taken labels and many computed jumps may have _very_ dense
17381 flow graphs, so these edges need to be handled with special care.
17382 During the earlier stages of the compilation process, GCC tries to
17383 avoid such dense flow graphs by factoring computed jumps. For
17384 example, given the following series of jumps,
17395 factoring the computed jumps results in the following code sequence
17396 which has a much simpler flow graph:
17410 However, the classic problem with this transformation is that it
17411 has a runtime cost in there resulting code: An extra jump.
17412 Therefore, the computed jumps are un-factored in the later passes
17413 of the compiler. Be aware of that when you work on passes in that
17414 area. There have been numerous examples already where the compile
17415 time for code with unfactored computed jumps caused some serious
17418 _nonlocal goto handlers_
17419 GCC allows nested functions to return into caller using a `goto'
17420 to a label passed to as an argument to the callee. The labels
17421 passed to nested functions contain special code to cleanup after
17422 function call. Such sections of code are referred to as "nonlocal
17423 goto receivers". If a function contains such nonlocal goto
17424 receivers, an edge from the call to the label is created with the
17425 `EDGE_ABNORMAL' and `EDGE_ABNORMAL_CALL' flags set.
17427 _function entry points_
17428 By definition, execution of function starts at basic block 0, so
17429 there is always an edge from the `ENTRY_BLOCK_PTR' to basic block
17430 0. There is no `tree' representation for alternate entry points at
17431 this moment. In RTL, alternate entry points are specified by
17432 `CODE_LABEL' with `LABEL_ALTERNATE_NAME' defined. This feature is
17433 currently used for multiple entry point prologues and is limited
17434 to post-reload passes only. This can be used by back-ends to emit
17435 alternate prologues for functions called from different contexts.
17436 In future full support for multiple entry functions defined by
17437 Fortran 90 needs to be implemented.
17440 In the pre-reload representation a function terminates after the
17441 last instruction in the insn chain and no explicit return
17442 instructions are used. This corresponds to the fall-thru edge
17443 into exit block. After reload, optimal RTL epilogues are used
17444 that use explicit (conditional) return instructions that are
17445 represented by edges with no flags set.
17449 File: gccint.info, Node: Profile information, Next: Maintaining the CFG, Prev: Edges, Up: Control Flow
17451 15.3 Profile information
17452 ========================
17454 In many cases a compiler must make a choice whether to trade speed in
17455 one part of code for speed in another, or to trade code size for code
17456 speed. In such cases it is useful to know information about how often
17457 some given block will be executed. That is the purpose for maintaining
17458 profile within the flow graph. GCC can handle profile information
17459 obtained through "profile feedback", but it can also estimate branch
17460 probabilities based on statics and heuristics.
17462 The feedback based profile is produced by compiling the program with
17463 instrumentation, executing it on a train run and reading the numbers of
17464 executions of basic blocks and edges back to the compiler while
17465 re-compiling the program to produce the final executable. This method
17466 provides very accurate information about where a program spends most of
17467 its time on the train run. Whether it matches the average run of
17468 course depends on the choice of train data set, but several studies
17469 have shown that the behavior of a program usually changes just
17470 marginally over different data sets.
17472 When profile feedback is not available, the compiler may be asked to
17473 attempt to predict the behavior of each branch in the program using a
17474 set of heuristics (see `predict.def' for details) and compute estimated
17475 frequencies of each basic block by propagating the probabilities over
17478 Each `basic_block' contains two integer fields to represent profile
17479 information: `frequency' and `count'. The `frequency' is an estimation
17480 how often is basic block executed within a function. It is represented
17481 as an integer scaled in the range from 0 to `BB_FREQ_BASE'. The most
17482 frequently executed basic block in function is initially set to
17483 `BB_FREQ_BASE' and the rest of frequencies are scaled accordingly.
17484 During optimization, the frequency of the most frequent basic block can
17485 both decrease (for instance by loop unrolling) or grow (for instance by
17486 cross-jumping optimization), so scaling sometimes has to be performed
17489 The `count' contains hard-counted numbers of execution measured during
17490 training runs and is nonzero only when profile feedback is available.
17491 This value is represented as the host's widest integer (typically a 64
17492 bit integer) of the special type `gcov_type'.
17494 Most optimization passes can use only the frequency information of a
17495 basic block, but a few passes may want to know hard execution counts.
17496 The frequencies should always match the counts after scaling, however
17497 during updating of the profile information numerical error may
17498 accumulate into quite large errors.
17500 Each edge also contains a branch probability field: an integer in the
17501 range from 0 to `REG_BR_PROB_BASE'. It represents probability of
17502 passing control from the end of the `src' basic block to the `dest'
17503 basic block, i.e. the probability that control will flow along this
17504 edge. The `EDGE_FREQUENCY' macro is available to compute how
17505 frequently a given edge is taken. There is a `count' field for each
17506 edge as well, representing same information as for a basic block.
17508 The basic block frequencies are not represented in the instruction
17509 stream, but in the RTL representation the edge frequencies are
17510 represented for conditional jumps (via the `REG_BR_PROB' macro) since
17511 they are used when instructions are output to the assembly file and the
17512 flow graph is no longer maintained.
17514 The probability that control flow arrives via a given edge to its
17515 destination basic block is called "reverse probability" and is not
17516 directly represented, but it may be easily computed from frequencies of
17519 Updating profile information is a delicate task that can unfortunately
17520 not be easily integrated with the CFG manipulation API. Many of the
17521 functions and hooks to modify the CFG, such as
17522 `redirect_edge_and_branch', do not have enough information to easily
17523 update the profile, so updating it is in the majority of cases left up
17524 to the caller. It is difficult to uncover bugs in the profile updating
17525 code, because they manifest themselves only by producing worse code,
17526 and checking profile consistency is not possible because of numeric
17527 error accumulation. Hence special attention needs to be given to this
17528 issue in each pass that modifies the CFG.
17530 It is important to point out that `REG_BR_PROB_BASE' and
17531 `BB_FREQ_BASE' are both set low enough to be possible to compute second
17532 power of any frequency or probability in the flow graph, it is not
17533 possible to even square the `count' field, as modern CPUs are fast
17534 enough to execute $2^32$ operations quickly.
17537 File: gccint.info, Node: Maintaining the CFG, Next: Liveness information, Prev: Profile information, Up: Control Flow
17539 15.4 Maintaining the CFG
17540 ========================
17542 An important task of each compiler pass is to keep both the control
17543 flow graph and all profile information up-to-date. Reconstruction of
17544 the control flow graph after each pass is not an option, since it may be
17545 very expensive and lost profile information cannot be reconstructed at
17548 GCC has two major intermediate representations, and both use the
17549 `basic_block' and `edge' data types to represent control flow. Both
17550 representations share as much of the CFG maintenance code as possible.
17551 For each representation, a set of "hooks" is defined so that each
17552 representation can provide its own implementation of CFG manipulation
17553 routines when necessary. These hooks are defined in `cfghooks.h'.
17554 There are hooks for almost all common CFG manipulations, including
17555 block splitting and merging, edge redirection and creating and deleting
17556 basic blocks. These hooks should provide everything you need to
17557 maintain and manipulate the CFG in both the RTL and `tree'
17560 At the moment, the basic block boundaries are maintained transparently
17561 when modifying instructions, so there rarely is a need to move them
17562 manually (such as in case someone wants to output instruction outside
17563 basic block explicitly). Often the CFG may be better viewed as
17564 integral part of instruction chain, than structure built on the top of
17565 it. However, in principle the control flow graph for the `tree'
17566 representation is _not_ an integral part of the representation, in that
17567 a function tree may be expanded without first building a flow graph
17568 for the `tree' representation at all. This happens when compiling
17569 without any `tree' optimization enabled. When the `tree' optimizations
17570 are enabled and the instruction stream is rewritten in SSA form, the
17571 CFG is very tightly coupled with the instruction stream. In
17572 particular, statement insertion and removal has to be done with care.
17573 In fact, the whole `tree' representation can not be easily used or
17574 maintained without proper maintenance of the CFG simultaneously.
17576 In the RTL representation, each instruction has a `BLOCK_FOR_INSN'
17577 value that represents pointer to the basic block that contains the
17578 instruction. In the `tree' representation, the function `bb_for_stmt'
17579 returns a pointer to the basic block containing the queried statement.
17581 When changes need to be applied to a function in its `tree'
17582 representation, "block statement iterators" should be used. These
17583 iterators provide an integrated abstraction of the flow graph and the
17584 instruction stream. Block statement iterators are constructed using
17585 the `block_stmt_iterator' data structure and several modifier are
17586 available, including the following:
17589 This function initializes a `block_stmt_iterator' that points to
17590 the first non-empty statement in a basic block.
17593 This function initializes a `block_stmt_iterator' that points to
17594 the last statement in a basic block.
17597 This predicate is `true' if a `block_stmt_iterator' represents the
17598 end of a basic block.
17601 This function takes a `block_stmt_iterator' and makes it point to
17605 This function takes a `block_stmt_iterator' and makes it point to
17609 This function inserts a statement after the `block_stmt_iterator'
17610 passed in. The final parameter determines whether the statement
17611 iterator is updated to point to the newly inserted statement, or
17612 left pointing to the original statement.
17614 `bsi_insert_before'
17615 This function inserts a statement before the `block_stmt_iterator'
17616 passed in. The final parameter determines whether the statement
17617 iterator is updated to point to the newly inserted statement, or
17618 left pointing to the original statement.
17621 This function removes the `block_stmt_iterator' passed in and
17622 rechains the remaining statements in a basic block, if any.
17624 In the RTL representation, the macros `BB_HEAD' and `BB_END' may be
17625 used to get the head and end `rtx' of a basic block. No abstract
17626 iterators are defined for traversing the insn chain, but you can just
17627 use `NEXT_INSN' and `PREV_INSN' instead. *Note Insns::.
17629 Usually a code manipulating pass simplifies the instruction stream and
17630 the flow of control, possibly eliminating some edges. This may for
17631 example happen when a conditional jump is replaced with an
17632 unconditional jump, but also when simplifying possibly trapping
17633 instruction to non-trapping while compiling Java. Updating of edges is
17634 not transparent and each optimization pass is required to do so
17635 manually. However only few cases occur in practice. The pass may call
17636 `purge_dead_edges' on a given basic block to remove superfluous edges,
17639 Another common scenario is redirection of branch instructions, but
17640 this is best modeled as redirection of edges in the control flow graph
17641 and thus use of `redirect_edge_and_branch' is preferred over more low
17642 level functions, such as `redirect_jump' that operate on RTL chain
17643 only. The CFG hooks defined in `cfghooks.h' should provide the
17644 complete API required for manipulating and maintaining the CFG.
17646 It is also possible that a pass has to insert control flow instruction
17647 into the middle of a basic block, thus creating an entry point in the
17648 middle of the basic block, which is impossible by definition: The block
17649 must be split to make sure it only has one entry point, i.e. the head
17650 of the basic block. The CFG hook `split_block' may be used when an
17651 instruction in the middle of a basic block has to become the target of
17652 a jump or branch instruction.
17654 For a global optimizer, a common operation is to split edges in the
17655 flow graph and insert instructions on them. In the RTL representation,
17656 this can be easily done using the `insert_insn_on_edge' function that
17657 emits an instruction "on the edge", caching it for a later
17658 `commit_edge_insertions' call that will take care of moving the
17659 inserted instructions off the edge into the instruction stream
17660 contained in a basic block. This includes the creation of new basic
17661 blocks where needed. In the `tree' representation, the equivalent
17662 functions are `bsi_insert_on_edge' which inserts a block statement
17663 iterator on an edge, and `bsi_commit_edge_inserts' which flushes the
17664 instruction to actual instruction stream.
17666 While debugging the optimization pass, a `verify_flow_info' function
17667 may be useful to find bugs in the control flow graph updating code.
17669 Note that at present, the representation of control flow in the `tree'
17670 representation is discarded before expanding to RTL. Long term the CFG
17671 should be maintained and "expanded" to the RTL representation along
17672 with the function `tree' itself.
17675 File: gccint.info, Node: Liveness information, Prev: Maintaining the CFG, Up: Control Flow
17677 15.5 Liveness information
17678 =========================
17680 Liveness information is useful to determine whether some register is
17681 "live" at given point of program, i.e. that it contains a value that
17682 may be used at a later point in the program. This information is used,
17683 for instance, during register allocation, as the pseudo registers only
17684 need to be assigned to a unique hard register or to a stack slot if
17685 they are live. The hard registers and stack slots may be freely reused
17686 for other values when a register is dead.
17688 Liveness information is available in the back end starting with
17689 `pass_df_initialize' and ending with `pass_df_finish'. Three flavors
17690 of live analysis are available: With `LR', it is possible to determine
17691 at any point `P' in the function if the register may be used on some
17692 path from `P' to the end of the function. With `UR', it is possible to
17693 determine if there is a path from the beginning of the function to `P'
17694 that defines the variable. `LIVE' is the intersection of the `LR' and
17695 `UR' and a variable is live at `P' if there is both an assignment that
17696 reaches it from the beginning of the function and a use that can be
17697 reached on some path from `P' to the end of the function.
17699 In general `LIVE' is the most useful of the three. The macros
17700 `DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information. The
17701 macros take a basic block number and return a bitmap that is indexed by
17702 the register number. This information is only guaranteed to be up to
17703 date after calls are made to `df_analyze'. See the file `df-core.c'
17704 for details on using the dataflow.
17706 The liveness information is stored partly in the RTL instruction stream
17707 and partly in the flow graph. Local information is stored in the
17708 instruction stream: Each instruction may contain `REG_DEAD' notes
17709 representing that the value of a given register is no longer needed, or
17710 `REG_UNUSED' notes representing that the value computed by the
17711 instruction is never used. The second is useful for instructions
17712 computing multiple values at once.
17715 File: gccint.info, Node: Machine Desc, Next: Target Macros, Prev: Loop Analysis and Representation, Up: Top
17717 16 Machine Descriptions
17718 ***********************
17720 A machine description has two parts: a file of instruction patterns
17721 (`.md' file) and a C header file of macro definitions.
17723 The `.md' file for a target machine contains a pattern for each
17724 instruction that the target machine supports (or at least each
17725 instruction that is worth telling the compiler about). It may also
17726 contain comments. A semicolon causes the rest of the line to be a
17727 comment, unless the semicolon is inside a quoted string.
17729 See the next chapter for information on the C header file.
17733 * Overview:: How the machine description is used.
17734 * Patterns:: How to write instruction patterns.
17735 * Example:: An explained example of a `define_insn' pattern.
17736 * RTL Template:: The RTL template defines what insns match a pattern.
17737 * Output Template:: The output template says how to make assembler code
17739 * Output Statement:: For more generality, write C code to output
17740 the assembler code.
17741 * Predicates:: Controlling what kinds of operands can be used
17743 * Constraints:: Fine-tuning operand selection.
17744 * Standard Names:: Names mark patterns to use for code generation.
17745 * Pattern Ordering:: When the order of patterns makes a difference.
17746 * Dependent Patterns:: Having one pattern may make you need another.
17747 * Jump Patterns:: Special considerations for patterns for jump insns.
17748 * Looping Patterns:: How to define patterns for special looping insns.
17749 * Insn Canonicalizations::Canonicalization of Instructions
17750 * Expander Definitions::Generating a sequence of several RTL insns
17751 for a standard operation.
17752 * Insn Splitting:: Splitting Instructions into Multiple Instructions.
17753 * Including Patterns:: Including Patterns in Machine Descriptions.
17754 * Peephole Definitions::Defining machine-specific peephole optimizations.
17755 * Insn Attributes:: Specifying the value of attributes for generated insns.
17756 * Conditional Execution::Generating `define_insn' patterns for
17758 * Constant Definitions::Defining symbolic constants that can be used in the
17760 * Iterators:: Using iterators to generate patterns from a template.
17763 File: gccint.info, Node: Overview, Next: Patterns, Up: Machine Desc
17765 16.1 Overview of How the Machine Description is Used
17766 ====================================================
17768 There are three main conversions that happen in the compiler:
17770 1. The front end reads the source code and builds a parse tree.
17772 2. The parse tree is used to generate an RTL insn list based on named
17773 instruction patterns.
17775 3. The insn list is matched against the RTL templates to produce
17779 For the generate pass, only the names of the insns matter, from either
17780 a named `define_insn' or a `define_expand'. The compiler will choose
17781 the pattern with the right name and apply the operands according to the
17782 documentation later in this chapter, without regard for the RTL
17783 template or operand constraints. Note that the names the compiler looks
17784 for are hard-coded in the compiler--it will ignore unnamed patterns and
17785 patterns with names it doesn't know about, but if you don't provide a
17786 named pattern it needs, it will abort.
17788 If a `define_insn' is used, the template given is inserted into the
17789 insn list. If a `define_expand' is used, one of three things happens,
17790 based on the condition logic. The condition logic may manually create
17791 new insns for the insn list, say via `emit_insn()', and invoke `DONE'.
17792 For certain named patterns, it may invoke `FAIL' to tell the compiler
17793 to use an alternate way of performing that task. If it invokes neither
17794 `DONE' nor `FAIL', the template given in the pattern is inserted, as if
17795 the `define_expand' were a `define_insn'.
17797 Once the insn list is generated, various optimization passes convert,
17798 replace, and rearrange the insns in the insn list. This is where the
17799 `define_split' and `define_peephole' patterns get used, for example.
17801 Finally, the insn list's RTL is matched up with the RTL templates in
17802 the `define_insn' patterns, and those patterns are used to emit the
17803 final assembly code. For this purpose, each named `define_insn' acts
17804 like it's unnamed, since the names are ignored.
17807 File: gccint.info, Node: Patterns, Next: Example, Prev: Overview, Up: Machine Desc
17809 16.2 Everything about Instruction Patterns
17810 ==========================================
17812 Each instruction pattern contains an incomplete RTL expression, with
17813 pieces to be filled in later, operand constraints that restrict how the
17814 pieces can be filled in, and an output pattern or C code to generate
17815 the assembler output, all wrapped up in a `define_insn' expression.
17817 A `define_insn' is an RTL expression containing four or five operands:
17819 1. An optional name. The presence of a name indicate that this
17820 instruction pattern can perform a certain standard job for the
17821 RTL-generation pass of the compiler. This pass knows certain
17822 names and will use the instruction patterns with those names, if
17823 the names are defined in the machine description.
17825 The absence of a name is indicated by writing an empty string
17826 where the name should go. Nameless instruction patterns are never
17827 used for generating RTL code, but they may permit several simpler
17828 insns to be combined later on.
17830 Names that are not thus known and used in RTL-generation have no
17831 effect; they are equivalent to no name at all.
17833 For the purpose of debugging the compiler, you may also specify a
17834 name beginning with the `*' character. Such a name is used only
17835 for identifying the instruction in RTL dumps; it is entirely
17836 equivalent to having a nameless pattern for all other purposes.
17838 2. The "RTL template" (*note RTL Template::) is a vector of incomplete
17839 RTL expressions which show what the instruction should look like.
17840 It is incomplete because it may contain `match_operand',
17841 `match_operator', and `match_dup' expressions that stand for
17842 operands of the instruction.
17844 If the vector has only one element, that element is the template
17845 for the instruction pattern. If the vector has multiple elements,
17846 then the instruction pattern is a `parallel' expression containing
17847 the elements described.
17849 3. A condition. This is a string which contains a C expression that
17850 is the final test to decide whether an insn body matches this
17853 For a named pattern, the condition (if present) may not depend on
17854 the data in the insn being matched, but only the
17855 target-machine-type flags. The compiler needs to test these
17856 conditions during initialization in order to learn exactly which
17857 named instructions are available in a particular run.
17859 For nameless patterns, the condition is applied only when matching
17860 an individual insn, and only after the insn has matched the
17861 pattern's recognition template. The insn's operands may be found
17862 in the vector `operands'. For an insn where the condition has
17863 once matched, it can't be used to control register allocation, for
17864 example by excluding certain hard registers or hard register
17867 4. The "output template": a string that says how to output matching
17868 insns as assembler code. `%' in this string specifies where to
17869 substitute the value of an operand. *Note Output Template::.
17871 When simple substitution isn't general enough, you can specify a
17872 piece of C code to compute the output. *Note Output Statement::.
17874 5. Optionally, a vector containing the values of attributes for insns
17875 matching this pattern. *Note Insn Attributes::.
17878 File: gccint.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc
17880 16.3 Example of `define_insn'
17881 =============================
17883 Here is an actual example of an instruction pattern, for the
17886 (define_insn "tstsi"
17888 (match_operand:SI 0 "general_operand" "rm"))]
17892 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
17893 return \"tstl %0\";
17894 return \"cmpl #0,%0\";
17897 This can also be written using braced strings:
17899 (define_insn "tstsi"
17901 (match_operand:SI 0 "general_operand" "rm"))]
17904 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
17906 return "cmpl #0,%0";
17909 This is an instruction that sets the condition codes based on the
17910 value of a general operand. It has no condition, so any insn whose RTL
17911 description has the form shown may be handled according to this
17912 pattern. The name `tstsi' means "test a `SImode' value" and tells the
17913 RTL generation pass that, when it is necessary to test such a value, an
17914 insn to do so can be constructed using this pattern.
17916 The output control string is a piece of C code which chooses which
17917 output template to return based on the kind of operand and the specific
17918 type of CPU for which code is being generated.
17920 `"rm"' is an operand constraint. Its meaning is explained below.
17923 File: gccint.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc
17928 The RTL template is used to define which insns match the particular
17929 pattern and how to find their operands. For named patterns, the RTL
17930 template also says how to construct an insn from specified operands.
17932 Construction involves substituting specified operands into a copy of
17933 the template. Matching involves determining the values that serve as
17934 the operands in the insn being matched. Both of these activities are
17935 controlled by special expression types that direct matching and
17936 substitution of the operands.
17938 `(match_operand:M N PREDICATE CONSTRAINT)'
17939 This expression is a placeholder for operand number N of the insn.
17940 When constructing an insn, operand number N will be substituted
17941 at this point. When matching an insn, whatever appears at this
17942 position in the insn will be taken as operand number N; but it
17943 must satisfy PREDICATE or this instruction pattern will not match
17946 Operand numbers must be chosen consecutively counting from zero in
17947 each instruction pattern. There may be only one `match_operand'
17948 expression in the pattern for each operand number. Usually
17949 operands are numbered in the order of appearance in `match_operand'
17950 expressions. In the case of a `define_expand', any operand numbers
17951 used only in `match_dup' expressions have higher values than all
17952 other operand numbers.
17954 PREDICATE is a string that is the name of a function that accepts
17955 two arguments, an expression and a machine mode. *Note
17956 Predicates::. During matching, the function will be called with
17957 the putative operand as the expression and M as the mode argument
17958 (if M is not specified, `VOIDmode' will be used, which normally
17959 causes PREDICATE to accept any mode). If it returns zero, this
17960 instruction pattern fails to match. PREDICATE may be an empty
17961 string; then it means no test is to be done on the operand, so
17962 anything which occurs in this position is valid.
17964 Most of the time, PREDICATE will reject modes other than M--but
17965 not always. For example, the predicate `address_operand' uses M
17966 as the mode of memory ref that the address should be valid for.
17967 Many predicates accept `const_int' nodes even though their mode is
17970 CONSTRAINT controls reloading and the choice of the best register
17971 class to use for a value, as explained later (*note Constraints::).
17972 If the constraint would be an empty string, it can be omitted.
17974 People are often unclear on the difference between the constraint
17975 and the predicate. The predicate helps decide whether a given
17976 insn matches the pattern. The constraint plays no role in this
17977 decision; instead, it controls various decisions in the case of an
17978 insn which does match.
17980 `(match_scratch:M N CONSTRAINT)'
17981 This expression is also a placeholder for operand number N and
17982 indicates that operand must be a `scratch' or `reg' expression.
17984 When matching patterns, this is equivalent to
17986 (match_operand:M N "scratch_operand" PRED)
17988 but, when generating RTL, it produces a (`scratch':M) expression.
17990 If the last few expressions in a `parallel' are `clobber'
17991 expressions whose operands are either a hard register or
17992 `match_scratch', the combiner can add or delete them when
17993 necessary. *Note Side Effects::.
17996 This expression is also a placeholder for operand number N. It is
17997 used when the operand needs to appear more than once in the insn.
17999 In construction, `match_dup' acts just like `match_operand': the
18000 operand is substituted into the insn being constructed. But in
18001 matching, `match_dup' behaves differently. It assumes that operand
18002 number N has already been determined by a `match_operand'
18003 appearing earlier in the recognition template, and it matches only
18004 an identical-looking expression.
18006 Note that `match_dup' should not be used to tell the compiler that
18007 a particular register is being used for two operands (example:
18008 `add' that adds one register to another; the second register is
18009 both an input operand and the output operand). Use a matching
18010 constraint (*note Simple Constraints::) for those. `match_dup' is
18011 for the cases where one operand is used in two places in the
18012 template, such as an instruction that computes both a quotient and
18013 a remainder, where the opcode takes two input operands but the RTL
18014 template has to refer to each of those twice; once for the
18015 quotient pattern and once for the remainder pattern.
18017 `(match_operator:M N PREDICATE [OPERANDS...])'
18018 This pattern is a kind of placeholder for a variable RTL expression
18021 When constructing an insn, it stands for an RTL expression whose
18022 expression code is taken from that of operand N, and whose
18023 operands are constructed from the patterns OPERANDS.
18025 When matching an expression, it matches an expression if the
18026 function PREDICATE returns nonzero on that expression _and_ the
18027 patterns OPERANDS match the operands of the expression.
18029 Suppose that the function `commutative_operator' is defined as
18030 follows, to match any expression whose operator is one of the
18031 commutative arithmetic operators of RTL and whose mode is MODE:
18034 commutative_integer_operator (x, mode)
18036 enum machine_mode mode;
18038 enum rtx_code code = GET_CODE (x);
18039 if (GET_MODE (x) != mode)
18041 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
18042 || code == EQ || code == NE);
18045 Then the following pattern will match any RTL expression consisting
18046 of a commutative operator applied to two general operands:
18048 (match_operator:SI 3 "commutative_operator"
18049 [(match_operand:SI 1 "general_operand" "g")
18050 (match_operand:SI 2 "general_operand" "g")])
18052 Here the vector `[OPERANDS...]' contains two patterns because the
18053 expressions to be matched all contain two operands.
18055 When this pattern does match, the two operands of the commutative
18056 operator are recorded as operands 1 and 2 of the insn. (This is
18057 done by the two instances of `match_operand'.) Operand 3 of the
18058 insn will be the entire commutative expression: use `GET_CODE
18059 (operands[3])' to see which commutative operator was used.
18061 The machine mode M of `match_operator' works like that of
18062 `match_operand': it is passed as the second argument to the
18063 predicate function, and that function is solely responsible for
18064 deciding whether the expression to be matched "has" that mode.
18066 When constructing an insn, argument 3 of the gen-function will
18067 specify the operation (i.e. the expression code) for the
18068 expression to be made. It should be an RTL expression, whose
18069 expression code is copied into a new expression whose operands are
18070 arguments 1 and 2 of the gen-function. The subexpressions of
18071 argument 3 are not used; only its expression code matters.
18073 When `match_operator' is used in a pattern for matching an insn,
18074 it usually best if the operand number of the `match_operator' is
18075 higher than that of the actual operands of the insn. This improves
18076 register allocation because the register allocator often looks at
18077 operands 1 and 2 of insns to see if it can do register tying.
18079 There is no way to specify constraints in `match_operator'. The
18080 operand of the insn which corresponds to the `match_operator'
18081 never has any constraints because it is never reloaded as a whole.
18082 However, if parts of its OPERANDS are matched by `match_operand'
18083 patterns, those parts may have constraints of their own.
18085 `(match_op_dup:M N[OPERANDS...])'
18086 Like `match_dup', except that it applies to operators instead of
18087 operands. When constructing an insn, operand number N will be
18088 substituted at this point. But in matching, `match_op_dup' behaves
18089 differently. It assumes that operand number N has already been
18090 determined by a `match_operator' appearing earlier in the
18091 recognition template, and it matches only an identical-looking
18094 `(match_parallel N PREDICATE [SUBPAT...])'
18095 This pattern is a placeholder for an insn that consists of a
18096 `parallel' expression with a variable number of elements. This
18097 expression should only appear at the top level of an insn pattern.
18099 When constructing an insn, operand number N will be substituted at
18100 this point. When matching an insn, it matches if the body of the
18101 insn is a `parallel' expression with at least as many elements as
18102 the vector of SUBPAT expressions in the `match_parallel', if each
18103 SUBPAT matches the corresponding element of the `parallel', _and_
18104 the function PREDICATE returns nonzero on the `parallel' that is
18105 the body of the insn. It is the responsibility of the predicate
18106 to validate elements of the `parallel' beyond those listed in the
18109 A typical use of `match_parallel' is to match load and store
18110 multiple expressions, which can contain a variable number of
18111 elements in a `parallel'. For example,
18114 [(match_parallel 0 "load_multiple_operation"
18115 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
18116 (match_operand:SI 2 "memory_operand" "m"))
18118 (clobber (reg:SI 179))])]
18122 This example comes from `a29k.md'. The function
18123 `load_multiple_operation' is defined in `a29k.c' and checks that
18124 subsequent elements in the `parallel' are the same as the `set' in
18125 the pattern, except that they are referencing subsequent registers
18126 and memory locations.
18128 An insn that matches this pattern might look like:
18131 [(set (reg:SI 20) (mem:SI (reg:SI 100)))
18133 (clobber (reg:SI 179))
18135 (mem:SI (plus:SI (reg:SI 100)
18138 (mem:SI (plus:SI (reg:SI 100)
18141 `(match_par_dup N [SUBPAT...])'
18142 Like `match_op_dup', but for `match_parallel' instead of
18147 File: gccint.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc
18149 16.5 Output Templates and Operand Substitution
18150 ==============================================
18152 The "output template" is a string which specifies how to output the
18153 assembler code for an instruction pattern. Most of the template is a
18154 fixed string which is output literally. The character `%' is used to
18155 specify where to substitute an operand; it can also be used to identify
18156 places where different variants of the assembler require different
18159 In the simplest case, a `%' followed by a digit N says to output
18160 operand N at that point in the string.
18162 `%' followed by a letter and a digit says to output an operand in an
18163 alternate fashion. Four letters have standard, built-in meanings
18164 described below. The machine description macro `PRINT_OPERAND' can
18165 define additional letters with nonstandard meanings.
18167 `%cDIGIT' can be used to substitute an operand that is a constant
18168 value without the syntax that normally indicates an immediate operand.
18170 `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
18171 negated before printing.
18173 `%aDIGIT' can be used to substitute an operand as if it were a memory
18174 reference, with the actual operand treated as the address. This may be
18175 useful when outputting a "load address" instruction, because often the
18176 assembler syntax for such an instruction requires you to write the
18177 operand as if it were a memory reference.
18179 `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
18181 `%=' outputs a number which is unique to each instruction in the
18182 entire compilation. This is useful for making local labels to be
18183 referred to more than once in a single template that generates multiple
18184 assembler instructions.
18186 `%' followed by a punctuation character specifies a substitution that
18187 does not use an operand. Only one case is standard: `%%' outputs a `%'
18188 into the assembler code. Other nonstandard cases can be defined in the
18189 `PRINT_OPERAND' macro. You must also define which punctuation
18190 characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
18192 The template may generate multiple assembler instructions. Write the
18193 text for the instructions, with `\;' between them.
18195 When the RTL contains two operands which are required by constraint to
18196 match each other, the output template must refer only to the
18197 lower-numbered operand. Matching operands are not always identical,
18198 and the rest of the compiler arranges to put the proper RTL expression
18199 for printing into the lower-numbered operand.
18201 One use of nonstandard letters or punctuation following `%' is to
18202 distinguish between different assembler languages for the same machine;
18203 for example, Motorola syntax versus MIT syntax for the 68000. Motorola
18204 syntax requires periods in most opcode names, while MIT syntax does
18205 not. For example, the opcode `movel' in MIT syntax is `move.l' in
18206 Motorola syntax. The same file of patterns is used for both kinds of
18207 output syntax, but the character sequence `%.' is used in each place
18208 where Motorola syntax wants a period. The `PRINT_OPERAND' macro for
18209 Motorola syntax defines the sequence to output a period; the macro for
18210 MIT syntax defines it to do nothing.
18212 As a special case, a template consisting of the single character `#'
18213 instructs the compiler to first split the insn, and then output the
18214 resulting instructions separately. This helps eliminate redundancy in
18215 the output templates. If you have a `define_insn' that needs to emit
18216 multiple assembler instructions, and there is a matching `define_split'
18217 already defined, then you can simply use `#' as the output template
18218 instead of writing an output template that emits the multiple assembler
18221 If the macro `ASSEMBLER_DIALECT' is defined, you can use construct of
18222 the form `{option0|option1|option2}' in the templates. These describe
18223 multiple variants of assembler language syntax. *Note Instruction
18227 File: gccint.info, Node: Output Statement, Next: Predicates, Prev: Output Template, Up: Machine Desc
18229 16.6 C Statements for Assembler Output
18230 ======================================
18232 Often a single fixed template string cannot produce correct and
18233 efficient assembler code for all the cases that are recognized by a
18234 single instruction pattern. For example, the opcodes may depend on the
18235 kinds of operands; or some unfortunate combinations of operands may
18236 require extra machine instructions.
18238 If the output control string starts with a `@', then it is actually a
18239 series of templates, each on a separate line. (Blank lines and leading
18240 spaces and tabs are ignored.) The templates correspond to the
18241 pattern's constraint alternatives (*note Multi-Alternative::). For
18242 example, if a target machine has a two-address add instruction `addr'
18243 to add into a register and another `addm' to add a register to memory,
18244 you might write this pattern:
18246 (define_insn "addsi3"
18247 [(set (match_operand:SI 0 "general_operand" "=r,m")
18248 (plus:SI (match_operand:SI 1 "general_operand" "0,0")
18249 (match_operand:SI 2 "general_operand" "g,r")))]
18255 If the output control string starts with a `*', then it is not an
18256 output template but rather a piece of C program that should compute a
18257 template. It should execute a `return' statement to return the
18258 template-string you want. Most such templates use C string literals,
18259 which require doublequote characters to delimit them. To include these
18260 doublequote characters in the string, prefix each one with `\'.
18262 If the output control string is written as a brace block instead of a
18263 double-quoted string, it is automatically assumed to be C code. In that
18264 case, it is not necessary to put in a leading asterisk, or to escape the
18265 doublequotes surrounding C string literals.
18267 The operands may be found in the array `operands', whose C data type
18270 It is very common to select different ways of generating assembler code
18271 based on whether an immediate operand is within a certain range. Be
18272 careful when doing this, because the result of `INTVAL' is an integer
18273 on the host machine. If the host machine has more bits in an `int'
18274 than the target machine has in the mode in which the constant will be
18275 used, then some of the bits you get from `INTVAL' will be superfluous.
18276 For proper results, you must carefully disregard the values of those
18279 It is possible to output an assembler instruction and then go on to
18280 output or compute more of them, using the subroutine `output_asm_insn'.
18281 This receives two arguments: a template-string and a vector of
18282 operands. The vector may be `operands', or it may be another array of
18283 `rtx' that you declare locally and initialize yourself.
18285 When an insn pattern has multiple alternatives in its constraints,
18286 often the appearance of the assembler code is determined mostly by
18287 which alternative was matched. When this is so, the C code can test
18288 the variable `which_alternative', which is the ordinal number of the
18289 alternative that was actually satisfied (0 for the first, 1 for the
18290 second alternative, etc.).
18292 For example, suppose there are two opcodes for storing zero, `clrreg'
18293 for registers and `clrmem' for memory locations. Here is how a pattern
18294 could use `which_alternative' to choose between them:
18297 [(set (match_operand:SI 0 "general_operand" "=r,m")
18301 return (which_alternative == 0
18302 ? "clrreg %0" : "clrmem %0");
18305 The example above, where the assembler code to generate was _solely_
18306 determined by the alternative, could also have been specified as
18307 follows, having the output control string start with a `@':
18310 [(set (match_operand:SI 0 "general_operand" "=r,m")
18318 File: gccint.info, Node: Predicates, Next: Constraints, Prev: Output Statement, Up: Machine Desc
18323 A predicate determines whether a `match_operand' or `match_operator'
18324 expression matches, and therefore whether the surrounding instruction
18325 pattern will be used for that combination of operands. GCC has a
18326 number of machine-independent predicates, and you can define
18327 machine-specific predicates as needed. By convention, predicates used
18328 with `match_operand' have names that end in `_operand', and those used
18329 with `match_operator' have names that end in `_operator'.
18331 All predicates are Boolean functions (in the mathematical sense) of
18332 two arguments: the RTL expression that is being considered at that
18333 position in the instruction pattern, and the machine mode that the
18334 `match_operand' or `match_operator' specifies. In this section, the
18335 first argument is called OP and the second argument MODE. Predicates
18336 can be called from C as ordinary two-argument functions; this can be
18337 useful in output templates or other machine-specific code.
18339 Operand predicates can allow operands that are not actually acceptable
18340 to the hardware, as long as the constraints give reload the ability to
18341 fix them up (*note Constraints::). However, GCC will usually generate
18342 better code if the predicates specify the requirements of the machine
18343 instructions as closely as possible. Reload cannot fix up operands
18344 that must be constants ("immediate operands"); you must use a predicate
18345 that allows only constants, or else enforce the requirement in the
18348 Most predicates handle their MODE argument in a uniform manner. If
18349 MODE is `VOIDmode' (unspecified), then OP can have any mode. If MODE
18350 is anything else, then OP must have the same mode, unless OP is a
18351 `CONST_INT' or integer `CONST_DOUBLE'. These RTL expressions always
18352 have `VOIDmode', so it would be counterproductive to check that their
18353 mode matches. Instead, predicates that accept `CONST_INT' and/or
18354 integer `CONST_DOUBLE' check that the value stored in the constant will
18355 fit in the requested mode.
18357 Predicates with this behavior are called "normal". `genrecog' can
18358 optimize the instruction recognizer based on knowledge of how normal
18359 predicates treat modes. It can also diagnose certain kinds of common
18360 errors in the use of normal predicates; for instance, it is almost
18361 always an error to use a normal predicate without specifying a mode.
18363 Predicates that do something different with their MODE argument are
18364 called "special". The generic predicates `address_operand' and
18365 `pmode_register_operand' are special predicates. `genrecog' does not
18366 do any optimizations or diagnosis when special predicates are used.
18370 * Machine-Independent Predicates:: Predicates available to all back ends.
18371 * Defining Predicates:: How to write machine-specific predicate
18375 File: gccint.info, Node: Machine-Independent Predicates, Next: Defining Predicates, Up: Predicates
18377 16.7.1 Machine-Independent Predicates
18378 -------------------------------------
18380 These are the generic predicates available to all back ends. They are
18381 defined in `recog.c'. The first category of predicates allow only
18382 constant, or "immediate", operands.
18384 -- Function: immediate_operand
18385 This predicate allows any sort of constant that fits in MODE. It
18386 is an appropriate choice for instructions that take operands that
18389 -- Function: const_int_operand
18390 This predicate allows any `CONST_INT' expression that fits in
18391 MODE. It is an appropriate choice for an immediate operand that
18392 does not allow a symbol or label.
18394 -- Function: const_double_operand
18395 This predicate accepts any `CONST_DOUBLE' expression that has
18396 exactly MODE. If MODE is `VOIDmode', it will also accept
18397 `CONST_INT'. It is intended for immediate floating point
18400 The second category of predicates allow only some kind of machine
18403 -- Function: register_operand
18404 This predicate allows any `REG' or `SUBREG' expression that is
18405 valid for MODE. It is often suitable for arithmetic instruction
18406 operands on a RISC machine.
18408 -- Function: pmode_register_operand
18409 This is a slight variant on `register_operand' which works around
18410 a limitation in the machine-description reader.
18412 (match_operand N "pmode_register_operand" CONSTRAINT)
18416 (match_operand:P N "register_operand" CONSTRAINT)
18418 would mean, if the machine-description reader accepted `:P' mode
18419 suffixes. Unfortunately, it cannot, because `Pmode' is an alias
18420 for some other mode, and might vary with machine-specific options.
18423 -- Function: scratch_operand
18424 This predicate allows hard registers and `SCRATCH' expressions,
18425 but not pseudo-registers. It is used internally by
18426 `match_scratch'; it should not be used directly.
18428 The third category of predicates allow only some kind of memory
18431 -- Function: memory_operand
18432 This predicate allows any valid reference to a quantity of mode
18433 MODE in memory, as determined by the weak form of
18434 `GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::).
18436 -- Function: address_operand
18437 This predicate is a little unusual; it allows any operand that is a
18438 valid expression for the _address_ of a quantity of mode MODE,
18439 again determined by the weak form of `GO_IF_LEGITIMATE_ADDRESS'.
18440 To first order, if `(mem:MODE (EXP))' is acceptable to
18441 `memory_operand', then EXP is acceptable to `address_operand'.
18442 Note that EXP does not necessarily have the mode MODE.
18444 -- Function: indirect_operand
18445 This is a stricter form of `memory_operand' which allows only
18446 memory references with a `general_operand' as the address
18447 expression. New uses of this predicate are discouraged, because
18448 `general_operand' is very permissive, so it's hard to tell what an
18449 `indirect_operand' does or does not allow. If a target has
18450 different requirements for memory operands for different
18451 instructions, it is better to define target-specific predicates
18452 which enforce the hardware's requirements explicitly.
18454 -- Function: push_operand
18455 This predicate allows a memory reference suitable for pushing a
18456 value onto the stack. This will be a `MEM' which refers to
18457 `stack_pointer_rtx', with a side-effect in its address expression
18458 (*note Incdec::); which one is determined by the `STACK_PUSH_CODE'
18459 macro (*note Frame Layout::).
18461 -- Function: pop_operand
18462 This predicate allows a memory reference suitable for popping a
18463 value off the stack. Again, this will be a `MEM' referring to
18464 `stack_pointer_rtx', with a side-effect in its address expression.
18465 However, this time `STACK_POP_CODE' is expected.
18467 The fourth category of predicates allow some combination of the above
18470 -- Function: nonmemory_operand
18471 This predicate allows any immediate or register operand valid for
18474 -- Function: nonimmediate_operand
18475 This predicate allows any register or memory operand valid for
18478 -- Function: general_operand
18479 This predicate allows any immediate, register, or memory operand
18482 Finally, there are two generic operator predicates.
18484 -- Function: comparison_operator
18485 This predicate matches any expression which performs an arithmetic
18486 comparison in MODE; that is, `COMPARISON_P' is true for the
18489 -- Function: ordered_comparison_operator
18490 This predicate matches any expression which performs an arithmetic
18491 comparison in MODE and whose expression code is valid for integer
18492 modes; that is, the expression code will be one of `eq', `ne',
18493 `lt', `ltu', `le', `leu', `gt', `gtu', `ge', `geu'.
18496 File: gccint.info, Node: Defining Predicates, Prev: Machine-Independent Predicates, Up: Predicates
18498 16.7.2 Defining Machine-Specific Predicates
18499 -------------------------------------------
18501 Many machines have requirements for their operands that cannot be
18502 expressed precisely using the generic predicates. You can define
18503 additional predicates using `define_predicate' and
18504 `define_special_predicate' expressions. These expressions have three
18507 * The name of the predicate, as it will be referred to in
18508 `match_operand' or `match_operator' expressions.
18510 * An RTL expression which evaluates to true if the predicate allows
18511 the operand OP, false if it does not. This expression can only use
18512 the following RTL codes:
18515 When written inside a predicate expression, a `MATCH_OPERAND'
18516 expression evaluates to true if the predicate it names would
18517 allow OP. The operand number and constraint are ignored.
18518 Due to limitations in `genrecog', you can only refer to
18519 generic predicates and predicates that have already been
18523 This expression evaluates to true if OP or a specified
18524 subexpression of OP has one of a given list of RTX codes.
18526 The first operand of this expression is a string constant
18527 containing a comma-separated list of RTX code names (in lower
18528 case). These are the codes for which the `MATCH_CODE' will
18531 The second operand is a string constant which indicates what
18532 subexpression of OP to examine. If it is absent or the empty
18533 string, OP itself is examined. Otherwise, the string constant
18534 must be a sequence of digits and/or lowercase letters. Each
18535 character indicates a subexpression to extract from the
18536 current expression; for the first character this is OP, for
18537 the second and subsequent characters it is the result of the
18538 previous character. A digit N extracts `XEXP (E, N)'; a
18539 letter L extracts `XVECEXP (E, 0, N)' where N is the
18540 alphabetic ordinal of L (0 for `a', 1 for 'b', and so on).
18541 The `MATCH_CODE' then examines the RTX code of the
18542 subexpression extracted by the complete string. It is not
18543 possible to extract components of an `rtvec' that is not at
18544 position 0 within its RTX object.
18547 This expression has one operand, a string constant containing
18548 a C expression. The predicate's arguments, OP and MODE, are
18549 available with those names in the C expression. The
18550 `MATCH_TEST' evaluates to true if the C expression evaluates
18551 to a nonzero value. `MATCH_TEST' expressions must not have
18558 The basic `MATCH_' expressions can be combined using these
18559 logical operators, which have the semantics of the C operators
18560 `&&', `||', `!', and `? :' respectively. As in Common Lisp,
18561 you may give an `AND' or `IOR' expression an arbitrary number
18562 of arguments; this has exactly the same effect as writing a
18563 chain of two-argument `AND' or `IOR' expressions.
18565 * An optional block of C code, which should execute `return true' if
18566 the predicate is found to match and `return false' if it does not.
18567 It must not have any side effects. The predicate arguments, OP
18568 and MODE, are available with those names.
18570 If a code block is present in a predicate definition, then the RTL
18571 expression must evaluate to true _and_ the code block must execute
18572 `return true' for the predicate to allow the operand. The RTL
18573 expression is evaluated first; do not re-check anything in the
18574 code block that was checked in the RTL expression.
18576 The program `genrecog' scans `define_predicate' and
18577 `define_special_predicate' expressions to determine which RTX codes are
18578 possibly allowed. You should always make this explicit in the RTL
18579 predicate expression, using `MATCH_OPERAND' and `MATCH_CODE'.
18581 Here is an example of a simple predicate definition, from the IA64
18582 machine description:
18584 ;; True if OP is a `SYMBOL_REF' which refers to the sdata section.
18585 (define_predicate "small_addr_symbolic_operand"
18586 (and (match_code "symbol_ref")
18587 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
18589 And here is another, showing the use of the C block.
18591 ;; True if OP is a register operand that is (or could be) a GR reg.
18592 (define_predicate "gr_register_operand"
18593 (match_operand 0 "register_operand")
18595 unsigned int regno;
18596 if (GET_CODE (op) == SUBREG)
18597 op = SUBREG_REG (op);
18599 regno = REGNO (op);
18600 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
18603 Predicates written with `define_predicate' automatically include a
18604 test that MODE is `VOIDmode', or OP has the same mode as MODE, or OP is
18605 a `CONST_INT' or `CONST_DOUBLE'. They do _not_ check specifically for
18606 integer `CONST_DOUBLE', nor do they test that the value of either kind
18607 of constant fits in the requested mode. This is because
18608 target-specific predicates that take constants usually have to do more
18609 stringent value checks anyway. If you need the exact same treatment of
18610 `CONST_INT' or `CONST_DOUBLE' that the generic predicates provide, use
18611 a `MATCH_OPERAND' subexpression to call `const_int_operand',
18612 `const_double_operand', or `immediate_operand'.
18614 Predicates written with `define_special_predicate' do not get any
18615 automatic mode checks, and are treated as having special mode handling
18618 The program `genpreds' is responsible for generating code to test
18619 predicates. It also writes a header file containing function
18620 declarations for all machine-specific predicates. It is not necessary
18621 to declare these predicates in `CPU-protos.h'.
18624 File: gccint.info, Node: Constraints, Next: Standard Names, Prev: Predicates, Up: Machine Desc
18626 16.8 Operand Constraints
18627 ========================
18629 Each `match_operand' in an instruction pattern can specify constraints
18630 for the operands allowed. The constraints allow you to fine-tune
18631 matching within the set of operands allowed by the predicate.
18633 Constraints can say whether an operand may be in a register, and which
18634 kinds of register; whether the operand can be a memory reference, and
18635 which kinds of address; whether the operand may be an immediate
18636 constant, and which possible values it may have. Constraints can also
18637 require two operands to match.
18641 * Simple Constraints:: Basic use of constraints.
18642 * Multi-Alternative:: When an insn has two alternative constraint-patterns.
18643 * Class Preferences:: Constraints guide which hard register to put things in.
18644 * Modifiers:: More precise control over effects of constraints.
18645 * Disable Insn Alternatives:: Disable insn alternatives using the `enabled' attribute.
18646 * Machine Constraints:: Existing constraints for some particular machines.
18647 * Define Constraints:: How to define machine-specific constraints.
18648 * C Constraint Interface:: How to test constraints from C code.
18651 File: gccint.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints
18653 16.8.1 Simple Constraints
18654 -------------------------
18656 The simplest kind of constraint is a string full of letters, each of
18657 which describes one kind of operand that is permitted. Here are the
18658 letters that are allowed:
18661 Whitespace characters are ignored and can be inserted at any
18662 position except the first. This enables each alternative for
18663 different operands to be visually aligned in the machine
18664 description even if they have different number of constraints and
18668 A memory operand is allowed, with any kind of address that the
18669 machine supports in general. Note that the letter used for the
18670 general memory constraint can be re-defined by a back end using
18671 the `TARGET_MEM_CONSTRAINT' macro.
18674 A memory operand is allowed, but only if the address is
18675 "offsettable". This means that adding a small integer (actually,
18676 the width in bytes of the operand, as determined by its machine
18677 mode) may be added to the address and the result is also a valid
18680 For example, an address which is constant is offsettable; so is an
18681 address that is the sum of a register and a constant (as long as a
18682 slightly larger constant is also within the range of
18683 address-offsets supported by the machine); but an autoincrement or
18684 autodecrement address is not offsettable. More complicated
18685 indirect/indexed addresses may or may not be offsettable depending
18686 on the other addressing modes that the machine supports.
18688 Note that in an output operand which can be matched by another
18689 operand, the constraint letter `o' is valid only when accompanied
18690 by both `<' (if the target machine has predecrement addressing)
18691 and `>' (if the target machine has preincrement addressing).
18694 A memory operand that is not offsettable. In other words,
18695 anything that would fit the `m' constraint but not the `o'
18699 A memory operand with autodecrement addressing (either
18700 predecrement or postdecrement) is allowed.
18703 A memory operand with autoincrement addressing (either
18704 preincrement or postincrement) is allowed.
18707 A register operand is allowed provided that it is in a general
18711 An immediate integer operand (one with constant value) is allowed.
18712 This includes symbolic constants whose values will be known only at
18713 assembly time or later.
18716 An immediate integer operand with a known numeric value is allowed.
18717 Many systems cannot support assembly-time constants for operands
18718 less than a word wide. Constraints for these operands should use
18719 `n' rather than `i'.
18721 `I', `J', `K', ... `P'
18722 Other letters in the range `I' through `P' may be defined in a
18723 machine-dependent fashion to permit immediate integer operands with
18724 explicit integer values in specified ranges. For example, on the
18725 68000, `I' is defined to stand for the range of values 1 to 8.
18726 This is the range permitted as a shift count in the shift
18730 An immediate floating operand (expression code `const_double') is
18731 allowed, but only if the target floating point format is the same
18732 as that of the host machine (on which the compiler is running).
18735 An immediate floating operand (expression code `const_double' or
18736 `const_vector') is allowed.
18739 `G' and `H' may be defined in a machine-dependent fashion to
18740 permit immediate floating operands in particular ranges of values.
18743 An immediate integer operand whose value is not an explicit
18744 integer is allowed.
18746 This might appear strange; if an insn allows a constant operand
18747 with a value not known at compile time, it certainly must allow
18748 any known value. So why use `s' instead of `i'? Sometimes it
18749 allows better code to be generated.
18751 For example, on the 68000 in a fullword instruction it is possible
18752 to use an immediate operand; but if the immediate value is between
18753 -128 and 127, better code results from loading the value into a
18754 register and using the register. This is because the load into
18755 the register can be done with a `moveq' instruction. We arrange
18756 for this to happen by defining the letter `K' to mean "any integer
18757 outside the range -128 to 127", and then specifying `Ks' in the
18758 operand constraints.
18761 Any register, memory or immediate integer operand is allowed,
18762 except for registers that are not general registers.
18765 Any operand whatsoever is allowed, even if it does not satisfy
18766 `general_operand'. This is normally used in the constraint of a
18767 `match_scratch' when certain alternatives will not actually
18768 require a scratch register.
18770 `0', `1', `2', ... `9'
18771 An operand that matches the specified operand number is allowed.
18772 If a digit is used together with letters within the same
18773 alternative, the digit should come last.
18775 This number is allowed to be more than a single digit. If multiple
18776 digits are encountered consecutively, they are interpreted as a
18777 single decimal integer. There is scant chance for ambiguity,
18778 since to-date it has never been desirable that `10' be interpreted
18779 as matching either operand 1 _or_ operand 0. Should this be
18780 desired, one can use multiple alternatives instead.
18782 This is called a "matching constraint" and what it really means is
18783 that the assembler has only a single operand that fills two roles
18784 considered separate in the RTL insn. For example, an add insn has
18785 two input operands and one output operand in the RTL, but on most
18786 CISC machines an add instruction really has only two operands, one
18787 of them an input-output operand:
18791 Matching constraints are used in these circumstances. More
18792 precisely, the two operands that match must include one input-only
18793 operand and one output-only operand. Moreover, the digit must be a
18794 smaller number than the number of the operand that uses it in the
18797 For operands to match in a particular case usually means that they
18798 are identical-looking RTL expressions. But in a few special cases
18799 specific kinds of dissimilarity are allowed. For example, `*x' as
18800 an input operand will match `*x++' as an output operand. For
18801 proper results in such cases, the output template should always
18802 use the output-operand's number when printing the operand.
18805 An operand that is a valid memory address is allowed. This is for
18806 "load address" and "push address" instructions.
18808 `p' in the constraint must be accompanied by `address_operand' as
18809 the predicate in the `match_operand'. This predicate interprets
18810 the mode specified in the `match_operand' as the mode of the memory
18811 reference for which the address would be valid.
18814 Other letters can be defined in machine-dependent fashion to stand
18815 for particular classes of registers or other arbitrary operand
18816 types. `d', `a' and `f' are defined on the 68000/68020 to stand
18817 for data, address and floating point registers.
18819 In order to have valid assembler code, each operand must satisfy its
18820 constraint. But a failure to do so does not prevent the pattern from
18821 applying to an insn. Instead, it directs the compiler to modify the
18822 code so that the constraint will be satisfied. Usually this is done by
18823 copying an operand into a register.
18825 Contrast, therefore, the two instruction patterns that follow:
18828 [(set (match_operand:SI 0 "general_operand" "=r")
18829 (plus:SI (match_dup 0)
18830 (match_operand:SI 1 "general_operand" "r")))]
18834 which has two operands, one of which must appear in two places, and
18837 [(set (match_operand:SI 0 "general_operand" "=r")
18838 (plus:SI (match_operand:SI 1 "general_operand" "0")
18839 (match_operand:SI 2 "general_operand" "r")))]
18843 which has three operands, two of which are required by a constraint to
18844 be identical. If we are considering an insn of the form
18848 (plus:SI (reg:SI 6) (reg:SI 109)))
18851 the first pattern would not apply at all, because this insn does not
18852 contain two identical subexpressions in the right place. The pattern
18853 would say, "That does not look like an add instruction; try other
18854 patterns". The second pattern would say, "Yes, that's an add
18855 instruction, but there is something wrong with it". It would direct
18856 the reload pass of the compiler to generate additional insns to make
18857 the constraint true. The results might look like this:
18860 (set (reg:SI 3) (reg:SI 6))
18865 (plus:SI (reg:SI 3) (reg:SI 109)))
18868 It is up to you to make sure that each operand, in each pattern, has
18869 constraints that can handle any RTL expression that could be present for
18870 that operand. (When multiple alternatives are in use, each pattern
18871 must, for each possible combination of operand expressions, have at
18872 least one alternative which can handle that combination of operands.)
18873 The constraints don't need to _allow_ any possible operand--when this is
18874 the case, they do not constrain--but they must at least point the way to
18875 reloading any possible operand so that it will fit.
18877 * If the constraint accepts whatever operands the predicate permits,
18878 there is no problem: reloading is never necessary for this operand.
18880 For example, an operand whose constraints permit everything except
18881 registers is safe provided its predicate rejects registers.
18883 An operand whose predicate accepts only constant values is safe
18884 provided its constraints include the letter `i'. If any possible
18885 constant value is accepted, then nothing less than `i' will do; if
18886 the predicate is more selective, then the constraints may also be
18889 * Any operand expression can be reloaded by copying it into a
18890 register. So if an operand's constraints allow some kind of
18891 register, it is certain to be safe. It need not permit all
18892 classes of registers; the compiler knows how to copy a register
18893 into another register of the proper class in order to make an
18896 * A nonoffsettable memory reference can be reloaded by copying the
18897 address into a register. So if the constraint uses the letter
18898 `o', all memory references are taken care of.
18900 * A constant operand can be reloaded by allocating space in memory to
18901 hold it as preinitialized data. Then the memory reference can be
18902 used in place of the constant. So if the constraint uses the
18903 letters `o' or `m', constant operands are not a problem.
18905 * If the constraint permits a constant and a pseudo register used in
18906 an insn was not allocated to a hard register and is equivalent to
18907 a constant, the register will be replaced with the constant. If
18908 the predicate does not permit a constant and the insn is
18909 re-recognized for some reason, the compiler will crash. Thus the
18910 predicate must always recognize any objects allowed by the
18913 If the operand's predicate can recognize registers, but the constraint
18914 does not permit them, it can make the compiler crash. When this
18915 operand happens to be a register, the reload pass will be stymied,
18916 because it does not know how to copy a register temporarily into memory.
18918 If the predicate accepts a unary operator, the constraint applies to
18919 the operand. For example, the MIPS processor at ISA level 3 supports an
18920 instruction which adds two registers in `SImode' to produce a `DImode'
18921 result, but only if the registers are correctly sign extended. This
18922 predicate for the input operands accepts a `sign_extend' of an `SImode'
18923 register. Write the constraint to indicate the type of register that
18924 is required for the operand of the `sign_extend'.
18927 File: gccint.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints
18929 16.8.2 Multiple Alternative Constraints
18930 ---------------------------------------
18932 Sometimes a single instruction has multiple alternative sets of possible
18933 operands. For example, on the 68000, a logical-or instruction can
18934 combine register or an immediate value into memory, or it can combine
18935 any kind of operand into a register; but it cannot combine one memory
18936 location into another.
18938 These constraints are represented as multiple alternatives. An
18939 alternative can be described by a series of letters for each operand.
18940 The overall constraint for an operand is made from the letters for this
18941 operand from the first alternative, a comma, the letters for this
18942 operand from the second alternative, a comma, and so on until the last
18943 alternative. Here is how it is done for fullword logical-or on the
18946 (define_insn "iorsi3"
18947 [(set (match_operand:SI 0 "general_operand" "=m,d")
18948 (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
18949 (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
18952 The first alternative has `m' (memory) for operand 0, `0' for operand
18953 1 (meaning it must match operand 0), and `dKs' for operand 2. The
18954 second alternative has `d' (data register) for operand 0, `0' for
18955 operand 1, and `dmKs' for operand 2. The `=' and `%' in the
18956 constraints apply to all the alternatives; their meaning is explained
18957 in the next section (*note Class Preferences::).
18959 If all the operands fit any one alternative, the instruction is valid.
18960 Otherwise, for each alternative, the compiler counts how many
18961 instructions must be added to copy the operands so that that
18962 alternative applies. The alternative requiring the least copying is
18963 chosen. If two alternatives need the same amount of copying, the one
18964 that comes first is chosen. These choices can be altered with the `?'
18965 and `!' characters:
18968 Disparage slightly the alternative that the `?' appears in, as a
18969 choice when no alternative applies exactly. The compiler regards
18970 this alternative as one unit more costly for each `?' that appears
18974 Disparage severely the alternative that the `!' appears in. This
18975 alternative can still be used if it fits without reloading, but if
18976 reloading is needed, some other alternative will be used.
18978 When an insn pattern has multiple alternatives in its constraints,
18979 often the appearance of the assembler code is determined mostly by which
18980 alternative was matched. When this is so, the C code for writing the
18981 assembler code can use the variable `which_alternative', which is the
18982 ordinal number of the alternative that was actually satisfied (0 for
18983 the first, 1 for the second alternative, etc.). *Note Output
18987 File: gccint.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints
18989 16.8.3 Register Class Preferences
18990 ---------------------------------
18992 The operand constraints have another function: they enable the compiler
18993 to decide which kind of hardware register a pseudo register is best
18994 allocated to. The compiler examines the constraints that apply to the
18995 insns that use the pseudo register, looking for the machine-dependent
18996 letters such as `d' and `a' that specify classes of registers. The
18997 pseudo register is put in whichever class gets the most "votes". The
18998 constraint letters `g' and `r' also vote: they vote in favor of a
18999 general register. The machine description says which registers are
19000 considered general.
19002 Of course, on some machines all registers are equivalent, and no
19003 register classes are defined. Then none of this complexity is relevant.
19006 File: gccint.info, Node: Modifiers, Next: Disable Insn Alternatives, Prev: Class Preferences, Up: Constraints
19008 16.8.4 Constraint Modifier Characters
19009 -------------------------------------
19011 Here are constraint modifier characters.
19014 Means that this operand is write-only for this instruction: the
19015 previous value is discarded and replaced by output data.
19018 Means that this operand is both read and written by the
19021 When the compiler fixes up the operands to satisfy the constraints,
19022 it needs to know which operands are inputs to the instruction and
19023 which are outputs from it. `=' identifies an output; `+'
19024 identifies an operand that is both input and output; all other
19025 operands are assumed to be input only.
19027 If you specify `=' or `+' in a constraint, you put it in the first
19028 character of the constraint string.
19031 Means (in a particular alternative) that this operand is an
19032 "earlyclobber" operand, which is modified before the instruction is
19033 finished using the input operands. Therefore, this operand may
19034 not lie in a register that is used as an input operand or as part
19035 of any memory address.
19037 `&' applies only to the alternative in which it is written. In
19038 constraints with multiple alternatives, sometimes one alternative
19039 requires `&' while others do not. See, for example, the `movdf'
19042 An input operand can be tied to an earlyclobber operand if its only
19043 use as an input occurs before the early result is written. Adding
19044 alternatives of this form often allows GCC to produce better code
19045 when only some of the inputs can be affected by the earlyclobber.
19046 See, for example, the `mulsi3' insn of the ARM.
19048 `&' does not obviate the need to write `='.
19051 Declares the instruction to be commutative for this operand and the
19052 following operand. This means that the compiler may interchange
19053 the two operands if that is the cheapest way to make all operands
19054 fit the constraints. This is often used in patterns for addition
19055 instructions that really have only two operands: the result must
19056 go in one of the arguments. Here for example, is how the 68000
19057 halfword-add instruction is defined:
19059 (define_insn "addhi3"
19060 [(set (match_operand:HI 0 "general_operand" "=m,r")
19061 (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
19062 (match_operand:HI 2 "general_operand" "di,g")))]
19064 GCC can only handle one commutative pair in an asm; if you use
19065 more, the compiler may fail. Note that you need not use the
19066 modifier if the two alternatives are strictly identical; this
19067 would only waste time in the reload pass. The modifier is not
19068 operational after register allocation, so the result of
19069 `define_peephole2' and `define_split's performed after reload
19070 cannot rely on `%' to make the intended insn match.
19073 Says that all following characters, up to the next comma, are to be
19074 ignored as a constraint. They are significant only for choosing
19075 register preferences.
19078 Says that the following character should be ignored when choosing
19079 register preferences. `*' has no effect on the meaning of the
19080 constraint as a constraint, and no effect on reloading.
19082 Here is an example: the 68000 has an instruction to sign-extend a
19083 halfword in a data register, and can also sign-extend a value by
19084 copying it into an address register. While either kind of
19085 register is acceptable, the constraints on an address-register
19086 destination are less strict, so it is best if register allocation
19087 makes an address register its goal. Therefore, `*' is used so
19088 that the `d' constraint letter (for data register) is ignored when
19089 computing register preferences.
19091 (define_insn "extendhisi2"
19092 [(set (match_operand:SI 0 "general_operand" "=*d,a")
19094 (match_operand:HI 1 "general_operand" "0,g")))]
19098 File: gccint.info, Node: Machine Constraints, Next: Define Constraints, Prev: Disable Insn Alternatives, Up: Constraints
19100 16.8.5 Constraints for Particular Machines
19101 ------------------------------------------
19103 Whenever possible, you should use the general-purpose constraint letters
19104 in `asm' arguments, since they will convey meaning more readily to
19105 people reading your code. Failing that, use the constraint letters
19106 that usually have very similar meanings across architectures. The most
19107 commonly used constraints are `m' and `r' (for memory and
19108 general-purpose registers respectively; *note Simple Constraints::), and
19109 `I', usually the letter indicating the most common immediate-constant
19112 Each architecture defines additional constraints. These constraints
19113 are used by the compiler itself for instruction generation, as well as
19114 for `asm' statements; therefore, some of the constraints are not
19115 particularly useful for `asm'. Here is a summary of some of the
19116 machine-dependent constraints available on some particular machines; it
19117 includes both constraints that are useful for `asm' and constraints
19118 that aren't. The compiler source file mentioned in the table heading
19119 for each architecture is the definitive reference for the meanings of
19120 that architecture's constraints.
19122 _ARM family--`config/arm/arm.h'_
19125 Floating-point register
19128 VFP floating-point register
19131 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
19135 Floating-point constant that would satisfy the constraint `F'
19139 Integer that is valid as an immediate operand in a data
19140 processing instruction. That is, an integer in the range 0
19141 to 255 rotated by a multiple of 2
19144 Integer in the range -4095 to 4095
19147 Integer that satisfies constraint `I' when inverted (ones
19151 Integer that satisfies constraint `I' when negated (twos
19155 Integer in the range 0 to 32
19158 A memory reference where the exact address is in a single
19159 register (``m'' is preferable for `asm' statements)
19162 An item in the constant pool
19165 A symbol in the text segment of the current file
19168 A memory reference suitable for VFP load/store insns
19169 (reg+constant offset)
19172 A memory reference suitable for iWMMXt load/store
19176 A memory reference suitable for the ARMv4 ldrsb instruction.
19178 _AVR family--`config/avr/constraints.md'_
19181 Registers from r0 to r15
19184 Registers from r16 to r23
19187 Registers from r16 to r31
19190 Registers from r24 to r31. These registers can be used in
19194 Pointer register (r26-r31)
19197 Base pointer register (r28-r31)
19200 Stack pointer register (SPH:SPL)
19203 Temporary register r0
19206 Register pair X (r27:r26)
19209 Register pair Y (r29:r28)
19212 Register pair Z (r31:r30)
19215 Constant greater than -1, less than 64
19218 Constant greater than -64, less than 1
19227 Constant that fits in 8 bits
19230 Constant integer -1
19233 Constant integer 8, 16, or 24
19239 A floating point constant 0.0
19242 Integer constant in the range -6 ... 5.
19245 A memory address based on Y or Z pointer with displacement.
19247 _CRX Architecture--`config/crx/crx.h'_
19250 Registers from r0 to r14 (registers without stack pointer)
19253 Register r16 (64-bit accumulator lo register)
19256 Register r17 (64-bit accumulator hi register)
19259 Register pair r16-r17. (64-bit accumulator lo-hi pair)
19262 Constant that fits in 3 bits
19265 Constant that fits in 4 bits
19268 Constant that fits in 5 bits
19271 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
19274 Floating point constant that is legal for store immediate
19276 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
19282 Floating point register
19285 Shift amount register
19288 Floating point register (deprecated)
19291 Upper floating point register (32-bit), floating point
19298 Signed 11-bit integer constant
19301 Signed 14-bit integer constant
19304 Integer constant that can be deposited with a `zdepi'
19308 Signed 5-bit integer constant
19314 Integer constant that can be loaded with a `ldil' instruction
19317 Integer constant whose value plus one is a power of 2
19320 Integer constant that can be used for `and' operations in
19321 `depi' and `extru' instructions
19324 Integer constant 31
19327 Integer constant 63
19330 Floating-point constant 0.0
19333 A `lo_sum' data-linkage-table memory operand
19336 A memory operand that can be used as the destination operand
19337 of an integer store instruction
19340 A scaled or unscaled indexed memory operand
19343 A memory operand for floating-point loads and stores
19346 A register indirect memory operand
19348 _picoChip family--`picochip.h'_
19354 Pointer register. A register which can be used to access
19355 memory without supplying an offset. Any other register can
19356 be used to access memory, but will need a constant offset.
19357 In the case of the offset being zero, it is more efficient to
19358 use a pointer register, since this reduces code size.
19361 A twin register. A register which may be paired with an
19362 adjacent register to create a 32-bit register.
19365 Any absolute memory address (e.g., symbolic constant, symbolic
19366 constant + offset).
19369 4-bit signed integer.
19372 4-bit unsigned integer.
19375 8-bit signed integer.
19378 Any constant whose absolute value is no greater than 4-bits.
19381 10-bit signed integer
19384 16-bit signed integer.
19387 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
19390 Address base register
19393 Floating point register (containing 64-bit value)
19396 Floating point register (containing 32-bit value)
19399 Altivec vector register
19402 VSX vector register to hold vector double data
19405 VSX vector register to hold vector float data
19408 VSX vector register to hold scalar float data
19414 `MQ', `CTR', or `LINK' register
19426 `CR' register (condition register) number 0
19429 `CR' register (condition register)
19432 `FPMEM' stack memory for FPR-GPR transfers
19435 Signed 16-bit constant
19438 Unsigned 16-bit constant shifted left 16 bits (use `L'
19439 instead for `SImode' constants)
19442 Unsigned 16-bit constant
19445 Signed 16-bit constant shifted left 16 bits
19448 Constant larger than 31
19457 Constant whose negation is a signed 16-bit constant
19460 Floating point constant that can be loaded into a register
19461 with one instruction per word
19464 Integer/Floating point constant that can be loaded into a
19465 register using three instructions
19468 Memory operand. Note that on PowerPC targets, `m' can include
19469 addresses that update the base register. It is therefore
19470 only safe to use `m' in an `asm' statement if that `asm'
19471 statement accesses the operand exactly once. The `asm'
19472 statement must also use `%U<OPNO>' as a placeholder for the
19473 "update" flag in the corresponding load or store instruction.
19476 asm ("st%U0 %1,%0" : "=m" (mem) : "r" (val));
19480 asm ("st %1,%0" : "=m" (mem) : "r" (val));
19482 is not. Use `es' rather than `m' if you don't want the base
19483 register to be updated.
19486 A "stable" memory operand; that is, one which does not
19487 include any automodification of the base register. Unlike
19488 `m', this constraint can be used in `asm' statements that
19489 might access the operand several times, or that might not
19493 Memory operand that is an offset from a register (it is
19494 usually better to use `m' or `es' in `asm' statements)
19497 Memory operand that is an indexed or indirect from a register
19498 (it is usually better to use `m' or `es' in `asm' statements)
19504 Address operand that is an indexed or indirect from a
19505 register (`p' is preferable for `asm' statements)
19508 Constant suitable as a 64-bit mask operand
19511 Constant suitable as a 32-bit mask operand
19514 System V Release 4 small data area reference
19517 AND masks that can be performed by two rldic{l, r}
19521 Vector constant that does not require memory
19524 Vector constant that is all zeros.
19527 _Intel 386--`config/i386/constraints.md'_
19530 Legacy register--the eight integer registers available on all
19531 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
19534 Any register accessible as `Rl'. In 32-bit mode, `a', `b',
19535 `c', and `d'; in 64-bit mode, any integer register.
19538 Any register accessible as `Rh': `a', `b', `c', and `d'.
19541 Any register that can be used as the index in a base+index
19542 memory access: that is, any general register except the stack
19564 The `a' and `d' registers, as a pair (for instructions that
19565 return half the result in one and half in the other).
19568 Any 80387 floating-point (stack) register.
19571 Top of 80387 floating-point stack (`%st(0)').
19574 Second from top of 80387 floating-point stack (`%st(1)').
19583 First SSE register (`%xmm0').
19586 Any SSE register, when SSE2 is enabled.
19589 Any SSE register, when SSE2 and inter-unit moves are enabled.
19592 Any MMX register, when inter-unit moves are enabled.
19595 Integer constant in the range 0 ... 31, for 32-bit shifts.
19598 Integer constant in the range 0 ... 63, for 64-bit shifts.
19601 Signed 8-bit integer constant.
19604 `0xFF' or `0xFFFF', for andsi as a zero-extending move.
19607 0, 1, 2, or 3 (shifts for the `lea' instruction).
19610 Unsigned 8-bit integer constant (for `in' and `out'
19614 Integer constant in the range 0 ... 127, for 128-bit shifts.
19617 Standard 80387 floating point constant.
19620 Standard SSE floating point constant.
19623 32-bit signed integer constant, or a symbolic reference known
19624 to fit that range (for immediate operands in sign-extending
19625 x86-64 instructions).
19628 32-bit unsigned integer constant, or a symbolic reference
19629 known to fit that range (for immediate operands in
19630 zero-extending x86-64 instructions).
19633 _Intel IA-64--`config/ia64/ia64.h'_
19636 General register `r0' to `r3' for `addl' instruction
19642 Predicate register (`c' as in "conditional")
19645 Application register residing in M-unit
19648 Application register residing in I-unit
19651 Floating-point register
19654 Memory operand. Remember that `m' allows postincrement and
19655 postdecrement which require printing with `%Pn' on IA-64.
19656 Use `S' to disallow postincrement and postdecrement.
19659 Floating-point constant 0.0 or 1.0
19662 14-bit signed integer constant
19665 22-bit signed integer constant
19668 8-bit signed integer constant for logical instructions
19671 8-bit adjusted signed integer constant for compare pseudo-ops
19674 6-bit unsigned integer constant for shift counts
19677 9-bit signed integer constant for load and store
19684 0 or -1 for `dep' instruction
19687 Non-volatile memory for floating-point loads and stores
19690 Integer constant in the range 1 to 4 for `shladd' instruction
19693 Memory operand except postincrement and postdecrement
19695 _FRV--`config/frv/frv.h'_
19698 Register in the class `ACC_REGS' (`acc0' to `acc7').
19701 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
19704 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
19708 Register in the class `GPR_REGS' (`gr0' to `gr63').
19711 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd
19712 registers are excluded not in the class but through the use
19713 of a machine mode larger than 4 bytes.
19716 Register in the class `FPR_REGS' (`fr0' to `fr63').
19719 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd
19720 registers are excluded not in the class but through the use
19721 of a machine mode larger than 4 bytes.
19724 Register in the class `LR_REG' (the `lr' register).
19727 Register in the class `QUAD_REGS' (`gr2' to `gr63').
19728 Register numbers not divisible by 4 are excluded not in the
19729 class but through the use of a machine mode larger than 8
19733 Register in the class `ICC_REGS' (`icc0' to `icc3').
19736 Register in the class `FCC_REGS' (`fcc0' to `fcc3').
19739 Register in the class `ICR_REGS' (`cc4' to `cc7').
19742 Register in the class `FCR_REGS' (`cc0' to `cc3').
19745 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
19746 Register numbers not divisible by 4 are excluded not in the
19747 class but through the use of a machine mode larger than 8
19751 Register in the class `SPR_REGS' (`lcr' and `lr').
19754 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
19757 Register in the class `ACCG_REGS' (`accg0' to `accg7').
19760 Register in the class `CR_REGS' (`cc0' to `cc7').
19763 Floating point constant zero
19766 6-bit signed integer constant
19769 10-bit signed integer constant
19772 16-bit signed integer constant
19775 16-bit unsigned integer constant
19778 12-bit signed integer constant that is negative--i.e. in the
19779 range of -2048 to -1
19785 12-bit signed integer constant that is greater than
19786 zero--i.e. in the range of 1 to 2047.
19789 _Blackfin family--`config/bfin/constraints.md'_
19798 A call clobbered P register.
19801 A single register. If N is in the range 0 to 7, the
19802 corresponding D register. If it is `A', then the register P0.
19805 Even-numbered D register
19808 Odd-numbered D register
19811 Accumulator register.
19814 Even-numbered accumulator register.
19817 Odd-numbered accumulator register.
19829 Registers used for circular buffering, i.e. I, B, or L
19845 Any D, P, B, M, I or L register.
19848 Additional registers typically used only in prologues and
19849 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
19853 Any register except accumulators or CC.
19856 Signed 16 bit integer (in the range -32768 to 32767)
19859 Unsigned 16 bit integer (in the range 0 to 65535)
19862 Signed 7 bit integer (in the range -64 to 63)
19865 Unsigned 7 bit integer (in the range 0 to 127)
19868 Unsigned 5 bit integer (in the range 0 to 31)
19871 Signed 4 bit integer (in the range -8 to 7)
19874 Signed 3 bit integer (in the range -3 to 4)
19877 Unsigned 3 bit integer (in the range 0 to 7)
19880 Constant N, where N is a single-digit constant in the range 0
19884 An integer equal to one of the MACFLAG_XXX constants that is
19885 suitable for use with either accumulator.
19888 An integer equal to one of the MACFLAG_XXX constants that is
19889 suitable for use only with accumulator A1.
19898 An integer constant with exactly a single bit set.
19901 An integer constant with all bits set except exactly one.
19908 _M32C--`config/m32c/m32c.c'_
19913 `$sp', `$fb', `$sb'.
19916 Any control register, when they're 16 bits wide (nothing if
19917 control registers are 24 bits wide)
19920 Any control register, when they're 24 bits wide.
19926 $r0, $r1, $r2, $r3.
19929 $r0 or $r2, or $r2r0 for 32 bit values.
19932 $r1 or $r3, or $r3r1 for 32 bit values.
19935 A register that can hold a 64 bit value.
19938 $r0 or $r1 (registers with addressable high/low bytes)
19947 Address registers when they're 16 bits wide.
19950 Address registers when they're 24 bits wide.
19953 Registers that can hold QI values.
19956 Registers that can be used with displacements ($a0, $a1, $sb).
19959 Registers that can hold 32 bit values.
19962 Registers that can hold 16 bit values.
19965 Registers chat can hold 16 bit values, including all control
19969 $r0 through R1, plus $a0 and $a1.
19972 The flags register.
19975 The memory-based pseudo-registers $mem0 through $mem15.
19978 Registers that can hold pointers (16 bit registers for r8c,
19979 m16c; 24 bit registers for m32cm, m32c).
19982 Matches multiple registers in a PARALLEL to form a larger
19983 register. Used to match function return values.
19998 -8 ... -1 or 1 ... 8
20001 -16 ... -1 or 1 ... 16
20004 -32 ... -1 or 1 ... 32
20010 An 8 bit value with exactly one bit set.
20013 A 16 bit value with exactly one bit set.
20016 The common src/dest memory addressing modes.
20019 Memory addressed using $a0 or $a1.
20022 Memory addressed with immediate addresses.
20025 Memory addressed using the stack pointer ($sp).
20028 Memory addressed using the frame base register ($fb).
20031 Memory addressed using the small base register ($sb).
20036 _MeP--`config/mep/constraints.md'_
20045 Any control register.
20048 Either the $hi or the $lo register.
20051 Coprocessor registers that can be directly loaded ($c0-$c15).
20054 Coprocessor registers that can be moved to each other.
20057 Coprocessor registers that can be moved to core registers.
20069 Registers which can be used in $tp-relative addressing.
20075 The coprocessor registers.
20078 The coprocessor control registers.
20084 User-defined register set A.
20087 User-defined register set B.
20090 User-defined register set C.
20093 User-defined register set D.
20096 Offsets for $gp-rel addressing.
20099 Constants that can be used directly with boolean insns.
20102 Constants that can be moved directly to registers.
20105 Small constants that can be added to registers.
20111 Small constants that can be compared to registers.
20114 Constants that can be loaded into the top half of registers.
20117 Signed 8-bit immediates.
20120 Symbols encoded for $tp-rel or $gp-rel addressing.
20123 Non-constant addresses for loading/saving coprocessor
20127 The top half of a symbol's value.
20130 A register indirect address without offset.
20133 Symbolic references to the control bus.
20136 _MIPS--`config/mips/constraints.md'_
20139 An address register. This is equivalent to `r' unless
20140 generating MIPS16 code.
20143 A floating-point register (if available).
20146 Formerly the `hi' register. This constraint is no longer
20150 The `lo' register. Use this register to store values that are
20151 no bigger than a word.
20154 The concatenated `hi' and `lo' registers. Use this register
20155 to store doubleword values.
20158 A register suitable for use in an indirect jump. This will
20159 always be `$25' for `-mabicalls'.
20162 Register `$3'. Do not use this constraint in new code; it is
20163 retained only for compatibility with glibc.
20166 Equivalent to `r'; retained for backwards compatibility.
20169 A floating-point condition code register.
20172 A signed 16-bit constant (for arithmetic instructions).
20178 An unsigned 16-bit constant (for logic instructions).
20181 A signed 32-bit constant in which the lower 16 bits are zero.
20182 Such constants can be loaded using `lui'.
20185 A constant that cannot be loaded using `lui', `addiu' or
20189 A constant in the range -65535 to -1 (inclusive).
20192 A signed 15-bit constant.
20195 A constant in the range 1 to 65535 (inclusive).
20198 Floating-point zero.
20201 An address that can be used in a non-macro load or store.
20203 _Motorola 680x0--`config/m68k/constraints.md'_
20212 68881 floating-point register, if available
20215 Integer in the range 1 to 8
20218 16-bit signed number
20221 Signed number whose magnitude is greater than 0x80
20224 Integer in the range -8 to -1
20227 Signed number whose magnitude is greater than 0x100
20230 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
20233 16 (for rotate using swap)
20236 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
20239 Numbers that mov3q can handle
20242 Floating point constant that is not a 68881 constant
20245 Operands that satisfy 'm' when -mpcrel is in effect
20248 Operands that satisfy 's' when -mpcrel is not in effect
20251 Address register indirect addressing mode
20254 Register offset addressing
20260 symbol_ref or const
20269 Range of signed numbers that don't fit in 16 bits
20272 Integers valid for mvq
20275 Integers valid for a moveq followed by a swap
20278 Integers valid for mvz
20281 Integers valid for mvs
20287 Non-register operands allowed in clr
20290 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
20305 Temporary soft register _.tmp
20308 A soft register _.d1 to _.d31
20311 Stack pointer register
20320 Pseudo register `z' (replaced by `x' or `y' at the end)
20323 An address register: x, y or z
20326 An address register: x or y
20329 Register pair (x:d) to form a 32-bit value
20332 Constants in the range -65536 to 65535
20335 Constants whose 16-bit low part is zero
20338 Constant integer 1 or -1
20341 Constant integer 16
20344 Constants in the range -8 to 2
20347 _Moxie--`config/moxie/constraints.md'_
20350 An absolute address
20356 A register indirect memory operand
20359 A constant in the range of 0 to 255.
20362 A constant in the range of 0 to -255.
20365 _RX--`config/rx/constraints.md'_
20368 An address which does not involve register indirect
20369 addressing or pre/post increment/decrement addressing.
20372 A symbol reference.
20375 A constant in the range -256 to 255, inclusive.
20378 A constant in the range -128 to 127, inclusive.
20381 A constant in the range -32768 to 32767, inclusive.
20384 A constant in the range -8388608 to 8388607, inclusive.
20387 A constant in the range 0 to 15, inclusive.
20390 _SPARC--`config/sparc/sparc.h'_
20393 Floating-point register on the SPARC-V8 architecture and
20394 lower floating-point register on the SPARC-V9 architecture.
20397 Floating-point register. It is equivalent to `f' on the
20398 SPARC-V8 architecture and contains both lower and upper
20399 floating-point registers on the SPARC-V9 architecture.
20402 Floating-point condition code register.
20405 Lower floating-point register. It is only valid on the
20406 SPARC-V9 architecture when the Visual Instruction Set is
20410 Floating-point register. It is only valid on the SPARC-V9
20411 architecture when the Visual Instruction Set is available.
20414 64-bit global or out register for the SPARC-V8+ architecture.
20420 Signed 13-bit constant
20426 32-bit constant with the low 12 bits clear (a constant that
20427 can be loaded with the `sethi' instruction)
20430 A constant in the range supported by `movcc' instructions
20433 A constant in the range supported by `movrcc' instructions
20436 Same as `K', except that it verifies that bits that are not
20437 in the lower 32-bit range are all zero. Must be used instead
20438 of `K' for modes wider than `SImode'
20444 Floating-point zero
20447 Signed 13-bit constant, sign-extended to 32 or 64 bits
20450 Floating-point constant whose integral representation can be
20451 moved into an integer register using a single sethi
20455 Floating-point constant whose integral representation can be
20456 moved into an integer register using a single mov instruction
20459 Floating-point constant whose integral representation can be
20460 moved into an integer register using a high/lo_sum
20461 instruction sequence
20464 Memory address aligned to an 8-byte boundary
20470 Memory address for `e' constraint registers
20476 _SPU--`config/spu/spu.h'_
20479 An immediate which can be loaded with the il/ila/ilh/ilhu
20480 instructions. const_int is treated as a 64 bit value.
20483 An immediate for and/xor/or instructions. const_int is
20484 treated as a 64 bit value.
20487 An immediate for the `iohl' instruction. const_int is
20488 treated as a 64 bit value.
20491 An immediate which can be loaded with `fsmbi'.
20494 An immediate which can be loaded with the il/ila/ilh/ilhu
20495 instructions. const_int is treated as a 32 bit value.
20498 An immediate for most arithmetic instructions. const_int is
20499 treated as a 32 bit value.
20502 An immediate for and/xor/or instructions. const_int is
20503 treated as a 32 bit value.
20506 An immediate for the `iohl' instruction. const_int is
20507 treated as a 32 bit value.
20510 A constant in the range [-64, 63] for shift/rotate
20514 An unsigned 7-bit constant for conversion/nop/channel
20518 A signed 10-bit constant for most arithmetic instructions.
20521 A signed 16 bit immediate for `stop'.
20524 An unsigned 16-bit constant for `iohl' and `fsmbi'.
20527 An unsigned 7-bit constant whose 3 least significant bits are
20531 An unsigned 3-bit constant for 16-byte rotates and shifts
20534 Call operand, reg, for indirect calls
20537 Call operand, symbol, for relative calls.
20540 Call operand, const_int, for absolute calls.
20543 An immediate which can be loaded with the il/ila/ilh/ilhu
20544 instructions. const_int is sign extended to 128 bit.
20547 An immediate for shift and rotate instructions. const_int is
20548 treated as a 32 bit value.
20551 An immediate for and/xor/or instructions. const_int is sign
20552 extended as a 128 bit.
20555 An immediate for the `iohl' instruction. const_int is sign
20556 extended to 128 bit.
20559 _S/390 and zSeries--`config/s390/s390.h'_
20562 Address register (general purpose register except r0)
20565 Condition code register
20568 Data register (arbitrary general purpose register)
20571 Floating-point register
20574 Unsigned 8-bit constant (0-255)
20577 Unsigned 12-bit constant (0-4095)
20580 Signed 16-bit constant (-32768-32767)
20583 Value appropriate as displacement.
20585 for short displacement
20587 `(-524288..524287)'
20588 for long displacement
20591 Constant integer with a value of 0x7fffffff.
20594 Multiple letter constraint followed by 4 parameter letters.
20596 number of the part counting from most to least
20603 mode of the containing operand
20606 value of the other parts (F--all bits set)
20607 The constraint matches if the specified part of a constant
20608 has a value different from its other parts.
20611 Memory reference without index register and with short
20615 Memory reference with index register and short displacement.
20618 Memory reference without index register but with long
20622 Memory reference with index register and long displacement.
20625 Pointer with short displacement.
20628 Pointer with long displacement.
20631 Shift count operand.
20634 _Score family--`config/score/score.h'_
20637 Registers from r0 to r32.
20640 Registers from r0 to r16.
20643 r8--r11 or r22--r27 registers.
20664 cnt + lcb + scb register.
20667 cr0--cr15 register.
20679 cp1 + cp2 + cp3 registers.
20682 High 16-bit constant (32-bit constant with 16 LSBs zero).
20685 Unsigned 5 bit integer (in the range 0 to 31).
20688 Unsigned 16 bit integer (in the range 0 to 65535).
20691 Signed 16 bit integer (in the range -32768 to 32767).
20694 Unsigned 14 bit integer (in the range 0 to 16383).
20697 Signed 14 bit integer (in the range -8192 to 8191).
20702 _Xstormy16--`config/stormy16/stormy16.h'_
20717 Registers r0 through r7.
20720 Registers r0 and r1.
20723 The carry register.
20726 Registers r8 and r9.
20729 A constant between 0 and 3 inclusive.
20732 A constant that has exactly one bit set.
20735 A constant that has exactly one bit clear.
20738 A constant between 0 and 255 inclusive.
20741 A constant between -255 and 0 inclusive.
20744 A constant between -3 and 0 inclusive.
20747 A constant between 1 and 4 inclusive.
20750 A constant between -4 and -1 inclusive.
20753 A memory reference that is a stack push.
20756 A memory reference that is a stack pop.
20759 A memory reference that refers to a constant address of known
20763 The register indicated by Rx (not implemented yet).
20766 A constant that is not between 2 and 15 inclusive.
20772 _Xtensa--`config/xtensa/constraints.md'_
20775 General-purpose 32-bit register
20778 One-bit boolean register
20781 MAC16 40-bit accumulator register
20784 Signed 12-bit integer constant, for use in MOVI instructions
20787 Signed 8-bit integer constant, for use in ADDI instructions
20790 Integer constant valid for BccI instructions
20793 Unsigned constant valid for BccUI instructions
20798 File: gccint.info, Node: Disable Insn Alternatives, Next: Machine Constraints, Prev: Modifiers, Up: Constraints
20800 16.8.6 Disable insn alternatives using the `enabled' attribute
20801 --------------------------------------------------------------
20803 The `enabled' insn attribute may be used to disable certain insn
20804 alternatives for machine-specific reasons. This is useful when adding
20805 new instructions to an existing pattern which are only available for
20806 certain cpu architecture levels as specified with the `-march=' option.
20808 If an insn alternative is disabled, then it will never be used. The
20809 compiler treats the constraints for the disabled alternative as
20812 In order to make use of the `enabled' attribute a back end has to add
20813 in the machine description files:
20815 1. A definition of the `enabled' insn attribute. The attribute is
20816 defined as usual using the `define_attr' command. This definition
20817 should be based on other insn attributes and/or target flags. The
20818 `enabled' attribute is a numeric attribute and should evaluate to
20819 `(const_int 1)' for an enabled alternative and to `(const_int 0)'
20822 2. A definition of another insn attribute used to describe for what
20823 reason an insn alternative might be available or not. E.g.
20824 `cpu_facility' as in the example below.
20826 3. An assignment for the second attribute to each insn definition
20827 combining instructions which are not all available under the same
20828 circumstances. (Note: It obviously only makes sense for
20829 definitions with more than one alternative. Otherwise the insn
20830 pattern should be disabled or enabled using the insn condition.)
20832 E.g. the following two patterns could easily be merged using the
20833 `enabled' attribute:
20836 (define_insn "*movdi_old"
20837 [(set (match_operand:DI 0 "register_operand" "=d")
20838 (match_operand:DI 1 "register_operand" " d"))]
20842 (define_insn "*movdi_new"
20843 [(set (match_operand:DI 0 "register_operand" "=d,f,d")
20844 (match_operand:DI 1 "register_operand" " d,d,f"))]
20854 (define_insn "*movdi_combined"
20855 [(set (match_operand:DI 0 "register_operand" "=d,f,d")
20856 (match_operand:DI 1 "register_operand" " d,d,f"))]
20862 [(set_attr "cpu_facility" "*,new,new")])
20864 with the `enabled' attribute defined like this:
20867 (define_attr "cpu_facility" "standard,new" (const_string "standard"))
20869 (define_attr "enabled" ""
20870 (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
20871 (and (eq_attr "cpu_facility" "new")
20872 (ne (symbol_ref "TARGET_NEW") (const_int 0)))
20877 File: gccint.info, Node: Define Constraints, Next: C Constraint Interface, Prev: Machine Constraints, Up: Constraints
20879 16.8.7 Defining Machine-Specific Constraints
20880 --------------------------------------------
20882 Machine-specific constraints fall into two categories: register and
20883 non-register constraints. Within the latter category, constraints
20884 which allow subsets of all possible memory or address operands should
20885 be specially marked, to give `reload' more information.
20887 Machine-specific constraints can be given names of arbitrary length,
20888 but they must be entirely composed of letters, digits, underscores
20889 (`_'), and angle brackets (`< >'). Like C identifiers, they must begin
20890 with a letter or underscore.
20892 In order to avoid ambiguity in operand constraint strings, no
20893 constraint can have a name that begins with any other constraint's
20894 name. For example, if `x' is defined as a constraint name, `xy' may
20895 not be, and vice versa. As a consequence of this rule, no constraint
20896 may begin with one of the generic constraint letters: `E F V X g i m n
20899 Register constraints correspond directly to register classes. *Note
20900 Register Classes::. There is thus not much flexibility in their
20903 -- MD Expression: define_register_constraint name regclass docstring
20904 All three arguments are string constants. NAME is the name of the
20905 constraint, as it will appear in `match_operand' expressions. If
20906 NAME is a multi-letter constraint its length shall be the same for
20907 all constraints starting with the same letter. REGCLASS can be
20908 either the name of the corresponding register class (*note
20909 Register Classes::), or a C expression which evaluates to the
20910 appropriate register class. If it is an expression, it must have
20911 no side effects, and it cannot look at the operand. The usual use
20912 of expressions is to map some register constraints to `NO_REGS'
20913 when the register class is not available on a given
20916 DOCSTRING is a sentence documenting the meaning of the constraint.
20917 Docstrings are explained further below.
20919 Non-register constraints are more like predicates: the constraint
20920 definition gives a Boolean expression which indicates whether the
20921 constraint matches.
20923 -- MD Expression: define_constraint name docstring exp
20924 The NAME and DOCSTRING arguments are the same as for
20925 `define_register_constraint', but note that the docstring comes
20926 immediately after the name for these expressions. EXP is an RTL
20927 expression, obeying the same rules as the RTL expressions in
20928 predicate definitions. *Note Defining Predicates::, for details.
20929 If it evaluates true, the constraint matches; if it evaluates
20930 false, it doesn't. Constraint expressions should indicate which
20931 RTL codes they might match, just like predicate expressions.
20933 `match_test' C expressions have access to the following variables:
20936 The RTL object defining the operand.
20939 The machine mode of OP.
20942 `INTVAL (OP)', if OP is a `const_int'.
20945 `CONST_DOUBLE_HIGH (OP)', if OP is an integer `const_double'.
20948 `CONST_DOUBLE_LOW (OP)', if OP is an integer `const_double'.
20951 `CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point
20954 The *VAL variables should only be used once another piece of the
20955 expression has verified that OP is the appropriate kind of RTL
20958 Most non-register constraints should be defined with
20959 `define_constraint'. The remaining two definition expressions are only
20960 appropriate for constraints that should be handled specially by
20961 `reload' if they fail to match.
20963 -- MD Expression: define_memory_constraint name docstring exp
20964 Use this expression for constraints that match a subset of all
20965 memory operands: that is, `reload' can make them match by
20966 converting the operand to the form `(mem (reg X))', where X is a
20967 base register (from the register class specified by
20968 `BASE_REG_CLASS', *note Register Classes::).
20970 For example, on the S/390, some instructions do not accept
20971 arbitrary memory references, but only those that do not make use
20972 of an index register. The constraint letter `Q' is defined to
20973 represent a memory address of this type. If `Q' is defined with
20974 `define_memory_constraint', a `Q' constraint can handle any memory
20975 operand, because `reload' knows it can simply copy the memory
20976 address into a base register if required. This is analogous to
20977 the way an `o' constraint can handle any memory operand.
20979 The syntax and semantics are otherwise identical to
20980 `define_constraint'.
20982 -- MD Expression: define_address_constraint name docstring exp
20983 Use this expression for constraints that match a subset of all
20984 address operands: that is, `reload' can make the constraint match
20985 by converting the operand to the form `(reg X)', again with X a
20988 Constraints defined with `define_address_constraint' can only be
20989 used with the `address_operand' predicate, or machine-specific
20990 predicates that work the same way. They are treated analogously to
20991 the generic `p' constraint.
20993 The syntax and semantics are otherwise identical to
20994 `define_constraint'.
20996 For historical reasons, names beginning with the letters `G H' are
20997 reserved for constraints that match only `const_double's, and names
20998 beginning with the letters `I J K L M N O P' are reserved for
20999 constraints that match only `const_int's. This may change in the
21000 future. For the time being, constraints with these names must be
21001 written in a stylized form, so that `genpreds' can tell you did it
21004 (define_constraint "[GHIJKLMNOP]..."
21006 (and (match_code "const_int") ; `const_double' for G/H
21007 CONDITION...)) ; usually a `match_test'
21009 It is fine to use names beginning with other letters for constraints
21010 that match `const_double's or `const_int's.
21012 Each docstring in a constraint definition should be one or more
21013 complete sentences, marked up in Texinfo format. _They are currently
21014 unused._ In the future they will be copied into the GCC manual, in
21015 *Note Machine Constraints::, replacing the hand-maintained tables
21016 currently found in that section. Also, in the future the compiler may
21017 use this to give more helpful diagnostics when poor choice of `asm'
21018 constraints causes a reload failure.
21020 If you put the pseudo-Texinfo directive `@internal' at the beginning
21021 of a docstring, then (in the future) it will appear only in the
21022 internals manual's version of the machine-specific constraint tables.
21023 Use this for constraints that should not appear in `asm' statements.
21026 File: gccint.info, Node: C Constraint Interface, Prev: Define Constraints, Up: Constraints
21028 16.8.8 Testing constraints from C
21029 ---------------------------------
21031 It is occasionally useful to test a constraint from C code rather than
21032 implicitly via the constraint string in a `match_operand'. The
21033 generated file `tm_p.h' declares a few interfaces for working with
21034 machine-specific constraints. None of these interfaces work with the
21035 generic constraints described in *Note Simple Constraints::. This may
21036 change in the future.
21038 *Warning:* `tm_p.h' may declare other functions that operate on
21039 constraints, besides the ones documented here. Do not use those
21040 functions from machine-dependent code. They exist to implement the old
21041 constraint interface that machine-independent components of the
21042 compiler still expect. They will change or disappear in the future.
21044 Some valid constraint names are not valid C identifiers, so there is a
21045 mangling scheme for referring to them from C. Constraint names that do
21046 not contain angle brackets or underscores are left unchanged.
21047 Underscores are doubled, each `<' is replaced with `_l', and each `>'
21048 with `_g'. Here are some examples:
21050 *Original* *Mangled*
21058 Throughout this section, the variable C is either a constraint in the
21059 abstract sense, or a constant from `enum constraint_num'; the variable
21060 M is a mangled constraint name (usually as part of a larger identifier).
21062 -- Enum: constraint_num
21063 For each machine-specific constraint, there is a corresponding
21064 enumeration constant: `CONSTRAINT_' plus the mangled name of the
21065 constraint. Functions that take an `enum constraint_num' as an
21066 argument expect one of these constants.
21068 Machine-independent constraints do not have associated constants.
21069 This may change in the future.
21071 -- Function: inline bool satisfies_constraint_M (rtx EXP)
21072 For each machine-specific, non-register constraint M, there is one
21073 of these functions; it returns `true' if EXP satisfies the
21074 constraint. These functions are only visible if `rtl.h' was
21075 included before `tm_p.h'.
21077 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num
21079 Like the `satisfies_constraint_M' functions, but the constraint to
21080 test is given as an argument, C. If C specifies a register
21081 constraint, this function will always return `false'.
21083 -- Function: enum reg_class regclass_for_constraint (enum
21085 Returns the register class associated with C. If C is not a
21086 register constraint, or those registers are not available for the
21087 currently selected subtarget, returns `NO_REGS'.
21089 Here is an example use of `satisfies_constraint_M'. In peephole
21090 optimizations (*note Peephole Definitions::), operand constraint
21091 strings are ignored, so if there are relevant constraints, they must be
21092 tested in the C condition. In the example, the optimization is applied
21093 if operand 2 does _not_ satisfy the `K' constraint. (This is a
21094 simplified version of a peephole definition from the i386 machine
21098 [(match_scratch:SI 3 "r")
21099 (set (match_operand:SI 0 "register_operand" "")
21100 (mult:SI (match_operand:SI 1 "memory_operand" "")
21101 (match_operand:SI 2 "immediate_operand" "")))]
21103 "!satisfies_constraint_K (operands[2])"
21105 [(set (match_dup 3) (match_dup 1))
21106 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
21111 File: gccint.info, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc
21113 16.9 Standard Pattern Names For Generation
21114 ==========================================
21116 Here is a table of the instruction names that are meaningful in the RTL
21117 generation pass of the compiler. Giving one of these names to an
21118 instruction pattern tells the RTL generation pass that it can use the
21119 pattern to accomplish a certain task.
21122 Here M stands for a two-letter machine mode name, in lowercase.
21123 This instruction pattern moves data with that machine mode from
21124 operand 1 to operand 0. For example, `movsi' moves full-word data.
21126 If operand 0 is a `subreg' with mode M of a register whose own
21127 mode is wider than M, the effect of this instruction is to store
21128 the specified value in the part of the register that corresponds
21129 to mode M. Bits outside of M, but which are within the same
21130 target word as the `subreg' are undefined. Bits which are outside
21131 the target word are left unchanged.
21133 This class of patterns is special in several ways. First of all,
21134 each of these names up to and including full word size _must_ be
21135 defined, because there is no other way to copy a datum from one
21136 place to another. If there are patterns accepting operands in
21137 larger modes, `movM' must be defined for integer modes of those
21140 Second, these patterns are not used solely in the RTL generation
21141 pass. Even the reload pass can generate move insns to copy values
21142 from stack slots into temporary registers. When it does so, one
21143 of the operands is a hard register and the other is an operand
21144 that can need to be reloaded into a register.
21146 Therefore, when given such a pair of operands, the pattern must
21147 generate RTL which needs no reloading and needs no temporary
21148 registers--no registers other than the operands. For example, if
21149 you support the pattern with a `define_expand', then in such a
21150 case the `define_expand' mustn't call `force_reg' or any other such
21151 function which might generate new pseudo registers.
21153 This requirement exists even for subword modes on a RISC machine
21154 where fetching those modes from memory normally requires several
21155 insns and some temporary registers.
21157 During reload a memory reference with an invalid address may be
21158 passed as an operand. Such an address will be replaced with a
21159 valid address later in the reload pass. In this case, nothing may
21160 be done with the address except to use it as it stands. If it is
21161 copied, it will not be replaced with a valid address. No attempt
21162 should be made to make such an address into a valid address and no
21163 routine (such as `change_address') that will do so may be called.
21164 Note that `general_operand' will fail when applied to such an
21167 The global variable `reload_in_progress' (which must be explicitly
21168 declared if required) can be used to determine whether such special
21169 handling is required.
21171 The variety of operands that have reloads depends on the rest of
21172 the machine description, but typically on a RISC machine these can
21173 only be pseudo registers that did not get hard registers, while on
21174 other machines explicit memory references will get optional
21177 If a scratch register is required to move an object to or from
21178 memory, it can be allocated using `gen_reg_rtx' prior to life
21181 If there are cases which need scratch registers during or after
21182 reload, you must provide an appropriate secondary_reload target
21185 The macro `can_create_pseudo_p' can be used to determine if it is
21186 unsafe to create new pseudo registers. If this variable is
21187 nonzero, then it is unsafe to call `gen_reg_rtx' to allocate a new
21190 The constraints on a `movM' must permit moving any hard register
21191 to any other hard register provided that `HARD_REGNO_MODE_OK'
21192 permits mode M in both registers and `REGISTER_MOVE_COST' applied
21193 to their classes returns a value of 2.
21195 It is obligatory to support floating point `movM' instructions
21196 into and out of any registers that can hold fixed point values,
21197 because unions and structures (which have modes `SImode' or
21198 `DImode') can be in those registers and they may have floating
21201 There may also be a need to support fixed point `movM'
21202 instructions in and out of floating point registers.
21203 Unfortunately, I have forgotten why this was so, and I don't know
21204 whether it is still true. If `HARD_REGNO_MODE_OK' rejects fixed
21205 point values in floating point registers, then the constraints of
21206 the fixed point `movM' instructions must be designed to avoid ever
21207 trying to reload into a floating point register.
21211 These named patterns have been obsoleted by the target hook
21212 `secondary_reload'.
21214 Like `movM', but used when a scratch register is required to move
21215 between operand 0 and operand 1. Operand 2 describes the scratch
21216 register. See the discussion of the `SECONDARY_RELOAD_CLASS'
21217 macro in *note Register Classes::.
21219 There are special restrictions on the form of the `match_operand's
21220 used in these patterns. First, only the predicate for the reload
21221 operand is examined, i.e., `reload_in' examines operand 1, but not
21222 the predicates for operand 0 or 2. Second, there may be only one
21223 alternative in the constraints. Third, only a single register
21224 class letter may be used for the constraint; subsequent constraint
21225 letters are ignored. As a special exception, an empty constraint
21226 string matches the `ALL_REGS' register class. This may relieve
21227 ports of the burden of defining an `ALL_REGS' constraint letter
21228 just for these patterns.
21231 Like `movM' except that if operand 0 is a `subreg' with mode M of
21232 a register whose natural mode is wider, the `movstrictM'
21233 instruction is guaranteed not to alter any of the register except
21234 the part which belongs to mode M.
21237 This variant of a move pattern is designed to load or store a value
21238 from a memory address that is not naturally aligned for its mode.
21239 For a store, the memory will be in operand 0; for a load, the
21240 memory will be in operand 1. The other operand is guaranteed not
21241 to be a memory, so that it's easy to tell whether this is a load
21244 This pattern is used by the autovectorizer, and when expanding a
21245 `MISALIGNED_INDIRECT_REF' expression.
21248 Load several consecutive memory locations into consecutive
21249 registers. Operand 0 is the first of the consecutive registers,
21250 operand 1 is the first memory location, and operand 2 is a
21251 constant: the number of consecutive registers.
21253 Define this only if the target machine really has such an
21254 instruction; do not define this if the most efficient way of
21255 loading consecutive registers from memory is to do them one at a
21258 On some machines, there are restrictions as to which consecutive
21259 registers can be stored into memory, such as particular starting or
21260 ending register numbers or only a range of valid counts. For those
21261 machines, use a `define_expand' (*note Expander Definitions::) and
21262 make the pattern fail if the restrictions are not met.
21264 Write the generated insn as a `parallel' with elements being a
21265 `set' of one register from the appropriate memory location (you may
21266 also need `use' or `clobber' elements). Use a `match_parallel'
21267 (*note RTL Template::) to recognize the insn. See `rs6000.md' for
21268 examples of the use of this insn pattern.
21271 Similar to `load_multiple', but store several consecutive registers
21272 into consecutive memory locations. Operand 0 is the first of the
21273 consecutive memory locations, operand 1 is the first register, and
21274 operand 2 is a constant: the number of consecutive registers.
21277 Set given field in the vector value. Operand 0 is the vector to
21278 modify, operand 1 is new value of field and operand 2 specify the
21282 Extract given field from the vector value. Operand 1 is the
21283 vector, operand 2 specify field index and operand 0 place to store
21286 `vec_extract_evenM'
21287 Extract even elements from the input vectors (operand 1 and
21288 operand 2). The even elements of operand 2 are concatenated to
21289 the even elements of operand 1 in their original order. The result
21290 is stored in operand 0. The output and input vectors should have
21294 Extract odd elements from the input vectors (operand 1 and operand
21295 2). The odd elements of operand 2 are concatenated to the odd
21296 elements of operand 1 in their original order. The result is
21297 stored in operand 0. The output and input vectors should have the
21300 `vec_interleave_highM'
21301 Merge high elements of the two input vectors into the output
21302 vector. The output and input vectors should have the same modes
21303 (`N' elements). The high `N/2' elements of the first input vector
21304 are interleaved with the high `N/2' elements of the second input
21307 `vec_interleave_lowM'
21308 Merge low elements of the two input vectors into the output
21309 vector. The output and input vectors should have the same modes
21310 (`N' elements). The low `N/2' elements of the first input vector
21311 are interleaved with the low `N/2' elements of the second input
21315 Initialize the vector to given values. Operand 0 is the vector to
21316 initialize and operand 1 is parallel containing values for
21320 Output a push instruction. Operand 0 is value to push. Used only
21321 when `PUSH_ROUNDING' is defined. For historical reason, this
21322 pattern may be missing and in such case an `mov' expander is used
21323 instead, with a `MEM' expression forming the push operation. The
21324 `mov' expander method is deprecated.
21327 Add operand 2 and operand 1, storing the result in operand 0. All
21328 operands must have mode M. This can be used even on two-address
21329 machines, by means of constraints requiring operands 1 and 0 to be
21332 `ssaddM3', `usaddM3'
21334 `subM3', `sssubM3', `ussubM3'
21336 `mulM3', `ssmulM3', `usmulM3'
21338 `udivM3', `usdivM3'
21341 `andM3', `iorM3', `xorM3'
21342 Similar, for other arithmetic operations.
21345 Signed minimum and maximum operations. When used with floating
21346 point, if both operands are zeros, or if either operand is `NaN',
21347 then it is unspecified which of the two operands is returned as
21350 `reduc_smin_M', `reduc_smax_M'
21351 Find the signed minimum/maximum of the elements of a vector. The
21352 vector is operand 1, and the scalar result is stored in the least
21353 significant bits of operand 0 (also a vector). The output and
21354 input vector should have the same modes.
21356 `reduc_umin_M', `reduc_umax_M'
21357 Find the unsigned minimum/maximum of the elements of a vector. The
21358 vector is operand 1, and the scalar result is stored in the least
21359 significant bits of operand 0 (also a vector). The output and
21360 input vector should have the same modes.
21363 Compute the sum of the signed elements of a vector. The vector is
21364 operand 1, and the scalar result is stored in the least
21365 significant bits of operand 0 (also a vector). The output and
21366 input vector should have the same modes.
21369 Compute the sum of the unsigned elements of a vector. The vector
21370 is operand 1, and the scalar result is stored in the least
21371 significant bits of operand 0 (also a vector). The output and
21372 input vector should have the same modes.
21377 Compute the sum of the products of two signed/unsigned elements.
21378 Operand 1 and operand 2 are of the same mode. Their product, which
21379 is of a wider mode, is computed and added to operand 3. Operand 3
21380 is of a mode equal or wider than the mode of the product. The
21381 result is placed in operand 0, which is of the same mode as
21387 Operands 0 and 2 are of the same mode, which is wider than the
21388 mode of operand 1. Add operand 1 to operand 2 and place the
21389 widened result in operand 0. (This is used express accumulation of
21390 elements into an accumulator of a wider mode.)
21392 `vec_shl_M', `vec_shr_M'
21393 Whole vector left/right shift in bits. Operand 1 is a vector to
21394 be shifted. Operand 2 is an integer shift amount in bits.
21395 Operand 0 is where the resulting shifted vector is stored. The
21396 output and input vectors should have the same modes.
21399 Narrow (demote) and merge the elements of two vectors. Operands 1
21400 and 2 are vectors of the same mode having N integral or floating
21401 point elements of size S. Operand 0 is the resulting vector in
21402 which 2*N elements of size N/2 are concatenated after narrowing
21403 them down using truncation.
21405 `vec_pack_ssat_M', `vec_pack_usat_M'
21406 Narrow (demote) and merge the elements of two vectors. Operands 1
21407 and 2 are vectors of the same mode having N integral elements of
21408 size S. Operand 0 is the resulting vector in which the elements
21409 of the two input vectors are concatenated after narrowing them
21410 down using signed/unsigned saturating arithmetic.
21412 `vec_pack_sfix_trunc_M', `vec_pack_ufix_trunc_M'
21413 Narrow, convert to signed/unsigned integral type and merge the
21414 elements of two vectors. Operands 1 and 2 are vectors of the same
21415 mode having N floating point elements of size S. Operand 0 is the
21416 resulting vector in which 2*N elements of size N/2 are
21419 `vec_unpacks_hi_M', `vec_unpacks_lo_M'
21420 Extract and widen (promote) the high/low part of a vector of signed
21421 integral or floating point elements. The input vector (operand 1)
21422 has N elements of size S. Widen (promote) the high/low elements
21423 of the vector using signed or floating point extension and place
21424 the resulting N/2 values of size 2*S in the output vector (operand
21427 `vec_unpacku_hi_M', `vec_unpacku_lo_M'
21428 Extract and widen (promote) the high/low part of a vector of
21429 unsigned integral elements. The input vector (operand 1) has N
21430 elements of size S. Widen (promote) the high/low elements of the
21431 vector using zero extension and place the resulting N/2 values of
21432 size 2*S in the output vector (operand 0).
21434 `vec_unpacks_float_hi_M', `vec_unpacks_float_lo_M'
21435 `vec_unpacku_float_hi_M', `vec_unpacku_float_lo_M'
21436 Extract, convert to floating point type and widen the high/low
21437 part of a vector of signed/unsigned integral elements. The input
21438 vector (operand 1) has N elements of size S. Convert the high/low
21439 elements of the vector using floating point conversion and place
21440 the resulting N/2 values of size 2*S in the output vector (operand
21443 `vec_widen_umult_hi_M', `vec_widen_umult_lo_M'
21444 `vec_widen_smult_hi_M', `vec_widen_smult_lo_M'
21445 Signed/Unsigned widening multiplication. The two inputs (operands
21446 1 and 2) are vectors with N signed/unsigned elements of size S.
21447 Multiply the high/low elements of the two vectors, and put the N/2
21448 products of size 2*S in the output vector (operand 0).
21451 Multiply operands 1 and 2, which have mode `HImode', and store a
21452 `SImode' product in operand 0.
21454 `mulqihi3', `mulsidi3'
21455 Similar widening-multiplication instructions of other widths.
21457 `umulqihi3', `umulhisi3', `umulsidi3'
21458 Similar widening-multiplication instructions that do unsigned
21461 `usmulqihi3', `usmulhisi3', `usmulsidi3'
21462 Similar widening-multiplication instructions that interpret the
21463 first operand as unsigned and the second operand as signed, then
21464 do a signed multiplication.
21467 Perform a signed multiplication of operands 1 and 2, which have
21468 mode M, and store the most significant half of the product in
21469 operand 0. The least significant half of the product is discarded.
21472 Similar, but the multiplication is unsigned.
21475 Multiply operands 1 and 2, sign-extend them to mode N, add operand
21476 3, and store the result in operand 0. Operands 1 and 2 have mode
21477 M and operands 0 and 3 have mode N. Both modes must be integer or
21478 fixed-point modes and N must be twice the size of M.
21480 In other words, `maddMN4' is like `mulMN3' except that it also
21483 These instructions are not allowed to `FAIL'.
21486 Like `maddMN4', but zero-extend the multiplication operands
21487 instead of sign-extending them.
21490 Like `maddMN4', but all involved operations must be
21494 Like `umaddMN4', but all involved operations must be
21495 unsigned-saturating.
21498 Multiply operands 1 and 2, sign-extend them to mode N, subtract the
21499 result from operand 3, and store the result in operand 0.
21500 Operands 1 and 2 have mode M and operands 0 and 3 have mode N.
21501 Both modes must be integer or fixed-point modes and N must be twice
21504 In other words, `msubMN4' is like `mulMN3' except that it also
21505 subtracts the result from operand 3.
21507 These instructions are not allowed to `FAIL'.
21510 Like `msubMN4', but zero-extend the multiplication operands
21511 instead of sign-extending them.
21514 Like `msubMN4', but all involved operations must be
21518 Like `umsubMN4', but all involved operations must be
21519 unsigned-saturating.
21522 Signed division that produces both a quotient and a remainder.
21523 Operand 1 is divided by operand 2 to produce a quotient stored in
21524 operand 0 and a remainder stored in operand 3.
21526 For machines with an instruction that produces both a quotient and
21527 a remainder, provide a pattern for `divmodM4' but do not provide
21528 patterns for `divM3' and `modM3'. This allows optimization in the
21529 relatively common case when both the quotient and remainder are
21532 If an instruction that just produces a quotient or just a remainder
21533 exists and is more efficient than the instruction that produces
21534 both, write the output routine of `divmodM4' to call
21535 `find_reg_note' and look for a `REG_UNUSED' note on the quotient
21536 or remainder and generate the appropriate instruction.
21539 Similar, but does unsigned division.
21541 `ashlM3', `ssashlM3', `usashlM3'
21542 Arithmetic-shift operand 1 left by a number of bits specified by
21543 operand 2, and store the result in operand 0. Here M is the mode
21544 of operand 0 and operand 1; operand 2's mode is specified by the
21545 instruction pattern, and the compiler will convert the operand to
21546 that mode before generating the instruction. The meaning of
21547 out-of-range shift counts can optionally be specified by
21548 `TARGET_SHIFT_TRUNCATION_MASK'. *Note
21549 TARGET_SHIFT_TRUNCATION_MASK::. Operand 2 is always a scalar type.
21551 `ashrM3', `lshrM3', `rotlM3', `rotrM3'
21552 Other shift and rotate instructions, analogous to the `ashlM3'
21553 instructions. Operand 2 is always a scalar type.
21555 `vashlM3', `vashrM3', `vlshrM3', `vrotlM3', `vrotrM3'
21556 Vector shift and rotate instructions that take vectors as operand 2
21557 instead of a scalar type.
21559 `negM2', `ssnegM2', `usnegM2'
21560 Negate operand 1 and store the result in operand 0.
21563 Store the absolute value of operand 1 into operand 0.
21566 Store the square root of operand 1 into operand 0.
21568 The `sqrt' built-in function of C always uses the mode which
21569 corresponds to the C data type `double' and the `sqrtf' built-in
21570 function uses the mode which corresponds to the C data type
21574 Store the remainder of dividing operand 1 by operand 2 into
21575 operand 0, rounded towards zero to an integer.
21577 The `fmod' built-in function of C always uses the mode which
21578 corresponds to the C data type `double' and the `fmodf' built-in
21579 function uses the mode which corresponds to the C data type
21583 Store the remainder of dividing operand 1 by operand 2 into
21584 operand 0, rounded to the nearest integer.
21586 The `remainder' built-in function of C always uses the mode which
21587 corresponds to the C data type `double' and the `remainderf'
21588 built-in function uses the mode which corresponds to the C data
21592 Store the cosine of operand 1 into operand 0.
21594 The `cos' built-in function of C always uses the mode which
21595 corresponds to the C data type `double' and the `cosf' built-in
21596 function uses the mode which corresponds to the C data type
21600 Store the sine of operand 1 into operand 0.
21602 The `sin' built-in function of C always uses the mode which
21603 corresponds to the C data type `double' and the `sinf' built-in
21604 function uses the mode which corresponds to the C data type
21608 Store the exponential of operand 1 into operand 0.
21610 The `exp' built-in function of C always uses the mode which
21611 corresponds to the C data type `double' and the `expf' built-in
21612 function uses the mode which corresponds to the C data type
21616 Store the natural logarithm of operand 1 into operand 0.
21618 The `log' built-in function of C always uses the mode which
21619 corresponds to the C data type `double' and the `logf' built-in
21620 function uses the mode which corresponds to the C data type
21624 Store the value of operand 1 raised to the exponent operand 2 into
21627 The `pow' built-in function of C always uses the mode which
21628 corresponds to the C data type `double' and the `powf' built-in
21629 function uses the mode which corresponds to the C data type
21633 Store the arc tangent (inverse tangent) of operand 1 divided by
21634 operand 2 into operand 0, using the signs of both arguments to
21635 determine the quadrant of the result.
21637 The `atan2' built-in function of C always uses the mode which
21638 corresponds to the C data type `double' and the `atan2f' built-in
21639 function uses the mode which corresponds to the C data type
21643 Store the largest integral value not greater than argument.
21645 The `floor' built-in function of C always uses the mode which
21646 corresponds to the C data type `double' and the `floorf' built-in
21647 function uses the mode which corresponds to the C data type
21651 Store the argument rounded to integer towards zero.
21653 The `trunc' built-in function of C always uses the mode which
21654 corresponds to the C data type `double' and the `truncf' built-in
21655 function uses the mode which corresponds to the C data type
21659 Store the argument rounded to integer away from zero.
21661 The `round' built-in function of C always uses the mode which
21662 corresponds to the C data type `double' and the `roundf' built-in
21663 function uses the mode which corresponds to the C data type
21667 Store the argument rounded to integer away from zero.
21669 The `ceil' built-in function of C always uses the mode which
21670 corresponds to the C data type `double' and the `ceilf' built-in
21671 function uses the mode which corresponds to the C data type
21675 Store the argument rounded according to the default rounding mode
21677 The `nearbyint' built-in function of C always uses the mode which
21678 corresponds to the C data type `double' and the `nearbyintf'
21679 built-in function uses the mode which corresponds to the C data
21683 Store the argument rounded according to the default rounding mode
21684 and raise the inexact exception when the result differs in value
21687 The `rint' built-in function of C always uses the mode which
21688 corresponds to the C data type `double' and the `rintf' built-in
21689 function uses the mode which corresponds to the C data type
21693 Convert operand 1 (valid for floating point mode M) to fixed point
21694 mode N as a signed number according to the current rounding mode
21695 and store in operand 0 (which has mode N).
21698 Convert operand 1 (valid for floating point mode M) to fixed point
21699 mode N as a signed number rounding to nearest and away from zero
21700 and store in operand 0 (which has mode N).
21703 Convert operand 1 (valid for floating point mode M) to fixed point
21704 mode N as a signed number rounding down and store in operand 0
21705 (which has mode N).
21708 Convert operand 1 (valid for floating point mode M) to fixed point
21709 mode N as a signed number rounding up and store in operand 0
21710 (which has mode N).
21713 Store a value with the magnitude of operand 1 and the sign of
21714 operand 2 into operand 0.
21716 The `copysign' built-in function of C always uses the mode which
21717 corresponds to the C data type `double' and the `copysignf'
21718 built-in function uses the mode which corresponds to the C data
21722 Store into operand 0 one plus the index of the least significant
21723 1-bit of operand 1. If operand 1 is zero, store zero. M is the
21724 mode of operand 0; operand 1's mode is specified by the instruction
21725 pattern, and the compiler will convert the operand to that mode
21726 before generating the instruction.
21728 The `ffs' built-in function of C always uses the mode which
21729 corresponds to the C data type `int'.
21732 Store into operand 0 the number of leading 0-bits in X, starting
21733 at the most significant bit position. If X is 0, the
21734 `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
21735 result is undefined or has a useful value. M is the mode of
21736 operand 0; operand 1's mode is specified by the instruction
21737 pattern, and the compiler will convert the operand to that mode
21738 before generating the instruction.
21741 Store into operand 0 the number of trailing 0-bits in X, starting
21742 at the least significant bit position. If X is 0, the
21743 `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the
21744 result is undefined or has a useful value. M is the mode of
21745 operand 0; operand 1's mode is specified by the instruction
21746 pattern, and the compiler will convert the operand to that mode
21747 before generating the instruction.
21750 Store into operand 0 the number of 1-bits in X. M is the mode of
21751 operand 0; operand 1's mode is specified by the instruction
21752 pattern, and the compiler will convert the operand to that mode
21753 before generating the instruction.
21756 Store into operand 0 the parity of X, i.e. the number of 1-bits in
21757 X modulo 2. M is the mode of operand 0; operand 1's mode is
21758 specified by the instruction pattern, and the compiler will convert
21759 the operand to that mode before generating the instruction.
21762 Store the bitwise-complement of operand 1 into operand 0.
21765 Block move instruction. The destination and source blocks of
21766 memory are the first two operands, and both are `mem:BLK's with an
21767 address in mode `Pmode'.
21769 The number of bytes to move is the third operand, in mode M.
21770 Usually, you specify `word_mode' for M. However, if you can
21771 generate better code knowing the range of valid lengths is smaller
21772 than those representable in a full word, you should provide a
21773 pattern with a mode corresponding to the range of values you can
21774 handle efficiently (e.g., `QImode' for values in the range 0-127;
21775 note we avoid numbers that appear negative) and also a pattern
21778 The fourth operand is the known shared alignment of the source and
21779 destination, in the form of a `const_int' rtx. Thus, if the
21780 compiler knows that both source and destination are word-aligned,
21781 it may provide the value 4 for this operand.
21783 Optional operands 5 and 6 specify expected alignment and size of
21784 block respectively. The expected alignment differs from alignment
21785 in operand 4 in a way that the blocks are not required to be
21786 aligned according to it in all cases. This expected alignment is
21787 also in bytes, just like operand 4. Expected size, when unknown,
21788 is set to `(const_int -1)'.
21790 Descriptions of multiple `movmemM' patterns can only be beneficial
21791 if the patterns for smaller modes have fewer restrictions on their
21792 first, second and fourth operands. Note that the mode M in
21793 `movmemM' does not impose any restriction on the mode of
21794 individually moved data units in the block.
21796 These patterns need not give special consideration to the
21797 possibility that the source and destination strings might overlap.
21800 String copy instruction, with `stpcpy' semantics. Operand 0 is an
21801 output operand in mode `Pmode'. The addresses of the destination
21802 and source strings are operands 1 and 2, and both are `mem:BLK's
21803 with addresses in mode `Pmode'. The execution of the expansion of
21804 this pattern should store in operand 0 the address in which the
21805 `NUL' terminator was stored in the destination string.
21808 Block set instruction. The destination string is the first
21809 operand, given as a `mem:BLK' whose address is in mode `Pmode'.
21810 The number of bytes to set is the second operand, in mode M. The
21811 value to initialize the memory with is the third operand. Targets
21812 that only support the clearing of memory should reject any value
21813 that is not the constant 0. See `movmemM' for a discussion of the
21816 The fourth operand is the known alignment of the destination, in
21817 the form of a `const_int' rtx. Thus, if the compiler knows that
21818 the destination is word-aligned, it may provide the value 4 for
21821 Optional operands 5 and 6 specify expected alignment and size of
21822 block respectively. The expected alignment differs from alignment
21823 in operand 4 in a way that the blocks are not required to be
21824 aligned according to it in all cases. This expected alignment is
21825 also in bytes, just like operand 4. Expected size, when unknown,
21826 is set to `(const_int -1)'.
21828 The use for multiple `setmemM' is as for `movmemM'.
21831 String compare instruction, with five operands. Operand 0 is the
21832 output; it has mode M. The remaining four operands are like the
21833 operands of `movmemM'. The two memory blocks specified are
21834 compared byte by byte in lexicographic order starting at the
21835 beginning of each string. The instruction is not allowed to
21836 prefetch more than one byte at a time since either string may end
21837 in the first byte and reading past that may access an invalid page
21838 or segment and cause a fault. The effect of the instruction is to
21839 store a value in operand 0 whose sign indicates the result of the
21843 String compare instruction, without known maximum length. Operand
21844 0 is the output; it has mode M. The second and third operand are
21845 the blocks of memory to be compared; both are `mem:BLK' with an
21846 address in mode `Pmode'.
21848 The fourth operand is the known shared alignment of the source and
21849 destination, in the form of a `const_int' rtx. Thus, if the
21850 compiler knows that both source and destination are word-aligned,
21851 it may provide the value 4 for this operand.
21853 The two memory blocks specified are compared byte by byte in
21854 lexicographic order starting at the beginning of each string. The
21855 instruction is not allowed to prefetch more than one byte at a
21856 time since either string may end in the first byte and reading
21857 past that may access an invalid page or segment and cause a fault.
21858 The effect of the instruction is to store a value in operand 0
21859 whose sign indicates the result of the comparison.
21862 Block compare instruction, with five operands like the operands of
21863 `cmpstrM'. The two memory blocks specified are compared byte by
21864 byte in lexicographic order starting at the beginning of each
21865 block. Unlike `cmpstrM' the instruction can prefetch any bytes in
21866 the two memory blocks. The effect of the instruction is to store
21867 a value in operand 0 whose sign indicates the result of the
21871 Compute the length of a string, with three operands. Operand 0 is
21872 the result (of mode M), operand 1 is a `mem' referring to the
21873 first character of the string, operand 2 is the character to
21874 search for (normally zero), and operand 3 is a constant describing
21875 the known alignment of the beginning of the string.
21878 Convert signed integer operand 1 (valid for fixed point mode M) to
21879 floating point mode N and store in operand 0 (which has mode N).
21882 Convert unsigned integer operand 1 (valid for fixed point mode M)
21883 to floating point mode N and store in operand 0 (which has mode N).
21886 Convert operand 1 (valid for floating point mode M) to fixed point
21887 mode N as a signed number and store in operand 0 (which has mode
21888 N). This instruction's result is defined only when the value of
21889 operand 1 is an integer.
21891 If the machine description defines this pattern, it also needs to
21892 define the `ftrunc' pattern.
21895 Convert operand 1 (valid for floating point mode M) to fixed point
21896 mode N as an unsigned number and store in operand 0 (which has
21897 mode N). This instruction's result is defined only when the value
21898 of operand 1 is an integer.
21901 Convert operand 1 (valid for floating point mode M) to an integer
21902 value, still represented in floating point mode M, and store it in
21903 operand 0 (valid for floating point mode M).
21906 Like `fixMN2' but works for any floating point value of mode M by
21907 converting the value to an integer.
21910 Like `fixunsMN2' but works for any floating point value of mode M
21911 by converting the value to an integer.
21914 Truncate operand 1 (valid for mode M) to mode N and store in
21915 operand 0 (which has mode N). Both modes must be fixed point or
21916 both floating point.
21919 Sign-extend operand 1 (valid for mode M) to mode N and store in
21920 operand 0 (which has mode N). Both modes must be fixed point or
21921 both floating point.
21924 Zero-extend operand 1 (valid for mode M) to mode N and store in
21925 operand 0 (which has mode N). Both modes must be fixed point.
21928 Convert operand 1 of mode M to mode N and store in operand 0
21929 (which has mode N). Mode M and mode N could be fixed-point to
21930 fixed-point, signed integer to fixed-point, fixed-point to signed
21931 integer, floating-point to fixed-point, or fixed-point to
21932 floating-point. When overflows or underflows happen, the results
21936 Convert operand 1 of mode M to mode N and store in operand 0
21937 (which has mode N). Mode M and mode N could be fixed-point to
21938 fixed-point, signed integer to fixed-point, or floating-point to
21939 fixed-point. When overflows or underflows happen, the instruction
21940 saturates the results to the maximum or the minimum.
21943 Convert operand 1 of mode M to mode N and store in operand 0
21944 (which has mode N). Mode M and mode N could be unsigned integer
21945 to fixed-point, or fixed-point to unsigned integer. When
21946 overflows or underflows happen, the results are undefined.
21949 Convert unsigned integer operand 1 of mode M to fixed-point mode N
21950 and store in operand 0 (which has mode N). When overflows or
21951 underflows happen, the instruction saturates the results to the
21952 maximum or the minimum.
21955 Extract a bit-field from operand 1 (a register or memory operand),
21956 where operand 2 specifies the width in bits and operand 3 the
21957 starting bit, and store it in operand 0. Operand 0 must have mode
21958 `word_mode'. Operand 1 may have mode `byte_mode' or `word_mode';
21959 often `word_mode' is allowed only for registers. Operands 2 and 3
21960 must be valid for `word_mode'.
21962 The RTL generation pass generates this instruction only with
21963 constants for operands 2 and 3 and the constant is never zero for
21966 The bit-field value is sign-extended to a full word integer before
21967 it is stored in operand 0.
21970 Like `extv' except that the bit-field value is zero-extended.
21973 Store operand 3 (which must be valid for `word_mode') into a
21974 bit-field in operand 0, where operand 1 specifies the width in
21975 bits and operand 2 the starting bit. Operand 0 may have mode
21976 `byte_mode' or `word_mode'; often `word_mode' is allowed only for
21977 registers. Operands 1 and 2 must be valid for `word_mode'.
21979 The RTL generation pass generates this instruction only with
21980 constants for operands 1 and 2 and the constant is never zero for
21984 Conditionally move operand 2 or operand 3 into operand 0 according
21985 to the comparison in operand 1. If the comparison is true,
21986 operand 2 is moved into operand 0, otherwise operand 3 is moved.
21988 The mode of the operands being compared need not be the same as
21989 the operands being moved. Some machines, sparc64 for example,
21990 have instructions that conditionally move an integer value based
21991 on the floating point condition codes and vice versa.
21993 If the machine does not have conditional move instructions, do not
21994 define these patterns.
21997 Similar to `movMODEcc' but for conditional addition. Conditionally
21998 move operand 2 or (operands 2 + operand 3) into operand 0
21999 according to the comparison in operand 1. If the comparison is
22000 true, operand 2 is moved into operand 0, otherwise (operand 2 +
22001 operand 3) is moved.
22004 Store zero or nonzero in operand 0 according to whether a
22005 comparison is true. Operand 1 is a comparison operator. Operand
22006 2 and operand 3 are the first and second operand of the
22007 comparison, respectively. You specify the mode that operand 0
22008 must have when you write the `match_operand' expression. The
22009 compiler automatically sees which mode you have used and supplies
22010 an operand of that mode.
22012 The value stored for a true condition must have 1 as its low bit,
22013 or else must be negative. Otherwise the instruction is not
22014 suitable and you should omit it from the machine description. You
22015 describe to the compiler exactly which value is stored by defining
22016 the macro `STORE_FLAG_VALUE' (*note Misc::). If a description
22017 cannot be found that can be used for all the `sCOND' patterns, you
22018 should omit those operations from the machine description.
22020 These operations may fail, but should do so only in relatively
22021 uncommon cases; if they would fail for common cases involving
22022 integer comparisons, it is best to omit these patterns.
22024 If these operations are omitted, the compiler will usually
22025 generate code that copies the constant one to the target and
22026 branches around an assignment of zero to the target. If this code
22027 is more efficient than the potential instructions used for the
22028 `cstoreMODE4' pattern followed by those required to convert the
22029 result into a 1 or a zero in `SImode', you should omit the
22030 `cstoreMODE4' operations from the machine description.
22033 Conditional branch instruction combined with a compare instruction.
22034 Operand 0 is a comparison operator. Operand 1 and operand 2 are
22035 the first and second operands of the comparison, respectively.
22036 Operand 3 is a `label_ref' that refers to the label to jump to.
22039 A jump inside a function; an unconditional branch. Operand 0 is
22040 the `label_ref' of the label to jump to. This pattern name is
22041 mandatory on all machines.
22044 Subroutine call instruction returning no value. Operand 0 is the
22045 function to call; operand 1 is the number of bytes of arguments
22046 pushed as a `const_int'; operand 2 is the number of registers used
22049 On most machines, operand 2 is not actually stored into the RTL
22050 pattern. It is supplied for the sake of some RISC machines which
22051 need to put this information into the assembler code; they can put
22052 it in the RTL instead of operand 1.
22054 Operand 0 should be a `mem' RTX whose address is the address of the
22055 function. Note, however, that this address can be a `symbol_ref'
22056 expression even if it would not be a legitimate memory address on
22057 the target machine. If it is also not a valid argument for a call
22058 instruction, the pattern for this operation should be a
22059 `define_expand' (*note Expander Definitions::) that places the
22060 address into a register and uses that register in the call
22064 Subroutine call instruction returning a value. Operand 0 is the
22065 hard register in which the value is returned. There are three more
22066 operands, the same as the three operands of the `call' instruction
22067 (but with numbers increased by one).
22069 Subroutines that return `BLKmode' objects use the `call' insn.
22071 `call_pop', `call_value_pop'
22072 Similar to `call' and `call_value', except used if defined and if
22073 `RETURN_POPS_ARGS' is nonzero. They should emit a `parallel' that
22074 contains both the function call and a `set' to indicate the
22075 adjustment made to the frame pointer.
22077 For machines where `RETURN_POPS_ARGS' can be nonzero, the use of
22078 these patterns increases the number of functions for which the
22079 frame pointer can be eliminated, if desired.
22082 Subroutine call instruction returning a value of any type.
22083 Operand 0 is the function to call; operand 1 is a memory location
22084 where the result of calling the function is to be stored; operand
22085 2 is a `parallel' expression where each element is a `set'
22086 expression that indicates the saving of a function return value
22087 into the result block.
22089 This instruction pattern should be defined to support
22090 `__builtin_apply' on machines where special instructions are needed
22091 to call a subroutine with arbitrary arguments or to save the value
22092 returned. This instruction pattern is required on machines that
22093 have multiple registers that can hold a return value (i.e.
22094 `FUNCTION_VALUE_REGNO_P' is true for more than one register).
22097 Subroutine return instruction. This instruction pattern name
22098 should be defined only if a single instruction can do all the work
22099 of returning from a function.
22101 Like the `movM' patterns, this pattern is also used after the RTL
22102 generation phase. In this case it is to support machines where
22103 multiple instructions are usually needed to return from a
22104 function, but some class of functions only requires one
22105 instruction to implement a return. Normally, the applicable
22106 functions are those which do not need to save any registers or
22107 allocate stack space.
22109 For such machines, the condition specified in this pattern should
22110 only be true when `reload_completed' is nonzero and the function's
22111 epilogue would only be a single instruction. For machines with
22112 register windows, the routine `leaf_function_p' may be used to
22113 determine if a register window push is required.
22115 Machines that have conditional return instructions should define
22120 (if_then_else (match_operator
22121 0 "comparison_operator"
22122 [(cc0) (const_int 0)])
22128 where CONDITION would normally be the same condition specified on
22129 the named `return' pattern.
22132 Untyped subroutine return instruction. This instruction pattern
22133 should be defined to support `__builtin_return' on machines where
22134 special instructions are needed to return a value of any type.
22136 Operand 0 is a memory location where the result of calling a
22137 function with `__builtin_apply' is stored; operand 1 is a
22138 `parallel' expression where each element is a `set' expression
22139 that indicates the restoring of a function return value from the
22143 No-op instruction. This instruction pattern name should always be
22144 defined to output a no-op in assembler code. `(const_int 0)' will
22145 do as an RTL pattern.
22148 An instruction to jump to an address which is operand zero. This
22149 pattern name is mandatory on all machines.
22152 Instruction to jump through a dispatch table, including bounds
22153 checking. This instruction takes five operands:
22155 1. The index to dispatch on, which has mode `SImode'.
22157 2. The lower bound for indices in the table, an integer constant.
22159 3. The total range of indices in the table--the largest index
22160 minus the smallest one (both inclusive).
22162 4. A label that precedes the table itself.
22164 5. A label to jump to if the index has a value outside the
22167 The table is an `addr_vec' or `addr_diff_vec' inside of a
22168 `jump_insn'. The number of elements in the table is one plus the
22169 difference between the upper bound and the lower bound.
22172 Instruction to jump to a variable address. This is a low-level
22173 capability which can be used to implement a dispatch table when
22174 there is no `casesi' pattern.
22176 This pattern requires two operands: the address or offset, and a
22177 label which should immediately precede the jump table. If the
22178 macro `CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then
22179 the first operand is an offset which counts from the address of
22180 the table; otherwise, it is an absolute address to jump to. In
22181 either case, the first operand has mode `Pmode'.
22183 The `tablejump' insn is always the last insn before the jump table
22184 it uses. Its assembler code normally has no need to use the
22185 second operand, but you should incorporate it in the RTL pattern so
22186 that the jump optimizer will not delete the table as unreachable
22189 `decrement_and_branch_until_zero'
22190 Conditional branch instruction that decrements a register and
22191 jumps if the register is nonzero. Operand 0 is the register to
22192 decrement and test; operand 1 is the label to jump to if the
22193 register is nonzero. *Note Looping Patterns::.
22195 This optional instruction pattern is only used by the combiner,
22196 typically for loops reversed by the loop optimizer when strength
22197 reduction is enabled.
22200 Conditional branch instruction that decrements a register and
22201 jumps if the register is nonzero. This instruction takes five
22202 operands: Operand 0 is the register to decrement and test; operand
22203 1 is the number of loop iterations as a `const_int' or
22204 `const0_rtx' if this cannot be determined until run-time; operand
22205 2 is the actual or estimated maximum number of iterations as a
22206 `const_int'; operand 3 is the number of enclosed loops as a
22207 `const_int' (an innermost loop has a value of 1); operand 4 is the
22208 label to jump to if the register is nonzero. *Note Looping
22211 This optional instruction pattern should be defined for machines
22212 with low-overhead looping instructions as the loop optimizer will
22213 try to modify suitable loops to utilize it. If nested
22214 low-overhead looping is not supported, use a `define_expand'
22215 (*note Expander Definitions::) and make the pattern fail if
22216 operand 3 is not `const1_rtx'. Similarly, if the actual or
22217 estimated maximum number of iterations is too large for this
22218 instruction, make it fail.
22221 Companion instruction to `doloop_end' required for machines that
22222 need to perform some initialization, such as loading special
22223 registers used by a low-overhead looping instruction. If
22224 initialization insns do not always need to be emitted, use a
22225 `define_expand' (*note Expander Definitions::) and make it fail.
22227 `canonicalize_funcptr_for_compare'
22228 Canonicalize the function pointer in operand 1 and store the result
22231 Operand 0 is always a `reg' and has mode `Pmode'; operand 1 may be
22232 a `reg', `mem', `symbol_ref', `const_int', etc and also has mode
22235 Canonicalization of a function pointer usually involves computing
22236 the address of the function which would be called if the function
22237 pointer were used in an indirect call.
22239 Only define this pattern if function pointers on the target machine
22240 can have different values but still call the same function when
22241 used in an indirect call.
22244 `save_stack_function'
22245 `save_stack_nonlocal'
22246 `restore_stack_block'
22247 `restore_stack_function'
22248 `restore_stack_nonlocal'
22249 Most machines save and restore the stack pointer by copying it to
22250 or from an object of mode `Pmode'. Do not define these patterns on
22253 Some machines require special handling for stack pointer saves and
22254 restores. On those machines, define the patterns corresponding to
22255 the non-standard cases by using a `define_expand' (*note Expander
22256 Definitions::) that produces the required insns. The three types
22257 of saves and restores are:
22259 1. `save_stack_block' saves the stack pointer at the start of a
22260 block that allocates a variable-sized object, and
22261 `restore_stack_block' restores the stack pointer when the
22264 2. `save_stack_function' and `restore_stack_function' do a
22265 similar job for the outermost block of a function and are
22266 used when the function allocates variable-sized objects or
22267 calls `alloca'. Only the epilogue uses the restored stack
22268 pointer, allowing a simpler save or restore sequence on some
22271 3. `save_stack_nonlocal' is used in functions that contain labels
22272 branched to by nested functions. It saves the stack pointer
22273 in such a way that the inner function can use
22274 `restore_stack_nonlocal' to restore the stack pointer. The
22275 compiler generates code to restore the frame and argument
22276 pointer registers, but some machines require saving and
22277 restoring additional data such as register window information
22278 or stack backchains. Place insns in these patterns to save
22279 and restore any such required data.
22281 When saving the stack pointer, operand 0 is the save area and
22282 operand 1 is the stack pointer. The mode used to allocate the
22283 save area defaults to `Pmode' but you can override that choice by
22284 defining the `STACK_SAVEAREA_MODE' macro (*note Storage Layout::).
22285 You must specify an integral mode, or `VOIDmode' if no save area
22286 is needed for a particular type of save (either because no save is
22287 needed or because a machine-specific save area can be used).
22288 Operand 0 is the stack pointer and operand 1 is the save area for
22289 restore operations. If `save_stack_block' is defined, operand 0
22290 must not be `VOIDmode' since these saves can be arbitrarily nested.
22292 A save area is a `mem' that is at a constant offset from
22293 `virtual_stack_vars_rtx' when the stack pointer is saved for use by
22294 nonlocal gotos and a `reg' in the other two cases.
22297 Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1
22298 from the stack pointer to create space for dynamically allocated
22301 Store the resultant pointer to this space into operand 0. If you
22302 are allocating space from the main stack, do this by emitting a
22303 move insn to copy `virtual_stack_dynamic_rtx' to operand 0. If
22304 you are allocating the space elsewhere, generate code to copy the
22305 location of the space to operand 0. In the latter case, you must
22306 ensure this space gets freed when the corresponding space on the
22307 main stack is free.
22309 Do not define this pattern if all that must be done is the
22310 subtraction. Some machines require other operations such as stack
22311 probes or maintaining the back chain. Define this pattern to emit
22312 those operations in addition to updating the stack pointer.
22315 If stack checking (*note Stack Checking::) cannot be done on your
22316 system by probing the stack, define this pattern to perform the
22317 needed check and signal an error if the stack has overflowed. The
22318 single operand is the address in the stack farthest from the
22319 current stack pointer that you need to validate. Normally, on
22320 platforms where this pattern is needed, you would obtain the stack
22321 limit from a global or thread-specific variable or register.
22324 If stack checking (*note Stack Checking::) can be done on your
22325 system by probing the stack but doing it with a "store zero"
22326 instruction is not valid or optimal, define this pattern to do the
22327 probing differently and signal an error if the stack has
22328 overflowed. The single operand is the memory reference in the
22329 stack that needs to be probed.
22332 Emit code to generate a non-local goto, e.g., a jump from one
22333 function to a label in an outer function. This pattern has four
22334 arguments, each representing a value to be used in the jump. The
22335 first argument is to be loaded into the frame pointer, the second
22336 is the address to branch to (code to dispatch to the actual label),
22337 the third is the address of a location where the stack is saved,
22338 and the last is the address of the label, to be placed in the
22339 location for the incoming static chain.
22341 On most machines you need not define this pattern, since GCC will
22342 already generate the correct code, which is to load the frame
22343 pointer and static chain, restore the stack (using the
22344 `restore_stack_nonlocal' pattern, if defined), and jump indirectly
22345 to the dispatcher. You need only define this pattern if this code
22346 will not work on your machine.
22348 `nonlocal_goto_receiver'
22349 This pattern, if defined, contains code needed at the target of a
22350 nonlocal goto after the code already generated by GCC. You will
22351 not normally need to define this pattern. A typical reason why
22352 you might need this pattern is if some value, such as a pointer to
22353 a global table, must be restored when the frame pointer is
22354 restored. Note that a nonlocal goto only occurs within a
22355 unit-of-translation, so a global table pointer that is shared by
22356 all functions of a given module need not be restored. There are
22359 `exception_receiver'
22360 This pattern, if defined, contains code needed at the site of an
22361 exception handler that isn't needed at the site of a nonlocal
22362 goto. You will not normally need to define this pattern. A
22363 typical reason why you might need this pattern is if some value,
22364 such as a pointer to a global table, must be restored after
22365 control flow is branched to the handler of an exception. There
22368 `builtin_setjmp_setup'
22369 This pattern, if defined, contains additional code needed to
22370 initialize the `jmp_buf'. You will not normally need to define
22371 this pattern. A typical reason why you might need this pattern is
22372 if some value, such as a pointer to a global table, must be
22373 restored. Though it is preferred that the pointer value be
22374 recalculated if possible (given the address of a label for
22375 instance). The single argument is a pointer to the `jmp_buf'.
22376 Note that the buffer is five words long and that the first three
22377 are normally used by the generic mechanism.
22379 `builtin_setjmp_receiver'
22380 This pattern, if defined, contains code needed at the site of a
22381 built-in setjmp that isn't needed at the site of a nonlocal goto.
22382 You will not normally need to define this pattern. A typical
22383 reason why you might need this pattern is if some value, such as a
22384 pointer to a global table, must be restored. It takes one
22385 argument, which is the label to which builtin_longjmp transfered
22386 control; this pattern may be emitted at a small offset from that
22390 This pattern, if defined, performs the entire action of the
22391 longjmp. You will not normally need to define this pattern unless
22392 you also define `builtin_setjmp_setup'. The single argument is a
22393 pointer to the `jmp_buf'.
22396 This pattern, if defined, affects the way `__builtin_eh_return',
22397 and thence the call frame exception handling library routines, are
22398 built. It is intended to handle non-trivial actions needed along
22399 the abnormal return path.
22401 The address of the exception handler to which the function should
22402 return is passed as operand to this pattern. It will normally
22403 need to copied by the pattern to some special register or memory
22404 location. If the pattern needs to determine the location of the
22405 target call frame in order to do so, it may use
22406 `EH_RETURN_STACKADJ_RTX', if defined; it will have already been
22409 If this pattern is not defined, the default action will be to
22410 simply copy the return address to `EH_RETURN_HANDLER_RTX'. Either
22411 that macro or this pattern needs to be defined if call frame
22412 exception handling is to be used.
22415 This pattern, if defined, emits RTL for entry to a function. The
22416 function entry is responsible for setting up the stack frame,
22417 initializing the frame pointer register, saving callee saved
22420 Using a prologue pattern is generally preferred over defining
22421 `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the
22424 The `prologue' pattern is particularly useful for targets which
22425 perform instruction scheduling.
22428 This pattern emits RTL for exit from a function. The function
22429 exit is responsible for deallocating the stack frame, restoring
22430 callee saved registers and emitting the return instruction.
22432 Using an epilogue pattern is generally preferred over defining
22433 `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the
22436 The `epilogue' pattern is particularly useful for targets which
22437 perform instruction scheduling or which have delay slots for their
22438 return instruction.
22441 This pattern, if defined, emits RTL for exit from a function
22442 without the final branch back to the calling function. This
22443 pattern will be emitted before any sibling call (aka tail call)
22446 The `sibcall_epilogue' pattern must not clobber any arguments used
22447 for parameter passing or any stack slots for arguments passed to
22448 the current function.
22451 This pattern, if defined, signals an error, typically by causing
22452 some kind of signal to be raised. Among other places, it is used
22453 by the Java front end to signal `invalid array index' exceptions.
22456 Conditional trap instruction. Operand 0 is a piece of RTL which
22457 performs a comparison, and operands 1 and 2 are the arms of the
22458 comparison. Operand 3 is the trap code, an integer.
22460 A typical `ctrap' pattern looks like
22462 (define_insn "ctrapsi4"
22463 [(trap_if (match_operator 0 "trap_operator"
22464 [(match_operand 1 "register_operand")
22465 (match_operand 2 "immediate_operand")])
22466 (match_operand 3 "const_int_operand" "i"))]
22471 This pattern, if defined, emits code for a non-faulting data
22472 prefetch instruction. Operand 0 is the address of the memory to
22473 prefetch. Operand 1 is a constant 1 if the prefetch is preparing
22474 for a write to the memory address, or a constant 0 otherwise.
22475 Operand 2 is the expected degree of temporal locality of the data
22476 and is a value between 0 and 3, inclusive; 0 means that the data
22477 has no temporal locality, so it need not be left in the cache
22478 after the access; 3 means that the data has a high degree of
22479 temporal locality and should be left in all levels of cache
22480 possible; 1 and 2 mean, respectively, a low or moderate degree of
22483 Targets that do not support write prefetches or locality hints can
22484 ignore the values of operands 1 and 2.
22487 This pattern defines a pseudo insn that prevents the instruction
22488 scheduler from moving instructions across the boundary defined by
22489 the blockage insn. Normally an UNSPEC_VOLATILE pattern.
22492 If the target memory model is not fully synchronous, then this
22493 pattern should be defined to an instruction that orders both loads
22494 and stores before the instruction with respect to loads and stores
22495 after the instruction. This pattern has no operands.
22497 `sync_compare_and_swapMODE'
22498 This pattern, if defined, emits code for an atomic compare-and-swap
22499 operation. Operand 1 is the memory on which the atomic operation
22500 is performed. Operand 2 is the "old" value to be compared against
22501 the current contents of the memory location. Operand 3 is the
22502 "new" value to store in the memory if the compare succeeds.
22503 Operand 0 is the result of the operation; it should contain the
22504 contents of the memory before the operation. If the compare
22505 succeeds, this should obviously be a copy of operand 2.
22507 This pattern must show that both operand 0 and operand 1 are
22510 This pattern must issue any memory barrier instructions such that
22511 all memory operations before the atomic operation occur before the
22512 atomic operation and all memory operations after the atomic
22513 operation occur after the atomic operation.
22515 For targets where the success or failure of the compare-and-swap
22516 operation is available via the status flags, it is possible to
22517 avoid a separate compare operation and issue the subsequent branch
22518 or store-flag operation immediately after the compare-and-swap.
22519 To this end, GCC will look for a `MODE_CC' set in the output of
22520 `sync_compare_and_swapMODE'; if the machine description includes
22521 such a set, the target should also define special `cbranchcc4'
22522 and/or `cstorecc4' instructions. GCC will then be able to take
22523 the destination of the `MODE_CC' set and pass it to the
22524 `cbranchcc4' or `cstorecc4' pattern as the first operand of the
22525 comparison (the second will be `(const_int 0)').
22527 `sync_addMODE', `sync_subMODE'
22528 `sync_iorMODE', `sync_andMODE'
22529 `sync_xorMODE', `sync_nandMODE'
22530 These patterns emit code for an atomic operation on memory.
22531 Operand 0 is the memory on which the atomic operation is performed.
22532 Operand 1 is the second operand to the binary operator.
22534 This pattern must issue any memory barrier instructions such that
22535 all memory operations before the atomic operation occur before the
22536 atomic operation and all memory operations after the atomic
22537 operation occur after the atomic operation.
22539 If these patterns are not defined, the operation will be
22540 constructed from a compare-and-swap operation, if defined.
22542 `sync_old_addMODE', `sync_old_subMODE'
22543 `sync_old_iorMODE', `sync_old_andMODE'
22544 `sync_old_xorMODE', `sync_old_nandMODE'
22545 These patterns are emit code for an atomic operation on memory,
22546 and return the value that the memory contained before the
22547 operation. Operand 0 is the result value, operand 1 is the memory
22548 on which the atomic operation is performed, and operand 2 is the
22549 second operand to the binary operator.
22551 This pattern must issue any memory barrier instructions such that
22552 all memory operations before the atomic operation occur before the
22553 atomic operation and all memory operations after the atomic
22554 operation occur after the atomic operation.
22556 If these patterns are not defined, the operation will be
22557 constructed from a compare-and-swap operation, if defined.
22559 `sync_new_addMODE', `sync_new_subMODE'
22560 `sync_new_iorMODE', `sync_new_andMODE'
22561 `sync_new_xorMODE', `sync_new_nandMODE'
22562 These patterns are like their `sync_old_OP' counterparts, except
22563 that they return the value that exists in the memory location
22564 after the operation, rather than before the operation.
22566 `sync_lock_test_and_setMODE'
22567 This pattern takes two forms, based on the capabilities of the
22568 target. In either case, operand 0 is the result of the operand,
22569 operand 1 is the memory on which the atomic operation is
22570 performed, and operand 2 is the value to set in the lock.
22572 In the ideal case, this operation is an atomic exchange operation,
22573 in which the previous value in memory operand is copied into the
22574 result operand, and the value operand is stored in the memory
22577 For less capable targets, any value operand that is not the
22578 constant 1 should be rejected with `FAIL'. In this case the
22579 target may use an atomic test-and-set bit operation. The result
22580 operand should contain 1 if the bit was previously set and 0 if
22581 the bit was previously clear. The true contents of the memory
22582 operand are implementation defined.
22584 This pattern must issue any memory barrier instructions such that
22585 the pattern as a whole acts as an acquire barrier, that is all
22586 memory operations after the pattern do not occur until the lock is
22589 If this pattern is not defined, the operation will be constructed
22590 from a compare-and-swap operation, if defined.
22592 `sync_lock_releaseMODE'
22593 This pattern, if defined, releases a lock set by
22594 `sync_lock_test_and_setMODE'. Operand 0 is the memory that
22595 contains the lock; operand 1 is the value to store in the lock.
22597 If the target doesn't implement full semantics for
22598 `sync_lock_test_and_setMODE', any value operand which is not the
22599 constant 0 should be rejected with `FAIL', and the true contents
22600 of the memory operand are implementation defined.
22602 This pattern must issue any memory barrier instructions such that
22603 the pattern as a whole acts as a release barrier, that is the lock
22604 is released only after all previous memory operations have
22607 If this pattern is not defined, then a `memory_barrier' pattern
22608 will be emitted, followed by a store of the value to the memory
22611 `stack_protect_set'
22612 This pattern, if defined, moves a `Pmode' value from the memory in
22613 operand 1 to the memory in operand 0 without leaving the value in
22614 a register afterward. This is to avoid leaking the value some
22615 place that an attacker might use to rewrite the stack guard slot
22616 after having clobbered it.
22618 If this pattern is not defined, then a plain move pattern is
22621 `stack_protect_test'
22622 This pattern, if defined, compares a `Pmode' value from the memory
22623 in operand 1 with the memory in operand 0 without leaving the
22624 value in a register afterward and branches to operand 2 if the
22625 values weren't equal.
22627 If this pattern is not defined, then a plain compare pattern and
22628 conditional branch pattern is used.
22631 This pattern, if defined, flushes the instruction cache for a
22632 region of memory. The region is bounded to by the Pmode pointers
22633 in operand 0 inclusive and operand 1 exclusive.
22635 If this pattern is not defined, a call to the library function
22636 `__clear_cache' is used.
22640 File: gccint.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc
22642 16.10 When the Order of Patterns Matters
22643 ========================================
22645 Sometimes an insn can match more than one instruction pattern. Then the
22646 pattern that appears first in the machine description is the one used.
22647 Therefore, more specific patterns (patterns that will match fewer
22648 things) and faster instructions (those that will produce better code
22649 when they do match) should usually go first in the description.
22651 In some cases the effect of ordering the patterns can be used to hide
22652 a pattern when it is not valid. For example, the 68000 has an
22653 instruction for converting a fullword to floating point and another for
22654 converting a byte to floating point. An instruction converting an
22655 integer to floating point could match either one. We put the pattern
22656 to convert the fullword first to make sure that one will be used rather
22657 than the other. (Otherwise a large integer might be generated as a
22658 single-byte immediate quantity, which would not work.) Instead of
22659 using this pattern ordering it would be possible to make the pattern
22660 for convert-a-byte smart enough to deal properly with any constant
22664 File: gccint.info, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc
22666 16.11 Interdependence of Patterns
22667 =================================
22669 In some cases machines support instructions identical except for the
22670 machine mode of one or more operands. For example, there may be
22671 "sign-extend halfword" and "sign-extend byte" instructions whose
22674 (set (match_operand:SI 0 ...)
22675 (extend:SI (match_operand:HI 1 ...)))
22677 (set (match_operand:SI 0 ...)
22678 (extend:SI (match_operand:QI 1 ...)))
22680 Constant integers do not specify a machine mode, so an instruction to
22681 extend a constant value could match either pattern. The pattern it
22682 actually will match is the one that appears first in the file. For
22683 correct results, this must be the one for the widest possible mode
22684 (`HImode', here). If the pattern matches the `QImode' instruction, the
22685 results will be incorrect if the constant value does not actually fit
22688 Such instructions to extend constants are rarely generated because
22689 they are optimized away, but they do occasionally happen in nonoptimized
22692 If a constraint in a pattern allows a constant, the reload pass may
22693 replace a register with a constant permitted by the constraint in some
22694 cases. Similarly for memory references. Because of this substitution,
22695 you should not provide separate patterns for increment and decrement
22696 instructions. Instead, they should be generated from the same pattern
22697 that supports register-register add insns by examining the operands and
22698 generating the appropriate machine instruction.
22701 File: gccint.info, Node: Jump Patterns, Next: Looping Patterns, Prev: Dependent Patterns, Up: Machine Desc
22703 16.12 Defining Jump Instruction Patterns
22704 ========================================
22706 GCC does not assume anything about how the machine realizes jumps. The
22707 machine description should define a single pattern, usually a
22708 `define_expand', which expands to all the required insns.
22710 Usually, this would be a comparison insn to set the condition code and
22711 a separate branch insn testing the condition code and branching or not
22712 according to its value. For many machines, however, separating
22713 compares and branches is limiting, which is why the more flexible
22714 approach with one `define_expand' is used in GCC. The machine
22715 description becomes clearer for architectures that have
22716 compare-and-branch instructions but no condition code. It also works
22717 better when different sets of comparison operators are supported by
22718 different kinds of conditional branches (e.g. integer vs.
22719 floating-point), or by conditional branches with respect to conditional
22722 Two separate insns are always used if the machine description
22723 represents a condition code register using the legacy RTL expression
22724 `(cc0)', and on most machines that use a separate condition code
22725 register (*note Condition Code::). For machines that use `(cc0)', in
22726 fact, the set and use of the condition code must be separate and
22727 adjacent(1), thus allowing flags in `cc_status' to be used (*note
22728 Condition Code::) and so that the comparison and branch insns could be
22729 located from each other by using the functions `prev_cc0_setter' and
22732 Even in this case having a single entry point for conditional branches
22733 is advantageous, because it handles equally well the case where a single
22734 comparison instruction records the results of both signed and unsigned
22735 comparison of the given operands (with the branch insns coming in
22736 distinct signed and unsigned flavors) as in the x86 or SPARC, and the
22737 case where there are distinct signed and unsigned compare instructions
22738 and only one set of conditional branch instructions as in the PowerPC.
22740 ---------- Footnotes ----------
22742 (1) `note' insns can separate them, though.
22745 File: gccint.info, Node: Looping Patterns, Next: Insn Canonicalizations, Prev: Jump Patterns, Up: Machine Desc
22747 16.13 Defining Looping Instruction Patterns
22748 ===========================================
22750 Some machines have special jump instructions that can be utilized to
22751 make loops more efficient. A common example is the 68000 `dbra'
22752 instruction which performs a decrement of a register and a branch if the
22753 result was greater than zero. Other machines, in particular digital
22754 signal processors (DSPs), have special block repeat instructions to
22755 provide low-overhead loop support. For example, the TI TMS320C3x/C4x
22756 DSPs have a block repeat instruction that loads special registers to
22757 mark the top and end of a loop and to count the number of loop
22758 iterations. This avoids the need for fetching and executing a
22759 `dbra'-like instruction and avoids pipeline stalls associated with the
22762 GCC has three special named patterns to support low overhead looping.
22763 They are `decrement_and_branch_until_zero', `doloop_begin', and
22764 `doloop_end'. The first pattern, `decrement_and_branch_until_zero', is
22765 not emitted during RTL generation but may be emitted during the
22766 instruction combination phase. This requires the assistance of the
22767 loop optimizer, using information collected during strength reduction,
22768 to reverse a loop to count down to zero. Some targets also require the
22769 loop optimizer to add a `REG_NONNEG' note to indicate that the
22770 iteration count is always positive. This is needed if the target
22771 performs a signed loop termination test. For example, the 68000 uses a
22772 pattern similar to the following for its `dbra' instruction:
22774 (define_insn "decrement_and_branch_until_zero"
22777 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
22780 (label_ref (match_operand 1 "" ""))
22783 (plus:SI (match_dup 0)
22785 "find_reg_note (insn, REG_NONNEG, 0)"
22788 Note that since the insn is both a jump insn and has an output, it must
22789 deal with its own reloads, hence the `m' constraints. Also note that
22790 since this insn is generated by the instruction combination phase
22791 combining two sequential insns together into an implicit parallel insn,
22792 the iteration counter needs to be biased by the same amount as the
22793 decrement operation, in this case -1. Note that the following similar
22794 pattern will not be matched by the combiner.
22796 (define_insn "decrement_and_branch_until_zero"
22799 (ge (match_operand:SI 0 "general_operand" "+d*am")
22801 (label_ref (match_operand 1 "" ""))
22804 (plus:SI (match_dup 0)
22806 "find_reg_note (insn, REG_NONNEG, 0)"
22809 The other two special looping patterns, `doloop_begin' and
22810 `doloop_end', are emitted by the loop optimizer for certain
22811 well-behaved loops with a finite number of loop iterations using
22812 information collected during strength reduction.
22814 The `doloop_end' pattern describes the actual looping instruction (or
22815 the implicit looping operation) and the `doloop_begin' pattern is an
22816 optional companion pattern that can be used for initialization needed
22817 for some low-overhead looping instructions.
22819 Note that some machines require the actual looping instruction to be
22820 emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting
22821 the true RTL for a looping instruction at the top of the loop can cause
22822 problems with flow analysis. So instead, a dummy `doloop' insn is
22823 emitted at the end of the loop. The machine dependent reorg pass checks
22824 for the presence of this `doloop' insn and then searches back to the
22825 top of the loop, where it inserts the true looping insn (provided there
22826 are no instructions in the loop which would cause problems). Any
22827 additional labels can be emitted at this point. In addition, if the
22828 desired special iteration counter register was not allocated, this
22829 machine dependent reorg pass could emit a traditional compare and jump
22832 The essential difference between the `decrement_and_branch_until_zero'
22833 and the `doloop_end' patterns is that the loop optimizer allocates an
22834 additional pseudo register for the latter as an iteration counter.
22835 This pseudo register cannot be used within the loop (i.e., general
22836 induction variables cannot be derived from it), however, in many cases
22837 the loop induction variable may become redundant and removed by the
22841 File: gccint.info, Node: Insn Canonicalizations, Next: Expander Definitions, Prev: Looping Patterns, Up: Machine Desc
22843 16.14 Canonicalization of Instructions
22844 ======================================
22846 There are often cases where multiple RTL expressions could represent an
22847 operation performed by a single machine instruction. This situation is
22848 most commonly encountered with logical, branch, and multiply-accumulate
22849 instructions. In such cases, the compiler attempts to convert these
22850 multiple RTL expressions into a single canonical form to reduce the
22851 number of insn patterns required.
22853 In addition to algebraic simplifications, following canonicalizations
22856 * For commutative and comparison operators, a constant is always
22857 made the second operand. If a machine only supports a constant as
22858 the second operand, only patterns that match a constant in the
22859 second operand need be supplied.
22861 * For associative operators, a sequence of operators will always
22862 chain to the left; for instance, only the left operand of an
22863 integer `plus' can itself be a `plus'. `and', `ior', `xor',
22864 `plus', `mult', `smin', `smax', `umin', and `umax' are associative
22865 when applied to integers, and sometimes to floating-point.
22867 * For these operators, if only one operand is a `neg', `not',
22868 `mult', `plus', or `minus' expression, it will be the first
22871 * In combinations of `neg', `mult', `plus', and `minus', the `neg'
22872 operations (if any) will be moved inside the operations as far as
22873 possible. For instance, `(neg (mult A B))' is canonicalized as
22874 `(mult (neg A) B)', but `(plus (mult (neg B) C) A)' is
22875 canonicalized as `(minus A (mult B C))'.
22877 * For the `compare' operator, a constant is always the second operand
22878 if the first argument is a condition code register or `(cc0)'.
22880 * An operand of `neg', `not', `mult', `plus', or `minus' is made the
22881 first operand under the same conditions as above.
22883 * `(ltu (plus A B) B)' is converted to `(ltu (plus A B) A)'.
22884 Likewise with `geu' instead of `ltu'.
22886 * `(minus X (const_int N))' is converted to `(plus X (const_int
22889 * Within address computations (i.e., inside `mem'), a left shift is
22890 converted into the appropriate multiplication by a power of two.
22892 * De Morgan's Law is used to move bitwise negation inside a bitwise
22893 logical-and or logical-or operation. If this results in only one
22894 operand being a `not' expression, it will be the first one.
22896 A machine that has an instruction that performs a bitwise
22897 logical-and of one operand with the bitwise negation of the other
22898 should specify the pattern for that instruction as
22901 [(set (match_operand:M 0 ...)
22902 (and:M (not:M (match_operand:M 1 ...))
22903 (match_operand:M 2 ...)))]
22907 Similarly, a pattern for a "NAND" instruction should be written
22910 [(set (match_operand:M 0 ...)
22911 (ior:M (not:M (match_operand:M 1 ...))
22912 (not:M (match_operand:M 2 ...))))]
22916 In both cases, it is not necessary to include patterns for the many
22917 logically equivalent RTL expressions.
22919 * The only possible RTL expressions involving both bitwise
22920 exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M
22923 * The sum of three items, one of which is a constant, will only
22926 (plus:M (plus:M X Y) CONSTANT)
22928 * Equality comparisons of a group of bits (usually a single bit)
22929 with zero will be written using `zero_extract' rather than the
22930 equivalent `and' or `sign_extract' operations.
22933 Further canonicalization rules are defined in the function
22934 `commutative_operand_precedence' in `gcc/rtlanal.c'.
22937 File: gccint.info, Node: Expander Definitions, Next: Insn Splitting, Prev: Insn Canonicalizations, Up: Machine Desc
22939 16.15 Defining RTL Sequences for Code Generation
22940 ================================================
22942 On some target machines, some standard pattern names for RTL generation
22943 cannot be handled with single insn, but a sequence of RTL insns can
22944 represent them. For these target machines, you can write a
22945 `define_expand' to specify how to generate the sequence of RTL.
22947 A `define_expand' is an RTL expression that looks almost like a
22948 `define_insn'; but, unlike the latter, a `define_expand' is used only
22949 for RTL generation and it can produce more than one RTL insn.
22951 A `define_expand' RTX has four operands:
22953 * The name. Each `define_expand' must have a name, since the only
22954 use for it is to refer to it by name.
22956 * The RTL template. This is a vector of RTL expressions representing
22957 a sequence of separate instructions. Unlike `define_insn', there
22958 is no implicit surrounding `PARALLEL'.
22960 * The condition, a string containing a C expression. This
22961 expression is used to express how the availability of this pattern
22962 depends on subclasses of target machine, selected by command-line
22963 options when GCC is run. This is just like the condition of a
22964 `define_insn' that has a standard name. Therefore, the condition
22965 (if present) may not depend on the data in the insn being matched,
22966 but only the target-machine-type flags. The compiler needs to
22967 test these conditions during initialization in order to learn
22968 exactly which named instructions are available in a particular run.
22970 * The preparation statements, a string containing zero or more C
22971 statements which are to be executed before RTL code is generated
22972 from the RTL template.
22974 Usually these statements prepare temporary registers for use as
22975 internal operands in the RTL template, but they can also generate
22976 RTL insns directly by calling routines such as `emit_insn', etc.
22977 Any such insns precede the ones that come from the RTL template.
22979 Every RTL insn emitted by a `define_expand' must match some
22980 `define_insn' in the machine description. Otherwise, the compiler will
22981 crash when trying to generate code for the insn or trying to optimize
22984 The RTL template, in addition to controlling generation of RTL insns,
22985 also describes the operands that need to be specified when this pattern
22986 is used. In particular, it gives a predicate for each operand.
22988 A true operand, which needs to be specified in order to generate RTL
22989 from the pattern, should be described with a `match_operand' in its
22990 first occurrence in the RTL template. This enters information on the
22991 operand's predicate into the tables that record such things. GCC uses
22992 the information to preload the operand into a register if that is
22993 required for valid RTL code. If the operand is referred to more than
22994 once, subsequent references should use `match_dup'.
22996 The RTL template may also refer to internal "operands" which are
22997 temporary registers or labels used only within the sequence made by the
22998 `define_expand'. Internal operands are substituted into the RTL
22999 template with `match_dup', never with `match_operand'. The values of
23000 the internal operands are not passed in as arguments by the compiler
23001 when it requests use of this pattern. Instead, they are computed
23002 within the pattern, in the preparation statements. These statements
23003 compute the values and store them into the appropriate elements of
23004 `operands' so that `match_dup' can find them.
23006 There are two special macros defined for use in the preparation
23007 statements: `DONE' and `FAIL'. Use them with a following semicolon, as
23011 Use the `DONE' macro to end RTL generation for the pattern. The
23012 only RTL insns resulting from the pattern on this occasion will be
23013 those already emitted by explicit calls to `emit_insn' within the
23014 preparation statements; the RTL template will not be generated.
23017 Make the pattern fail on this occasion. When a pattern fails, it
23018 means that the pattern was not truly available. The calling
23019 routines in the compiler will try other strategies for code
23020 generation using other patterns.
23022 Failure is currently supported only for binary (addition,
23023 multiplication, shifting, etc.) and bit-field (`extv', `extzv',
23024 and `insv') operations.
23026 If the preparation falls through (invokes neither `DONE' nor `FAIL'),
23027 then the `define_expand' acts like a `define_insn' in that the RTL
23028 template is used to generate the insn.
23030 The RTL template is not used for matching, only for generating the
23031 initial insn list. If the preparation statement always invokes `DONE'
23032 or `FAIL', the RTL template may be reduced to a simple list of
23033 operands, such as this example:
23035 (define_expand "addsi3"
23036 [(match_operand:SI 0 "register_operand" "")
23037 (match_operand:SI 1 "register_operand" "")
23038 (match_operand:SI 2 "register_operand" "")]
23042 handle_add (operands[0], operands[1], operands[2]);
23046 Here is an example, the definition of left-shift for the SPUR chip:
23048 (define_expand "ashlsi3"
23049 [(set (match_operand:SI 0 "register_operand" "")
23051 (match_operand:SI 1 "register_operand" "")
23052 (match_operand:SI 2 "nonmemory_operand" "")))]
23057 if (GET_CODE (operands[2]) != CONST_INT
23058 || (unsigned) INTVAL (operands[2]) > 3)
23062 This example uses `define_expand' so that it can generate an RTL insn
23063 for shifting when the shift-count is in the supported range of 0 to 3
23064 but fail in other cases where machine insns aren't available. When it
23065 fails, the compiler tries another strategy using different patterns
23066 (such as, a library call).
23068 If the compiler were able to handle nontrivial condition-strings in
23069 patterns with names, then it would be possible to use a `define_insn'
23070 in that case. Here is another case (zero-extension on the 68000) which
23071 makes more use of the power of `define_expand':
23073 (define_expand "zero_extendhisi2"
23074 [(set (match_operand:SI 0 "general_operand" "")
23076 (set (strict_low_part
23080 (match_operand:HI 1 "general_operand" ""))]
23082 "operands[1] = make_safe_from (operands[1], operands[0]);")
23084 Here two RTL insns are generated, one to clear the entire output operand
23085 and the other to copy the input operand into its low half. This
23086 sequence is incorrect if the input operand refers to [the old value of]
23087 the output operand, so the preparation statement makes sure this isn't
23088 so. The function `make_safe_from' copies the `operands[1]' into a
23089 temporary register if it refers to `operands[0]'. It does this by
23090 emitting another RTL insn.
23092 Finally, a third example shows the use of an internal operand.
23093 Zero-extension on the SPUR chip is done by `and'-ing the result against
23094 a halfword mask. But this mask cannot be represented by a `const_int'
23095 because the constant value is too large to be legitimate on this
23096 machine. So it must be copied into a register with `force_reg' and
23097 then the register used in the `and'.
23099 (define_expand "zero_extendhisi2"
23100 [(set (match_operand:SI 0 "register_operand" "")
23102 (match_operand:HI 1 "register_operand" "")
23107 = force_reg (SImode, GEN_INT (65535)); ")
23109 _Note:_ If the `define_expand' is used to serve a standard binary or
23110 unary arithmetic operation or a bit-field operation, then the last insn
23111 it generates must not be a `code_label', `barrier' or `note'. It must
23112 be an `insn', `jump_insn' or `call_insn'. If you don't need a real insn
23113 at the end, emit an insn to copy the result of the operation into
23114 itself. Such an insn will generate no code, but it can avoid problems
23118 File: gccint.info, Node: Insn Splitting, Next: Including Patterns, Prev: Expander Definitions, Up: Machine Desc
23120 16.16 Defining How to Split Instructions
23121 ========================================
23123 There are two cases where you should specify how to split a pattern
23124 into multiple insns. On machines that have instructions requiring
23125 delay slots (*note Delay Slots::) or that have instructions whose
23126 output is not available for multiple cycles (*note Processor pipeline
23127 description::), the compiler phases that optimize these cases need to
23128 be able to move insns into one-instruction delay slots. However, some
23129 insns may generate more than one machine instruction. These insns
23130 cannot be placed into a delay slot.
23132 Often you can rewrite the single insn as a list of individual insns,
23133 each corresponding to one machine instruction. The disadvantage of
23134 doing so is that it will cause the compilation to be slower and require
23135 more space. If the resulting insns are too complex, it may also
23136 suppress some optimizations. The compiler splits the insn if there is a
23137 reason to believe that it might improve instruction or delay slot
23140 The insn combiner phase also splits putative insns. If three insns are
23141 merged into one insn with a complex expression that cannot be matched by
23142 some `define_insn' pattern, the combiner phase attempts to split the
23143 complex pattern into two insns that are recognized. Usually it can
23144 break the complex pattern into two patterns by splitting out some
23145 subexpression. However, in some other cases, such as performing an
23146 addition of a large constant in two insns on a RISC machine, the way to
23147 split the addition into two insns is machine-dependent.
23149 The `define_split' definition tells the compiler how to split a
23150 complex insn into several simpler insns. It looks like this:
23155 [NEW-INSN-PATTERN-1
23158 "PREPARATION-STATEMENTS")
23160 INSN-PATTERN is a pattern that needs to be split and CONDITION is the
23161 final condition to be tested, as in a `define_insn'. When an insn
23162 matching INSN-PATTERN and satisfying CONDITION is found, it is replaced
23163 in the insn list with the insns given by NEW-INSN-PATTERN-1,
23164 NEW-INSN-PATTERN-2, etc.
23166 The PREPARATION-STATEMENTS are similar to those statements that are
23167 specified for `define_expand' (*note Expander Definitions::) and are
23168 executed before the new RTL is generated to prepare for the generated
23169 code or emit some insns whose pattern is not fixed. Unlike those in
23170 `define_expand', however, these statements must not generate any new
23171 pseudo-registers. Once reload has completed, they also must not
23172 allocate any space in the stack frame.
23174 Patterns are matched against INSN-PATTERN in two different
23175 circumstances. If an insn needs to be split for delay slot scheduling
23176 or insn scheduling, the insn is already known to be valid, which means
23177 that it must have been matched by some `define_insn' and, if
23178 `reload_completed' is nonzero, is known to satisfy the constraints of
23179 that `define_insn'. In that case, the new insn patterns must also be
23180 insns that are matched by some `define_insn' and, if `reload_completed'
23181 is nonzero, must also satisfy the constraints of those definitions.
23183 As an example of this usage of `define_split', consider the following
23184 example from `a29k.md', which splits a `sign_extend' from `HImode' to
23185 `SImode' into a pair of shift insns:
23188 [(set (match_operand:SI 0 "gen_reg_operand" "")
23189 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
23191 [(set (match_dup 0)
23192 (ashift:SI (match_dup 1)
23195 (ashiftrt:SI (match_dup 0)
23198 { operands[1] = gen_lowpart (SImode, operands[1]); }")
23200 When the combiner phase tries to split an insn pattern, it is always
23201 the case that the pattern is _not_ matched by any `define_insn'. The
23202 combiner pass first tries to split a single `set' expression and then
23203 the same `set' expression inside a `parallel', but followed by a
23204 `clobber' of a pseudo-reg to use as a scratch register. In these
23205 cases, the combiner expects exactly two new insn patterns to be
23206 generated. It will verify that these patterns match some `define_insn'
23207 definitions, so you need not do this test in the `define_split' (of
23208 course, there is no point in writing a `define_split' that will never
23209 produce insns that match).
23211 Here is an example of this use of `define_split', taken from
23215 [(set (match_operand:SI 0 "gen_reg_operand" "")
23216 (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
23217 (match_operand:SI 2 "non_add_cint_operand" "")))]
23219 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
23220 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
23223 int low = INTVAL (operands[2]) & 0xffff;
23224 int high = (unsigned) INTVAL (operands[2]) >> 16;
23227 high++, low |= 0xffff0000;
23229 operands[3] = GEN_INT (high << 16);
23230 operands[4] = GEN_INT (low);
23233 Here the predicate `non_add_cint_operand' matches any `const_int' that
23234 is _not_ a valid operand of a single add insn. The add with the
23235 smaller displacement is written so that it can be substituted into the
23236 address of a subsequent operation.
23238 An example that uses a scratch register, from the same file, generates
23239 an equality comparison of a register and a large constant:
23242 [(set (match_operand:CC 0 "cc_reg_operand" "")
23243 (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
23244 (match_operand:SI 2 "non_short_cint_operand" "")))
23245 (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
23246 "find_single_use (operands[0], insn, 0)
23247 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
23248 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
23249 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
23250 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
23253 /* Get the constant we are comparing against, C, and see what it
23254 looks like sign-extended to 16 bits. Then see what constant
23255 could be XOR'ed with C to get the sign-extended value. */
23257 int c = INTVAL (operands[2]);
23258 int sextc = (c << 16) >> 16;
23259 int xorv = c ^ sextc;
23261 operands[4] = GEN_INT (xorv);
23262 operands[5] = GEN_INT (sextc);
23265 To avoid confusion, don't write a single `define_split' that accepts
23266 some insns that match some `define_insn' as well as some insns that
23267 don't. Instead, write two separate `define_split' definitions, one for
23268 the insns that are valid and one for the insns that are not valid.
23270 The splitter is allowed to split jump instructions into sequence of
23271 jumps or create new jumps in while splitting non-jump instructions. As
23272 the central flowgraph and branch prediction information needs to be
23273 updated, several restriction apply.
23275 Splitting of jump instruction into sequence that over by another jump
23276 instruction is always valid, as compiler expect identical behavior of
23277 new jump. When new sequence contains multiple jump instructions or new
23278 labels, more assistance is needed. Splitter is required to create only
23279 unconditional jumps, or simple conditional jump instructions.
23280 Additionally it must attach a `REG_BR_PROB' note to each conditional
23281 jump. A global variable `split_branch_probability' holds the
23282 probability of the original branch in case it was a simple conditional
23283 jump, -1 otherwise. To simplify recomputing of edge frequencies, the
23284 new sequence is required to have only forward jumps to the newly
23287 For the common case where the pattern of a define_split exactly
23288 matches the pattern of a define_insn, use `define_insn_and_split'. It
23291 (define_insn_and_split
23296 [NEW-INSN-PATTERN-1
23299 "PREPARATION-STATEMENTS"
23302 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used
23303 as in `define_insn'. The NEW-INSN-PATTERN vector and the
23304 PREPARATION-STATEMENTS are used as in a `define_split'. The
23305 SPLIT-CONDITION is also used as in `define_split', with the additional
23306 behavior that if the condition starts with `&&', the condition used for
23307 the split will be the constructed as a logical "and" of the split
23308 condition with the insn condition. For example, from i386.md:
23310 (define_insn_and_split "zero_extendhisi2_and"
23311 [(set (match_operand:SI 0 "register_operand" "=r")
23312 (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
23313 (clobber (reg:CC 17))]
23314 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
23316 "&& reload_completed"
23317 [(parallel [(set (match_dup 0)
23318 (and:SI (match_dup 0) (const_int 65535)))
23319 (clobber (reg:CC 17))])]
23321 [(set_attr "type" "alu1")])
23323 In this case, the actual split condition will be
23324 `TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'.
23326 The `define_insn_and_split' construction provides exactly the same
23327 functionality as two separate `define_insn' and `define_split'
23328 patterns. It exists for compactness, and as a maintenance tool to
23329 prevent having to ensure the two patterns' templates match.
23332 File: gccint.info, Node: Including Patterns, Next: Peephole Definitions, Prev: Insn Splitting, Up: Machine Desc
23334 16.17 Including Patterns in Machine Descriptions.
23335 =================================================
23337 The `include' pattern tells the compiler tools where to look for
23338 patterns that are in files other than in the file `.md'. This is used
23339 only at build time and there is no preprocessing allowed.
23350 (include "filestuff")
23352 Where PATHNAME is a string that specifies the location of the file,
23353 specifies the include file to be in `gcc/config/target/filestuff'. The
23354 directory `gcc/config/target' is regarded as the default directory.
23356 Machine descriptions may be split up into smaller more manageable
23357 subsections and placed into subdirectories.
23362 (include "BOGUS/filestuff")
23364 the include file is specified to be in
23365 `gcc/config/TARGET/BOGUS/filestuff'.
23367 Specifying an absolute path for the include file such as;
23369 (include "/u2/BOGUS/filestuff")
23370 is permitted but is not encouraged.
23372 16.17.1 RTL Generation Tool Options for Directory Search
23373 --------------------------------------------------------
23375 The `-IDIR' option specifies directories to search for machine
23376 descriptions. For example:
23379 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
23381 Add the directory DIR to the head of the list of directories to be
23382 searched for header files. This can be used to override a system
23383 machine definition file, substituting your own version, since these
23384 directories are searched before the default machine description file
23385 directories. If you use more than one `-I' option, the directories are
23386 scanned in left-to-right order; the standard default directory come
23390 File: gccint.info, Node: Peephole Definitions, Next: Insn Attributes, Prev: Including Patterns, Up: Machine Desc
23392 16.18 Machine-Specific Peephole Optimizers
23393 ==========================================
23395 In addition to instruction patterns the `md' file may contain
23396 definitions of machine-specific peephole optimizations.
23398 The combiner does not notice certain peephole optimizations when the
23399 data flow in the program does not suggest that it should try them. For
23400 example, sometimes two consecutive insns related in purpose can be
23401 combined even though the second one does not appear to use a register
23402 computed in the first one. A machine-specific peephole optimizer can
23403 detect such opportunities.
23405 There are two forms of peephole definitions that may be used. The
23406 original `define_peephole' is run at assembly output time to match
23407 insns and substitute assembly text. Use of `define_peephole' is
23410 A newer `define_peephole2' matches insns and substitutes new insns.
23411 The `peephole2' pass is run after register allocation but before
23412 scheduling, which may result in much better code for targets that do
23417 * define_peephole:: RTL to Text Peephole Optimizers
23418 * define_peephole2:: RTL to RTL Peephole Optimizers
23421 File: gccint.info, Node: define_peephole, Next: define_peephole2, Up: Peephole Definitions
23423 16.18.1 RTL to Text Peephole Optimizers
23424 ---------------------------------------
23426 A definition looks like this:
23434 "OPTIONAL-INSN-ATTRIBUTES")
23436 The last string operand may be omitted if you are not using any
23437 machine-specific information in this machine description. If present,
23438 it must obey the same rules as in a `define_insn'.
23440 In this skeleton, INSN-PATTERN-1 and so on are patterns to match
23441 consecutive insns. The optimization applies to a sequence of insns when
23442 INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next,
23445 Each of the insns matched by a peephole must also match a
23446 `define_insn'. Peepholes are checked only at the last stage just
23447 before code generation, and only optionally. Therefore, any insn which
23448 would match a peephole but no `define_insn' will cause a crash in code
23449 generation in an unoptimized compilation, or at various optimization
23452 The operands of the insns are matched with `match_operands',
23453 `match_operator', and `match_dup', as usual. What is not usual is that
23454 the operand numbers apply to all the insn patterns in the definition.
23455 So, you can check for identical operands in two insns by using
23456 `match_operand' in one insn and `match_dup' in the other.
23458 The operand constraints used in `match_operand' patterns do not have
23459 any direct effect on the applicability of the peephole, but they will
23460 be validated afterward, so make sure your constraints are general enough
23461 to apply whenever the peephole matches. If the peephole matches but
23462 the constraints are not satisfied, the compiler will crash.
23464 It is safe to omit constraints in all the operands of the peephole; or
23465 you can write constraints which serve as a double-check on the criteria
23468 Once a sequence of insns matches the patterns, the CONDITION is
23469 checked. This is a C expression which makes the final decision whether
23470 to perform the optimization (we do so if the expression is nonzero). If
23471 CONDITION is omitted (in other words, the string is empty) then the
23472 optimization is applied to every sequence of insns that matches the
23475 The defined peephole optimizations are applied after register
23476 allocation is complete. Therefore, the peephole definition can check
23477 which operands have ended up in which kinds of registers, just by
23478 looking at the operands.
23480 The way to refer to the operands in CONDITION is to write
23481 `operands[I]' for operand number I (as matched by `(match_operand I
23482 ...)'). Use the variable `insn' to refer to the last of the insns
23483 being matched; use `prev_active_insn' to find the preceding insns.
23485 When optimizing computations with intermediate results, you can use
23486 CONDITION to match only when the intermediate results are not used
23487 elsewhere. Use the C expression `dead_or_set_p (INSN, OP)', where INSN
23488 is the insn in which you expect the value to be used for the last time
23489 (from the value of `insn', together with use of `prev_nonnote_insn'),
23490 and OP is the intermediate value (from `operands[I]').
23492 Applying the optimization means replacing the sequence of insns with
23493 one new insn. The TEMPLATE controls ultimate output of assembler code
23494 for this combined insn. It works exactly like the template of a
23495 `define_insn'. Operand numbers in this template are the same ones used
23496 in matching the original sequence of insns.
23498 The result of a defined peephole optimizer does not need to match any
23499 of the insn patterns in the machine description; it does not even have
23500 an opportunity to match them. The peephole optimizer definition itself
23501 serves as the insn pattern to control how the insn is output.
23503 Defined peephole optimizers are run as assembler code is being output,
23504 so the insns they produce are never combined or rearranged in any way.
23506 Here is an example, taken from the 68000 machine description:
23509 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
23510 (set (match_operand:DF 0 "register_operand" "=f")
23511 (match_operand:DF 1 "register_operand" "ad"))]
23512 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
23515 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
23517 output_asm_insn ("move.l %1,(sp)", xoperands);
23518 output_asm_insn ("move.l %1,-(sp)", operands);
23519 return "fmove.d (sp)+,%0";
23521 output_asm_insn ("movel %1,sp@", xoperands);
23522 output_asm_insn ("movel %1,sp@-", operands);
23523 return "fmoved sp@+,%0";
23527 The effect of this optimization is to change
23542 INSN-PATTERN-1 and so on look _almost_ like the second operand of
23543 `define_insn'. There is one important difference: the second operand
23544 of `define_insn' consists of one or more RTX's enclosed in square
23545 brackets. Usually, there is only one: then the same action can be
23546 written as an element of a `define_peephole'. But when there are
23547 multiple actions in a `define_insn', they are implicitly enclosed in a
23548 `parallel'. Then you must explicitly write the `parallel', and the
23549 square brackets within it, in the `define_peephole'. Thus, if an insn
23550 pattern looks like this,
23552 (define_insn "divmodsi4"
23553 [(set (match_operand:SI 0 "general_operand" "=d")
23554 (div:SI (match_operand:SI 1 "general_operand" "0")
23555 (match_operand:SI 2 "general_operand" "dmsK")))
23556 (set (match_operand:SI 3 "general_operand" "=d")
23557 (mod:SI (match_dup 1) (match_dup 2)))]
23559 "divsl%.l %2,%3:%0")
23561 then the way to mention this insn in a peephole is as follows:
23566 [(set (match_operand:SI 0 "general_operand" "=d")
23567 (div:SI (match_operand:SI 1 "general_operand" "0")
23568 (match_operand:SI 2 "general_operand" "dmsK")))
23569 (set (match_operand:SI 3 "general_operand" "=d")
23570 (mod:SI (match_dup 1) (match_dup 2)))])
23575 File: gccint.info, Node: define_peephole2, Prev: define_peephole, Up: Peephole Definitions
23577 16.18.2 RTL to RTL Peephole Optimizers
23578 --------------------------------------
23580 The `define_peephole2' definition tells the compiler how to substitute
23581 one sequence of instructions for another sequence, what additional
23582 scratch registers may be needed and what their lifetimes must be.
23589 [NEW-INSN-PATTERN-1
23592 "PREPARATION-STATEMENTS")
23594 The definition is almost identical to `define_split' (*note Insn
23595 Splitting::) except that the pattern to match is not a single
23596 instruction, but a sequence of instructions.
23598 It is possible to request additional scratch registers for use in the
23599 output template. If appropriate registers are not free, the pattern
23600 will simply not match.
23602 Scratch registers are requested with a `match_scratch' pattern at the
23603 top level of the input pattern. The allocated register (initially) will
23604 be dead at the point requested within the original sequence. If the
23605 scratch is used at more than a single point, a `match_dup' pattern at
23606 the top level of the input pattern marks the last position in the input
23607 sequence at which the register must be available.
23609 Here is an example from the IA-32 machine description:
23612 [(match_scratch:SI 2 "r")
23613 (parallel [(set (match_operand:SI 0 "register_operand" "")
23614 (match_operator:SI 3 "arith_or_logical_operator"
23616 (match_operand:SI 1 "memory_operand" "")]))
23617 (clobber (reg:CC 17))])]
23618 "! optimize_size && ! TARGET_READ_MODIFY"
23619 [(set (match_dup 2) (match_dup 1))
23620 (parallel [(set (match_dup 0)
23621 (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
23622 (clobber (reg:CC 17))])]
23625 This pattern tries to split a load from its use in the hopes that we'll
23626 be able to schedule around the memory load latency. It allocates a
23627 single `SImode' register of class `GENERAL_REGS' (`"r"') that needs to
23628 be live only at the point just before the arithmetic.
23630 A real example requiring extended scratch lifetimes is harder to come
23631 by, so here's a silly made-up example:
23634 [(match_scratch:SI 4 "r")
23635 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
23636 (set (match_operand:SI 2 "" "") (match_dup 1))
23638 (set (match_operand:SI 3 "" "") (match_dup 1))]
23639 "/* determine 1 does not overlap 0 and 2 */"
23640 [(set (match_dup 4) (match_dup 1))
23641 (set (match_dup 0) (match_dup 4))
23642 (set (match_dup 2) (match_dup 4))]
23643 (set (match_dup 3) (match_dup 4))]
23646 If we had not added the `(match_dup 4)' in the middle of the input
23647 sequence, it might have been the case that the register we chose at the
23648 beginning of the sequence is killed by the first or second `set'.
23651 File: gccint.info, Node: Insn Attributes, Next: Conditional Execution, Prev: Peephole Definitions, Up: Machine Desc
23653 16.19 Instruction Attributes
23654 ============================
23656 In addition to describing the instruction supported by the target
23657 machine, the `md' file also defines a group of "attributes" and a set of
23658 values for each. Every generated insn is assigned a value for each
23659 attribute. One possible attribute would be the effect that the insn
23660 has on the machine's condition code. This attribute can then be used
23661 by `NOTICE_UPDATE_CC' to track the condition codes.
23665 * Defining Attributes:: Specifying attributes and their values.
23666 * Expressions:: Valid expressions for attribute values.
23667 * Tagging Insns:: Assigning attribute values to insns.
23668 * Attr Example:: An example of assigning attributes.
23669 * Insn Lengths:: Computing the length of insns.
23670 * Constant Attributes:: Defining attributes that are constant.
23671 * Delay Slots:: Defining delay slots required for a machine.
23672 * Processor pipeline description:: Specifying information for insn scheduling.
23675 File: gccint.info, Node: Defining Attributes, Next: Expressions, Up: Insn Attributes
23677 16.19.1 Defining Attributes and their Values
23678 --------------------------------------------
23680 The `define_attr' expression is used to define each attribute required
23681 by the target machine. It looks like:
23683 (define_attr NAME LIST-OF-VALUES DEFAULT)
23685 NAME is a string specifying the name of the attribute being defined.
23687 LIST-OF-VALUES is either a string that specifies a comma-separated
23688 list of values that can be assigned to the attribute, or a null string
23689 to indicate that the attribute takes numeric values.
23691 DEFAULT is an attribute expression that gives the value of this
23692 attribute for insns that match patterns whose definition does not
23693 include an explicit value for this attribute. *Note Attr Example::,
23694 for more information on the handling of defaults. *Note Constant
23695 Attributes::, for information on attributes that do not depend on any
23698 For each defined attribute, a number of definitions are written to the
23699 `insn-attr.h' file. For cases where an explicit set of values is
23700 specified for an attribute, the following are defined:
23702 * A `#define' is written for the symbol `HAVE_ATTR_NAME'.
23704 * An enumerated class is defined for `attr_NAME' with elements of
23705 the form `UPPER-NAME_UPPER-VALUE' where the attribute name and
23706 value are first converted to uppercase.
23708 * A function `get_attr_NAME' is defined that is passed an insn and
23709 returns the attribute value for that insn.
23711 For example, if the following is present in the `md' file:
23713 (define_attr "type" "branch,fp,load,store,arith" ...)
23715 the following lines will be written to the file `insn-attr.h'.
23717 #define HAVE_ATTR_type
23718 enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
23719 TYPE_STORE, TYPE_ARITH};
23720 extern enum attr_type get_attr_type ();
23722 If the attribute takes numeric values, no `enum' type will be defined
23723 and the function to obtain the attribute's value will return `int'.
23725 There are attributes which are tied to a specific meaning. These
23726 attributes are not free to use for other purposes:
23729 The `length' attribute is used to calculate the length of emitted
23730 code chunks. This is especially important when verifying branch
23731 distances. *Note Insn Lengths::.
23734 The `enabled' attribute can be defined to prevent certain
23735 alternatives of an insn definition from being used during code
23736 generation. *Note Disable Insn Alternatives::.
23740 File: gccint.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes
23742 16.19.2 Attribute Expressions
23743 -----------------------------
23745 RTL expressions used to define attributes use the codes described above
23746 plus a few specific to attribute definitions, to be discussed below.
23747 Attribute value expressions must have one of the following forms:
23750 The integer I specifies the value of a numeric attribute. I must
23753 The value of a numeric attribute can be specified either with a
23754 `const_int', or as an integer represented as a string in
23755 `const_string', `eq_attr' (see below), `attr', `symbol_ref',
23756 simple arithmetic expressions, and `set_attr' overrides on
23757 specific instructions (*note Tagging Insns::).
23759 `(const_string VALUE)'
23760 The string VALUE specifies a constant attribute value. If VALUE
23761 is specified as `"*"', it means that the default value of the
23762 attribute is to be used for the insn containing this expression.
23763 `"*"' obviously cannot be used in the DEFAULT expression of a
23766 If the attribute whose value is being specified is numeric, VALUE
23767 must be a string containing a non-negative integer (normally
23768 `const_int' would be used in this case). Otherwise, it must
23769 contain one of the valid values for the attribute.
23771 `(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
23772 TEST specifies an attribute test, whose format is defined below.
23773 The value of this expression is TRUE-VALUE if TEST is true,
23774 otherwise it is FALSE-VALUE.
23776 `(cond [TEST1 VALUE1 ...] DEFAULT)'
23777 The first operand of this expression is a vector containing an even
23778 number of expressions and consisting of pairs of TEST and VALUE
23779 expressions. The value of the `cond' expression is that of the
23780 VALUE corresponding to the first true TEST expression. If none of
23781 the TEST expressions are true, the value of the `cond' expression
23782 is that of the DEFAULT expression.
23784 TEST expressions can have one of the following forms:
23787 This test is true if I is nonzero and false otherwise.
23790 `(ior TEST1 TEST2)'
23791 `(and TEST1 TEST2)'
23792 These tests are true if the indicated logical function is true.
23794 `(match_operand:M N PRED CONSTRAINTS)'
23795 This test is true if operand N of the insn whose attribute value
23796 is being determined has mode M (this part of the test is ignored
23797 if M is `VOIDmode') and the function specified by the string PRED
23798 returns a nonzero value when passed operand N and mode M (this
23799 part of the test is ignored if PRED is the null string).
23801 The CONSTRAINTS operand is ignored and should be the null string.
23803 `(le ARITH1 ARITH2)'
23804 `(leu ARITH1 ARITH2)'
23805 `(lt ARITH1 ARITH2)'
23806 `(ltu ARITH1 ARITH2)'
23807 `(gt ARITH1 ARITH2)'
23808 `(gtu ARITH1 ARITH2)'
23809 `(ge ARITH1 ARITH2)'
23810 `(geu ARITH1 ARITH2)'
23811 `(ne ARITH1 ARITH2)'
23812 `(eq ARITH1 ARITH2)'
23813 These tests are true if the indicated comparison of the two
23814 arithmetic expressions is true. Arithmetic expressions are formed
23815 with `plus', `minus', `mult', `div', `mod', `abs', `neg', `and',
23816 `ior', `xor', `not', `ashift', `lshiftrt', and `ashiftrt'
23819 `const_int' and `symbol_ref' are always valid terms (*note Insn
23820 Lengths::,for additional forms). `symbol_ref' is a string
23821 denoting a C expression that yields an `int' when evaluated by the
23822 `get_attr_...' routine. It should normally be a global variable.
23824 `(eq_attr NAME VALUE)'
23825 NAME is a string specifying the name of an attribute.
23827 VALUE is a string that is either a valid value for attribute NAME,
23828 a comma-separated list of values, or `!' followed by a value or
23829 list. If VALUE does not begin with a `!', this test is true if
23830 the value of the NAME attribute of the current insn is in the list
23831 specified by VALUE. If VALUE begins with a `!', this test is true
23832 if the attribute's value is _not_ in the specified list.
23836 (eq_attr "type" "load,store")
23840 (ior (eq_attr "type" "load") (eq_attr "type" "store"))
23842 If NAME specifies an attribute of `alternative', it refers to the
23843 value of the compiler variable `which_alternative' (*note Output
23844 Statement::) and the values must be small integers. For example,
23846 (eq_attr "alternative" "2,3")
23850 (ior (eq (symbol_ref "which_alternative") (const_int 2))
23851 (eq (symbol_ref "which_alternative") (const_int 3)))
23853 Note that, for most attributes, an `eq_attr' test is simplified in
23854 cases where the value of the attribute being tested is known for
23855 all insns matching a particular pattern. This is by far the most
23859 The value of an `attr_flag' expression is true if the flag
23860 specified by NAME is true for the `insn' currently being scheduled.
23862 NAME is a string specifying one of a fixed set of flags to test.
23863 Test the flags `forward' and `backward' to determine the direction
23864 of a conditional branch. Test the flags `very_likely', `likely',
23865 `very_unlikely', and `unlikely' to determine if a conditional
23866 branch is expected to be taken.
23868 If the `very_likely' flag is true, then the `likely' flag is also
23869 true. Likewise for the `very_unlikely' and `unlikely' flags.
23871 This example describes a conditional branch delay slot which can
23872 be nullified for forward branches that are taken (annul-true) or
23873 for backward branches which are not taken (annul-false).
23875 (define_delay (eq_attr "type" "cbranch")
23876 [(eq_attr "in_branch_delay" "true")
23877 (and (eq_attr "in_branch_delay" "true")
23878 (attr_flag "forward"))
23879 (and (eq_attr "in_branch_delay" "true")
23880 (attr_flag "backward"))])
23882 The `forward' and `backward' flags are false if the current `insn'
23883 being scheduled is not a conditional branch.
23885 The `very_likely' and `likely' flags are true if the `insn' being
23886 scheduled is not a conditional branch. The `very_unlikely' and
23887 `unlikely' flags are false if the `insn' being scheduled is not a
23888 conditional branch.
23890 `attr_flag' is only used during delay slot scheduling and has no
23891 meaning to other passes of the compiler.
23894 The value of another attribute is returned. This is most useful
23895 for numeric attributes, as `eq_attr' and `attr_flag' produce more
23896 efficient code for non-numeric attributes.
23899 File: gccint.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes
23901 16.19.3 Assigning Attribute Values to Insns
23902 -------------------------------------------
23904 The value assigned to an attribute of an insn is primarily determined by
23905 which pattern is matched by that insn (or which `define_peephole'
23906 generated it). Every `define_insn' and `define_peephole' can have an
23907 optional last argument to specify the values of attributes for matching
23908 insns. The value of any attribute not specified in a particular insn
23909 is set to the default value for that attribute, as specified in its
23910 `define_attr'. Extensive use of default values for attributes permits
23911 the specification of the values for only one or two attributes in the
23912 definition of most insn patterns, as seen in the example in the next
23915 The optional last argument of `define_insn' and `define_peephole' is a
23916 vector of expressions, each of which defines the value for a single
23917 attribute. The most general way of assigning an attribute's value is
23918 to use a `set' expression whose first operand is an `attr' expression
23919 giving the name of the attribute being set. The second operand of the
23920 `set' is an attribute expression (*note Expressions::) giving the value
23923 When the attribute value depends on the `alternative' attribute (i.e.,
23924 which is the applicable alternative in the constraint of the insn), the
23925 `set_attr_alternative' expression can be used. It allows the
23926 specification of a vector of attribute expressions, one for each
23929 When the generality of arbitrary attribute expressions is not required,
23930 the simpler `set_attr' expression can be used, which allows specifying
23931 a string giving either a single attribute value or a list of attribute
23932 values, one for each alternative.
23934 The form of each of the above specifications is shown below. In each
23935 case, NAME is a string specifying the attribute to be set.
23937 `(set_attr NAME VALUE-STRING)'
23938 VALUE-STRING is either a string giving the desired attribute value,
23939 or a string containing a comma-separated list giving the values for
23940 succeeding alternatives. The number of elements must match the
23941 number of alternatives in the constraint of the insn pattern.
23943 Note that it may be useful to specify `*' for some alternative, in
23944 which case the attribute will assume its default value for insns
23945 matching that alternative.
23947 `(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
23948 Depending on the alternative of the insn, the value will be one of
23949 the specified values. This is a shorthand for using a `cond' with
23950 tests on the `alternative' attribute.
23952 `(set (attr NAME) VALUE)'
23953 The first operand of this `set' must be the special RTL expression
23954 `attr', whose sole operand is a string giving the name of the
23955 attribute being set. VALUE is the value of the attribute.
23957 The following shows three different ways of representing the same
23958 attribute value specification:
23960 (set_attr "type" "load,store,arith")
23962 (set_attr_alternative "type"
23963 [(const_string "load") (const_string "store")
23964 (const_string "arith")])
23967 (cond [(eq_attr "alternative" "1") (const_string "load")
23968 (eq_attr "alternative" "2") (const_string "store")]
23969 (const_string "arith")))
23971 The `define_asm_attributes' expression provides a mechanism to specify
23972 the attributes assigned to insns produced from an `asm' statement. It
23975 (define_asm_attributes [ATTR-SETS])
23977 where ATTR-SETS is specified the same as for both the `define_insn' and
23978 the `define_peephole' expressions.
23980 These values will typically be the "worst case" attribute values. For
23981 example, they might indicate that the condition code will be clobbered.
23983 A specification for a `length' attribute is handled specially. The
23984 way to compute the length of an `asm' insn is to multiply the length
23985 specified in the expression `define_asm_attributes' by the number of
23986 machine instructions specified in the `asm' statement, determined by
23987 counting the number of semicolons and newlines in the string.
23988 Therefore, the value of the `length' attribute specified in a
23989 `define_asm_attributes' should be the maximum possible length of a
23990 single machine instruction.
23993 File: gccint.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes
23995 16.19.4 Example of Attribute Specifications
23996 -------------------------------------------
23998 The judicious use of defaulting is important in the efficient use of
23999 insn attributes. Typically, insns are divided into "types" and an
24000 attribute, customarily called `type', is used to represent this value.
24001 This attribute is normally used only to define the default value for
24002 other attributes. An example will clarify this usage.
24004 Assume we have a RISC machine with a condition code and in which only
24005 full-word operations are performed in registers. Let us assume that we
24006 can divide all insns into loads, stores, (integer) arithmetic
24007 operations, floating point operations, and branches.
24009 Here we will concern ourselves with determining the effect of an insn
24010 on the condition code and will limit ourselves to the following possible
24011 effects: The condition code can be set unpredictably (clobbered), not
24012 be changed, be set to agree with the results of the operation, or only
24013 changed if the item previously set into the condition code has been
24016 Here is part of a sample `md' file for such a machine:
24018 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
24020 (define_attr "cc" "clobber,unchanged,set,change0"
24021 (cond [(eq_attr "type" "load")
24022 (const_string "change0")
24023 (eq_attr "type" "store,branch")
24024 (const_string "unchanged")
24025 (eq_attr "type" "arith")
24026 (if_then_else (match_operand:SI 0 "" "")
24027 (const_string "set")
24028 (const_string "clobber"))]
24029 (const_string "clobber")))
24032 [(set (match_operand:SI 0 "general_operand" "=r,r,m")
24033 (match_operand:SI 1 "general_operand" "r,m,r"))]
24039 [(set_attr "type" "arith,load,store")])
24041 Note that we assume in the above example that arithmetic operations
24042 performed on quantities smaller than a machine word clobber the
24043 condition code since they will set the condition code to a value
24044 corresponding to the full-word result.
24047 File: gccint.info, Node: Insn Lengths, Next: Constant Attributes, Prev: Attr Example, Up: Insn Attributes
24049 16.19.5 Computing the Length of an Insn
24050 ---------------------------------------
24052 For many machines, multiple types of branch instructions are provided,
24053 each for different length branch displacements. In most cases, the
24054 assembler will choose the correct instruction to use. However, when
24055 the assembler cannot do so, GCC can when a special attribute, the
24056 `length' attribute, is defined. This attribute must be defined to have
24057 numeric values by specifying a null string in its `define_attr'.
24059 In the case of the `length' attribute, two additional forms of
24060 arithmetic terms are allowed in test expressions:
24063 This refers to the address of operand N of the current insn, which
24064 must be a `label_ref'.
24067 This refers to the address of the _current_ insn. It might have
24068 been more consistent with other usage to make this the address of
24069 the _next_ insn but this would be confusing because the length of
24070 the current insn is to be computed.
24072 For normal insns, the length will be determined by value of the
24073 `length' attribute. In the case of `addr_vec' and `addr_diff_vec' insn
24074 patterns, the length is computed as the number of vectors multiplied by
24075 the size of each vector.
24077 Lengths are measured in addressable storage units (bytes).
24079 The following macros can be used to refine the length computation:
24081 `ADJUST_INSN_LENGTH (INSN, LENGTH)'
24082 If defined, modifies the length assigned to instruction INSN as a
24083 function of the context in which it is used. LENGTH is an lvalue
24084 that contains the initially computed length of the insn and should
24085 be updated with the correct length of the insn.
24087 This macro will normally not be required. A case in which it is
24088 required is the ROMP. On this machine, the size of an `addr_vec'
24089 insn must be increased by two to compensate for the fact that
24090 alignment may be required.
24092 The routine that returns `get_attr_length' (the value of the `length'
24093 attribute) can be used by the output routine to determine the form of
24094 the branch instruction to be written, as the example below illustrates.
24096 As an example of the specification of variable-length branches,
24097 consider the IBM 360. If we adopt the convention that a register will
24098 be set to the starting address of a function, we can jump to labels
24099 within 4k of the start using a four-byte instruction. Otherwise, we
24100 need a six-byte sequence to load the address from memory and then
24103 On such a machine, a pattern for a branch instruction might be
24104 specified as follows:
24106 (define_insn "jump"
24108 (label_ref (match_operand 0 "" "")))]
24111 return (get_attr_length (insn) == 4
24112 ? "b %l0" : "l r15,=a(%l0); br r15");
24114 [(set (attr "length")
24115 (if_then_else (lt (match_dup 0) (const_int 4096))
24120 File: gccint.info, Node: Constant Attributes, Next: Delay Slots, Prev: Insn Lengths, Up: Insn Attributes
24122 16.19.6 Constant Attributes
24123 ---------------------------
24125 A special form of `define_attr', where the expression for the default
24126 value is a `const' expression, indicates an attribute that is constant
24127 for a given run of the compiler. Constant attributes may be used to
24128 specify which variety of processor is used. For example,
24130 (define_attr "cpu" "m88100,m88110,m88000"
24132 (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
24133 (symbol_ref "TARGET_88110") (const_string "m88110")]
24134 (const_string "m88000"))))
24136 (define_attr "memory" "fast,slow"
24138 (if_then_else (symbol_ref "TARGET_FAST_MEM")
24139 (const_string "fast")
24140 (const_string "slow"))))
24142 The routine generated for constant attributes has no parameters as it
24143 does not depend on any particular insn. RTL expressions used to define
24144 the value of a constant attribute may use the `symbol_ref' form, but
24145 may not use either the `match_operand' form or `eq_attr' forms
24146 involving insn attributes.
24149 File: gccint.info, Node: Delay Slots, Next: Processor pipeline description, Prev: Constant Attributes, Up: Insn Attributes
24151 16.19.7 Delay Slot Scheduling
24152 -----------------------------
24154 The insn attribute mechanism can be used to specify the requirements for
24155 delay slots, if any, on a target machine. An instruction is said to
24156 require a "delay slot" if some instructions that are physically after
24157 the instruction are executed as if they were located before it.
24158 Classic examples are branch and call instructions, which often execute
24159 the following instruction before the branch or call is performed.
24161 On some machines, conditional branch instructions can optionally
24162 "annul" instructions in the delay slot. This means that the
24163 instruction will not be executed for certain branch outcomes. Both
24164 instructions that annul if the branch is true and instructions that
24165 annul if the branch is false are supported.
24167 Delay slot scheduling differs from instruction scheduling in that
24168 determining whether an instruction needs a delay slot is dependent only
24169 on the type of instruction being generated, not on data flow between the
24170 instructions. See the next section for a discussion of data-dependent
24171 instruction scheduling.
24173 The requirement of an insn needing one or more delay slots is indicated
24174 via the `define_delay' expression. It has the following form:
24177 [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
24178 DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
24181 TEST is an attribute test that indicates whether this `define_delay'
24182 applies to a particular insn. If so, the number of required delay
24183 slots is determined by the length of the vector specified as the second
24184 argument. An insn placed in delay slot N must satisfy attribute test
24185 DELAY-N. ANNUL-TRUE-N is an attribute test that specifies which insns
24186 may be annulled if the branch is true. Similarly, ANNUL-FALSE-N
24187 specifies which insns in the delay slot may be annulled if the branch
24188 is false. If annulling is not supported for that delay slot, `(nil)'
24191 For example, in the common case where branch and call insns require a
24192 single delay slot, which may contain any insn other than a branch or
24193 call, the following would be placed in the `md' file:
24195 (define_delay (eq_attr "type" "branch,call")
24196 [(eq_attr "type" "!branch,call") (nil) (nil)])
24198 Multiple `define_delay' expressions may be specified. In this case,
24199 each such expression specifies different delay slot requirements and
24200 there must be no insn for which tests in two `define_delay' expressions
24203 For example, if we have a machine that requires one delay slot for
24204 branches but two for calls, no delay slot can contain a branch or call
24205 insn, and any valid insn in the delay slot for the branch can be
24206 annulled if the branch is true, we might represent this as follows:
24208 (define_delay (eq_attr "type" "branch")
24209 [(eq_attr "type" "!branch,call")
24210 (eq_attr "type" "!branch,call")
24213 (define_delay (eq_attr "type" "call")
24214 [(eq_attr "type" "!branch,call") (nil) (nil)
24215 (eq_attr "type" "!branch,call") (nil) (nil)])
24218 File: gccint.info, Node: Processor pipeline description, Prev: Delay Slots, Up: Insn Attributes
24220 16.19.8 Specifying processor pipeline description
24221 -------------------------------------------------
24223 To achieve better performance, most modern processors (super-pipelined,
24224 superscalar RISC, and VLIW processors) have many "functional units" on
24225 which several instructions can be executed simultaneously. An
24226 instruction starts execution if its issue conditions are satisfied. If
24227 not, the instruction is stalled until its conditions are satisfied.
24228 Such "interlock (pipeline) delay" causes interruption of the fetching
24229 of successor instructions (or demands nop instructions, e.g. for some
24232 There are two major kinds of interlock delays in modern processors.
24233 The first one is a data dependence delay determining "instruction
24234 latency time". The instruction execution is not started until all
24235 source data have been evaluated by prior instructions (there are more
24236 complex cases when the instruction execution starts even when the data
24237 are not available but will be ready in given time after the instruction
24238 execution start). Taking the data dependence delays into account is
24239 simple. The data dependence (true, output, and anti-dependence) delay
24240 between two instructions is given by a constant. In most cases this
24241 approach is adequate. The second kind of interlock delays is a
24242 reservation delay. The reservation delay means that two instructions
24243 under execution will be in need of shared processors resources, i.e.
24244 buses, internal registers, and/or functional units, which are reserved
24245 for some time. Taking this kind of delay into account is complex
24246 especially for modern RISC processors.
24248 The task of exploiting more processor parallelism is solved by an
24249 instruction scheduler. For a better solution to this problem, the
24250 instruction scheduler has to have an adequate description of the
24251 processor parallelism (or "pipeline description"). GCC machine
24252 descriptions describe processor parallelism and functional unit
24253 reservations for groups of instructions with the aid of "regular
24256 The GCC instruction scheduler uses a "pipeline hazard recognizer" to
24257 figure out the possibility of the instruction issue by the processor on
24258 a given simulated processor cycle. The pipeline hazard recognizer is
24259 automatically generated from the processor pipeline description. The
24260 pipeline hazard recognizer generated from the machine description is
24261 based on a deterministic finite state automaton (DFA): the instruction
24262 issue is possible if there is a transition from one automaton state to
24263 another one. This algorithm is very fast, and furthermore, its speed
24264 is not dependent on processor complexity(1).
24266 The rest of this section describes the directives that constitute an
24267 automaton-based processor pipeline description. The order of these
24268 constructions within the machine description file is not important.
24270 The following optional construction describes names of automata
24271 generated and used for the pipeline hazards recognition. Sometimes the
24272 generated finite state automaton used by the pipeline hazard recognizer
24273 is large. If we use more than one automaton and bind functional units
24274 to the automata, the total size of the automata is usually less than
24275 the size of the single automaton. If there is no one such
24276 construction, only one finite state automaton is generated.
24278 (define_automaton AUTOMATA-NAMES)
24280 AUTOMATA-NAMES is a string giving names of the automata. The names
24281 are separated by commas. All the automata should have unique names.
24282 The automaton name is used in the constructions `define_cpu_unit' and
24283 `define_query_cpu_unit'.
24285 Each processor functional unit used in the description of instruction
24286 reservations should be described by the following construction.
24288 (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
24290 UNIT-NAMES is a string giving the names of the functional units
24291 separated by commas. Don't use name `nothing', it is reserved for
24294 AUTOMATON-NAME is a string giving the name of the automaton with which
24295 the unit is bound. The automaton should be described in construction
24296 `define_automaton'. You should give "automaton-name", if there is a
24299 The assignment of units to automata are constrained by the uses of the
24300 units in insn reservations. The most important constraint is: if a
24301 unit reservation is present on a particular cycle of an alternative for
24302 an insn reservation, then some unit from the same automaton must be
24303 present on the same cycle for the other alternatives of the insn
24304 reservation. The rest of the constraints are mentioned in the
24305 description of the subsequent constructions.
24307 The following construction describes CPU functional units analogously
24308 to `define_cpu_unit'. The reservation of such units can be queried for
24309 an automaton state. The instruction scheduler never queries
24310 reservation of functional units for given automaton state. So as a
24311 rule, you don't need this construction. This construction could be
24312 used for future code generation goals (e.g. to generate VLIW insn
24315 (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME])
24317 UNIT-NAMES is a string giving names of the functional units separated
24320 AUTOMATON-NAME is a string giving the name of the automaton with which
24323 The following construction is the major one to describe pipeline
24324 characteristics of an instruction.
24326 (define_insn_reservation INSN-NAME DEFAULT_LATENCY
24329 DEFAULT_LATENCY is a number giving latency time of the instruction.
24330 There is an important difference between the old description and the
24331 automaton based pipeline description. The latency time is used for all
24332 dependencies when we use the old description. In the automaton based
24333 pipeline description, the given latency time is only used for true
24334 dependencies. The cost of anti-dependencies is always zero and the
24335 cost of output dependencies is the difference between latency times of
24336 the producing and consuming insns (if the difference is negative, the
24337 cost is considered to be zero). You can always change the default
24338 costs for any description by using the target hook
24339 `TARGET_SCHED_ADJUST_COST' (*note Scheduling::).
24341 INSN-NAME is a string giving the internal name of the insn. The
24342 internal names are used in constructions `define_bypass' and in the
24343 automaton description file generated for debugging. The internal name
24344 has nothing in common with the names in `define_insn'. It is a good
24345 practice to use insn classes described in the processor manual.
24347 CONDITION defines what RTL insns are described by this construction.
24348 You should remember that you will be in trouble if CONDITION for two or
24349 more different `define_insn_reservation' constructions is TRUE for an
24350 insn. In this case what reservation will be used for the insn is not
24351 defined. Such cases are not checked during generation of the pipeline
24352 hazards recognizer because in general recognizing that two conditions
24353 may have the same value is quite difficult (especially if the conditions
24354 contain `symbol_ref'). It is also not checked during the pipeline
24355 hazard recognizer work because it would slow down the recognizer
24358 REGEXP is a string describing the reservation of the cpu's functional
24359 units by the instruction. The reservations are described by a regular
24360 expression according to the following syntax:
24362 regexp = regexp "," oneof
24365 oneof = oneof "|" allof
24368 allof = allof "+" repeat
24371 repeat = element "*" number
24374 element = cpu_function_unit_name
24380 * `,' is used for describing the start of the next cycle in the
24383 * `|' is used for describing a reservation described by the first
24384 regular expression *or* a reservation described by the second
24385 regular expression *or* etc.
24387 * `+' is used for describing a reservation described by the first
24388 regular expression *and* a reservation described by the second
24389 regular expression *and* etc.
24391 * `*' is used for convenience and simply means a sequence in which
24392 the regular expression are repeated NUMBER times with cycle
24393 advancing (see `,').
24395 * `cpu_function_unit_name' denotes reservation of the named
24398 * `reservation_name' -- see description of construction
24399 `define_reservation'.
24401 * `nothing' denotes no unit reservations.
24403 Sometimes unit reservations for different insns contain common parts.
24404 In such case, you can simplify the pipeline description by describing
24405 the common part by the following construction
24407 (define_reservation RESERVATION-NAME REGEXP)
24409 RESERVATION-NAME is a string giving name of REGEXP. Functional unit
24410 names and reservation names are in the same name space. So the
24411 reservation names should be different from the functional unit names
24412 and can not be the reserved name `nothing'.
24414 The following construction is used to describe exceptions in the
24415 latency time for given instruction pair. This is so called bypasses.
24417 (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES
24420 NUMBER defines when the result generated by the instructions given in
24421 string OUT_INSN_NAMES will be ready for the instructions given in
24422 string IN_INSN_NAMES. The instructions in the string are separated by
24425 GUARD is an optional string giving the name of a C function which
24426 defines an additional guard for the bypass. The function will get the
24427 two insns as parameters. If the function returns zero the bypass will
24428 be ignored for this case. The additional guard is necessary to
24429 recognize complicated bypasses, e.g. when the consumer is only an
24430 address of insn `store' (not a stored value).
24432 If there are more one bypass with the same output and input insns, the
24433 chosen bypass is the first bypass with a guard in description whose
24434 guard function returns nonzero. If there is no such bypass, then
24435 bypass without the guard function is chosen.
24437 The following five constructions are usually used to describe VLIW
24438 processors, or more precisely, to describe a placement of small
24439 instructions into VLIW instruction slots. They can be used for RISC
24442 (exclusion_set UNIT-NAMES UNIT-NAMES)
24443 (presence_set UNIT-NAMES PATTERNS)
24444 (final_presence_set UNIT-NAMES PATTERNS)
24445 (absence_set UNIT-NAMES PATTERNS)
24446 (final_absence_set UNIT-NAMES PATTERNS)
24448 UNIT-NAMES is a string giving names of functional units separated by
24451 PATTERNS is a string giving patterns of functional units separated by
24452 comma. Currently pattern is one unit or units separated by
24455 The first construction (`exclusion_set') means that each functional
24456 unit in the first string can not be reserved simultaneously with a unit
24457 whose name is in the second string and vice versa. For example, the
24458 construction is useful for describing processors (e.g. some SPARC
24459 processors) with a fully pipelined floating point functional unit which
24460 can execute simultaneously only single floating point insns or only
24461 double floating point insns.
24463 The second construction (`presence_set') means that each functional
24464 unit in the first string can not be reserved unless at least one of
24465 pattern of units whose names are in the second string is reserved.
24466 This is an asymmetric relation. For example, it is useful for
24467 description that VLIW `slot1' is reserved after `slot0' reservation.
24468 We could describe it by the following construction
24470 (presence_set "slot1" "slot0")
24472 Or `slot1' is reserved only after `slot0' and unit `b0' reservation.
24473 In this case we could write
24475 (presence_set "slot1" "slot0 b0")
24477 The third construction (`final_presence_set') is analogous to
24478 `presence_set'. The difference between them is when checking is done.
24479 When an instruction is issued in given automaton state reflecting all
24480 current and planned unit reservations, the automaton state is changed.
24481 The first state is a source state, the second one is a result state.
24482 Checking for `presence_set' is done on the source state reservation,
24483 checking for `final_presence_set' is done on the result reservation.
24484 This construction is useful to describe a reservation which is actually
24485 two subsequent reservations. For example, if we use
24487 (presence_set "slot1" "slot0")
24489 the following insn will be never issued (because `slot1' requires
24490 `slot0' which is absent in the source state).
24492 (define_reservation "insn_and_nop" "slot0 + slot1")
24494 but it can be issued if we use analogous `final_presence_set'.
24496 The forth construction (`absence_set') means that each functional unit
24497 in the first string can be reserved only if each pattern of units whose
24498 names are in the second string is not reserved. This is an asymmetric
24499 relation (actually `exclusion_set' is analogous to this one but it is
24500 symmetric). For example it might be useful in a VLIW description to
24501 say that `slot0' cannot be reserved after either `slot1' or `slot2'
24502 have been reserved. This can be described as:
24504 (absence_set "slot0" "slot1, slot2")
24506 Or `slot2' can not be reserved if `slot0' and unit `b0' are reserved
24507 or `slot1' and unit `b1' are reserved. In this case we could write
24509 (absence_set "slot2" "slot0 b0, slot1 b1")
24511 All functional units mentioned in a set should belong to the same
24514 The last construction (`final_absence_set') is analogous to
24515 `absence_set' but checking is done on the result (state) reservation.
24516 See comments for `final_presence_set'.
24518 You can control the generator of the pipeline hazard recognizer with
24519 the following construction.
24521 (automata_option OPTIONS)
24523 OPTIONS is a string giving options which affect the generated code.
24524 Currently there are the following options:
24526 * "no-minimization" makes no minimization of the automaton. This is
24527 only worth to do when we are debugging the description and need to
24528 look more accurately at reservations of states.
24530 * "time" means printing time statistics about the generation of
24533 * "stats" means printing statistics about the generated automata
24534 such as the number of DFA states, NDFA states and arcs.
24536 * "v" means a generation of the file describing the result automata.
24537 The file has suffix `.dfa' and can be used for the description
24538 verification and debugging.
24540 * "w" means a generation of warning instead of error for
24541 non-critical errors.
24543 * "ndfa" makes nondeterministic finite state automata. This affects
24544 the treatment of operator `|' in the regular expressions. The
24545 usual treatment of the operator is to try the first alternative
24546 and, if the reservation is not possible, the second alternative.
24547 The nondeterministic treatment means trying all alternatives, some
24548 of them may be rejected by reservations in the subsequent insns.
24550 * "progress" means output of a progress bar showing how many states
24551 were generated so far for automaton being processed. This is
24552 useful during debugging a DFA description. If you see too many
24553 generated states, you could interrupt the generator of the pipeline
24554 hazard recognizer and try to figure out a reason for generation of
24555 the huge automaton.
24557 As an example, consider a superscalar RISC machine which can issue
24558 three insns (two integer insns and one floating point insn) on the
24559 cycle but can finish only two insns. To describe this, we define the
24560 following functional units.
24562 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
24563 (define_cpu_unit "port0, port1")
24565 All simple integer insns can be executed in any integer pipeline and
24566 their result is ready in two cycles. The simple integer insns are
24567 issued into the first pipeline unless it is reserved, otherwise they
24568 are issued into the second pipeline. Integer division and
24569 multiplication insns can be executed only in the second integer
24570 pipeline and their results are ready correspondingly in 8 and 4 cycles.
24571 The integer division is not pipelined, i.e. the subsequent integer
24572 division insn can not be issued until the current division insn
24573 finished. Floating point insns are fully pipelined and their results
24574 are ready in 3 cycles. Where the result of a floating point insn is
24575 used by an integer insn, an additional delay of one cycle is incurred.
24576 To describe all of this we could specify
24578 (define_cpu_unit "div")
24580 (define_insn_reservation "simple" 2 (eq_attr "type" "int")
24581 "(i0_pipeline | i1_pipeline), (port0 | port1)")
24583 (define_insn_reservation "mult" 4 (eq_attr "type" "mult")
24584 "i1_pipeline, nothing*2, (port0 | port1)")
24586 (define_insn_reservation "div" 8 (eq_attr "type" "div")
24587 "i1_pipeline, div*7, div + (port0 | port1)")
24589 (define_insn_reservation "float" 3 (eq_attr "type" "float")
24590 "f_pipeline, nothing, (port0 | port1))
24592 (define_bypass 4 "float" "simple,mult,div")
24594 To simplify the description we could describe the following reservation
24596 (define_reservation "finish" "port0|port1")
24598 and use it in all `define_insn_reservation' as in the following
24601 (define_insn_reservation "simple" 2 (eq_attr "type" "int")
24602 "(i0_pipeline | i1_pipeline), finish")
24604 ---------- Footnotes ----------
24606 (1) However, the size of the automaton depends on processor
24607 complexity. To limit this effect, machine descriptions can split
24608 orthogonal parts of the machine description among several automata: but
24609 then, since each of these must be stepped independently, this does
24610 cause a small decrease in the algorithm's performance.
24613 File: gccint.info, Node: Conditional Execution, Next: Constant Definitions, Prev: Insn Attributes, Up: Machine Desc
24615 16.20 Conditional Execution
24616 ===========================
24618 A number of architectures provide for some form of conditional
24619 execution, or predication. The hallmark of this feature is the ability
24620 to nullify most of the instructions in the instruction set. When the
24621 instruction set is large and not entirely symmetric, it can be quite
24622 tedious to describe these forms directly in the `.md' file. An
24623 alternative is the `define_cond_exec' template.
24626 [PREDICATE-PATTERN]
24630 PREDICATE-PATTERN is the condition that must be true for the insn to
24631 be executed at runtime and should match a relational operator. One can
24632 use `match_operator' to match several relational operators at once.
24633 Any `match_operand' operands must have no more than one alternative.
24635 CONDITION is a C expression that must be true for the generated
24638 OUTPUT-TEMPLATE is a string similar to the `define_insn' output
24639 template (*note Output Template::), except that the `*' and `@' special
24640 cases do not apply. This is only useful if the assembly text for the
24641 predicate is a simple prefix to the main insn. In order to handle the
24642 general case, there is a global variable `current_insn_predicate' that
24643 will contain the entire predicate if the current insn is predicated,
24644 and will otherwise be `NULL'.
24646 When `define_cond_exec' is used, an implicit reference to the
24647 `predicable' instruction attribute is made. *Note Insn Attributes::.
24648 This attribute must be boolean (i.e. have exactly two elements in its
24649 LIST-OF-VALUES). Further, it must not be used with complex
24650 expressions. That is, the default and all uses in the insns must be a
24651 simple constant, not dependent on the alternative or anything else.
24653 For each `define_insn' for which the `predicable' attribute is true, a
24654 new `define_insn' pattern will be generated that matches a predicated
24655 version of the instruction. For example,
24657 (define_insn "addsi"
24658 [(set (match_operand:SI 0 "register_operand" "r")
24659 (plus:SI (match_operand:SI 1 "register_operand" "r")
24660 (match_operand:SI 2 "register_operand" "r")))]
24665 [(ne (match_operand:CC 0 "register_operand" "c")
24670 generates a new pattern
24674 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
24675 (set (match_operand:SI 0 "register_operand" "r")
24676 (plus:SI (match_operand:SI 1 "register_operand" "r")
24677 (match_operand:SI 2 "register_operand" "r"))))]
24678 "(TEST2) && (TEST1)"
24679 "(%3) add %2,%1,%0")
24682 File: gccint.info, Node: Constant Definitions, Next: Iterators, Prev: Conditional Execution, Up: Machine Desc
24684 16.21 Constant Definitions
24685 ==========================
24687 Using literal constants inside instruction patterns reduces legibility
24688 and can be a maintenance problem.
24690 To overcome this problem, you may use the `define_constants'
24691 expression. It contains a vector of name-value pairs. From that point
24692 on, wherever any of the names appears in the MD file, it is as if the
24693 corresponding value had been written instead. You may use
24694 `define_constants' multiple times; each appearance adds more constants
24695 to the table. It is an error to redefine a constant with a different
24698 To come back to the a29k load multiple example, instead of
24701 [(match_parallel 0 "load_multiple_operation"
24702 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
24703 (match_operand:SI 2 "memory_operand" "m"))
24705 (clobber (reg:SI 179))])]
24711 (define_constants [
24719 [(match_parallel 0 "load_multiple_operation"
24720 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
24721 (match_operand:SI 2 "memory_operand" "m"))
24722 (use (reg:SI R_CR))
24723 (clobber (reg:SI R_CR))])]
24727 The constants that are defined with a define_constant are also output
24728 in the insn-codes.h header file as #defines.
24731 File: gccint.info, Node: Iterators, Prev: Constant Definitions, Up: Machine Desc
24736 Ports often need to define similar patterns for more than one machine
24737 mode or for more than one rtx code. GCC provides some simple iterator
24738 facilities to make this process easier.
24742 * Mode Iterators:: Generating variations of patterns for different modes.
24743 * Code Iterators:: Doing the same for codes.
24746 File: gccint.info, Node: Mode Iterators, Next: Code Iterators, Up: Iterators
24748 16.22.1 Mode Iterators
24749 ----------------------
24751 Ports often need to define similar patterns for two or more different
24752 modes. For example:
24754 * If a processor has hardware support for both single and double
24755 floating-point arithmetic, the `SFmode' patterns tend to be very
24756 similar to the `DFmode' ones.
24758 * If a port uses `SImode' pointers in one configuration and `DImode'
24759 pointers in another, it will usually have very similar `SImode'
24760 and `DImode' patterns for manipulating pointers.
24762 Mode iterators allow several patterns to be instantiated from one
24763 `.md' file template. They can be used with any type of rtx-based
24764 construct, such as a `define_insn', `define_split', or
24765 `define_peephole2'.
24769 * Defining Mode Iterators:: Defining a new mode iterator.
24770 * Substitutions:: Combining mode iterators with substitutions
24771 * Examples:: Examples
24774 File: gccint.info, Node: Defining Mode Iterators, Next: Substitutions, Up: Mode Iterators
24776 16.22.1.1 Defining Mode Iterators
24777 .................................
24779 The syntax for defining a mode iterator is:
24781 (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")])
24783 This allows subsequent `.md' file constructs to use the mode suffix
24784 `:NAME'. Every construct that does so will be expanded N times, once
24785 with every use of `:NAME' replaced by `:MODE1', once with every use
24786 replaced by `:MODE2', and so on. In the expansion for a particular
24787 MODEI, every C condition will also require that CONDI be true.
24791 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
24793 defines a new mode suffix `:P'. Every construct that uses `:P' will
24794 be expanded twice, once with every `:P' replaced by `:SI' and once with
24795 every `:P' replaced by `:DI'. The `:SI' version will only apply if
24796 `Pmode == SImode' and the `:DI' version will only apply if `Pmode ==
24799 As with other `.md' conditions, an empty string is treated as "always
24800 true". `(MODE "")' can also be abbreviated to `MODE'. For example:
24802 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
24804 means that the `:DI' expansion only applies if `TARGET_64BIT' but that
24805 the `:SI' expansion has no such constraint.
24807 Iterators are applied in the order they are defined. This can be
24808 significant if two iterators are used in a construct that requires
24809 substitutions. *Note Substitutions::.
24812 File: gccint.info, Node: Substitutions, Next: Examples, Prev: Defining Mode Iterators, Up: Mode Iterators
24814 16.22.1.2 Substitution in Mode Iterators
24815 ........................................
24817 If an `.md' file construct uses mode iterators, each version of the
24818 construct will often need slightly different strings or modes. For
24821 * When a `define_expand' defines several `addM3' patterns (*note
24822 Standard Names::), each expander will need to use the appropriate
24825 * When a `define_insn' defines several instruction patterns, each
24826 instruction will often use a different assembler mnemonic.
24828 * When a `define_insn' requires operands with different modes, using
24829 an iterator for one of the operand modes usually requires a
24830 specific mode for the other operand(s).
24832 GCC supports such variations through a system of "mode attributes".
24833 There are two standard attributes: `mode', which is the name of the
24834 mode in lower case, and `MODE', which is the same thing in upper case.
24835 You can define other attributes using:
24837 (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")])
24839 where NAME is the name of the attribute and VALUEI is the value
24840 associated with MODEI.
24842 When GCC replaces some :ITERATOR with :MODE, it will scan each string
24843 and mode in the pattern for sequences of the form `<ITERATOR:ATTR>',
24844 where ATTR is the name of a mode attribute. If the attribute is
24845 defined for MODE, the whole `<...>' sequence will be replaced by the
24846 appropriate attribute value.
24848 For example, suppose an `.md' file has:
24850 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
24851 (define_mode_attr load [(SI "lw") (DI "ld")])
24853 If one of the patterns that uses `:P' contains the string
24854 `"<P:load>\t%0,%1"', the `SI' version of that pattern will use
24855 `"lw\t%0,%1"' and the `DI' version will use `"ld\t%0,%1"'.
24857 Here is an example of using an attribute for a mode:
24859 (define_mode_iterator LONG [SI DI])
24860 (define_mode_attr SHORT [(SI "HI") (DI "SI")])
24862 (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...)
24864 The `ITERATOR:' prefix may be omitted, in which case the substitution
24865 will be attempted for every iterator expansion.
24868 File: gccint.info, Node: Examples, Prev: Substitutions, Up: Mode Iterators
24870 16.22.1.3 Mode Iterator Examples
24871 ................................
24873 Here is an example from the MIPS port. It defines the following modes
24874 and attributes (among others):
24876 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
24877 (define_mode_attr d [(SI "") (DI "d")])
24879 and uses the following template to define both `subsi3' and `subdi3':
24881 (define_insn "sub<mode>3"
24882 [(set (match_operand:GPR 0 "register_operand" "=d")
24883 (minus:GPR (match_operand:GPR 1 "register_operand" "d")
24884 (match_operand:GPR 2 "register_operand" "d")))]
24886 "<d>subu\t%0,%1,%2"
24887 [(set_attr "type" "arith")
24888 (set_attr "mode" "<MODE>")])
24890 This is exactly equivalent to:
24892 (define_insn "subsi3"
24893 [(set (match_operand:SI 0 "register_operand" "=d")
24894 (minus:SI (match_operand:SI 1 "register_operand" "d")
24895 (match_operand:SI 2 "register_operand" "d")))]
24898 [(set_attr "type" "arith")
24899 (set_attr "mode" "SI")])
24901 (define_insn "subdi3"
24902 [(set (match_operand:DI 0 "register_operand" "=d")
24903 (minus:DI (match_operand:DI 1 "register_operand" "d")
24904 (match_operand:DI 2 "register_operand" "d")))]
24907 [(set_attr "type" "arith")
24908 (set_attr "mode" "DI")])
24911 File: gccint.info, Node: Code Iterators, Prev: Mode Iterators, Up: Iterators
24913 16.22.2 Code Iterators
24914 ----------------------
24916 Code iterators operate in a similar way to mode iterators. *Note Mode
24921 (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")])
24923 defines a pseudo rtx code NAME that can be instantiated as CODEI if
24924 condition CONDI is true. Each CODEI must have the same rtx format.
24925 *Note RTL Classes::.
24927 As with mode iterators, each pattern that uses NAME will be expanded N
24928 times, once with all uses of NAME replaced by CODE1, once with all uses
24929 replaced by CODE2, and so on. *Note Defining Mode Iterators::.
24931 It is possible to define attributes for codes as well as for modes.
24932 There are two standard code attributes: `code', the name of the code in
24933 lower case, and `CODE', the name of the code in upper case. Other
24934 attributes are defined using:
24936 (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")])
24938 Here's an example of code iterators in action, taken from the MIPS
24941 (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
24942 eq ne gt ge lt le gtu geu ltu leu])
24944 (define_expand "b<code>"
24946 (if_then_else (any_cond:CC (cc0)
24948 (label_ref (match_operand 0 ""))
24952 gen_conditional_branch (operands, <CODE>);
24956 This is equivalent to:
24958 (define_expand "bunordered"
24960 (if_then_else (unordered:CC (cc0)
24962 (label_ref (match_operand 0 ""))
24966 gen_conditional_branch (operands, UNORDERED);
24970 (define_expand "bordered"
24972 (if_then_else (ordered:CC (cc0)
24974 (label_ref (match_operand 0 ""))
24978 gen_conditional_branch (operands, ORDERED);
24985 File: gccint.info, Node: Target Macros, Next: Host Config, Prev: Machine Desc, Up: Top
24987 17 Target Description Macros and Functions
24988 ******************************************
24990 In addition to the file `MACHINE.md', a machine description includes a
24991 C header file conventionally given the name `MACHINE.h' and a C source
24992 file named `MACHINE.c'. The header file defines numerous macros that
24993 convey the information about the target machine that does not fit into
24994 the scheme of the `.md' file. The file `tm.h' should be a link to
24995 `MACHINE.h'. The header file `config.h' includes `tm.h' and most
24996 compiler source files include `config.h'. The source file defines a
24997 variable `targetm', which is a structure containing pointers to
24998 functions and data relating to the target machine. `MACHINE.c' should
24999 also contain their definitions, if they are not defined elsewhere in
25000 GCC, and other functions called through the macros defined in the `.h'
25005 * Target Structure:: The `targetm' variable.
25006 * Driver:: Controlling how the driver runs the compilation passes.
25007 * Run-time Target:: Defining `-m' options like `-m68000' and `-m68020'.
25008 * Per-Function Data:: Defining data structures for per-function information.
25009 * Storage Layout:: Defining sizes and alignments of data.
25010 * Type Layout:: Defining sizes and properties of basic user data types.
25011 * Registers:: Naming and describing the hardware registers.
25012 * Register Classes:: Defining the classes of hardware registers.
25013 * Old Constraints:: The old way to define machine-specific constraints.
25014 * Stack and Calling:: Defining which way the stack grows and by how much.
25015 * Varargs:: Defining the varargs macros.
25016 * Trampolines:: Code set up at run time to enter a nested function.
25017 * Library Calls:: Controlling how library routines are implicitly called.
25018 * Addressing Modes:: Defining addressing modes valid for memory operands.
25019 * Anchored Addresses:: Defining how `-fsection-anchors' should work.
25020 * Condition Code:: Defining how insns update the condition code.
25021 * Costs:: Defining relative costs of different operations.
25022 * Scheduling:: Adjusting the behavior of the instruction scheduler.
25023 * Sections:: Dividing storage into text, data, and other sections.
25024 * PIC:: Macros for position independent code.
25025 * Assembler Format:: Defining how to write insns and pseudo-ops to output.
25026 * Debugging Info:: Defining the format of debugging output.
25027 * Floating Point:: Handling floating point for cross-compilers.
25028 * Mode Switching:: Insertion of mode-switching instructions.
25029 * Target Attributes:: Defining target-specific uses of `__attribute__'.
25030 * Emulated TLS:: Emulated TLS support.
25031 * MIPS Coprocessors:: MIPS coprocessor support and how to customize it.
25032 * PCH Target:: Validity checking for precompiled headers.
25033 * C++ ABI:: Controlling C++ ABI changes.
25034 * Named Address Spaces:: Adding support for named address spaces
25035 * Misc:: Everything else.
25038 File: gccint.info, Node: Target Structure, Next: Driver, Up: Target Macros
25040 17.1 The Global `targetm' Variable
25041 ==================================
25043 -- Variable: struct gcc_target targetm
25044 The target `.c' file must define the global `targetm' variable
25045 which contains pointers to functions and data relating to the
25046 target machine. The variable is declared in `target.h';
25047 `target-def.h' defines the macro `TARGET_INITIALIZER' which is
25048 used to initialize the variable, and macros for the default
25049 initializers for elements of the structure. The `.c' file should
25050 override those macros for which the default definition is
25051 inappropriate. For example:
25052 #include "target.h"
25053 #include "target-def.h"
25055 /* Initialize the GCC target structure. */
25057 #undef TARGET_COMP_TYPE_ATTRIBUTES
25058 #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes
25060 struct gcc_target targetm = TARGET_INITIALIZER;
25062 Where a macro should be defined in the `.c' file in this manner to form
25063 part of the `targetm' structure, it is documented below as a "Target
25064 Hook" with a prototype. Many macros will change in future from being
25065 defined in the `.h' file to being part of the `targetm' structure.
25068 File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros
25070 17.2 Controlling the Compilation Driver, `gcc'
25071 ==============================================
25073 You can control the compilation driver.
25075 -- Macro: SWITCH_TAKES_ARG (CHAR)
25076 A C expression which determines whether the option `-CHAR' takes
25077 arguments. The value should be the number of arguments that
25078 option takes-zero, for many options.
25080 By default, this macro is defined as `DEFAULT_SWITCH_TAKES_ARG',
25081 which handles the standard options properly. You need not define
25082 `SWITCH_TAKES_ARG' unless you wish to add additional options which
25083 take arguments. Any redefinition should call
25084 `DEFAULT_SWITCH_TAKES_ARG' and then check for additional options.
25086 -- Macro: WORD_SWITCH_TAKES_ARG (NAME)
25087 A C expression which determines whether the option `-NAME' takes
25088 arguments. The value should be the number of arguments that
25089 option takes-zero, for many options. This macro rather than
25090 `SWITCH_TAKES_ARG' is used for multi-character option names.
25092 By default, this macro is defined as
25093 `DEFAULT_WORD_SWITCH_TAKES_ARG', which handles the standard options
25094 properly. You need not define `WORD_SWITCH_TAKES_ARG' unless you
25095 wish to add additional options which take arguments. Any
25096 redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and then
25097 check for additional options.
25099 -- Macro: SWITCH_CURTAILS_COMPILATION (CHAR)
25100 A C expression which determines whether the option `-CHAR' stops
25101 compilation before the generation of an executable. The value is
25102 boolean, nonzero if the option does stop an executable from being
25103 generated, zero otherwise.
25105 By default, this macro is defined as
25106 `DEFAULT_SWITCH_CURTAILS_COMPILATION', which handles the standard
25107 options properly. You need not define
25108 `SWITCH_CURTAILS_COMPILATION' unless you wish to add additional
25109 options which affect the generation of an executable. Any
25110 redefinition should call `DEFAULT_SWITCH_CURTAILS_COMPILATION' and
25111 then check for additional options.
25113 -- Macro: SWITCHES_NEED_SPACES
25114 A string-valued C expression which enumerates the options for which
25115 the linker needs a space between the option and its argument.
25117 If this macro is not defined, the default value is `""'.
25119 -- Macro: TARGET_OPTION_TRANSLATE_TABLE
25120 If defined, a list of pairs of strings, the first of which is a
25121 potential command line target to the `gcc' driver program, and the
25122 second of which is a space-separated (tabs and other whitespace
25123 are not supported) list of options with which to replace the first
25124 option. The target defining this list is responsible for assuring
25125 that the results are valid. Replacement options may not be the
25126 `--opt' style, they must be the `-opt' style. It is the intention
25127 of this macro to provide a mechanism for substitution that affects
25128 the multilibs chosen, such as one option that enables many
25129 options, some of which select multilibs. Example nonsensical
25130 definition, where `-malt-abi', `-EB', and `-mspoo' cause different
25131 multilibs to be chosen:
25133 #define TARGET_OPTION_TRANSLATE_TABLE \
25134 { "-fast", "-march=fast-foo -malt-abi -I/usr/fast-foo" }, \
25135 { "-compat", "-EB -malign=4 -mspoo" }
25137 -- Macro: DRIVER_SELF_SPECS
25138 A list of specs for the driver itself. It should be a suitable
25139 initializer for an array of strings, with no surrounding braces.
25141 The driver applies these specs to its own command line between
25142 loading default `specs' files (but not command-line specified
25143 ones) and choosing the multilib directory or running any
25144 subcommands. It applies them in the order given, so each spec can
25145 depend on the options added by earlier ones. It is also possible
25146 to remove options using `%<OPTION' in the usual way.
25148 This macro can be useful when a port has several interdependent
25149 target options. It provides a way of standardizing the command
25150 line so that the other specs are easier to write.
25152 Do not define this macro if it does not need to do anything.
25154 -- Macro: OPTION_DEFAULT_SPECS
25155 A list of specs used to support configure-time default options
25156 (i.e. `--with' options) in the driver. It should be a suitable
25157 initializer for an array of structures, each containing two
25158 strings, without the outermost pair of surrounding braces.
25160 The first item in the pair is the name of the default. This must
25161 match the code in `config.gcc' for the target. The second item is
25162 a spec to apply if a default with this name was specified. The
25163 string `%(VALUE)' in the spec will be replaced by the value of the
25164 default everywhere it occurs.
25166 The driver will apply these specs to its own command line between
25167 loading default `specs' files and processing `DRIVER_SELF_SPECS',
25168 using the same mechanism as `DRIVER_SELF_SPECS'.
25170 Do not define this macro if it does not need to do anything.
25173 A C string constant that tells the GCC driver program options to
25174 pass to CPP. It can also specify how to translate options you
25175 give to GCC into options for GCC to pass to the CPP.
25177 Do not define this macro if it does not need to do anything.
25179 -- Macro: CPLUSPLUS_CPP_SPEC
25180 This macro is just like `CPP_SPEC', but is used for C++, rather
25181 than C. If you do not define this macro, then the value of
25182 `CPP_SPEC' (if any) will be used instead.
25185 A C string constant that tells the GCC driver program options to
25186 pass to `cc1', `cc1plus', `f771', and the other language front
25187 ends. It can also specify how to translate options you give to
25188 GCC into options for GCC to pass to front ends.
25190 Do not define this macro if it does not need to do anything.
25192 -- Macro: CC1PLUS_SPEC
25193 A C string constant that tells the GCC driver program options to
25194 pass to `cc1plus'. It can also specify how to translate options
25195 you give to GCC into options for GCC to pass to the `cc1plus'.
25197 Do not define this macro if it does not need to do anything. Note
25198 that everything defined in CC1_SPEC is already passed to `cc1plus'
25199 so there is no need to duplicate the contents of CC1_SPEC in
25203 A C string constant that tells the GCC driver program options to
25204 pass to the assembler. It can also specify how to translate
25205 options you give to GCC into options for GCC to pass to the
25206 assembler. See the file `sun3.h' for an example of this.
25208 Do not define this macro if it does not need to do anything.
25210 -- Macro: ASM_FINAL_SPEC
25211 A C string constant that tells the GCC driver program how to run
25212 any programs which cleanup after the normal assembler. Normally,
25213 this is not needed. See the file `mips.h' for an example of this.
25215 Do not define this macro if it does not need to do anything.
25217 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT
25218 Define this macro, with no value, if the driver should give the
25219 assembler an argument consisting of a single dash, `-', to
25220 instruct it to read from its standard input (which will be a pipe
25221 connected to the output of the compiler proper). This argument is
25222 given after any `-o' option specifying the name of the output file.
25224 If you do not define this macro, the assembler is assumed to read
25225 its standard input if given no non-option arguments. If your
25226 assembler cannot read standard input at all, use a `%{pipe:%e}'
25227 construct; see `mips.h' for instance.
25229 -- Macro: LINK_SPEC
25230 A C string constant that tells the GCC driver program options to
25231 pass to the linker. It can also specify how to translate options
25232 you give to GCC into options for GCC to pass to the linker.
25234 Do not define this macro if it does not need to do anything.
25237 Another C string constant used much like `LINK_SPEC'. The
25238 difference between the two is that `LIB_SPEC' is used at the end
25239 of the command given to the linker.
25241 If this macro is not defined, a default is provided that loads the
25242 standard C library from the usual place. See `gcc.c'.
25244 -- Macro: LIBGCC_SPEC
25245 Another C string constant that tells the GCC driver program how
25246 and when to place a reference to `libgcc.a' into the linker
25247 command line. This constant is placed both before and after the
25248 value of `LIB_SPEC'.
25250 If this macro is not defined, the GCC driver provides a default
25251 that passes the string `-lgcc' to the linker.
25253 -- Macro: REAL_LIBGCC_SPEC
25254 By default, if `ENABLE_SHARED_LIBGCC' is defined, the
25255 `LIBGCC_SPEC' is not directly used by the driver program but is
25256 instead modified to refer to different versions of `libgcc.a'
25257 depending on the values of the command line flags `-static',
25258 `-shared', `-static-libgcc', and `-shared-libgcc'. On targets
25259 where these modifications are inappropriate, define
25260 `REAL_LIBGCC_SPEC' instead. `REAL_LIBGCC_SPEC' tells the driver
25261 how to place a reference to `libgcc' on the link command line,
25262 but, unlike `LIBGCC_SPEC', it is used unmodified.
25264 -- Macro: USE_LD_AS_NEEDED
25265 A macro that controls the modifications to `LIBGCC_SPEC' mentioned
25266 in `REAL_LIBGCC_SPEC'. If nonzero, a spec will be generated that
25267 uses -as-needed and the shared libgcc in place of the static
25268 exception handler library, when linking without any of `-static',
25269 `-static-libgcc', or `-shared-libgcc'.
25271 -- Macro: LINK_EH_SPEC
25272 If defined, this C string constant is added to `LINK_SPEC'. When
25273 `USE_LD_AS_NEEDED' is zero or undefined, it also affects the
25274 modifications to `LIBGCC_SPEC' mentioned in `REAL_LIBGCC_SPEC'.
25276 -- Macro: STARTFILE_SPEC
25277 Another C string constant used much like `LINK_SPEC'. The
25278 difference between the two is that `STARTFILE_SPEC' is used at the
25279 very beginning of the command given to the linker.
25281 If this macro is not defined, a default is provided that loads the
25282 standard C startup file from the usual place. See `gcc.c'.
25284 -- Macro: ENDFILE_SPEC
25285 Another C string constant used much like `LINK_SPEC'. The
25286 difference between the two is that `ENDFILE_SPEC' is used at the
25287 very end of the command given to the linker.
25289 Do not define this macro if it does not need to do anything.
25291 -- Macro: THREAD_MODEL_SPEC
25292 GCC `-v' will print the thread model GCC was configured to use.
25293 However, this doesn't work on platforms that are multilibbed on
25294 thread models, such as AIX 4.3. On such platforms, define
25295 `THREAD_MODEL_SPEC' such that it evaluates to a string without
25296 blanks that names one of the recognized thread models. `%*', the
25297 default value of this macro, will expand to the value of
25298 `thread_file' set in `config.gcc'.
25300 -- Macro: SYSROOT_SUFFIX_SPEC
25301 Define this macro to add a suffix to the target sysroot when GCC is
25302 configured with a sysroot. This will cause GCC to search for
25303 usr/lib, et al, within sysroot+suffix.
25305 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC
25306 Define this macro to add a headers_suffix to the target sysroot
25307 when GCC is configured with a sysroot. This will cause GCC to
25308 pass the updated sysroot+headers_suffix to CPP, causing it to
25309 search for usr/include, et al, within sysroot+headers_suffix.
25311 -- Macro: EXTRA_SPECS
25312 Define this macro to provide additional specifications to put in
25313 the `specs' file that can be used in various specifications like
25316 The definition should be an initializer for an array of structures,
25317 containing a string constant, that defines the specification name,
25318 and a string constant that provides the specification.
25320 Do not define this macro if it does not need to do anything.
25322 `EXTRA_SPECS' is useful when an architecture contains several
25323 related targets, which have various `..._SPECS' which are similar
25324 to each other, and the maintainer would like one central place to
25325 keep these definitions.
25327 For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to
25328 define either `_CALL_SYSV' when the System V calling sequence is
25329 used or `_CALL_AIX' when the older AIX-based calling sequence is
25332 The `config/rs6000/rs6000.h' target file defines:
25334 #define EXTRA_SPECS \
25335 { "cpp_sysv_default", CPP_SYSV_DEFAULT },
25337 #define CPP_SYS_DEFAULT ""
25339 The `config/rs6000/sysv.h' target file defines:
25342 "%{posix: -D_POSIX_SOURCE } \
25343 %{mcall-sysv: -D_CALL_SYSV } \
25344 %{!mcall-sysv: %(cpp_sysv_default) } \
25345 %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
25347 #undef CPP_SYSV_DEFAULT
25348 #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
25350 while the `config/rs6000/eabiaix.h' target file defines
25351 `CPP_SYSV_DEFAULT' as:
25353 #undef CPP_SYSV_DEFAULT
25354 #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
25356 -- Macro: LINK_LIBGCC_SPECIAL_1
25357 Define this macro if the driver program should find the library
25358 `libgcc.a'. If you do not define this macro, the driver program
25359 will pass the argument `-lgcc' to tell the linker to do the search.
25361 -- Macro: LINK_GCC_C_SEQUENCE_SPEC
25362 The sequence in which libgcc and libc are specified to the linker.
25363 By default this is `%G %L %G'.
25365 -- Macro: LINK_COMMAND_SPEC
25366 A C string constant giving the complete command line need to
25367 execute the linker. When you do this, you will need to update
25368 your port each time a change is made to the link command line
25369 within `gcc.c'. Therefore, define this macro only if you need to
25370 completely redefine the command line for invoking the linker and
25371 there is no other way to accomplish the effect you need.
25372 Overriding this macro may be avoidable by overriding
25373 `LINK_GCC_C_SEQUENCE_SPEC' instead.
25375 -- Macro: LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
25376 A nonzero value causes `collect2' to remove duplicate
25377 `-LDIRECTORY' search directories from linking commands. Do not
25378 give it a nonzero value if removing duplicate search directories
25379 changes the linker's semantics.
25381 -- Macro: MULTILIB_DEFAULTS
25382 Define this macro as a C expression for the initializer of an
25383 array of string to tell the driver program which options are
25384 defaults for this target and thus do not need to be handled
25385 specially when using `MULTILIB_OPTIONS'.
25387 Do not define this macro if `MULTILIB_OPTIONS' is not defined in
25388 the target makefile fragment or if none of the options listed in
25389 `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::.
25391 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR
25392 Define this macro to tell `gcc' that it should only translate a
25393 `-B' prefix into a `-L' linker option if the prefix indicates an
25394 absolute file name.
25396 -- Macro: MD_EXEC_PREFIX
25397 If defined, this macro is an additional prefix to try after
25398 `STANDARD_EXEC_PREFIX'. `MD_EXEC_PREFIX' is not searched when the
25399 `-b' option is used, or the compiler is built as a cross compiler.
25400 If you define `MD_EXEC_PREFIX', then be sure to add it to the
25401 list of directories used to find the assembler in `configure.in'.
25403 -- Macro: STANDARD_STARTFILE_PREFIX
25404 Define this macro as a C string constant if you wish to override
25405 the standard choice of `libdir' as the default prefix to try when
25406 searching for startup files such as `crt0.o'.
25407 `STANDARD_STARTFILE_PREFIX' is not searched when the compiler is
25408 built as a cross compiler.
25410 -- Macro: STANDARD_STARTFILE_PREFIX_1
25411 Define this macro as a C string constant if you wish to override
25412 the standard choice of `/lib' as a prefix to try after the default
25413 prefix when searching for startup files such as `crt0.o'.
25414 `STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is
25415 built as a cross compiler.
25417 -- Macro: STANDARD_STARTFILE_PREFIX_2
25418 Define this macro as a C string constant if you wish to override
25419 the standard choice of `/lib' as yet another prefix to try after
25420 the default prefix when searching for startup files such as
25421 `crt0.o'. `STANDARD_STARTFILE_PREFIX_2' is not searched when the
25422 compiler is built as a cross compiler.
25424 -- Macro: MD_STARTFILE_PREFIX
25425 If defined, this macro supplies an additional prefix to try after
25426 the standard prefixes. `MD_EXEC_PREFIX' is not searched when the
25427 `-b' option is used, or when the compiler is built as a cross
25430 -- Macro: MD_STARTFILE_PREFIX_1
25431 If defined, this macro supplies yet another prefix to try after the
25432 standard prefixes. It is not searched when the `-b' option is
25433 used, or when the compiler is built as a cross compiler.
25435 -- Macro: INIT_ENVIRONMENT
25436 Define this macro as a C string constant if you wish to set
25437 environment variables for programs called by the driver, such as
25438 the assembler and loader. The driver passes the value of this
25439 macro to `putenv' to initialize the necessary environment
25442 -- Macro: LOCAL_INCLUDE_DIR
25443 Define this macro as a C string constant if you wish to override
25444 the standard choice of `/usr/local/include' as the default prefix
25445 to try when searching for local header files. `LOCAL_INCLUDE_DIR'
25446 comes before `SYSTEM_INCLUDE_DIR' in the search order.
25448 Cross compilers do not search either `/usr/local/include' or its
25451 -- Macro: MODIFY_TARGET_NAME
25452 Define this macro if you wish to define command-line switches that
25453 modify the default target name.
25455 For each switch, you can include a string to be appended to the
25456 first part of the configuration name or a string to be deleted
25457 from the configuration name, if present. The definition should be
25458 an initializer for an array of structures. Each array element
25459 should have three elements: the switch name (a string constant,
25460 including the initial dash), one of the enumeration codes `ADD' or
25461 `DELETE' to indicate whether the string should be inserted or
25462 deleted, and the string to be inserted or deleted (a string
25465 For example, on a machine where `64' at the end of the
25466 configuration name denotes a 64-bit target and you want the `-32'
25467 and `-64' switches to select between 32- and 64-bit targets, you
25470 #define MODIFY_TARGET_NAME \
25471 { { "-32", DELETE, "64"}, \
25472 {"-64", ADD, "64"}}
25474 -- Macro: SYSTEM_INCLUDE_DIR
25475 Define this macro as a C string constant if you wish to specify a
25476 system-specific directory to search for header files before the
25477 standard directory. `SYSTEM_INCLUDE_DIR' comes before
25478 `STANDARD_INCLUDE_DIR' in the search order.
25480 Cross compilers do not use this macro and do not search the
25481 directory specified.
25483 -- Macro: STANDARD_INCLUDE_DIR
25484 Define this macro as a C string constant if you wish to override
25485 the standard choice of `/usr/include' as the default prefix to try
25486 when searching for header files.
25488 Cross compilers ignore this macro and do not search either
25489 `/usr/include' or its replacement.
25491 -- Macro: STANDARD_INCLUDE_COMPONENT
25492 The "component" corresponding to `STANDARD_INCLUDE_DIR'. See
25493 `INCLUDE_DEFAULTS', below, for the description of components. If
25494 you do not define this macro, no component is used.
25496 -- Macro: INCLUDE_DEFAULTS
25497 Define this macro if you wish to override the entire default
25498 search path for include files. For a native compiler, the default
25499 search path usually consists of `GCC_INCLUDE_DIR',
25500 `LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR',
25501 `GPLUSPLUS_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'. In addition,
25502 `GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are defined
25503 automatically by `Makefile', and specify private search areas for
25504 GCC. The directory `GPLUSPLUS_INCLUDE_DIR' is used only for C++
25507 The definition should be an initializer for an array of structures.
25508 Each array element should have four elements: the directory name (a
25509 string constant), the component name (also a string constant), a
25510 flag for C++-only directories, and a flag showing that the
25511 includes in the directory don't need to be wrapped in `extern `C''
25512 when compiling C++. Mark the end of the array with a null element.
25514 The component name denotes what GNU package the include file is
25515 part of, if any, in all uppercase letters. For example, it might
25516 be `GCC' or `BINUTILS'. If the package is part of a
25517 vendor-supplied operating system, code the component name as `0'.
25519 For example, here is the definition used for VAX/VMS:
25521 #define INCLUDE_DEFAULTS \
25523 { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \
25524 { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \
25525 { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \
25530 Here is the order of prefixes tried for exec files:
25532 1. Any prefixes specified by the user with `-B'.
25534 2. The environment variable `GCC_EXEC_PREFIX' or, if `GCC_EXEC_PREFIX'
25535 is not set and the compiler has not been installed in the
25536 configure-time PREFIX, the location in which the compiler has
25537 actually been installed.
25539 3. The directories specified by the environment variable
25542 4. The macro `STANDARD_EXEC_PREFIX', if the compiler has been
25543 installed in the configured-time PREFIX.
25545 5. The location `/usr/libexec/gcc/', but only if this is a native
25548 6. The location `/usr/lib/gcc/', but only if this is a native
25551 7. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
25554 Here is the order of prefixes tried for startfiles:
25556 1. Any prefixes specified by the user with `-B'.
25558 2. The environment variable `GCC_EXEC_PREFIX' or its automatically
25559 determined value based on the installed toolchain location.
25561 3. The directories specified by the environment variable
25562 `LIBRARY_PATH' (or port-specific name; native only, cross
25563 compilers do not use this).
25565 4. The macro `STANDARD_EXEC_PREFIX', but only if the toolchain is
25566 installed in the configured PREFIX or this is a native compiler.
25568 5. The location `/usr/lib/gcc/', but only if this is a native
25571 6. The macro `MD_EXEC_PREFIX', if defined, but only if this is a
25574 7. The macro `MD_STARTFILE_PREFIX', if defined, but only if this is a
25575 native compiler, or we have a target system root.
25577 8. The macro `MD_STARTFILE_PREFIX_1', if defined, but only if this is
25578 a native compiler, or we have a target system root.
25580 9. The macro `STANDARD_STARTFILE_PREFIX', with any sysroot
25581 modifications. If this path is relative it will be prefixed by
25582 `GCC_EXEC_PREFIX' and the machine suffix or `STANDARD_EXEC_PREFIX'
25583 and the machine suffix.
25585 10. The macro `STANDARD_STARTFILE_PREFIX_1', but only if this is a
25586 native compiler, or we have a target system root. The default for
25587 this macro is `/lib/'.
25589 11. The macro `STANDARD_STARTFILE_PREFIX_2', but only if this is a
25590 native compiler, or we have a target system root. The default for
25591 this macro is `/usr/lib/'.
25594 File: gccint.info, Node: Run-time Target, Next: Per-Function Data, Prev: Driver, Up: Target Macros
25596 17.3 Run-time Target Specification
25597 ==================================
25599 Here are run-time target specifications.
25601 -- Macro: TARGET_CPU_CPP_BUILTINS ()
25602 This function-like macro expands to a block of code that defines
25603 built-in preprocessor macros and assertions for the target CPU,
25604 using the functions `builtin_define', `builtin_define_std' and
25605 `builtin_assert'. When the front end calls this macro it provides
25606 a trailing semicolon, and since it has finished command line
25607 option processing your code can use those results freely.
25609 `builtin_assert' takes a string in the form you pass to the
25610 command-line option `-A', such as `cpu=mips', and creates the
25611 assertion. `builtin_define' takes a string in the form accepted
25612 by option `-D' and unconditionally defines the macro.
25614 `builtin_define_std' takes a string representing the name of an
25615 object-like macro. If it doesn't lie in the user's namespace,
25616 `builtin_define_std' defines it unconditionally. Otherwise, it
25617 defines a version with two leading underscores, and another version
25618 with two leading and trailing underscores, and defines the original
25619 only if an ISO standard was not requested on the command line. For
25620 example, passing `unix' defines `__unix', `__unix__' and possibly
25621 `unix'; passing `_mips' defines `__mips', `__mips__' and possibly
25622 `_mips', and passing `_ABI64' defines only `_ABI64'.
25624 You can also test for the C dialect being compiled. The variable
25625 `c_language' is set to one of `clk_c', `clk_cplusplus' or
25626 `clk_objective_c'. Note that if we are preprocessing assembler,
25627 this variable will be `clk_c' but the function-like macro
25628 `preprocessing_asm_p()' will return true, so you might want to
25629 check for that first. If you need to check for strict ANSI, the
25630 variable `flag_iso' can be used. The function-like macro
25631 `preprocessing_trad_p()' can be used to check for traditional
25634 -- Macro: TARGET_OS_CPP_BUILTINS ()
25635 Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
25636 and is used for the target operating system instead.
25638 -- Macro: TARGET_OBJFMT_CPP_BUILTINS ()
25639 Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional
25640 and is used for the target object format. `elfos.h' uses this
25641 macro to define `__ELF__', so you probably do not need to define
25644 -- Variable: extern int target_flags
25645 This variable is declared in `options.h', which is included before
25646 any target-specific headers.
25648 -- Target Hook: int TARGET_DEFAULT_TARGET_FLAGS
25649 This variable specifies the initial value of `target_flags'. Its
25650 default setting is 0.
25652 -- Target Hook: bool TARGET_HANDLE_OPTION (size_t CODE, const char
25654 This hook is called whenever the user specifies one of the
25655 target-specific options described by the `.opt' definition files
25656 (*note Options::). It has the opportunity to do some
25657 option-specific processing and should return true if the option is
25658 valid. The default definition does nothing but return true.
25660 CODE specifies the `OPT_NAME' enumeration value associated with
25661 the selected option; NAME is just a rendering of the option name
25662 in which non-alphanumeric characters are replaced by underscores.
25663 ARG specifies the string argument and is null if no argument was
25664 given. If the option is flagged as a `UInteger' (*note Option
25665 properties::), VALUE is the numeric value of the argument.
25666 Otherwise VALUE is 1 if the positive form of the option was used
25667 and 0 if the "no-" form was.
25669 -- Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char
25671 This target hook is called whenever the user specifies one of the
25672 target-specific C language family options described by the `.opt'
25673 definition files(*note Options::). It has the opportunity to do
25674 some option-specific processing and should return true if the
25675 option is valid. The arguments are like for
25676 `TARGET_HANDLE_OPTION'. The default definition does nothing but
25679 In general, you should use `TARGET_HANDLE_OPTION' to handle
25680 options. However, if processing an option requires routines that
25681 are only available in the C (and related language) front ends,
25682 then you should use `TARGET_HANDLE_C_OPTION' instead.
25684 -- Macro: TARGET_VERSION
25685 This macro is a C statement to print on `stderr' a string
25686 describing the particular machine description choice. Every
25687 machine description should define `TARGET_VERSION'. For example:
25690 #define TARGET_VERSION \
25691 fprintf (stderr, " (68k, Motorola syntax)");
25693 #define TARGET_VERSION \
25694 fprintf (stderr, " (68k, MIT syntax)");
25697 -- Macro: OVERRIDE_OPTIONS
25698 Sometimes certain combinations of command options do not make
25699 sense on a particular target machine. You can define a macro
25700 `OVERRIDE_OPTIONS' to take account of this. This macro, if
25701 defined, is executed once just after all the command options have
25704 Don't use this macro to turn on various extra optimizations for
25705 `-O'. That is what `OPTIMIZATION_OPTIONS' is for.
25707 If you need to do something whenever the optimization level is
25708 changed via the optimize attribute or pragma, see
25709 `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'
25711 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
25712 This target function is similar to the macro `OVERRIDE_OPTIONS'
25713 but is called when the optimize level is changed via an attribute
25714 or pragma or when it is reset at the end of the code affected by
25715 the attribute or pragma. It is not called at the beginning of
25716 compilation when `OVERRIDE_OPTIONS' is called so if you want to
25717 perform these actions then, you should have `OVERRIDE_OPTIONS' call
25718 `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'.
25720 -- Macro: C_COMMON_OVERRIDE_OPTIONS
25721 This is similar to `OVERRIDE_OPTIONS' but is only used in the C
25722 language frontends (C, Objective-C, C++, Objective-C++) and so can
25723 be used to alter option flag variables which only exist in those
25726 -- Macro: OPTIMIZATION_OPTIONS (LEVEL, SIZE)
25727 Some machines may desire to change what optimizations are
25728 performed for various optimization levels. This macro, if
25729 defined, is executed once just after the optimization level is
25730 determined and before the remainder of the command options have
25731 been parsed. Values set in this macro are used as the default
25732 values for the other command line options.
25734 LEVEL is the optimization level specified; 2 if `-O2' is
25735 specified, 1 if `-O' is specified, and 0 if neither is specified.
25737 SIZE is nonzero if `-Os' is specified and zero otherwise.
25739 This macro is run once at program startup and when the optimization
25740 options are changed via `#pragma GCC optimize' or by using the
25741 `optimize' attribute.
25743 *Do not examine `write_symbols' in this macro!* The debugging
25744 options are not supposed to alter the generated code.
25746 -- Target Hook: void TARGET_HELP (void)
25747 This hook is called in response to the user invoking
25748 `--target-help' on the command line. It gives the target a chance
25749 to display extra information on the target specific command line
25750 options found in its `.opt' file.
25752 -- Macro: CAN_DEBUG_WITHOUT_FP
25753 Define this macro if debugging can be performed even without a
25754 frame pointer. If this macro is defined, GCC will turn on the
25755 `-fomit-frame-pointer' option whenever `-O' is specified.
25758 File: gccint.info, Node: Per-Function Data, Next: Storage Layout, Prev: Run-time Target, Up: Target Macros
25760 17.4 Defining data structures for per-function information.
25761 ===========================================================
25763 If the target needs to store information on a per-function basis, GCC
25764 provides a macro and a couple of variables to allow this. Note, just
25765 using statics to store the information is a bad idea, since GCC supports
25766 nested functions, so you can be halfway through encoding one function
25767 when another one comes along.
25769 GCC defines a data structure called `struct function' which contains
25770 all of the data specific to an individual function. This structure
25771 contains a field called `machine' whose type is `struct
25772 machine_function *', which can be used by targets to point to their own
25775 If a target needs per-function specific data it should define the type
25776 `struct machine_function' and also the macro `INIT_EXPANDERS'. This
25777 macro should be used to initialize the function pointer
25778 `init_machine_status'. This pointer is explained below.
25780 One typical use of per-function, target specific data is to create an
25781 RTX to hold the register containing the function's return address. This
25782 RTX can then be used to implement the `__builtin_return_address'
25783 function, for level 0.
25785 Note--earlier implementations of GCC used a single data area to hold
25786 all of the per-function information. Thus when processing of a nested
25787 function began the old per-function data had to be pushed onto a stack,
25788 and when the processing was finished, it had to be popped off the
25789 stack. GCC used to provide function pointers called
25790 `save_machine_status' and `restore_machine_status' to handle the saving
25791 and restoring of the target specific information. Since the single
25792 data area approach is no longer used, these pointers are no longer
25795 -- Macro: INIT_EXPANDERS
25796 Macro called to initialize any target specific information. This
25797 macro is called once per function, before generation of any RTL
25798 has begun. The intention of this macro is to allow the
25799 initialization of the function pointer `init_machine_status'.
25801 -- Variable: void (*)(struct function *) init_machine_status
25802 If this function pointer is non-`NULL' it will be called once per
25803 function, before function compilation starts, in order to allow the
25804 target to perform any target specific initialization of the
25805 `struct function' structure. It is intended that this would be
25806 used to initialize the `machine' of that structure.
25808 `struct machine_function' structures are expected to be freed by
25809 GC. Generally, any memory that they reference must be allocated
25810 by using `ggc_alloc', including the structure itself.
25813 File: gccint.info, Node: Storage Layout, Next: Type Layout, Prev: Per-Function Data, Up: Target Macros
25815 17.5 Storage Layout
25816 ===================
25818 Note that the definitions of the macros in this table which are sizes or
25819 alignments measured in bits do not need to be constant. They can be C
25820 expressions that refer to static variables, such as the `target_flags'.
25821 *Note Run-time Target::.
25823 -- Macro: BITS_BIG_ENDIAN
25824 Define this macro to have the value 1 if the most significant bit
25825 in a byte has the lowest number; otherwise define it to have the
25826 value zero. This means that bit-field instructions count from the
25827 most significant bit. If the machine has no bit-field
25828 instructions, then this must still be defined, but it doesn't
25829 matter which value it is defined to. This macro need not be a
25832 This macro does not affect the way structure fields are packed into
25833 bytes or words; that is controlled by `BYTES_BIG_ENDIAN'.
25835 -- Macro: BYTES_BIG_ENDIAN
25836 Define this macro to have the value 1 if the most significant byte
25837 in a word has the lowest number. This macro need not be a
25840 -- Macro: WORDS_BIG_ENDIAN
25841 Define this macro to have the value 1 if, in a multiword object,
25842 the most significant word has the lowest number. This applies to
25843 both memory locations and registers; GCC fundamentally assumes
25844 that the order of words in memory is the same as the order in
25845 registers. This macro need not be a constant.
25847 -- Macro: LIBGCC2_WORDS_BIG_ENDIAN
25848 Define this macro if `WORDS_BIG_ENDIAN' is not constant. This
25849 must be a constant value with the same meaning as
25850 `WORDS_BIG_ENDIAN', which will be used only when compiling
25851 `libgcc2.c'. Typically the value will be set based on
25852 preprocessor defines.
25854 -- Macro: FLOAT_WORDS_BIG_ENDIAN
25855 Define this macro to have the value 1 if `DFmode', `XFmode' or
25856 `TFmode' floating point numbers are stored in memory with the word
25857 containing the sign bit at the lowest address; otherwise define it
25858 to have the value 0. This macro need not be a constant.
25860 You need not define this macro if the ordering is the same as for
25861 multi-word integers.
25863 -- Macro: BITS_PER_UNIT
25864 Define this macro to be the number of bits in an addressable
25865 storage unit (byte). If you do not define this macro the default
25868 -- Macro: BITS_PER_WORD
25869 Number of bits in a word. If you do not define this macro, the
25870 default is `BITS_PER_UNIT * UNITS_PER_WORD'.
25872 -- Macro: MAX_BITS_PER_WORD
25873 Maximum number of bits in a word. If this is undefined, the
25874 default is `BITS_PER_WORD'. Otherwise, it is the constant value
25875 that is the largest value that `BITS_PER_WORD' can have at
25878 -- Macro: UNITS_PER_WORD
25879 Number of storage units in a word; normally the size of a
25880 general-purpose register, a power of two from 1 or 8.
25882 -- Macro: MIN_UNITS_PER_WORD
25883 Minimum number of units in a word. If this is undefined, the
25884 default is `UNITS_PER_WORD'. Otherwise, it is the constant value
25885 that is the smallest value that `UNITS_PER_WORD' can have at
25888 -- Macro: UNITS_PER_SIMD_WORD (MODE)
25889 Number of units in the vectors that the vectorizer can produce for
25890 scalar mode MODE. The default is equal to `UNITS_PER_WORD',
25891 because the vectorizer can do some transformations even in absence
25892 of specialized SIMD hardware.
25894 -- Macro: POINTER_SIZE
25895 Width of a pointer, in bits. You must specify a value no wider
25896 than the width of `Pmode'. If it is not equal to the width of
25897 `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'. If you do
25898 not specify a value the default is `BITS_PER_WORD'.
25900 -- Macro: POINTERS_EXTEND_UNSIGNED
25901 A C expression that determines how pointers should be extended from
25902 `ptr_mode' to either `Pmode' or `word_mode'. It is greater than
25903 zero if pointers should be zero-extended, zero if they should be
25904 sign-extended, and negative if some other sort of conversion is
25905 needed. In the last case, the extension is done by the target's
25906 `ptr_extend' instruction.
25908 You need not define this macro if the `ptr_mode', `Pmode' and
25909 `word_mode' are all the same width.
25911 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE)
25912 A macro to update M and UNSIGNEDP when an object whose type is
25913 TYPE and which has the specified mode and signedness is to be
25914 stored in a register. This macro is only called when TYPE is a
25917 On most RISC machines, which only have operations that operate on
25918 a full register, define this macro to set M to `word_mode' if M is
25919 an integer mode narrower than `BITS_PER_WORD'. In most cases,
25920 only integer modes should be widened because wider-precision
25921 floating-point operations are usually more expensive than their
25922 narrower counterparts.
25924 For most machines, the macro definition does not change UNSIGNEDP.
25925 However, some machines, have instructions that preferentially
25926 handle either signed or unsigned quantities of certain modes. For
25927 example, on the DEC Alpha, 32-bit loads from memory and 32-bit add
25928 instructions sign-extend the result to 64 bits. On such machines,
25929 set UNSIGNEDP according to which kind of extension is more
25932 Do not define this macro if it would never modify M.
25934 -- Target Hook: enum machine_mode TARGET_PROMOTE_FUNCTION_MODE
25935 (const_tree TYPE, enum machine_mode MODE, int *PUNSIGNEDP,
25936 const_tree FUNTYPE, int FOR_RETURN)
25937 Like `PROMOTE_MODE', but it is applied to outgoing function
25938 arguments or function return values. The target hook should
25939 return the new mode and possibly change `*PUNSIGNEDP' if the
25940 promotion should change signedness. This function is called only
25941 for scalar _or pointer_ types.
25943 FOR_RETURN allows to distinguish the promotion of arguments and
25944 return values. If it is `1', a return value is being promoted and
25945 `TARGET_FUNCTION_VALUE' must perform the same promotions done here.
25946 If it is `2', the returned mode should be that of the register in
25947 which an incoming parameter is copied, or the outgoing result is
25948 computed; then the hook should return the same mode as
25949 `promote_mode', though the signedness may be different.
25951 The default is to not promote arguments and return values. You can
25952 also define the hook to
25953 `default_promote_function_mode_always_promote' if you would like
25954 to apply the same rules given by `PROMOTE_MODE'.
25956 -- Macro: PARM_BOUNDARY
25957 Normal alignment required for function parameters on the stack, in
25958 bits. All stack parameters receive at least this much alignment
25959 regardless of data type. On most machines, this is the same as the
25960 size of an integer.
25962 -- Macro: STACK_BOUNDARY
25963 Define this macro to the minimum alignment enforced by hardware
25964 for the stack pointer on this machine. The definition is a C
25965 expression for the desired alignment (measured in bits). This
25966 value is used as a default if `PREFERRED_STACK_BOUNDARY' is not
25967 defined. On most machines, this should be the same as
25970 -- Macro: PREFERRED_STACK_BOUNDARY
25971 Define this macro if you wish to preserve a certain alignment for
25972 the stack pointer, greater than what the hardware enforces. The
25973 definition is a C expression for the desired alignment (measured
25974 in bits). This macro must evaluate to a value equal to or larger
25975 than `STACK_BOUNDARY'.
25977 -- Macro: INCOMING_STACK_BOUNDARY
25978 Define this macro if the incoming stack boundary may be different
25979 from `PREFERRED_STACK_BOUNDARY'. This macro must evaluate to a
25980 value equal to or larger than `STACK_BOUNDARY'.
25982 -- Macro: FUNCTION_BOUNDARY
25983 Alignment required for a function entry point, in bits.
25985 -- Macro: BIGGEST_ALIGNMENT
25986 Biggest alignment that any data type can require on this machine,
25987 in bits. Note that this is not the biggest alignment that is
25988 supported, just the biggest alignment that, when violated, may
25991 -- Macro: MALLOC_ABI_ALIGNMENT
25992 Alignment, in bits, a C conformant malloc implementation has to
25993 provide. If not defined, the default value is `BITS_PER_WORD'.
25995 -- Macro: ATTRIBUTE_ALIGNED_VALUE
25996 Alignment used by the `__attribute__ ((aligned))' construct. If
25997 not defined, the default value is `BIGGEST_ALIGNMENT'.
25999 -- Macro: MINIMUM_ATOMIC_ALIGNMENT
26000 If defined, the smallest alignment, in bits, that can be given to
26001 an object that can be referenced in one operation, without
26002 disturbing any nearby object. Normally, this is `BITS_PER_UNIT',
26003 but may be larger on machines that don't have byte or half-word
26006 -- Macro: BIGGEST_FIELD_ALIGNMENT
26007 Biggest alignment that any structure or union field can require on
26008 this machine, in bits. If defined, this overrides
26009 `BIGGEST_ALIGNMENT' for structure and union fields only, unless
26010 the field alignment has been set by the `__attribute__ ((aligned
26013 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED)
26014 An expression for the alignment of a structure field FIELD if the
26015 alignment computed in the usual way (including applying of
26016 `BIGGEST_ALIGNMENT' and `BIGGEST_FIELD_ALIGNMENT' to the
26017 alignment) is COMPUTED. It overrides alignment only if the field
26018 alignment has not been set by the `__attribute__ ((aligned (N)))'
26021 -- Macro: MAX_STACK_ALIGNMENT
26022 Biggest stack alignment guaranteed by the backend. Use this macro
26023 to specify the maximum alignment of a variable on stack.
26025 If not defined, the default value is `STACK_BOUNDARY'.
26028 -- Macro: MAX_OFILE_ALIGNMENT
26029 Biggest alignment supported by the object file format of this
26030 machine. Use this macro to limit the alignment which can be
26031 specified using the `__attribute__ ((aligned (N)))' construct. If
26032 not defined, the default value is `BIGGEST_ALIGNMENT'.
26034 On systems that use ELF, the default (in `config/elfos.h') is the
26035 largest supported 32-bit ELF section alignment representable on a
26036 32-bit host e.g. `(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'. On
26037 32-bit ELF the largest supported section alignment in bits is
26038 `(0x80000000 * 8)', but this is not representable on 32-bit hosts.
26040 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN)
26041 If defined, a C expression to compute the alignment for a variable
26042 in the static store. TYPE is the data type, and BASIC-ALIGN is
26043 the alignment that the object would ordinarily have. The value of
26044 this macro is used instead of that alignment to align the object.
26046 If this macro is not defined, then BASIC-ALIGN is used.
26048 One use of this macro is to increase alignment of medium-size data
26049 to make it all fit in fewer cache lines. Another is to cause
26050 character arrays to be word-aligned so that `strcpy' calls that
26051 copy constants to character arrays can be done inline.
26053 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN)
26054 If defined, a C expression to compute the alignment given to a
26055 constant that is being placed in memory. CONSTANT is the constant
26056 and BASIC-ALIGN is the alignment that the object would ordinarily
26057 have. The value of this macro is used instead of that alignment to
26060 If this macro is not defined, then BASIC-ALIGN is used.
26062 The typical use of this macro is to increase alignment for string
26063 constants to be word aligned so that `strcpy' calls that copy
26064 constants can be done inline.
26066 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN)
26067 If defined, a C expression to compute the alignment for a variable
26068 in the local store. TYPE is the data type, and BASIC-ALIGN is the
26069 alignment that the object would ordinarily have. The value of this
26070 macro is used instead of that alignment to align the object.
26072 If this macro is not defined, then BASIC-ALIGN is used.
26074 One use of this macro is to increase alignment of medium-size data
26075 to make it all fit in fewer cache lines.
26077 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN)
26078 If defined, a C expression to compute the alignment for stack slot.
26079 TYPE is the data type, MODE is the widest mode available, and
26080 BASIC-ALIGN is the alignment that the slot would ordinarily have.
26081 The value of this macro is used instead of that alignment to align
26084 If this macro is not defined, then BASIC-ALIGN is used when TYPE
26085 is `NULL'. Otherwise, `LOCAL_ALIGNMENT' will be used.
26087 This macro is to set alignment of stack slot to the maximum
26088 alignment of all possible modes which the slot may have.
26090 -- Macro: LOCAL_DECL_ALIGNMENT (DECL)
26091 If defined, a C expression to compute the alignment for a local
26094 If this macro is not defined, then `LOCAL_ALIGNMENT (TREE_TYPE
26095 (DECL), DECL_ALIGN (DECL))' is used.
26097 One use of this macro is to increase alignment of medium-size data
26098 to make it all fit in fewer cache lines.
26100 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN)
26101 If defined, a C expression to compute the minimum required
26102 alignment for dynamic stack realignment purposes for EXP (a type
26103 or decl), MODE, assuming normal alignment ALIGN.
26105 If this macro is not defined, then ALIGN will be used.
26107 -- Macro: EMPTY_FIELD_BOUNDARY
26108 Alignment in bits to be given to a structure bit-field that
26109 follows an empty field such as `int : 0;'.
26111 If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro.
26113 -- Macro: STRUCTURE_SIZE_BOUNDARY
26114 Number of bits which any structure or union's size must be a
26115 multiple of. Each structure or union's size is rounded up to a
26118 If you do not define this macro, the default is the same as
26121 -- Macro: STRICT_ALIGNMENT
26122 Define this macro to be the value 1 if instructions will fail to
26123 work if given data not on the nominal alignment. If instructions
26124 will merely go slower in that case, define this macro as 0.
26126 -- Macro: PCC_BITFIELD_TYPE_MATTERS
26127 Define this if you wish to imitate the way many other C compilers
26128 handle alignment of bit-fields and the structures that contain
26131 The behavior is that the type written for a named bit-field (`int',
26132 `short', or other integer type) imposes an alignment for the entire
26133 structure, as if the structure really did contain an ordinary
26134 field of that type. In addition, the bit-field is placed within
26135 the structure so that it would fit within such a field, not
26136 crossing a boundary for it.
26138 Thus, on most machines, a named bit-field whose type is written as
26139 `int' would not cross a four-byte boundary, and would force
26140 four-byte alignment for the whole structure. (The alignment used
26141 may not be four bytes; it is controlled by the other alignment
26144 An unnamed bit-field will not affect the alignment of the
26145 containing structure.
26147 If the macro is defined, its definition should be a C expression;
26148 a nonzero value for the expression enables this behavior.
26150 Note that if this macro is not defined, or its value is zero, some
26151 bit-fields may cross more than one alignment boundary. The
26152 compiler can support such references if there are `insv', `extv',
26153 and `extzv' insns that can directly reference memory.
26155 The other known way of making bit-fields work is to define
26156 `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'. Then
26157 every structure can be accessed with fullwords.
26159 Unless the machine has bit-field instructions or you define
26160 `STRUCTURE_SIZE_BOUNDARY' that way, you must define
26161 `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value.
26163 If your aim is to make GCC use the same conventions for laying out
26164 bit-fields as are used by another compiler, here is how to
26165 investigate what the other compiler does. Compile and run this
26184 printf ("Size of foo1 is %d\n",
26185 sizeof (struct foo1));
26186 printf ("Size of foo2 is %d\n",
26187 sizeof (struct foo2));
26191 If this prints 2 and 5, then the compiler's behavior is what you
26192 would get from `PCC_BITFIELD_TYPE_MATTERS'.
26194 -- Macro: BITFIELD_NBYTES_LIMITED
26195 Like `PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited
26196 to aligning a bit-field within the structure.
26198 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void)
26199 When `PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine
26200 whether unnamed bitfields affect the alignment of the containing
26201 structure. The hook should return true if the structure should
26202 inherit the alignment requirements of an unnamed bitfield's type.
26204 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void)
26205 This target hook should return `true' if accesses to volatile
26206 bitfields should use the narrowest mode possible. It should
26207 return `false' if these accesses should use the bitfield container
26210 The default is `!TARGET_STRICT_ALIGN'.
26212 -- Macro: MEMBER_TYPE_FORCES_BLK (FIELD, MODE)
26213 Return 1 if a structure or array containing FIELD should be
26214 accessed using `BLKMODE'.
26216 If FIELD is the only field in the structure, MODE is its mode,
26217 otherwise MODE is VOIDmode. MODE is provided in the case where
26218 structures of one field would require the structure's mode to
26219 retain the field's mode.
26221 Normally, this is not needed.
26223 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED)
26224 Define this macro as an expression for the alignment of a type
26225 (given by TYPE as a tree node) if the alignment computed in the
26226 usual way is COMPUTED and the alignment explicitly specified was
26229 The default is to use SPECIFIED if it is larger; otherwise, use
26230 the smaller of COMPUTED and `BIGGEST_ALIGNMENT'
26232 -- Macro: MAX_FIXED_MODE_SIZE
26233 An integer expression for the size in bits of the largest integer
26234 machine mode that should actually be used. All integer machine
26235 modes of this size or smaller can be used for structures and
26236 unions with the appropriate sizes. If this macro is undefined,
26237 `GET_MODE_BITSIZE (DImode)' is assumed.
26239 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL)
26240 If defined, an expression of type `enum machine_mode' that
26241 specifies the mode of the save area operand of a
26242 `save_stack_LEVEL' named pattern (*note Standard Names::).
26243 SAVE_LEVEL is one of `SAVE_BLOCK', `SAVE_FUNCTION', or
26244 `SAVE_NONLOCAL' and selects which of the three named patterns is
26245 having its mode specified.
26247 You need not define this macro if it always returns `Pmode'. You
26248 would most commonly define this macro if the `save_stack_LEVEL'
26249 patterns need to support both a 32- and a 64-bit mode.
26251 -- Macro: STACK_SIZE_MODE
26252 If defined, an expression of type `enum machine_mode' that
26253 specifies the mode of the size increment operand of an
26254 `allocate_stack' named pattern (*note Standard Names::).
26256 You need not define this macro if it always returns `word_mode'.
26257 You would most commonly define this macro if the `allocate_stack'
26258 pattern needs to support both a 32- and a 64-bit mode.
26260 -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
26261 This target hook should return the mode to be used for the return
26262 value of compare instructions expanded to libgcc calls. If not
26263 defined `word_mode' is returned which is the right choice for a
26264 majority of targets.
26266 -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
26267 This target hook should return the mode to be used for the shift
26268 count operand of shift instructions expanded to libgcc calls. If
26269 not defined `word_mode' is returned which is the right choice for
26270 a majority of targets.
26272 -- Target Hook: enum machine_mode TARGET_UNWIND_WORD_MODE (void)
26273 Return machine mode to be used for `_Unwind_Word' type. The
26274 default is to use `word_mode'.
26276 -- Macro: ROUND_TOWARDS_ZERO
26277 If defined, this macro should be true if the prevailing rounding
26278 mode is towards zero.
26280 Defining this macro only affects the way `libgcc.a' emulates
26281 floating-point arithmetic.
26283 Not defining this macro is equivalent to returning zero.
26285 -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE)
26286 This macro should return true if floats with SIZE bits do not have
26287 a NaN or infinity representation, but use the largest exponent for
26288 normal numbers instead.
26290 Defining this macro only affects the way `libgcc.a' emulates
26291 floating-point arithmetic.
26293 The default definition of this macro returns false for all sizes.
26295 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree
26297 This target hook returns `true' if bit-fields in the given
26298 RECORD_TYPE are to be laid out following the rules of Microsoft
26299 Visual C/C++, namely: (i) a bit-field won't share the same storage
26300 unit with the previous bit-field if their underlying types have
26301 different sizes, and the bit-field will be aligned to the highest
26302 alignment of the underlying types of itself and of the previous
26303 bit-field; (ii) a zero-sized bit-field will affect the alignment of
26304 the whole enclosing structure, even if it is unnamed; except that
26305 (iii) a zero-sized bit-field will be disregarded unless it follows
26306 another bit-field of nonzero size. If this hook returns `true',
26307 other macros that control bit-field layout are ignored.
26309 When a bit-field is inserted into a packed record, the whole size
26310 of the underlying type is used by one or more same-size adjacent
26311 bit-fields (that is, if its long:3, 32 bits is used in the record,
26312 and any additional adjacent long bit-fields are packed into the
26313 same chunk of 32 bits. However, if the size changes, a new field
26314 of that size is allocated). In an unpacked record, this is the
26315 same as using alignment, but not equivalent when packing.
26317 If both MS bit-fields and `__attribute__((packed))' are used, the
26318 latter will take precedence. If `__attribute__((packed))' is used
26319 on a single field when MS bit-fields are in use, it will take
26320 precedence for that field, but the alignment of the rest of the
26321 structure may affect its placement.
26323 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void)
26324 Returns true if the target supports decimal floating point.
26326 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void)
26327 Returns true if the target supports fixed-point arithmetic.
26329 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void)
26330 This hook is called just before expansion into rtl, allowing the
26331 target to perform additional initializations or analysis before
26332 the expansion. For example, the rs6000 port uses it to allocate a
26333 scratch stack slot for use in copying SDmode values between memory
26334 and floating point registers whenever the function being expanded
26335 has any SDmode usage.
26337 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void)
26338 This hook allows the backend to perform additional instantiations
26339 on rtl that are not actually in any insns yet, but will be later.
26341 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE)
26342 If your target defines any fundamental types, or any types your
26343 target uses should be mangled differently from the default, define
26344 this hook to return the appropriate encoding for these types as
26345 part of a C++ mangled name. The TYPE argument is the tree
26346 structure representing the type to be mangled. The hook may be
26347 applied to trees which are not target-specific fundamental types;
26348 it should return `NULL' for all such types, as well as arguments
26349 it does not recognize. If the return value is not `NULL', it must
26350 point to a statically-allocated string constant.
26352 Target-specific fundamental types might be new fundamental types or
26353 qualified versions of ordinary fundamental types. Encode new
26354 fundamental types as `u N NAME', where NAME is the name used for
26355 the type in source code, and N is the length of NAME in decimal.
26356 Encode qualified versions of ordinary types as `U N NAME CODE',
26357 where NAME is the name used for the type qualifier in source code,
26358 N is the length of NAME as above, and CODE is the code used to
26359 represent the unqualified version of this type. (See
26360 `write_builtin_type' in `cp/mangle.c' for the list of codes.) In
26361 both cases the spaces are for clarity; do not include any spaces
26364 This hook is applied to types prior to typedef resolution. If the
26365 mangled name for a particular type depends only on that type's
26366 main variant, you can perform typedef resolution yourself using
26367 `TYPE_MAIN_VARIANT' before mangling.
26369 The default version of this hook always returns `NULL', which is
26370 appropriate for a target that does not define any new fundamental
26374 File: gccint.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros
26376 17.6 Layout of Source Language Data Types
26377 =========================================
26379 These macros define the sizes and other characteristics of the standard
26380 basic data types used in programs being compiled. Unlike the macros in
26381 the previous section, these apply to specific features of C and related
26382 languages, rather than to fundamental aspects of storage layout.
26384 -- Macro: INT_TYPE_SIZE
26385 A C expression for the size in bits of the type `int' on the
26386 target machine. If you don't define this, the default is one word.
26388 -- Macro: SHORT_TYPE_SIZE
26389 A C expression for the size in bits of the type `short' on the
26390 target machine. If you don't define this, the default is half a
26391 word. (If this would be less than one storage unit, it is rounded
26394 -- Macro: LONG_TYPE_SIZE
26395 A C expression for the size in bits of the type `long' on the
26396 target machine. If you don't define this, the default is one word.
26398 -- Macro: ADA_LONG_TYPE_SIZE
26399 On some machines, the size used for the Ada equivalent of the type
26400 `long' by a native Ada compiler differs from that used by C. In
26401 that situation, define this macro to be a C expression to be used
26402 for the size of that type. If you don't define this, the default
26403 is the value of `LONG_TYPE_SIZE'.
26405 -- Macro: LONG_LONG_TYPE_SIZE
26406 A C expression for the size in bits of the type `long long' on the
26407 target machine. If you don't define this, the default is two
26408 words. If you want to support GNU Ada on your machine, the value
26409 of this macro must be at least 64.
26411 -- Macro: CHAR_TYPE_SIZE
26412 A C expression for the size in bits of the type `char' on the
26413 target machine. If you don't define this, the default is
26416 -- Macro: BOOL_TYPE_SIZE
26417 A C expression for the size in bits of the C++ type `bool' and C99
26418 type `_Bool' on the target machine. If you don't define this, and
26419 you probably shouldn't, the default is `CHAR_TYPE_SIZE'.
26421 -- Macro: FLOAT_TYPE_SIZE
26422 A C expression for the size in bits of the type `float' on the
26423 target machine. If you don't define this, the default is one word.
26425 -- Macro: DOUBLE_TYPE_SIZE
26426 A C expression for the size in bits of the type `double' on the
26427 target machine. If you don't define this, the default is two
26430 -- Macro: LONG_DOUBLE_TYPE_SIZE
26431 A C expression for the size in bits of the type `long double' on
26432 the target machine. If you don't define this, the default is two
26435 -- Macro: SHORT_FRACT_TYPE_SIZE
26436 A C expression for the size in bits of the type `short _Fract' on
26437 the target machine. If you don't define this, the default is
26440 -- Macro: FRACT_TYPE_SIZE
26441 A C expression for the size in bits of the type `_Fract' on the
26442 target machine. If you don't define this, the default is
26443 `BITS_PER_UNIT * 2'.
26445 -- Macro: LONG_FRACT_TYPE_SIZE
26446 A C expression for the size in bits of the type `long _Fract' on
26447 the target machine. If you don't define this, the default is
26448 `BITS_PER_UNIT * 4'.
26450 -- Macro: LONG_LONG_FRACT_TYPE_SIZE
26451 A C expression for the size in bits of the type `long long _Fract'
26452 on the target machine. If you don't define this, the default is
26453 `BITS_PER_UNIT * 8'.
26455 -- Macro: SHORT_ACCUM_TYPE_SIZE
26456 A C expression for the size in bits of the type `short _Accum' on
26457 the target machine. If you don't define this, the default is
26458 `BITS_PER_UNIT * 2'.
26460 -- Macro: ACCUM_TYPE_SIZE
26461 A C expression for the size in bits of the type `_Accum' on the
26462 target machine. If you don't define this, the default is
26463 `BITS_PER_UNIT * 4'.
26465 -- Macro: LONG_ACCUM_TYPE_SIZE
26466 A C expression for the size in bits of the type `long _Accum' on
26467 the target machine. If you don't define this, the default is
26468 `BITS_PER_UNIT * 8'.
26470 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE
26471 A C expression for the size in bits of the type `long long _Accum'
26472 on the target machine. If you don't define this, the default is
26473 `BITS_PER_UNIT * 16'.
26475 -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE
26476 Define this macro if `LONG_DOUBLE_TYPE_SIZE' is not constant or if
26477 you want routines in `libgcc2.a' for a size other than
26478 `LONG_DOUBLE_TYPE_SIZE'. If you don't define this, the default is
26479 `LONG_DOUBLE_TYPE_SIZE'.
26481 -- Macro: LIBGCC2_HAS_DF_MODE
26482 Define this macro if neither `LIBGCC2_DOUBLE_TYPE_SIZE' nor
26483 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is `DFmode' but you want `DFmode'
26484 routines in `libgcc2.a' anyway. If you don't define this and
26485 either `LIBGCC2_DOUBLE_TYPE_SIZE' or
26486 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64 then the default is 1,
26489 -- Macro: LIBGCC2_HAS_XF_MODE
26490 Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
26491 `XFmode' but you want `XFmode' routines in `libgcc2.a' anyway. If
26492 you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80
26493 then the default is 1, otherwise it is 0.
26495 -- Macro: LIBGCC2_HAS_TF_MODE
26496 Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not
26497 `TFmode' but you want `TFmode' routines in `libgcc2.a' anyway. If
26498 you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128
26499 then the default is 1, otherwise it is 0.
26505 Define these macros to be the size in bits of the mantissa of
26506 `SFmode', `DFmode', `XFmode' and `TFmode' values, if the defaults
26507 in `libgcc2.h' are inappropriate. By default, `FLT_MANT_DIG' is
26508 used for `SF_SIZE', `LDBL_MANT_DIG' for `XF_SIZE' and `TF_SIZE',
26509 and `DBL_MANT_DIG' or `LDBL_MANT_DIG' for `DF_SIZE' according to
26510 whether `LIBGCC2_DOUBLE_TYPE_SIZE' or
26511 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64.
26513 -- Macro: TARGET_FLT_EVAL_METHOD
26514 A C expression for the value for `FLT_EVAL_METHOD' in `float.h',
26515 assuming, if applicable, that the floating-point control word is
26516 in its default state. If you do not define this macro the value of
26517 `FLT_EVAL_METHOD' will be zero.
26519 -- Macro: WIDEST_HARDWARE_FP_SIZE
26520 A C expression for the size in bits of the widest floating-point
26521 format supported by the hardware. If you define this macro, you
26522 must specify a value less than or equal to the value of
26523 `LONG_DOUBLE_TYPE_SIZE'. If you do not define this macro, the
26524 value of `LONG_DOUBLE_TYPE_SIZE' is the default.
26526 -- Macro: DEFAULT_SIGNED_CHAR
26527 An expression whose value is 1 or 0, according to whether the type
26528 `char' should be signed or unsigned by default. The user can
26529 always override this default with the options `-fsigned-char' and
26532 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void)
26533 This target hook should return true if the compiler should give an
26534 `enum' type only as many bytes as it takes to represent the range
26535 of possible values of that type. It should return false if all
26536 `enum' types should be allocated like `int'.
26538 The default is to return false.
26540 -- Macro: SIZE_TYPE
26541 A C expression for a string describing the name of the data type
26542 to use for size values. The typedef name `size_t' is defined
26543 using the contents of the string.
26545 The string can contain more than one keyword. If so, separate
26546 them with spaces, and write first any length keyword, then
26547 `unsigned' if appropriate, and finally `int'. The string must
26548 exactly match one of the data type names defined in the function
26549 `init_decl_processing' in the file `c-decl.c'. You may not omit
26550 `int' or change the order--that would cause the compiler to crash
26553 If you don't define this macro, the default is `"long unsigned
26556 -- Macro: PTRDIFF_TYPE
26557 A C expression for a string describing the name of the data type
26558 to use for the result of subtracting two pointers. The typedef
26559 name `ptrdiff_t' is defined using the contents of the string. See
26560 `SIZE_TYPE' above for more information.
26562 If you don't define this macro, the default is `"long int"'.
26564 -- Macro: WCHAR_TYPE
26565 A C expression for a string describing the name of the data type
26566 to use for wide characters. The typedef name `wchar_t' is defined
26567 using the contents of the string. See `SIZE_TYPE' above for more
26570 If you don't define this macro, the default is `"int"'.
26572 -- Macro: WCHAR_TYPE_SIZE
26573 A C expression for the size in bits of the data type for wide
26574 characters. This is used in `cpp', which cannot make use of
26577 -- Macro: WINT_TYPE
26578 A C expression for a string describing the name of the data type to
26579 use for wide characters passed to `printf' and returned from
26580 `getwc'. The typedef name `wint_t' is defined using the contents
26581 of the string. See `SIZE_TYPE' above for more information.
26583 If you don't define this macro, the default is `"unsigned int"'.
26585 -- Macro: INTMAX_TYPE
26586 A C expression for a string describing the name of the data type
26587 that can represent any value of any standard or extended signed
26588 integer type. The typedef name `intmax_t' is defined using the
26589 contents of the string. See `SIZE_TYPE' above for more
26592 If you don't define this macro, the default is the first of
26593 `"int"', `"long int"', or `"long long int"' that has as much
26594 precision as `long long int'.
26596 -- Macro: UINTMAX_TYPE
26597 A C expression for a string describing the name of the data type
26598 that can represent any value of any standard or extended unsigned
26599 integer type. The typedef name `uintmax_t' is defined using the
26600 contents of the string. See `SIZE_TYPE' above for more
26603 If you don't define this macro, the default is the first of
26604 `"unsigned int"', `"long unsigned int"', or `"long long unsigned
26605 int"' that has as much precision as `long long unsigned int'.
26607 -- Macro: SIG_ATOMIC_TYPE
26608 -- Macro: INT8_TYPE
26609 -- Macro: INT16_TYPE
26610 -- Macro: INT32_TYPE
26611 -- Macro: INT64_TYPE
26612 -- Macro: UINT8_TYPE
26613 -- Macro: UINT16_TYPE
26614 -- Macro: UINT32_TYPE
26615 -- Macro: UINT64_TYPE
26616 -- Macro: INT_LEAST8_TYPE
26617 -- Macro: INT_LEAST16_TYPE
26618 -- Macro: INT_LEAST32_TYPE
26619 -- Macro: INT_LEAST64_TYPE
26620 -- Macro: UINT_LEAST8_TYPE
26621 -- Macro: UINT_LEAST16_TYPE
26622 -- Macro: UINT_LEAST32_TYPE
26623 -- Macro: UINT_LEAST64_TYPE
26624 -- Macro: INT_FAST8_TYPE
26625 -- Macro: INT_FAST16_TYPE
26626 -- Macro: INT_FAST32_TYPE
26627 -- Macro: INT_FAST64_TYPE
26628 -- Macro: UINT_FAST8_TYPE
26629 -- Macro: UINT_FAST16_TYPE
26630 -- Macro: UINT_FAST32_TYPE
26631 -- Macro: UINT_FAST64_TYPE
26632 -- Macro: INTPTR_TYPE
26633 -- Macro: UINTPTR_TYPE
26634 C expressions for the standard types `sig_atomic_t', `int8_t',
26635 `int16_t', `int32_t', `int64_t', `uint8_t', `uint16_t',
26636 `uint32_t', `uint64_t', `int_least8_t', `int_least16_t',
26637 `int_least32_t', `int_least64_t', `uint_least8_t',
26638 `uint_least16_t', `uint_least32_t', `uint_least64_t',
26639 `int_fast8_t', `int_fast16_t', `int_fast32_t', `int_fast64_t',
26640 `uint_fast8_t', `uint_fast16_t', `uint_fast32_t', `uint_fast64_t',
26641 `intptr_t', and `uintptr_t'. See `SIZE_TYPE' above for more
26644 If any of these macros evaluates to a null pointer, the
26645 corresponding type is not supported; if GCC is configured to
26646 provide `<stdint.h>' in such a case, the header provided may not
26647 conform to C99, depending on the type in question. The defaults
26648 for all of these macros are null pointers.
26650 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION
26651 The C++ compiler represents a pointer-to-member-function with a
26652 struct that looks like:
26657 ptrdiff_t vtable_index;
26662 The C++ compiler must use one bit to indicate whether the function
26663 that will be called through a pointer-to-member-function is
26664 virtual. Normally, we assume that the low-order bit of a function
26665 pointer must always be zero. Then, by ensuring that the
26666 vtable_index is odd, we can distinguish which variant of the union
26667 is in use. But, on some platforms function pointers can be odd,
26668 and so this doesn't work. In that case, we use the low-order bit
26669 of the `delta' field, and shift the remainder of the `delta' field
26672 GCC will automatically make the right selection about where to
26673 store this bit using the `FUNCTION_BOUNDARY' setting for your
26674 platform. However, some platforms such as ARM/Thumb have
26675 `FUNCTION_BOUNDARY' set such that functions always start at even
26676 addresses, but the lowest bit of pointers to functions indicate
26677 whether the function at that address is in ARM or Thumb mode. If
26678 this is the case of your architecture, you should define this
26679 macro to `ptrmemfunc_vbit_in_delta'.
26681 In general, you should not have to define this macro. On
26682 architectures in which function addresses are always even,
26683 according to `FUNCTION_BOUNDARY', GCC will automatically define
26684 this macro to `ptrmemfunc_vbit_in_pfn'.
26686 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS
26687 Normally, the C++ compiler uses function pointers in vtables. This
26688 macro allows the target to change to use "function descriptors"
26689 instead. Function descriptors are found on targets for whom a
26690 function pointer is actually a small data structure. Normally the
26691 data structure consists of the actual code address plus a data
26692 pointer to which the function's data is relative.
26694 If vtables are used, the value of this macro should be the number
26695 of words that the function descriptor occupies.
26697 -- Macro: TARGET_VTABLE_ENTRY_ALIGN
26698 By default, the vtable entries are void pointers, the so the
26699 alignment is the same as pointer alignment. The value of this
26700 macro specifies the alignment of the vtable entry in bits. It
26701 should be defined only when special alignment is necessary. */
26703 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE
26704 There are a few non-descriptor entries in the vtable at offsets
26705 below zero. If these entries must be padded (say, to preserve the
26706 alignment specified by `TARGET_VTABLE_ENTRY_ALIGN'), set this to
26707 the number of words in each data entry.
26710 File: gccint.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros
26712 17.7 Register Usage
26713 ===================
26715 This section explains how to describe what registers the target machine
26716 has, and how (in general) they can be used.
26718 The description of which registers a specific instruction can use is
26719 done with register classes; see *Note Register Classes::. For
26720 information on using registers to access a stack frame, see *Note Frame
26721 Registers::. For passing values in registers, see *Note Register
26722 Arguments::. For returning values in registers, see *Note Scalar
26727 * Register Basics:: Number and kinds of registers.
26728 * Allocation Order:: Order in which registers are allocated.
26729 * Values in Registers:: What kinds of values each reg can hold.
26730 * Leaf Functions:: Renumbering registers for leaf functions.
26731 * Stack Registers:: Handling a register stack such as 80387.
26734 File: gccint.info, Node: Register Basics, Next: Allocation Order, Up: Registers
26736 17.7.1 Basic Characteristics of Registers
26737 -----------------------------------------
26739 Registers have various characteristics.
26741 -- Macro: FIRST_PSEUDO_REGISTER
26742 Number of hardware registers known to the compiler. They receive
26743 numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first
26744 pseudo register's number really is assigned the number
26745 `FIRST_PSEUDO_REGISTER'.
26747 -- Macro: FIXED_REGISTERS
26748 An initializer that says which registers are used for fixed
26749 purposes all throughout the compiled code and are therefore not
26750 available for general allocation. These would include the stack
26751 pointer, the frame pointer (except on machines where that can be
26752 used as a general register when no frame pointer is needed), the
26753 program counter on machines where that is considered one of the
26754 addressable registers, and any other numbered register with a
26757 This information is expressed as a sequence of numbers, separated
26758 by commas and surrounded by braces. The Nth number is 1 if
26759 register N is fixed, 0 otherwise.
26761 The table initialized from this macro, and the table initialized by
26762 the following one, may be overridden at run time either
26763 automatically, by the actions of the macro
26764 `CONDITIONAL_REGISTER_USAGE', or by the user with the command
26765 options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'.
26767 -- Macro: CALL_USED_REGISTERS
26768 Like `FIXED_REGISTERS' but has 1 for each register that is
26769 clobbered (in general) by function calls as well as for fixed
26770 registers. This macro therefore identifies the registers that are
26771 not available for general allocation of values that must live
26772 across function calls.
26774 If a register has 0 in `CALL_USED_REGISTERS', the compiler
26775 automatically saves it on function entry and restores it on
26776 function exit, if the register is used within the function.
26778 -- Macro: CALL_REALLY_USED_REGISTERS
26779 Like `CALL_USED_REGISTERS' except this macro doesn't require that
26780 the entire set of `FIXED_REGISTERS' be included.
26781 (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS').
26782 This macro is optional. If not specified, it defaults to the value
26783 of `CALL_USED_REGISTERS'.
26785 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE)
26786 A C expression that is nonzero if it is not permissible to store a
26787 value of mode MODE in hard register number REGNO across a call
26788 without some part of it being clobbered. For most machines this
26789 macro need not be defined. It is only required for machines that
26790 do not preserve the entire contents of a register across a call.
26792 -- Macro: CONDITIONAL_REGISTER_USAGE
26793 Zero or more C statements that may conditionally modify five
26794 variables `fixed_regs', `call_used_regs', `global_regs',
26795 `reg_names', and `reg_class_contents', to take into account any
26796 dependence of these register sets on target flags. The first three
26797 of these are of type `char []' (interpreted as Boolean vectors).
26798 `global_regs' is a `const char *[]', and `reg_class_contents' is a
26799 `HARD_REG_SET'. Before the macro is called, `fixed_regs',
26800 `call_used_regs', `reg_class_contents', and `reg_names' have been
26801 initialized from `FIXED_REGISTERS', `CALL_USED_REGISTERS',
26802 `REG_CLASS_CONTENTS', and `REGISTER_NAMES', respectively.
26803 `global_regs' has been cleared, and any `-ffixed-REG',
26804 `-fcall-used-REG' and `-fcall-saved-REG' command options have been
26807 You need not define this macro if it has no work to do.
26809 If the usage of an entire class of registers depends on the target
26810 flags, you may indicate this to GCC by using this macro to modify
26811 `fixed_regs' and `call_used_regs' to 1 for each of the registers
26812 in the classes which should not be used by GCC. Also define the
26813 macro `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' to
26814 return `NO_REGS' if it is called with a letter for a class that
26817 (However, if this class is not included in `GENERAL_REGS' and all
26818 of the insn patterns whose constraints permit this class are
26819 controlled by target switches, then GCC will automatically avoid
26820 using these registers when the target switches are opposed to
26823 -- Macro: INCOMING_REGNO (OUT)
26824 Define this macro if the target machine has register windows.
26825 This C expression returns the register number as seen by the
26826 called function corresponding to the register number OUT as seen
26827 by the calling function. Return OUT if register number OUT is not
26828 an outbound register.
26830 -- Macro: OUTGOING_REGNO (IN)
26831 Define this macro if the target machine has register windows.
26832 This C expression returns the register number as seen by the
26833 calling function corresponding to the register number IN as seen
26834 by the called function. Return IN if register number IN is not an
26837 -- Macro: LOCAL_REGNO (REGNO)
26838 Define this macro if the target machine has register windows.
26839 This C expression returns true if the register is call-saved but
26840 is in the register window. Unlike most call-saved registers, such
26841 registers need not be explicitly restored on function exit or
26842 during non-local gotos.
26844 -- Macro: PC_REGNUM
26845 If the program counter has a register number, define this as that
26846 register number. Otherwise, do not define it.
26849 File: gccint.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers
26851 17.7.2 Order of Allocation of Registers
26852 ---------------------------------------
26854 Registers are allocated in order.
26856 -- Macro: REG_ALLOC_ORDER
26857 If defined, an initializer for a vector of integers, containing the
26858 numbers of hard registers in the order in which GCC should prefer
26859 to use them (from most preferred to least).
26861 If this macro is not defined, registers are used lowest numbered
26862 first (all else being equal).
26864 One use of this macro is on machines where the highest numbered
26865 registers must always be saved and the save-multiple-registers
26866 instruction supports only sequences of consecutive registers. On
26867 such machines, define `REG_ALLOC_ORDER' to be an initializer that
26868 lists the highest numbered allocable register first.
26870 -- Macro: ORDER_REGS_FOR_LOCAL_ALLOC
26871 A C statement (sans semicolon) to choose the order in which to
26872 allocate hard registers for pseudo-registers local to a basic
26875 Store the desired register order in the array `reg_alloc_order'.
26876 Element 0 should be the register to allocate first; element 1, the
26877 next register; and so on.
26879 The macro body should not assume anything about the contents of
26880 `reg_alloc_order' before execution of the macro.
26882 On most machines, it is not necessary to define this macro.
26884 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO)
26885 In some case register allocation order is not enough for the
26886 Integrated Register Allocator (IRA) to generate a good code. If
26887 this macro is defined, it should return a floating point value
26888 based on REGNO. The cost of using REGNO for a pseudo will be
26889 increased by approximately the pseudo's usage frequency times the
26890 value returned by this macro. Not defining this macro is
26891 equivalent to having it always return `0.0'.
26893 On most machines, it is not necessary to define this macro.
26896 File: gccint.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers
26898 17.7.3 How Values Fit in Registers
26899 ----------------------------------
26901 This section discusses the macros that describe which kinds of values
26902 (specifically, which machine modes) each register can hold, and how many
26903 consecutive registers are needed for a given mode.
26905 -- Macro: HARD_REGNO_NREGS (REGNO, MODE)
26906 A C expression for the number of consecutive hard registers,
26907 starting at register number REGNO, required to hold a value of mode
26908 MODE. This macro must never return zero, even if a register
26909 cannot hold the requested mode - indicate that with
26910 HARD_REGNO_MODE_OK and/or CANNOT_CHANGE_MODE_CLASS instead.
26912 On a machine where all registers are exactly one word, a suitable
26913 definition of this macro is
26915 #define HARD_REGNO_NREGS(REGNO, MODE) \
26916 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \
26919 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE)
26920 A C expression that is nonzero if a value of mode MODE, stored in
26921 memory, ends with padding that causes it to take up more space than
26922 in registers starting at register number REGNO (as determined by
26923 multiplying GCC's notion of the size of the register when
26924 containing this mode by the number of registers returned by
26925 `HARD_REGNO_NREGS'). By default this is zero.
26927 For example, if a floating-point value is stored in three 32-bit
26928 registers but takes up 128 bits in memory, then this would be
26931 This macros only needs to be defined if there are cases where
26932 `subreg_get_info' would otherwise wrongly determine that a
26933 `subreg' can be represented by an offset to the register number,
26934 when in fact such a `subreg' would contain some of the padding not
26935 stored in registers and so not be representable.
26937 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE)
26938 For values of REGNO and MODE for which
26939 `HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression
26940 returning the greater number of registers required to hold the
26941 value including any padding. In the example above, the value
26944 -- Macro: REGMODE_NATURAL_SIZE (MODE)
26945 Define this macro if the natural size of registers that hold values
26946 of mode MODE is not the word size. It is a C expression that
26947 should give the natural size in bytes for the specified mode. It
26948 is used by the register allocator to try to optimize its results.
26949 This happens for example on SPARC 64-bit where the natural size of
26950 floating-point registers is still 32-bit.
26952 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE)
26953 A C expression that is nonzero if it is permissible to store a
26954 value of mode MODE in hard register number REGNO (or in several
26955 registers starting with that one). For a machine where all
26956 registers are equivalent, a suitable definition is
26958 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
26960 You need not include code to check for the numbers of fixed
26961 registers, because the allocation mechanism considers them to be
26964 On some machines, double-precision values must be kept in even/odd
26965 register pairs. You can implement that by defining this macro to
26966 reject odd register numbers for such modes.
26968 The minimum requirement for a mode to be OK in a register is that
26969 the `movMODE' instruction pattern support moves between the
26970 register and other hard register in the same class and that moving
26971 a value into the register and back out not alter it.
26973 Since the same instruction used to move `word_mode' will work for
26974 all narrower integer modes, it is not necessary on any machine for
26975 `HARD_REGNO_MODE_OK' to distinguish between these modes, provided
26976 you define patterns `movhi', etc., to take advantage of this. This
26977 is useful because of the interaction between `HARD_REGNO_MODE_OK'
26978 and `MODES_TIEABLE_P'; it is very desirable for all integer modes
26981 Many machines have special registers for floating point arithmetic.
26982 Often people assume that floating point machine modes are allowed
26983 only in floating point registers. This is not true. Any
26984 registers that can hold integers can safely _hold_ a floating
26985 point machine mode, whether or not floating arithmetic can be done
26986 on it in those registers. Integer move instructions can be used
26987 to move the values.
26989 On some machines, though, the converse is true: fixed-point machine
26990 modes may not go in floating registers. This is true if the
26991 floating registers normalize any value stored in them, because
26992 storing a non-floating value there would garble it. In this case,
26993 `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in
26994 floating registers. But if the floating registers do not
26995 automatically normalize, if you can store any bit pattern in one
26996 and retrieve it unchanged without a trap, then any machine mode
26997 may go in a floating register, so you can define this macro to say
27000 The primary significance of special floating registers is rather
27001 that they are the registers acceptable in floating point arithmetic
27002 instructions. However, this is of no concern to
27003 `HARD_REGNO_MODE_OK'. You handle it by writing the proper
27004 constraints for those instructions.
27006 On some machines, the floating registers are especially slow to
27007 access, so that it is better to store a value in a stack frame
27008 than in such a register if floating point arithmetic is not being
27009 done. As long as the floating registers are not in class
27010 `GENERAL_REGS', they will not be used unless some pattern's
27011 constraint asks for one.
27013 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO)
27014 A C expression that is nonzero if it is OK to rename a hard
27015 register FROM to another hard register TO.
27017 One common use of this macro is to prevent renaming of a register
27018 to another register that is not saved by a prologue in an interrupt
27021 The default is always nonzero.
27023 -- Macro: MODES_TIEABLE_P (MODE1, MODE2)
27024 A C expression that is nonzero if a value of mode MODE1 is
27025 accessible in mode MODE2 without copying.
27027 If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
27028 MODE2)' are always the same for any R, then `MODES_TIEABLE_P
27029 (MODE1, MODE2)' should be nonzero. If they differ for any R, you
27030 should define this macro to return zero unless some other
27031 mechanism ensures the accessibility of the value in a narrower
27034 You should define this macro to return nonzero in as many cases as
27035 possible since doing so will allow GCC to perform better register
27038 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO)
27039 This target hook should return `true' if it is OK to use a hard
27040 register REGNO as scratch reg in peephole2.
27042 One common use of this macro is to prevent using of a register that
27043 is not saved by a prologue in an interrupt handler.
27045 The default version of this hook always returns `true'.
27047 -- Macro: AVOID_CCMODE_COPIES
27048 Define this macro if the compiler should avoid copies to/from
27049 `CCmode' registers. You should only define this macro if support
27050 for copying to/from `CCmode' is incomplete.
27053 File: gccint.info, Node: Leaf Functions, Next: Stack Registers, Prev: Values in Registers, Up: Registers
27055 17.7.4 Handling Leaf Functions
27056 ------------------------------
27058 On some machines, a leaf function (i.e., one which makes no calls) can
27059 run more efficiently if it does not make its own register window.
27060 Often this means it is required to receive its arguments in the
27061 registers where they are passed by the caller, instead of the registers
27062 where they would normally arrive.
27064 The special treatment for leaf functions generally applies only when
27065 other conditions are met; for example, often they may use only those
27066 registers for its own variables and temporaries. We use the term "leaf
27067 function" to mean a function that is suitable for this special
27068 handling, so that functions with no calls are not necessarily "leaf
27071 GCC assigns register numbers before it knows whether the function is
27072 suitable for leaf function treatment. So it needs to renumber the
27073 registers in order to output a leaf function. The following macros
27076 -- Macro: LEAF_REGISTERS
27077 Name of a char vector, indexed by hard register number, which
27078 contains 1 for a register that is allowable in a candidate for leaf
27079 function treatment.
27081 If leaf function treatment involves renumbering the registers,
27082 then the registers marked here should be the ones before
27083 renumbering--those that GCC would ordinarily allocate. The
27084 registers which will actually be used in the assembler code, after
27085 renumbering, should not be marked with 1 in this vector.
27087 Define this macro only if the target machine offers a way to
27088 optimize the treatment of leaf functions.
27090 -- Macro: LEAF_REG_REMAP (REGNO)
27091 A C expression whose value is the register number to which REGNO
27092 should be renumbered, when a function is treated as a leaf
27095 If REGNO is a register number which should not appear in a leaf
27096 function before renumbering, then the expression should yield -1,
27097 which will cause the compiler to abort.
27099 Define this macro only if the target machine offers a way to
27100 optimize the treatment of leaf functions, and registers need to be
27101 renumbered to do this.
27103 `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' must
27104 usually treat leaf functions specially. They can test the C variable
27105 `current_function_is_leaf' which is nonzero for leaf functions.
27106 `current_function_is_leaf' is set prior to local register allocation
27107 and is valid for the remaining compiler passes. They can also test the
27108 C variable `current_function_uses_only_leaf_regs' which is nonzero for
27109 leaf functions which only use leaf registers.
27110 `current_function_uses_only_leaf_regs' is valid after all passes that
27111 modify the instructions have been run and is only useful if
27112 `LEAF_REGISTERS' is defined.
27115 File: gccint.info, Node: Stack Registers, Prev: Leaf Functions, Up: Registers
27117 17.7.5 Registers That Form a Stack
27118 ----------------------------------
27120 There are special features to handle computers where some of the
27121 "registers" form a stack. Stack registers are normally written by
27122 pushing onto the stack, and are numbered relative to the top of the
27125 Currently, GCC can only handle one group of stack-like registers, and
27126 they must be consecutively numbered. Furthermore, the existing support
27127 for stack-like registers is specific to the 80387 floating point
27128 coprocessor. If you have a new architecture that uses stack-like
27129 registers, you will need to do substantial work on `reg-stack.c' and
27130 write your machine description to cooperate with it, as well as
27131 defining these macros.
27133 -- Macro: STACK_REGS
27134 Define this if the machine has any stack-like registers.
27136 -- Macro: STACK_REG_COVER_CLASS
27137 This is a cover class containing the stack registers. Define this
27138 if the machine has any stack-like registers.
27140 -- Macro: FIRST_STACK_REG
27141 The number of the first stack-like register. This one is the top
27144 -- Macro: LAST_STACK_REG
27145 The number of the last stack-like register. This one is the
27146 bottom of the stack.
27149 File: gccint.info, Node: Register Classes, Next: Old Constraints, Prev: Registers, Up: Target Macros
27151 17.8 Register Classes
27152 =====================
27154 On many machines, the numbered registers are not all equivalent. For
27155 example, certain registers may not be allowed for indexed addressing;
27156 certain registers may not be allowed in some instructions. These
27157 machine restrictions are described to the compiler using "register
27160 You define a number of register classes, giving each one a name and
27161 saying which of the registers belong to it. Then you can specify
27162 register classes that are allowed as operands to particular instruction
27165 In general, each register will belong to several classes. In fact, one
27166 class must be named `ALL_REGS' and contain all the registers. Another
27167 class must be named `NO_REGS' and contain no registers. Often the
27168 union of two classes will be another class; however, this is not
27171 One of the classes must be named `GENERAL_REGS'. There is nothing
27172 terribly special about the name, but the operand constraint letters `r'
27173 and `g' specify this class. If `GENERAL_REGS' is the same as
27174 `ALL_REGS', just define it as a macro which expands to `ALL_REGS'.
27176 Order the classes so that if class X is contained in class Y then X
27177 has a lower class number than Y.
27179 The way classes other than `GENERAL_REGS' are specified in operand
27180 constraints is through machine-dependent operand constraint letters.
27181 You can define such letters to correspond to various classes, then use
27182 them in operand constraints.
27184 You should define a class for the union of two classes whenever some
27185 instruction allows both classes. For example, if an instruction allows
27186 either a floating point (coprocessor) register or a general register
27187 for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS'
27188 which includes both of them. Otherwise you will get suboptimal code.
27190 You must also specify certain redundant information about the register
27191 classes: for each class, which classes contain it and which ones are
27192 contained in it; for each pair of classes, the largest class contained
27195 When a value occupying several consecutive registers is expected in a
27196 certain class, all the registers used must belong to that class.
27197 Therefore, register classes cannot be used to enforce a requirement for
27198 a register pair to start with an even-numbered register. The way to
27199 specify this requirement is with `HARD_REGNO_MODE_OK'.
27201 Register classes used for input-operands of bitwise-and or shift
27202 instructions have a special requirement: each such class must have, for
27203 each fixed-point machine mode, a subclass whose registers can transfer
27204 that mode to or from memory. For example, on some machines, the
27205 operations for single-byte values (`QImode') are limited to certain
27206 registers. When this is so, each register class that is used in a
27207 bitwise-and or shift instruction must have a subclass consisting of
27208 registers from which single-byte values can be loaded or stored. This
27209 is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to
27212 -- Data type: enum reg_class
27213 An enumerated type that must be defined with all the register
27214 class names as enumerated values. `NO_REGS' must be first.
27215 `ALL_REGS' must be the last register class, followed by one more
27216 enumerated value, `LIM_REG_CLASSES', which is not a register class
27217 but rather tells how many classes there are.
27219 Each register class has a number, which is the value of casting
27220 the class name to type `int'. The number serves as an index in
27221 many of the tables described below.
27223 -- Macro: N_REG_CLASSES
27224 The number of distinct register classes, defined as follows:
27226 #define N_REG_CLASSES (int) LIM_REG_CLASSES
27228 -- Macro: REG_CLASS_NAMES
27229 An initializer containing the names of the register classes as C
27230 string constants. These names are used in writing some of the
27233 -- Macro: REG_CLASS_CONTENTS
27234 An initializer containing the contents of the register classes, as
27235 integers which are bit masks. The Nth integer specifies the
27236 contents of class N. The way the integer MASK is interpreted is
27237 that register R is in the class if `MASK & (1 << R)' is 1.
27239 When the machine has more than 32 registers, an integer does not
27240 suffice. Then the integers are replaced by sub-initializers,
27241 braced groupings containing several integers. Each
27242 sub-initializer must be suitable as an initializer for the type
27243 `HARD_REG_SET' which is defined in `hard-reg-set.h'. In this
27244 situation, the first integer in each sub-initializer corresponds to
27245 registers 0 through 31, the second integer to registers 32 through
27248 -- Macro: REGNO_REG_CLASS (REGNO)
27249 A C expression whose value is a register class containing hard
27250 register REGNO. In general there is more than one such class;
27251 choose a class which is "minimal", meaning that no smaller class
27252 also contains the register.
27254 -- Macro: BASE_REG_CLASS
27255 A macro whose definition is the name of the class to which a valid
27256 base register must belong. A base register is one used in an
27257 address which is the register value plus a displacement.
27259 -- Macro: MODE_BASE_REG_CLASS (MODE)
27260 This is a variation of the `BASE_REG_CLASS' macro which allows the
27261 selection of a base register in a mode dependent manner. If MODE
27262 is VOIDmode then it should return the same value as
27265 -- Macro: MODE_BASE_REG_REG_CLASS (MODE)
27266 A C expression whose value is the register class to which a valid
27267 base register must belong in order to be used in a base plus index
27268 register address. You should define this macro if base plus index
27269 addresses have different requirements than other base register
27272 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, OUTER_CODE, INDEX_CODE)
27273 A C expression whose value is the register class to which a valid
27274 base register must belong. OUTER_CODE and INDEX_CODE define the
27275 context in which the base register occurs. OUTER_CODE is the code
27276 of the immediately enclosing expression (`MEM' for the top level
27277 of an address, `ADDRESS' for something that occurs in an
27278 `address_operand'). INDEX_CODE is the code of the corresponding
27279 index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise.
27281 -- Macro: INDEX_REG_CLASS
27282 A macro whose definition is the name of the class to which a valid
27283 index register must belong. An index register is one used in an
27284 address where its value is either multiplied by a scale factor or
27285 added to another register (as well as added to a displacement).
27287 -- Macro: REGNO_OK_FOR_BASE_P (NUM)
27288 A C expression which is nonzero if register number NUM is suitable
27289 for use as a base register in operand addresses. Like
27290 `TARGET_LEGITIMATE_ADDRESS_P', this macro should also define a
27291 strict and a non-strict variant. Both variants behave the same
27292 for hard register; for pseudos, the strict variant will pass only
27293 those that have been allocated to a valid hard registers, while
27294 the non-strict variant will pass all pseudos.
27296 Compiler source files that want to use the strict variant of this
27297 and other macros define the macro `REG_OK_STRICT'. You should use
27298 an `#ifdef REG_OK_STRICT' conditional to define the strict variant
27299 in that case and the non-strict variant otherwise.
27301 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE)
27302 A C expression that is just like `REGNO_OK_FOR_BASE_P', except that
27303 that expression may examine the mode of the memory reference in
27304 MODE. You should define this macro if the mode of the memory
27305 reference affects whether a register may be used as a base
27306 register. If you define this macro, the compiler will use it
27307 instead of `REGNO_OK_FOR_BASE_P'. The mode may be `VOIDmode' for
27308 addresses that appear outside a `MEM', i.e., as an
27311 This macro also has strict and non-strict variants.
27313 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE)
27314 A C expression which is nonzero if register number NUM is suitable
27315 for use as a base register in base plus index operand addresses,
27316 accessing memory in mode MODE. It may be either a suitable hard
27317 register or a pseudo register that has been allocated such a hard
27318 register. You should define this macro if base plus index
27319 addresses have different requirements than other base register
27322 Use of this macro is deprecated; please use the more general
27323 `REGNO_MODE_CODE_OK_FOR_BASE_P'.
27325 This macro also has strict and non-strict variants.
27327 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, OUTER_CODE,
27329 A C expression that is just like `REGNO_MODE_OK_FOR_BASE_P', except
27330 that that expression may examine the context in which the register
27331 appears in the memory reference. OUTER_CODE is the code of the
27332 immediately enclosing expression (`MEM' if at the top level of the
27333 address, `ADDRESS' for something that occurs in an
27334 `address_operand'). INDEX_CODE is the code of the corresponding
27335 index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise.
27336 The mode may be `VOIDmode' for addresses that appear outside a
27337 `MEM', i.e., as an `address_operand'.
27339 This macro also has strict and non-strict variants.
27341 -- Macro: REGNO_OK_FOR_INDEX_P (NUM)
27342 A C expression which is nonzero if register number NUM is suitable
27343 for use as an index register in operand addresses. It may be
27344 either a suitable hard register or a pseudo register that has been
27345 allocated such a hard register.
27347 The difference between an index register and a base register is
27348 that the index register may be scaled. If an address involves the
27349 sum of two registers, neither one of them scaled, then either one
27350 may be labeled the "base" and the other the "index"; but whichever
27351 labeling is used must fit the machine's constraints of which
27352 registers may serve in each capacity. The compiler will try both
27353 labelings, looking for one that is valid, and will reload one or
27354 both registers only if neither labeling works.
27356 This macro also has strict and non-strict variants.
27358 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS)
27359 A C expression that places additional restrictions on the register
27360 class to use when it is necessary to copy value X into a register
27361 in class CLASS. The value is a register class; perhaps CLASS, or
27362 perhaps another, smaller class. On many machines, the following
27363 definition is safe:
27365 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
27367 Sometimes returning a more restrictive class makes better code.
27368 For example, on the 68000, when X is an integer constant that is
27369 in range for a `moveq' instruction, the value of this macro is
27370 always `DATA_REGS' as long as CLASS includes the data registers.
27371 Requiring a data register guarantees that a `moveq' will be used.
27373 One case where `PREFERRED_RELOAD_CLASS' must not return CLASS is
27374 if X is a legitimate constant which cannot be loaded into some
27375 register class. By returning `NO_REGS' you can force X into a
27376 memory location. For example, rs6000 can load immediate values
27377 into general-purpose registers, but does not have an instruction
27378 for loading an immediate value into a floating-point register, so
27379 `PREFERRED_RELOAD_CLASS' returns `NO_REGS' when X is a
27380 floating-point constant. If the constant can't be loaded into any
27381 kind of register, code generation will be better if
27382 `LEGITIMATE_CONSTANT_P' makes the constant illegitimate instead of
27383 using `PREFERRED_RELOAD_CLASS'.
27385 If an insn has pseudos in it after register allocation, reload
27386 will go through the alternatives and call repeatedly
27387 `PREFERRED_RELOAD_CLASS' to find the best one. Returning
27388 `NO_REGS', in this case, makes reload add a `!' in front of the
27389 constraint: the x86 back-end uses this feature to discourage usage
27390 of 387 registers when math is done in the SSE registers (and vice
27393 -- Macro: PREFERRED_OUTPUT_RELOAD_CLASS (X, CLASS)
27394 Like `PREFERRED_RELOAD_CLASS', but for output reloads instead of
27395 input reloads. If you don't define this macro, the default is to
27396 use CLASS, unchanged.
27398 You can also use `PREFERRED_OUTPUT_RELOAD_CLASS' to discourage
27399 reload from using some alternatives, like `PREFERRED_RELOAD_CLASS'.
27401 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS)
27402 A C expression that places additional restrictions on the register
27403 class to use when it is necessary to be able to hold a value of
27404 mode MODE in a reload register for which class CLASS would
27405 ordinarily be used.
27407 Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when
27408 there are certain modes that simply can't go in certain reload
27411 The value is a register class; perhaps CLASS, or perhaps another,
27414 Don't define this macro unless the target machine has limitations
27415 which require the macro to do something nontrivial.
27417 -- Target Hook: enum reg_class TARGET_SECONDARY_RELOAD (bool IN_P, rtx
27418 X, enum reg_class RELOAD_CLASS, enum machine_mode
27419 RELOAD_MODE, secondary_reload_info *SRI)
27420 Many machines have some registers that cannot be copied directly
27421 to or from memory or even from other types of registers. An
27422 example is the `MQ' register, which on most machines, can only be
27423 copied to or from general registers, but not memory. Below, we
27424 shall be using the term 'intermediate register' when a move
27425 operation cannot be performed directly, but has to be done by
27426 copying the source into the intermediate register first, and then
27427 copying the intermediate register to the destination. An
27428 intermediate register always has the same mode as source and
27429 destination. Since it holds the actual value being copied, reload
27430 might apply optimizations to re-use an intermediate register and
27431 eliding the copy from the source when it can determine that the
27432 intermediate register still holds the required value.
27434 Another kind of secondary reload is required on some machines which
27435 allow copying all registers to and from memory, but require a
27436 scratch register for stores to some memory locations (e.g., those
27437 with symbolic address on the RT, and those with certain symbolic
27438 address on the SPARC when compiling PIC). Scratch registers need
27439 not have the same mode as the value being copied, and usually hold
27440 a different value than that being copied. Special patterns in the
27441 md file are needed to describe how the copy is performed with the
27442 help of the scratch register; these patterns also describe the
27443 number, register class(es) and mode(s) of the scratch register(s).
27445 In some cases, both an intermediate and a scratch register are
27448 For input reloads, this target hook is called with nonzero IN_P,
27449 and X is an rtx that needs to be copied to a register of class
27450 RELOAD_CLASS in RELOAD_MODE. For output reloads, this target hook
27451 is called with zero IN_P, and a register of class RELOAD_CLASS
27452 needs to be copied to rtx X in RELOAD_MODE.
27454 If copying a register of RELOAD_CLASS from/to X requires an
27455 intermediate register, the hook `secondary_reload' should return
27456 the register class required for this intermediate register. If no
27457 intermediate register is required, it should return NO_REGS. If
27458 more than one intermediate register is required, describe the one
27459 that is closest in the copy chain to the reload register.
27461 If scratch registers are needed, you also have to describe how to
27462 perform the copy from/to the reload register to/from this closest
27463 intermediate register. Or if no intermediate register is
27464 required, but still a scratch register is needed, describe the
27465 copy from/to the reload register to/from the reload operand X.
27467 You do this by setting `sri->icode' to the instruction code of a
27468 pattern in the md file which performs the move. Operands 0 and 1
27469 are the output and input of this copy, respectively. Operands
27470 from operand 2 onward are for scratch operands. These scratch
27471 operands must have a mode, and a single-register-class output
27474 When an intermediate register is used, the `secondary_reload' hook
27475 will be called again to determine how to copy the intermediate
27476 register to/from the reload operand X, so your hook must also have
27477 code to handle the register class of the intermediate operand.
27479 X might be a pseudo-register or a `subreg' of a pseudo-register,
27480 which could either be in a hard register or in memory. Use
27481 `true_regnum' to find out; it will return -1 if the pseudo is in
27482 memory and the hard register number if it is in a register.
27484 Scratch operands in memory (constraint `"=m"' / `"=&m"') are
27485 currently not supported. For the time being, you will have to
27486 continue to use `SECONDARY_MEMORY_NEEDED' for that purpose.
27488 `copy_cost' also uses this target hook to find out how values are
27489 copied. If you want it to include some extra cost for the need to
27490 allocate (a) scratch register(s), set `sri->extra_cost' to the
27491 additional cost. Or if two dependent moves are supposed to have a
27492 lower cost than the sum of the individual moves due to expected
27493 fortuitous scheduling and/or special forwarding logic, you can set
27494 `sri->extra_cost' to a negative amount.
27496 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
27497 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)
27498 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)
27499 These macros are obsolete, new ports should use the target hook
27500 `TARGET_SECONDARY_RELOAD' instead.
27502 These are obsolete macros, replaced by the
27503 `TARGET_SECONDARY_RELOAD' target hook. Older ports still define
27504 these macros to indicate to the reload phase that it may need to
27505 allocate at least one register for a reload in addition to the
27506 register to contain the data. Specifically, if copying X to a
27507 register CLASS in MODE requires an intermediate register, you were
27508 supposed to define `SECONDARY_INPUT_RELOAD_CLASS' to return the
27509 largest register class all of whose registers can be used as
27510 intermediate registers or scratch registers.
27512 If copying a register CLASS in MODE to X requires an intermediate
27513 or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' was supposed
27514 to be defined be defined to return the largest register class
27515 required. If the requirements for input and output reloads were
27516 the same, the macro `SECONDARY_RELOAD_CLASS' should have been used
27517 instead of defining both macros identically.
27519 The values returned by these macros are often `GENERAL_REGS'.
27520 Return `NO_REGS' if no spare register is needed; i.e., if X can be
27521 directly copied to or from a register of CLASS in MODE without
27522 requiring a scratch register. Do not define this macro if it
27523 would always return `NO_REGS'.
27525 If a scratch register is required (either with or without an
27526 intermediate register), you were supposed to define patterns for
27527 `reload_inM' or `reload_outM', as required (*note Standard
27528 Names::. These patterns, which were normally implemented with a
27529 `define_expand', should be similar to the `movM' patterns, except
27530 that operand 2 is the scratch register.
27532 These patterns need constraints for the reload register and scratch
27533 register that contain a single register class. If the original
27534 reload register (whose class is CLASS) can meet the constraint
27535 given in the pattern, the value returned by these macros is used
27536 for the class of the scratch register. Otherwise, two additional
27537 reload registers are required. Their classes are obtained from
27538 the constraints in the insn pattern.
27540 X might be a pseudo-register or a `subreg' of a pseudo-register,
27541 which could either be in a hard register or in memory. Use
27542 `true_regnum' to find out; it will return -1 if the pseudo is in
27543 memory and the hard register number if it is in a register.
27545 These macros should not be used in the case where a particular
27546 class of registers can only be copied to memory and not to another
27547 class of registers. In that case, secondary reload registers are
27548 not needed and would not be helpful. Instead, a stack location
27549 must be used to perform the copy and the `movM' pattern should use
27550 memory as an intermediate storage. This case often occurs between
27551 floating-point and general registers.
27553 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)
27554 Certain machines have the property that some registers cannot be
27555 copied to some other registers without using memory. Define this
27556 macro on those machines to be a C expression that is nonzero if
27557 objects of mode M in registers of CLASS1 can only be copied to
27558 registers of class CLASS2 by storing a register of CLASS1 into
27559 memory and loading that memory location into a register of CLASS2.
27561 Do not define this macro if its value would always be zero.
27563 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE)
27564 Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler
27565 allocates a stack slot for a memory location needed for register
27566 copies. If this macro is defined, the compiler instead uses the
27567 memory location defined by this macro.
27569 Do not define this macro if you do not define
27570 `SECONDARY_MEMORY_NEEDED'.
27572 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE)
27573 When the compiler needs a secondary memory location to copy
27574 between two registers of mode MODE, it normally allocates
27575 sufficient memory to hold a quantity of `BITS_PER_WORD' bits and
27576 performs the store and load operations in a mode that many bits
27577 wide and whose class is the same as that of MODE.
27579 This is right thing to do on most machines because it ensures that
27580 all bits of the register are copied and prevents accesses to the
27581 registers in a narrower mode, which some machines prohibit for
27582 floating-point registers.
27584 However, this default behavior is not correct on some machines,
27585 such as the DEC Alpha, that store short integers in floating-point
27586 registers differently than in integer registers. On those
27587 machines, the default widening will not work correctly and you
27588 must define this macro to suppress that widening in some cases.
27589 See the file `alpha.h' for details.
27591 Do not define this macro if you do not define
27592 `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is
27593 `BITS_PER_WORD' bits wide is correct for your machine.
27595 -- Macro: SMALL_REGISTER_CLASSES
27596 On some machines, it is risky to let hard registers live across
27597 arbitrary insns. Typically, these machines have instructions that
27598 require values to be in specific registers (like an accumulator),
27599 and reload will fail if the required hard register is used for
27600 another purpose across such an insn.
27602 Define `SMALL_REGISTER_CLASSES' to be an expression with a nonzero
27603 value on these machines. When this macro has a nonzero value, the
27604 compiler will try to minimize the lifetime of hard registers.
27606 It is always safe to define this macro with a nonzero value, but
27607 if you unnecessarily define it, you will reduce the amount of
27608 optimizations that can be performed in some cases. If you do not
27609 define this macro with a nonzero value when it is required, the
27610 compiler will run out of spill registers and print a fatal error
27611 message. For most machines, you should not define this macro at
27614 -- Macro: CLASS_LIKELY_SPILLED_P (CLASS)
27615 A C expression whose value is nonzero if pseudos that have been
27616 assigned to registers of class CLASS would likely be spilled
27617 because registers of CLASS are needed for spill registers.
27619 The default value of this macro returns 1 if CLASS has exactly one
27620 register and zero otherwise. On most machines, this default
27621 should be used. Only define this macro to some other expression
27622 if pseudos allocated by `local-alloc.c' end up in memory because
27623 their hard registers were needed for spill registers. If this
27624 macro returns nonzero for those classes, those pseudos will only
27625 be allocated by `global.c', which knows how to reallocate the
27626 pseudo to another register. If there would not be another
27627 register available for reallocation, you should not change the
27628 definition of this macro since the only effect of such a
27629 definition would be to slow down register allocation.
27631 -- Macro: CLASS_MAX_NREGS (CLASS, MODE)
27632 A C expression for the maximum number of consecutive registers of
27633 class CLASS needed to hold a value of mode MODE.
27635 This is closely related to the macro `HARD_REGNO_NREGS'. In fact,
27636 the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be
27637 the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all
27638 REGNO values in the class CLASS.
27640 This macro helps control the handling of multiple-word values in
27643 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS)
27644 If defined, a C expression that returns nonzero for a CLASS for
27645 which a change from mode FROM to mode TO is invalid.
27647 For the example, loading 32-bit integer or floating-point objects
27648 into floating-point registers on the Alpha extends them to 64 bits.
27649 Therefore loading a 64-bit object and then storing it as a 32-bit
27650 object does not store the low-order 32 bits, as would be the case
27651 for a normal register. Therefore, `alpha.h' defines
27652 `CANNOT_CHANGE_MODE_CLASS' as below:
27654 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
27655 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
27656 ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0)
27658 -- Target Hook: const enum reg_class * TARGET_IRA_COVER_CLASSES (void)
27659 Return an array of cover classes for the Integrated Register
27660 Allocator (IRA). Cover classes are a set of non-intersecting
27661 register classes covering all hard registers used for register
27662 allocation purposes. If a move between two registers in the same
27663 cover class is possible, it should be cheaper than a load or store
27664 of the registers. The array is terminated by a `LIM_REG_CLASSES'
27667 The order of cover classes in the array is important. If two
27668 classes have the same cost of usage for a pseudo, the class
27669 occurred first in the array is chosen for the pseudo.
27671 This hook is called once at compiler startup, after the
27672 command-line options have been processed. It is then re-examined
27673 by every call to `target_reinit'.
27675 The default implementation returns `IRA_COVER_CLASSES', if defined,
27676 otherwise there is no default implementation. You must define
27677 either this macro or `IRA_COVER_CLASSES' in order to use the
27678 integrated register allocator with Chaitin-Briggs coloring. If the
27679 macro is not defined, the only available coloring algorithm is
27680 Chow's priority coloring.
27682 -- Macro: IRA_COVER_CLASSES
27683 See the documentation for `TARGET_IRA_COVER_CLASSES'.
27686 File: gccint.info, Node: Old Constraints, Next: Stack and Calling, Prev: Register Classes, Up: Target Macros
27688 17.9 Obsolete Macros for Defining Constraints
27689 =============================================
27691 Machine-specific constraints can be defined with these macros instead
27692 of the machine description constructs described in *Note Define
27693 Constraints::. This mechanism is obsolete. New ports should not use
27694 it; old ports should convert to the new mechanism.
27696 -- Macro: CONSTRAINT_LEN (CHAR, STR)
27697 For the constraint at the start of STR, which starts with the
27698 letter C, return the length. This allows you to have register
27699 class / constant / extra constraints that are longer than a single
27700 letter; you don't need to define this macro if you can do with
27701 single-letter constraints only. The definition of this macro
27702 should use DEFAULT_CONSTRAINT_LEN for all the characters that you
27703 don't want to handle specially. There are some sanity checks in
27704 genoutput.c that check the constraint lengths for the md file, so
27705 you can also use this macro to help you while you are
27706 transitioning from a byzantine single-letter-constraint scheme:
27707 when you return a negative length for a constraint you want to
27708 re-use, genoutput will complain about every instance where it is
27709 used in the md file.
27711 -- Macro: REG_CLASS_FROM_LETTER (CHAR)
27712 A C expression which defines the machine-dependent operand
27713 constraint letters for register classes. If CHAR is such a
27714 letter, the value should be the register class corresponding to
27715 it. Otherwise, the value should be `NO_REGS'. The register
27716 letter `r', corresponding to class `GENERAL_REGS', will not be
27717 passed to this macro; you do not need to handle it.
27719 -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR)
27720 Like `REG_CLASS_FROM_LETTER', but you also get the constraint
27721 string passed in STR, so that you can use suffixes to distinguish
27722 between different variants.
27724 -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C)
27725 A C expression that defines the machine-dependent operand
27726 constraint letters (`I', `J', `K', ... `P') that specify
27727 particular ranges of integer values. If C is one of those
27728 letters, the expression should check that VALUE, an integer, is in
27729 the appropriate range and return 1 if so, 0 otherwise. If C is
27730 not one of those letters, the value should be 0 regardless of
27733 -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
27734 Like `CONST_OK_FOR_LETTER_P', but you also get the constraint
27735 string passed in STR, so that you can use suffixes to distinguish
27736 between different variants.
27738 -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)
27739 A C expression that defines the machine-dependent operand
27740 constraint letters that specify particular ranges of
27741 `const_double' values (`G' or `H').
27743 If C is one of those letters, the expression should check that
27744 VALUE, an RTX of code `const_double', is in the appropriate range
27745 and return 1 if so, 0 otherwise. If C is not one of those
27746 letters, the value should be 0 regardless of VALUE.
27748 `const_double' is used for all floating-point constants and for
27749 `DImode' fixed-point constants. A given letter can accept either
27750 or both kinds of values. It can use `GET_MODE' to distinguish
27751 between these kinds.
27753 -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR)
27754 Like `CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the
27755 constraint string passed in STR, so that you can use suffixes to
27756 distinguish between different variants.
27758 -- Macro: EXTRA_CONSTRAINT (VALUE, C)
27759 A C expression that defines the optional machine-dependent
27760 constraint letters that can be used to segregate specific types of
27761 operands, usually memory references, for the target machine. Any
27762 letter that is not elsewhere defined and not matched by
27763 `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' may be used.
27764 Normally this macro will not be defined.
27766 If it is required for a particular target machine, it should
27767 return 1 if VALUE corresponds to the operand type represented by
27768 the constraint letter C. If C is not defined as an extra
27769 constraint, the value returned should be 0 regardless of VALUE.
27771 For example, on the ROMP, load instructions cannot have their
27772 output in r0 if the memory reference contains a symbolic address.
27773 Constraint letter `Q' is defined as representing a memory address
27774 that does _not_ contain a symbolic address. An alternative is
27775 specified with a `Q' constraint on the input and `r' on the
27776 output. The next alternative specifies `m' on the input and a
27777 register class that does not include r0 on the output.
27779 -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR)
27780 Like `EXTRA_CONSTRAINT', but you also get the constraint string
27781 passed in STR, so that you can use suffixes to distinguish between
27782 different variants.
27784 -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR)
27785 A C expression that defines the optional machine-dependent
27786 constraint letters, amongst those accepted by `EXTRA_CONSTRAINT',
27787 that should be treated like memory constraints by the reload pass.
27789 It should return 1 if the operand type represented by the
27790 constraint at the start of STR, the first letter of which is the
27791 letter C, comprises a subset of all memory references including
27792 all those whose address is simply a base register. This allows
27793 the reload pass to reload an operand, if it does not directly
27794 correspond to the operand type of C, by copying its address into a
27797 For example, on the S/390, some instructions do not accept
27798 arbitrary memory references, but only those that do not make use
27799 of an index register. The constraint letter `Q' is defined via
27800 `EXTRA_CONSTRAINT' as representing a memory address of this type.
27801 If the letter `Q' is marked as `EXTRA_MEMORY_CONSTRAINT', a `Q'
27802 constraint can handle any memory operand, because the reload pass
27803 knows it can be reloaded by copying the memory address into a base
27804 register if required. This is analogous to the way an `o'
27805 constraint can handle any memory operand.
27807 -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR)
27808 A C expression that defines the optional machine-dependent
27809 constraint letters, amongst those accepted by `EXTRA_CONSTRAINT' /
27810 `EXTRA_CONSTRAINT_STR', that should be treated like address
27811 constraints by the reload pass.
27813 It should return 1 if the operand type represented by the
27814 constraint at the start of STR, which starts with the letter C,
27815 comprises a subset of all memory addresses including all those
27816 that consist of just a base register. This allows the reload pass
27817 to reload an operand, if it does not directly correspond to the
27818 operand type of STR, by copying it into a base register.
27820 Any constraint marked as `EXTRA_ADDRESS_CONSTRAINT' can only be
27821 used with the `address_operand' predicate. It is treated
27822 analogously to the `p' constraint.
27825 File: gccint.info, Node: Stack and Calling, Next: Varargs, Prev: Old Constraints, Up: Target Macros
27827 17.10 Stack Layout and Calling Conventions
27828 ==========================================
27830 This describes the stack layout and calling conventions.
27835 * Exception Handling::
27837 * Frame Registers::
27839 * Stack Arguments::
27840 * Register Arguments::
27842 * Aggregate Return::
27847 * Stack Smashing Protection::
27850 File: gccint.info, Node: Frame Layout, Next: Exception Handling, Up: Stack and Calling
27852 17.10.1 Basic Stack Layout
27853 --------------------------
27855 Here is the basic stack layout.
27857 -- Macro: STACK_GROWS_DOWNWARD
27858 Define this macro if pushing a word onto the stack moves the stack
27859 pointer to a smaller address.
27861 When we say, "define this macro if ...", it means that the
27862 compiler checks this macro only with `#ifdef' so the precise
27863 definition used does not matter.
27865 -- Macro: STACK_PUSH_CODE
27866 This macro defines the operation used when something is pushed on
27867 the stack. In RTL, a push operation will be `(set (mem
27868 (STACK_PUSH_CODE (reg sp))) ...)'
27870 The choices are `PRE_DEC', `POST_DEC', `PRE_INC', and `POST_INC'.
27871 Which of these is correct depends on the stack direction and on
27872 whether the stack pointer points to the last item on the stack or
27873 whether it points to the space for the next item on the stack.
27875 The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined,
27876 which is almost always right, and `PRE_INC' otherwise, which is
27879 -- Macro: FRAME_GROWS_DOWNWARD
27880 Define this macro to nonzero value if the addresses of local
27881 variable slots are at negative offsets from the frame pointer.
27883 -- Macro: ARGS_GROW_DOWNWARD
27884 Define this macro if successive arguments to a function occupy
27885 decreasing addresses on the stack.
27887 -- Macro: STARTING_FRAME_OFFSET
27888 Offset from the frame pointer to the first local variable slot to
27891 If `FRAME_GROWS_DOWNWARD', find the next slot's offset by
27892 subtracting the first slot's length from `STARTING_FRAME_OFFSET'.
27893 Otherwise, it is found by adding the length of the first slot to
27894 the value `STARTING_FRAME_OFFSET'.
27896 -- Macro: STACK_ALIGNMENT_NEEDED
27897 Define to zero to disable final alignment of the stack during
27898 reload. The nonzero default for this macro is suitable for most
27901 On ports where `STARTING_FRAME_OFFSET' is nonzero or where there
27902 is a register save block following the local block that doesn't
27903 require alignment to `STACK_BOUNDARY', it may be beneficial to
27904 disable stack alignment and do it in the backend.
27906 -- Macro: STACK_POINTER_OFFSET
27907 Offset from the stack pointer register to the first location at
27908 which outgoing arguments are placed. If not specified, the
27909 default value of zero is used. This is the proper value for most
27912 If `ARGS_GROW_DOWNWARD', this is the offset to the location above
27913 the first location at which outgoing arguments are placed.
27915 -- Macro: FIRST_PARM_OFFSET (FUNDECL)
27916 Offset from the argument pointer register to the first argument's
27917 address. On some machines it may depend on the data type of the
27920 If `ARGS_GROW_DOWNWARD', this is the offset to the location above
27921 the first argument's address.
27923 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL)
27924 Offset from the stack pointer register to an item dynamically
27925 allocated on the stack, e.g., by `alloca'.
27927 The default value for this macro is `STACK_POINTER_OFFSET' plus the
27928 length of the outgoing arguments. The default is correct for most
27929 machines. See `function.c' for details.
27931 -- Macro: INITIAL_FRAME_ADDRESS_RTX
27932 A C expression whose value is RTL representing the address of the
27933 initial stack frame. This address is passed to `RETURN_ADDR_RTX'
27934 and `DYNAMIC_CHAIN_ADDRESS'. If you don't define this macro, a
27935 reasonable default value will be used. Define this macro in order
27936 to make frame pointer elimination work in the presence of
27937 `__builtin_frame_address (count)' and `__builtin_return_address
27938 (count)' for `count' not equal to zero.
27940 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)
27941 A C expression whose value is RTL representing the address in a
27942 stack frame where the pointer to the caller's frame is stored.
27943 Assume that FRAMEADDR is an RTL expression for the address of the
27944 stack frame itself.
27946 If you don't define this macro, the default is to return the value
27947 of FRAMEADDR--that is, the stack frame address is also the address
27948 of the stack word that points to the previous frame.
27950 -- Macro: SETUP_FRAME_ADDRESSES
27951 If defined, a C expression that produces the machine-specific code
27952 to setup the stack so that arbitrary frames can be accessed. For
27953 example, on the SPARC, we must flush all of the register windows
27954 to the stack before we can access arbitrary stack frames. You
27955 will seldom need to define this macro.
27957 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
27958 This target hook should return an rtx that is used to store the
27959 address of the current frame into the built in `setjmp' buffer.
27960 The default value, `virtual_stack_vars_rtx', is correct for most
27961 machines. One reason you may need to define this target hook is if
27962 `hard_frame_pointer_rtx' is the appropriate value on your machine.
27964 -- Macro: FRAME_ADDR_RTX (FRAMEADDR)
27965 A C expression whose value is RTL representing the value of the
27966 frame address for the current frame. FRAMEADDR is the frame
27967 pointer of the current frame. This is used for
27968 __builtin_frame_address. You need only define this macro if the
27969 frame address is not the same as the frame pointer. Most machines
27970 do not need to define it.
27972 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR)
27973 A C expression whose value is RTL representing the value of the
27974 return address for the frame COUNT steps up from the current
27975 frame, after the prologue. FRAMEADDR is the frame pointer of the
27976 COUNT frame, or the frame pointer of the COUNT - 1 frame if
27977 `RETURN_ADDR_IN_PREVIOUS_FRAME' is defined.
27979 The value of the expression must always be the correct address when
27980 COUNT is zero, but may be `NULL_RTX' if there is no way to
27981 determine the return address of other frames.
27983 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME
27984 Define this if the return address of a particular stack frame is
27985 accessed from the frame pointer of the previous stack frame.
27987 -- Macro: INCOMING_RETURN_ADDR_RTX
27988 A C expression whose value is RTL representing the location of the
27989 incoming return address at the beginning of any function, before
27990 the prologue. This RTL is either a `REG', indicating that the
27991 return value is saved in `REG', or a `MEM' representing a location
27994 You only need to define this macro if you want to support call
27995 frame debugging information like that provided by DWARF 2.
27997 If this RTL is a `REG', you should also define
27998 `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'.
28000 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN
28001 A C expression whose value is an integer giving a DWARF 2 column
28002 number that may be used as an alternative return column. The
28003 column must not correspond to any gcc hard register (that is, it
28004 must not be in the range of `DWARF_FRAME_REGNUM').
28006 This macro can be useful if `DWARF_FRAME_RETURN_COLUMN' is set to a
28007 general register, but an alternative column needs to be used for
28008 signal frames. Some targets have also used different frame return
28011 -- Macro: DWARF_ZERO_REG
28012 A C expression whose value is an integer giving a DWARF 2 register
28013 number that is considered to always have the value zero. This
28014 should only be defined if the target has an architected zero
28015 register, and someone decided it was a good idea to use that
28016 register number to terminate the stack backtrace. New ports
28019 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char
28020 *LABEL, rtx PATTERN, int INDEX)
28021 This target hook allows the backend to emit frame-related insns
28022 that contain UNSPECs or UNSPEC_VOLATILEs. The DWARF 2 call frame
28023 debugging info engine will invoke it on insns of the form
28024 (set (reg) (unspec [...] UNSPEC_INDEX))
28026 (set (reg) (unspec_volatile [...] UNSPECV_INDEX)).
28027 to let the backend emit the call frame instructions. LABEL is the
28028 CFI label attached to the insn, PATTERN is the pattern of the insn
28029 and INDEX is `UNSPEC_INDEX' or `UNSPECV_INDEX'.
28031 -- Macro: INCOMING_FRAME_SP_OFFSET
28032 A C expression whose value is an integer giving the offset, in
28033 bytes, from the value of the stack pointer register to the top of
28034 the stack frame at the beginning of any function, before the
28035 prologue. The top of the frame is defined to be the value of the
28036 stack pointer in the previous frame, just before the call
28039 You only need to define this macro if you want to support call
28040 frame debugging information like that provided by DWARF 2.
28042 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL)
28043 A C expression whose value is an integer giving the offset, in
28044 bytes, from the argument pointer to the canonical frame address
28045 (cfa). The final value should coincide with that calculated by
28046 `INCOMING_FRAME_SP_OFFSET'. Which is unfortunately not usable
28047 during virtual register instantiation.
28049 The default value for this macro is `FIRST_PARM_OFFSET (fundecl) +
28050 crtl->args.pretend_args_size', which is correct for most machines;
28051 in general, the arguments are found immediately before the stack
28052 frame. Note that this is not the case on some targets that save
28053 registers into the caller's frame, such as SPARC and rs6000, and
28054 so such targets need to define this macro.
28056 You only need to define this macro if the default is incorrect,
28057 and you want to support call frame debugging information like that
28058 provided by DWARF 2.
28060 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL)
28061 If defined, a C expression whose value is an integer giving the
28062 offset in bytes from the frame pointer to the canonical frame
28063 address (cfa). The final value should coincide with that
28064 calculated by `INCOMING_FRAME_SP_OFFSET'.
28066 Normally the CFA is calculated as an offset from the argument
28067 pointer, via `ARG_POINTER_CFA_OFFSET', but if the argument pointer
28068 is variable due to the ABI, this may not be possible. If this
28069 macro is defined, it implies that the virtual register
28070 instantiation should be based on the frame pointer instead of the
28071 argument pointer. Only one of `FRAME_POINTER_CFA_OFFSET' and
28072 `ARG_POINTER_CFA_OFFSET' should be defined.
28074 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL)
28075 If defined, a C expression whose value is an integer giving the
28076 offset in bytes from the canonical frame address (cfa) to the
28077 frame base used in DWARF 2 debug information. The default is
28078 zero. A different value may reduce the size of debug information
28082 File: gccint.info, Node: Exception Handling, Next: Stack Checking, Prev: Frame Layout, Up: Stack and Calling
28084 17.10.2 Exception Handling Support
28085 ----------------------------------
28087 -- Macro: EH_RETURN_DATA_REGNO (N)
28088 A C expression whose value is the Nth register number used for
28089 data by exception handlers, or `INVALID_REGNUM' if fewer than N
28090 registers are usable.
28092 The exception handling library routines communicate with the
28093 exception handlers via a set of agreed upon registers. Ideally
28094 these registers should be call-clobbered; it is possible to use
28095 call-saved registers, but may negatively impact code size. The
28096 target must support at least 2 data registers, but should define 4
28097 if there are enough free registers.
28099 You must define this macro if you want to support call frame
28100 exception handling like that provided by DWARF 2.
28102 -- Macro: EH_RETURN_STACKADJ_RTX
28103 A C expression whose value is RTL representing a location in which
28104 to store a stack adjustment to be applied before function return.
28105 This is used to unwind the stack to an exception handler's call
28106 frame. It will be assigned zero on code paths that return
28109 Typically this is a call-clobbered hard register that is otherwise
28110 untouched by the epilogue, but could also be a stack slot.
28112 Do not define this macro if the stack pointer is saved and restored
28113 by the regular prolog and epilog code in the call frame itself; in
28114 this case, the exception handling library routines will update the
28115 stack location to be restored in place. Otherwise, you must define
28116 this macro if you want to support call frame exception handling
28117 like that provided by DWARF 2.
28119 -- Macro: EH_RETURN_HANDLER_RTX
28120 A C expression whose value is RTL representing a location in which
28121 to store the address of an exception handler to which we should
28122 return. It will not be assigned on code paths that return
28125 Typically this is the location in the call frame at which the
28126 normal return address is stored. For targets that return by
28127 popping an address off the stack, this might be a memory address
28128 just below the _target_ call frame rather than inside the current
28129 call frame. If defined, `EH_RETURN_STACKADJ_RTX' will have already
28130 been assigned, so it may be used to calculate the location of the
28133 Some targets have more complex requirements than storing to an
28134 address calculable during initial code generation. In that case
28135 the `eh_return' instruction pattern should be used instead.
28137 If you want to support call frame exception handling, you must
28138 define either this macro or the `eh_return' instruction pattern.
28140 -- Macro: RETURN_ADDR_OFFSET
28141 If defined, an integer-valued C expression for which rtl will be
28142 generated to add it to the exception handler address before it is
28143 searched in the exception handling tables, and to subtract it
28144 again from the address before using it to return to the exception
28147 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL)
28148 This macro chooses the encoding of pointers embedded in the
28149 exception handling sections. If at all possible, this should be
28150 defined such that the exception handling section will not require
28151 dynamic relocations, and so may be read-only.
28153 CODE is 0 for data, 1 for code labels, 2 for function pointers.
28154 GLOBAL is true if the symbol may be affected by dynamic
28155 relocations. The macro should return a combination of the
28156 `DW_EH_PE_*' defines as found in `dwarf2.h'.
28158 If this macro is not defined, pointers will not be encoded but
28159 represented directly.
28161 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE,
28163 This macro allows the target to emit whatever special magic is
28164 required to represent the encoding chosen by
28165 `ASM_PREFERRED_EH_DATA_FORMAT'. Generic code takes care of
28166 pc-relative and indirect encodings; this must be defined if the
28167 target uses text-relative or data-relative encodings.
28169 This is a C statement that branches to DONE if the format was
28170 handled. ENCODING is the format chosen, SIZE is the number of
28171 bytes that the format occupies, ADDR is the `SYMBOL_REF' to be
28174 -- Macro: MD_UNWIND_SUPPORT
28175 A string specifying a file to be #include'd in unwind-dw2.c. The
28176 file so included typically defines `MD_FALLBACK_FRAME_STATE_FOR'.
28178 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS)
28179 This macro allows the target to add CPU and operating system
28180 specific code to the call-frame unwinder for use when there is no
28181 unwind data available. The most common reason to implement this
28182 macro is to unwind through signal frames.
28184 This macro is called from `uw_frame_state_for' in `unwind-dw2.c',
28185 `unwind-dw2-xtensa.c' and `unwind-ia64.c'. CONTEXT is an
28186 `_Unwind_Context'; FS is an `_Unwind_FrameState'. Examine
28187 `context->ra' for the address of the code being executed and
28188 `context->cfa' for the stack pointer value. If the frame can be
28189 decoded, the register save addresses should be updated in FS and
28190 the macro should evaluate to `_URC_NO_REASON'. If the frame
28191 cannot be decoded, the macro should evaluate to
28192 `_URC_END_OF_STACK'.
28194 For proper signal handling in Java this macro is accompanied by
28195 `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h'
28198 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS)
28199 This macro allows the target to add operating system specific code
28200 to the call-frame unwinder to handle the IA-64 `.unwabi' unwinding
28201 directive, usually used for signal or interrupt frames.
28203 This macro is called from `uw_update_context' in `unwind-ia64.c'.
28204 CONTEXT is an `_Unwind_Context'; FS is an `_Unwind_FrameState'.
28205 Examine `fs->unwabi' for the abi and context in the `.unwabi'
28206 directive. If the `.unwabi' directive can be handled, the
28207 register save addresses should be updated in FS.
28209 -- Macro: TARGET_USES_WEAK_UNWIND_INFO
28210 A C expression that evaluates to true if the target requires unwind
28211 info to be given comdat linkage. Define it to be `1' if comdat
28212 linkage is necessary. The default is `0'.
28215 File: gccint.info, Node: Stack Checking, Next: Frame Registers, Prev: Exception Handling, Up: Stack and Calling
28217 17.10.3 Specifying How Stack Checking is Done
28218 ---------------------------------------------
28220 GCC will check that stack references are within the boundaries of the
28221 stack, if the option `-fstack-check' is specified, in one of three ways:
28223 1. If the value of the `STACK_CHECK_BUILTIN' macro is nonzero, GCC
28224 will assume that you have arranged for full stack checking to be
28225 done at appropriate places in the configuration files. GCC will
28226 not do other special processing.
28228 2. If `STACK_CHECK_BUILTIN' is zero and the value of the
28229 `STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume
28230 that you have arranged for static stack checking (checking of the
28231 static stack frame of functions) to be done at appropriate places
28232 in the configuration files. GCC will only emit code to do dynamic
28233 stack checking (checking on dynamic stack allocations) using the
28234 third approach below.
28236 3. If neither of the above are true, GCC will generate code to
28237 periodically "probe" the stack pointer using the values of the
28238 macros defined below.
28240 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is
28241 defined, GCC will change its allocation strategy for large objects if
28242 the option `-fstack-check' is specified: they will always be allocated
28243 dynamically if their size exceeds `STACK_CHECK_MAX_VAR_SIZE' bytes.
28245 -- Macro: STACK_CHECK_BUILTIN
28246 A nonzero value if stack checking is done by the configuration
28247 files in a machine-dependent manner. You should define this macro
28248 if stack checking is required by the ABI of your machine or if you
28249 would like to do stack checking in some more efficient way than
28250 the generic approach. The default value of this macro is zero.
28252 -- Macro: STACK_CHECK_STATIC_BUILTIN
28253 A nonzero value if static stack checking is done by the
28254 configuration files in a machine-dependent manner. You should
28255 define this macro if you would like to do static stack checking in
28256 some more efficient way than the generic approach. The default
28257 value of this macro is zero.
28259 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP
28260 An integer specifying the interval at which GCC must generate
28261 stack probe instructions, defined as 2 raised to this integer.
28262 You will normally define this macro so that the interval be no
28263 larger than the size of the "guard pages" at the end of a stack
28264 area. The default value of 12 (4096-byte interval) is suitable
28267 -- Macro: STACK_CHECK_MOVING_SP
28268 An integer which is nonzero if GCC should move the stack pointer
28269 page by page when doing probes. This can be necessary on systems
28270 where the stack pointer contains the bottom address of the memory
28271 area accessible to the executing thread at any point in time. In
28272 this situation an alternate signal stack is required in order to
28273 be able to recover from a stack overflow. The default value of
28274 this macro is zero.
28276 -- Macro: STACK_CHECK_PROTECT
28277 The number of bytes of stack needed to recover from a stack
28278 overflow, for languages where such a recovery is supported. The
28279 default value of 75 words with the `setjmp'/`longjmp'-based
28280 exception handling mechanism and 8192 bytes with other exception
28281 handling mechanisms should be adequate for most machines.
28283 The following macros are relevant only if neither STACK_CHECK_BUILTIN
28284 nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether
28285 in the opposite case.
28287 -- Macro: STACK_CHECK_MAX_FRAME_SIZE
28288 The maximum size of a stack frame, in bytes. GCC will generate
28289 probe instructions in non-leaf functions to ensure at least this
28290 many bytes of stack are available. If a stack frame is larger
28291 than this size, stack checking will not be reliable and GCC will
28292 issue a warning. The default is chosen so that GCC only generates
28293 one instruction on most systems. You should normally not change
28294 the default value of this macro.
28296 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE
28297 GCC uses this value to generate the above warning message. It
28298 represents the amount of fixed frame used by a function, not
28299 including space for any callee-saved registers, temporaries and
28300 user variables. You need only specify an upper bound for this
28301 amount and will normally use the default of four words.
28303 -- Macro: STACK_CHECK_MAX_VAR_SIZE
28304 The maximum size, in bytes, of an object that GCC will place in the
28305 fixed area of the stack frame when the user specifies
28306 `-fstack-check'. GCC computed the default from the values of the
28307 above macros and you will normally not need to override that
28311 File: gccint.info, Node: Frame Registers, Next: Elimination, Prev: Stack Checking, Up: Stack and Calling
28313 17.10.4 Registers That Address the Stack Frame
28314 ----------------------------------------------
28316 This discusses registers that address the stack frame.
28318 -- Macro: STACK_POINTER_REGNUM
28319 The register number of the stack pointer register, which must also
28320 be a fixed register according to `FIXED_REGISTERS'. On most
28321 machines, the hardware determines which register this is.
28323 -- Macro: FRAME_POINTER_REGNUM
28324 The register number of the frame pointer register, which is used to
28325 access automatic variables in the stack frame. On some machines,
28326 the hardware determines which register this is. On other
28327 machines, you can choose any register you wish for this purpose.
28329 -- Macro: HARD_FRAME_POINTER_REGNUM
28330 On some machines the offset between the frame pointer and starting
28331 offset of the automatic variables is not known until after register
28332 allocation has been done (for example, because the saved registers
28333 are between these two locations). On those machines, define
28334 `FRAME_POINTER_REGNUM' the number of a special, fixed register to
28335 be used internally until the offset is known, and define
28336 `HARD_FRAME_POINTER_REGNUM' to be the actual hard register number
28337 used for the frame pointer.
28339 You should define this macro only in the very rare circumstances
28340 when it is not possible to calculate the offset between the frame
28341 pointer and the automatic variables until after register
28342 allocation has been completed. When this macro is defined, you
28343 must also indicate in your definition of `ELIMINABLE_REGS' how to
28344 eliminate `FRAME_POINTER_REGNUM' into either
28345 `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'.
28347 Do not define this macro if it would be the same as
28348 `FRAME_POINTER_REGNUM'.
28350 -- Macro: ARG_POINTER_REGNUM
28351 The register number of the arg pointer register, which is used to
28352 access the function's argument list. On some machines, this is
28353 the same as the frame pointer register. On some machines, the
28354 hardware determines which register this is. On other machines,
28355 you can choose any register you wish for this purpose. If this is
28356 not the same register as the frame pointer register, then you must
28357 mark it as a fixed register according to `FIXED_REGISTERS', or
28358 arrange to be able to eliminate it (*note Elimination::).
28360 -- Macro: RETURN_ADDRESS_POINTER_REGNUM
28361 The register number of the return address pointer register, which
28362 is used to access the current function's return address from the
28363 stack. On some machines, the return address is not at a fixed
28364 offset from the frame pointer or stack pointer or argument
28365 pointer. This register can be defined to point to the return
28366 address on the stack, and then be converted by `ELIMINABLE_REGS'
28367 into either the frame pointer or stack pointer.
28369 Do not define this macro unless there is no other way to get the
28370 return address from the stack.
28372 -- Macro: STATIC_CHAIN_REGNUM
28373 -- Macro: STATIC_CHAIN_INCOMING_REGNUM
28374 Register numbers used for passing a function's static chain
28375 pointer. If register windows are used, the register number as
28376 seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM',
28377 while the register number as seen by the calling function is
28378 `STATIC_CHAIN_REGNUM'. If these registers are the same,
28379 `STATIC_CHAIN_INCOMING_REGNUM' need not be defined.
28381 The static chain register need not be a fixed register.
28383 If the static chain is passed in memory, these macros should not be
28384 defined; instead, the `TARGET_STATIC_CHAIN' hook should be used.
28386 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL, bool
28388 This hook replaces the use of `STATIC_CHAIN_REGNUM' et al for
28389 targets that may use different static chain locations for different
28390 nested functions. This may be required if the target has function
28391 attributes that affect the calling conventions of the function and
28392 those calling conventions use different static chain locations.
28394 The default version of this hook uses `STATIC_CHAIN_REGNUM' et al.
28396 If the static chain is passed in memory, this hook should be used
28397 to provide rtx giving `mem' expressions that denote where they are
28398 stored. Often the `mem' expression as seen by the caller will be
28399 at an offset from the stack pointer and the `mem' expression as
28400 seen by the callee will be at an offset from the frame pointer. The
28401 variables `stack_pointer_rtx', `frame_pointer_rtx', and
28402 `arg_pointer_rtx' will have been initialized and should be used to
28403 refer to those items.
28405 -- Macro: DWARF_FRAME_REGISTERS
28406 This macro specifies the maximum number of hard registers that can
28407 be saved in a call frame. This is used to size data structures
28408 used in DWARF2 exception handling.
28410 Prior to GCC 3.0, this macro was needed in order to establish a
28411 stable exception handling ABI in the face of adding new hard
28412 registers for ISA extensions. In GCC 3.0 and later, the EH ABI is
28413 insulated from changes in the number of hard registers.
28414 Nevertheless, this macro can still be used to reduce the runtime
28415 memory requirements of the exception handling routines, which can
28416 be substantial if the ISA contains a lot of registers that are not
28419 If this macro is not defined, it defaults to
28420 `FIRST_PSEUDO_REGISTER'.
28422 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS
28423 This macro is similar to `DWARF_FRAME_REGISTERS', but is provided
28424 for backward compatibility in pre GCC 3.0 compiled code.
28426 If this macro is not defined, it defaults to
28427 `DWARF_FRAME_REGISTERS'.
28429 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO)
28430 Define this macro if the target's representation for dwarf
28431 registers is different than the internal representation for unwind
28432 column. Given a dwarf register, this macro should return the
28433 internal unwind column number to use instead.
28435 See the PowerPC's SPE target for an example.
28437 -- Macro: DWARF_FRAME_REGNUM (REGNO)
28438 Define this macro if the target's representation for dwarf
28439 registers used in .eh_frame or .debug_frame is different from that
28440 used in other debug info sections. Given a GCC hard register
28441 number, this macro should return the .eh_frame register number.
28442 The default is `DBX_REGISTER_NUMBER (REGNO)'.
28445 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH)
28446 Define this macro to map register numbers held in the call frame
28447 info that GCC has collected using `DWARF_FRAME_REGNUM' to those
28448 that should be output in .debug_frame (`FOR_EH' is zero) and
28449 .eh_frame (`FOR_EH' is nonzero). The default is to return `REGNO'.
28453 File: gccint.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling
28455 17.10.5 Eliminating Frame Pointer and Arg Pointer
28456 -------------------------------------------------
28458 This is about eliminating the frame pointer and arg pointer.
28460 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void)
28461 This target hook should return `true' if a function must have and
28462 use a frame pointer. This target hook is called in the reload
28463 pass. If its return value is `true' the function will have a
28466 This target hook can in principle examine the current function and
28467 decide according to the facts, but on most machines the constant
28468 `false' or the constant `true' suffices. Use `false' when the
28469 machine allows code to be generated with no frame pointer, and
28470 doing so saves some time or space. Use `true' when there is no
28471 possible advantage to avoiding a frame pointer.
28473 In certain cases, the compiler does not know how to produce valid
28474 code without a frame pointer. The compiler recognizes those cases
28475 and automatically gives the function a frame pointer regardless of
28476 what `TARGET_FRAME_POINTER_REQUIRED' returns. You don't need to
28479 In a function that does not require a frame pointer, the frame
28480 pointer register can be allocated for ordinary usage, unless you
28481 mark it as a fixed register. See `FIXED_REGISTERS' for more
28484 Default return value is `false'.
28486 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR)
28487 A C statement to store in the variable DEPTH-VAR the difference
28488 between the frame pointer and the stack pointer values immediately
28489 after the function prologue. The value would be computed from
28490 information such as the result of `get_frame_size ()' and the
28491 tables of registers `regs_ever_live' and `call_used_regs'.
28493 If `ELIMINABLE_REGS' is defined, this macro will be not be used and
28494 need not be defined. Otherwise, it must be defined even if
28495 `TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case,
28496 you may set DEPTH-VAR to anything.
28498 -- Macro: ELIMINABLE_REGS
28499 If defined, this macro specifies a table of register pairs used to
28500 eliminate unneeded registers that point into the stack frame. If
28501 it is not defined, the only elimination attempted by the compiler
28502 is to replace references to the frame pointer with references to
28505 The definition of this macro is a list of structure
28506 initializations, each of which specifies an original and
28507 replacement register.
28509 On some machines, the position of the argument pointer is not
28510 known until the compilation is completed. In such a case, a
28511 separate hard register must be used for the argument pointer.
28512 This register can be eliminated by replacing it with either the
28513 frame pointer or the argument pointer, depending on whether or not
28514 the frame pointer has been eliminated.
28516 In this case, you might specify:
28517 #define ELIMINABLE_REGS \
28518 {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
28519 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
28520 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
28522 Note that the elimination of the argument pointer with the stack
28523 pointer is specified first since that is the preferred elimination.
28525 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const
28527 This target hook should returns `true' if the compiler is allowed
28528 to try to replace register number FROM_REG with register number
28529 TO_REG. This target hook need only be defined if `ELIMINABLE_REGS'
28530 is defined, and will usually be `true', since most of the cases
28531 preventing register elimination are things that the compiler
28532 already knows about.
28534 Default return value is `true'.
28536 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR)
28537 This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It
28538 specifies the initial difference between the specified pair of
28539 registers. This macro must be defined if `ELIMINABLE_REGS' is
28543 File: gccint.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling
28545 17.10.6 Passing Function Arguments on the Stack
28546 -----------------------------------------------
28548 The macros in this section control how arguments are passed on the
28549 stack. See the following section for other macros that control passing
28550 certain arguments in registers.
28552 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE)
28553 This target hook returns `true' if an argument declared in a
28554 prototype as an integral type smaller than `int' should actually be
28555 passed as an `int'. In addition to avoiding errors in certain
28556 cases of mismatch, it also makes for better code on certain
28557 machines. The default is to not promote prototypes.
28559 -- Macro: PUSH_ARGS
28560 A C expression. If nonzero, push insns will be used to pass
28561 outgoing arguments. If the target machine does not have a push
28562 instruction, set it to zero. That directs GCC to use an alternate
28563 strategy: to allocate the entire argument block and then store the
28564 arguments into it. When `PUSH_ARGS' is nonzero, `PUSH_ROUNDING'
28565 must be defined too.
28567 -- Macro: PUSH_ARGS_REVERSED
28568 A C expression. If nonzero, function arguments will be evaluated
28569 from last to first, rather than from first to last. If this macro
28570 is not defined, it defaults to `PUSH_ARGS' on targets where the
28571 stack and args grow in opposite directions, and 0 otherwise.
28573 -- Macro: PUSH_ROUNDING (NPUSHED)
28574 A C expression that is the number of bytes actually pushed onto the
28575 stack when an instruction attempts to push NPUSHED bytes.
28577 On some machines, the definition
28579 #define PUSH_ROUNDING(BYTES) (BYTES)
28581 will suffice. But on other machines, instructions that appear to
28582 push one byte actually push two bytes in an attempt to maintain
28583 alignment. Then the definition should be
28585 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
28587 -- Macro: ACCUMULATE_OUTGOING_ARGS
28588 A C expression. If nonzero, the maximum amount of space required
28589 for outgoing arguments will be computed and placed into the
28590 variable `current_function_outgoing_args_size'. No space will be
28591 pushed onto the stack for each call; instead, the function
28592 prologue should increase the stack frame size by this amount.
28594 Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not
28597 -- Macro: REG_PARM_STACK_SPACE (FNDECL)
28598 Define this macro if functions should assume that stack space has
28599 been allocated for arguments even when their values are passed in
28602 The value of this macro is the size, in bytes, of the area
28603 reserved for arguments passed in registers for the function
28604 represented by FNDECL, which can be zero if GCC is calling a
28605 library function. The argument FNDECL can be the FUNCTION_DECL,
28606 or the type itself of the function.
28608 This space can be allocated by the caller, or be a part of the
28609 machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says
28612 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE)
28613 Define this to a nonzero value if it is the responsibility of the
28614 caller to allocate the area reserved for arguments passed in
28615 registers when calling a function of FNTYPE. FNTYPE may be NULL
28616 if the function called is a library function.
28618 If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls
28619 whether the space for these arguments counts in the value of
28620 `current_function_outgoing_args_size'.
28622 -- Macro: STACK_PARMS_IN_REG_PARM_AREA
28623 Define this macro if `REG_PARM_STACK_SPACE' is defined, but the
28624 stack parameters don't skip the area specified by it.
28626 Normally, when a parameter is not passed in registers, it is
28627 placed on the stack beyond the `REG_PARM_STACK_SPACE' area.
28628 Defining this macro suppresses this behavior and causes the
28629 parameter to be passed on the stack in its natural location.
28631 -- Macro: RETURN_POPS_ARGS (FUNDECL, FUNTYPE, STACK-SIZE)
28632 A C expression that should indicate the number of bytes of its own
28633 arguments that a function pops on returning, or 0 if the function
28634 pops no arguments and the caller must therefore pop them all after
28635 the function returns.
28637 FUNDECL is a C variable whose value is a tree node that describes
28638 the function in question. Normally it is a node of type
28639 `FUNCTION_DECL' that describes the declaration of the function.
28640 From this you can obtain the `DECL_ATTRIBUTES' of the function.
28642 FUNTYPE is a C variable whose value is a tree node that describes
28643 the function in question. Normally it is a node of type
28644 `FUNCTION_TYPE' that describes the data type of the function.
28645 From this it is possible to obtain the data types of the value and
28646 arguments (if known).
28648 When a call to a library function is being considered, FUNDECL
28649 will contain an identifier node for the library function. Thus, if
28650 you need to distinguish among various library functions, you can
28651 do so by their names. Note that "library function" in this
28652 context means a function used to perform arithmetic, whose name is
28653 known specially in the compiler and was not mentioned in the C
28654 code being compiled.
28656 STACK-SIZE is the number of bytes of arguments passed on the
28657 stack. If a variable number of bytes is passed, it is zero, and
28658 argument popping will always be the responsibility of the calling
28661 On the VAX, all functions always pop their arguments, so the
28662 definition of this macro is STACK-SIZE. On the 68000, using the
28663 standard calling convention, no functions pop their arguments, so
28664 the value of the macro is always 0 in this case. But an
28665 alternative calling convention is available in which functions
28666 that take a fixed number of arguments pop them but other functions
28667 (such as `printf') pop nothing (the caller pops all). When this
28668 convention is in use, FUNTYPE is examined to determine whether a
28669 function takes a fixed number of arguments.
28671 -- Macro: CALL_POPS_ARGS (CUM)
28672 A C expression that should indicate the number of bytes a call
28673 sequence pops off the stack. It is added to the value of
28674 `RETURN_POPS_ARGS' when compiling a function call.
28676 CUM is the variable in which all arguments to the called function
28677 have been accumulated.
28679 On certain architectures, such as the SH5, a call trampoline is
28680 used that pops certain registers off the stack, depending on the
28681 arguments that have been passed to the function. Since this is a
28682 property of the call site, not of the called function,
28683 `RETURN_POPS_ARGS' is not appropriate.
28686 File: gccint.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling
28688 17.10.7 Passing Arguments in Registers
28689 --------------------------------------
28691 This section describes the macros which let you control how various
28692 types of arguments are passed in registers or how they are arranged in
28695 -- Macro: FUNCTION_ARG (CUM, MODE, TYPE, NAMED)
28696 A C expression that controls whether a function argument is passed
28697 in a register, and which register.
28699 The arguments are CUM, which summarizes all the previous
28700 arguments; MODE, the machine mode of the argument; TYPE, the data
28701 type of the argument as a tree node or 0 if that is not known
28702 (which happens for C support library functions); and NAMED, which
28703 is 1 for an ordinary argument and 0 for nameless arguments that
28704 correspond to `...' in the called function's prototype. TYPE can
28705 be an incomplete type if a syntax error has previously occurred.
28707 The value of the expression is usually either a `reg' RTX for the
28708 hard register in which to pass the argument, or zero to pass the
28709 argument on the stack.
28711 For machines like the VAX and 68000, where normally all arguments
28712 are pushed, zero suffices as a definition.
28714 The value of the expression can also be a `parallel' RTX. This is
28715 used when an argument is passed in multiple locations. The mode
28716 of the `parallel' should be the mode of the entire argument. The
28717 `parallel' holds any number of `expr_list' pairs; each one
28718 describes where part of the argument is passed. In each
28719 `expr_list' the first operand must be a `reg' RTX for the hard
28720 register in which to pass this part of the argument, and the mode
28721 of the register RTX indicates how large this part of the argument
28722 is. The second operand of the `expr_list' is a `const_int' which
28723 gives the offset in bytes into the entire argument of where this
28724 part starts. As a special exception the first `expr_list' in the
28725 `parallel' RTX may have a first operand of zero. This indicates
28726 that the entire argument is also stored on the stack.
28728 The last time this macro is called, it is called with `MODE ==
28729 VOIDmode', and its result is passed to the `call' or `call_value'
28730 pattern as operands 2 and 3 respectively.
28732 The usual way to make the ISO library `stdarg.h' work on a machine
28733 where some arguments are usually passed in registers, is to cause
28734 nameless arguments to be passed on the stack instead. This is done
28735 by making `FUNCTION_ARG' return 0 whenever NAMED is 0.
28737 You may use the hook `targetm.calls.must_pass_in_stack' in the
28738 definition of this macro to determine if this argument is of a
28739 type that must be passed in the stack. If `REG_PARM_STACK_SPACE'
28740 is not defined and `FUNCTION_ARG' returns nonzero for such an
28741 argument, the compiler will abort. If `REG_PARM_STACK_SPACE' is
28742 defined, the argument will be computed in the stack and then
28743 loaded into a register.
28745 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode
28746 MODE, const_tree TYPE)
28747 This target hook should return `true' if we should not pass TYPE
28748 solely in registers. The file `expr.h' defines a definition that
28749 is usually appropriate, refer to `expr.h' for additional
28752 -- Macro: FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED)
28753 Define this macro if the target machine has "register windows", so
28754 that the register in which a function sees an arguments is not
28755 necessarily the same as the one in which the caller passed the
28758 For such machines, `FUNCTION_ARG' computes the register in which
28759 the caller passes the value, and `FUNCTION_INCOMING_ARG' should be
28760 defined in a similar fashion to tell the function being called
28761 where the arguments will arrive.
28763 If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves
28766 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS *CUM,
28767 enum machine_mode MODE, tree TYPE, bool NAMED)
28768 This target hook returns the number of bytes at the beginning of an
28769 argument that must be put in registers. The value must be zero for
28770 arguments that are passed entirely in registers or that are
28771 entirely pushed on the stack.
28773 On some machines, certain arguments must be passed partially in
28774 registers and partially in memory. On these machines, typically
28775 the first few words of arguments are passed in registers, and the
28776 rest on the stack. If a multi-word argument (a `double' or a
28777 structure) crosses that boundary, its first few words must be
28778 passed in registers and the rest must be pushed. This macro tells
28779 the compiler when this occurs, and how many bytes should go in
28782 `FUNCTION_ARG' for these arguments should return the first
28783 register to be used by the caller for this argument; likewise
28784 `FUNCTION_INCOMING_ARG', for the called function.
28786 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS *CUM,
28787 enum machine_mode MODE, tree TYPE, bool NAMED)
28788 This target hook should return `true' if an argument at the
28789 position indicated by CUM should be passed by reference. This
28790 predicate is queried after target independent reasons for being
28791 passed by reference, such as `TREE_ADDRESSABLE (type)'.
28793 If the hook returns true, a copy of that argument is made in
28794 memory and a pointer to the argument is passed instead of the
28795 argument itself. The pointer is passed in whatever way is
28796 appropriate for passing a pointer to that type.
28798 -- Target Hook: bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS *CUM, enum
28799 machine_mode MODE, const_tree TYPE, bool NAMED)
28800 The function argument described by the parameters to this hook is
28801 known to be passed by reference. The hook should return true if
28802 the function argument should be copied by the callee instead of
28803 copied by the caller.
28805 For any argument for which the hook returns true, if it can be
28806 determined that the argument is not modified, then a copy need not
28809 The default version of this hook always returns false.
28811 -- Macro: CUMULATIVE_ARGS
28812 A C type for declaring a variable that is used as the first
28813 argument of `FUNCTION_ARG' and other related values. For some
28814 target machines, the type `int' suffices and can hold the number
28815 of bytes of argument so far.
28817 There is no need to record in `CUMULATIVE_ARGS' anything about the
28818 arguments that have been passed on the stack. The compiler has
28819 other variables to keep track of that. For target machines on
28820 which all arguments are passed on the stack, there is no need to
28821 store anything in `CUMULATIVE_ARGS'; however, the data structure
28822 must exist and should not be empty, so use `int'.
28824 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL)
28825 If defined, this macro is called before generating any code for a
28826 function, but after the CFUN descriptor for the function has been
28827 created. The back end may use this macro to update CFUN to
28828 reflect an ABI other than that which would normally be used by
28829 default. If the compiler is generating code for a
28830 compiler-generated function, FNDECL may be `NULL'.
28832 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL,
28834 A C statement (sans semicolon) for initializing the variable CUM
28835 for the state at the beginning of the argument list. The variable
28836 has type `CUMULATIVE_ARGS'. The value of FNTYPE is the tree node
28837 for the data type of the function which will receive the args, or
28838 0 if the args are to a compiler support library function. For
28839 direct calls that are not libcalls, FNDECL contain the declaration
28840 node of the function. FNDECL is also set when
28841 `INIT_CUMULATIVE_ARGS' is used to find arguments for the function
28842 being compiled. N_NAMED_ARGS is set to the number of named
28843 arguments, including a structure return address if it is passed as
28844 a parameter, when making a call. When processing incoming
28845 arguments, N_NAMED_ARGS is set to -1.
28847 When processing a call to a compiler support library function,
28848 LIBNAME identifies which one. It is a `symbol_ref' rtx which
28849 contains the name of the function, as a string. LIBNAME is 0 when
28850 an ordinary C function call is being processed. Thus, each time
28851 this macro is called, either LIBNAME or FNTYPE is nonzero, but
28852 never both of them at once.
28854 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME)
28855 Like `INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls,
28856 it gets a `MODE' argument instead of FNTYPE, that would be `NULL'.
28857 INDIRECT would always be zero, too. If this macro is not
28858 defined, `INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is
28861 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME)
28862 Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of
28863 finding the arguments for the function being compiled. If this
28864 macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead.
28866 The value passed for LIBNAME is always 0, since library routines
28867 with special calling conventions are never compiled with GCC. The
28868 argument LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'.
28870 -- Macro: FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED)
28871 A C statement (sans semicolon) to update the summarizer variable
28872 CUM to advance past an argument in the argument list. The values
28873 MODE, TYPE and NAMED describe that argument. Once this is done,
28874 the variable CUM is suitable for analyzing the _following_
28875 argument with `FUNCTION_ARG', etc.
28877 This macro need not do anything if the argument in question was
28878 passed on the stack. The compiler knows how to track the amount
28879 of stack space used for arguments without any special help.
28881 -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE)
28882 If defined, a C expression that is the number of bytes to add to
28883 the offset of the argument passed in memory. This is needed for
28884 the SPU, which passes `char' and `short' arguments in the preferred
28885 slot that is in the middle of the quad word instead of starting at
28888 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE)
28889 If defined, a C expression which determines whether, and in which
28890 direction, to pad out an argument with extra space. The value
28891 should be of type `enum direction': either `upward' to pad above
28892 the argument, `downward' to pad below, or `none' to inhibit
28895 The _amount_ of padding is always just enough to reach the next
28896 multiple of `FUNCTION_ARG_BOUNDARY'; this macro does not control
28899 This macro has a default definition which is right for most
28900 systems. For little-endian machines, the default is to pad
28901 upward. For big-endian machines, the default is to pad downward
28902 for an argument of constant size shorter than an `int', and upward
28905 -- Macro: PAD_VARARGS_DOWN
28906 If defined, a C expression which determines whether the default
28907 implementation of va_arg will attempt to pad down before reading
28908 the next argument, if that argument is smaller than its aligned
28909 space as controlled by `PARM_BOUNDARY'. If this macro is not
28910 defined, all such arguments are padded down if `BYTES_BIG_ENDIAN'
28913 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST)
28914 Specify padding for the last element of a block move between
28915 registers and memory. FIRST is nonzero if this is the only
28916 element. Defining this macro allows better control of register
28917 function parameters on big-endian machines, without using
28918 `PARALLEL' rtl. In particular, `MUST_PASS_IN_STACK' need not test
28919 padding and mode of types in registers, as there is no longer a
28920 "wrong" part of a register; For example, a three byte aggregate
28921 may be passed in the high part of a register if so required.
28923 -- Macro: FUNCTION_ARG_BOUNDARY (MODE, TYPE)
28924 If defined, a C expression that gives the alignment boundary, in
28925 bits, of an argument with the specified mode and type. If it is
28926 not defined, `PARM_BOUNDARY' is used for all arguments.
28928 -- Macro: FUNCTION_ARG_REGNO_P (REGNO)
28929 A C expression that is nonzero if REGNO is the number of a hard
28930 register in which function arguments are sometimes passed. This
28931 does _not_ include implicit arguments such as the static chain and
28932 the structure-value address. On many machines, no registers can be
28933 used for this purpose since all function arguments are pushed on
28936 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE)
28937 This hook should return true if parameter of type TYPE are passed
28938 as two scalar parameters. By default, GCC will attempt to pack
28939 complex arguments into the target's word size. Some ABIs require
28940 complex arguments to be split and treated as their individual
28941 components. For example, on AIX64, complex floats should be
28942 passed in a pair of floating point registers, even though a
28943 complex float would fit in one 64-bit floating point register.
28945 The default value of this hook is `NULL', which is treated as
28948 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void)
28949 This hook returns a type node for `va_list' for the target. The
28950 default version of the hook returns `void*'.
28952 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL)
28953 This hook returns the va_list type of the calling convention
28954 specified by FNDECL. The default version of this hook returns
28955 `va_list_type_node'.
28957 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE)
28958 This hook returns the va_list type of the calling convention
28959 specified by the type of TYPE. If TYPE is not a valid va_list
28960 type, it returns `NULL_TREE'.
28962 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree
28963 TYPE, gimple_seq *PRE_P, gimple_seq *POST_P)
28964 This hook performs target-specific gimplification of
28965 `VA_ARG_EXPR'. The first two parameters correspond to the
28966 arguments to `va_arg'; the latter two are as in
28967 `gimplify.c:gimplify_expr'.
28969 -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE)
28970 Define this to return nonzero if the port can handle pointers with
28971 machine mode MODE. The default version of this hook returns true
28972 for both `ptr_mode' and `Pmode'.
28974 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode
28976 Define this to return nonzero if the port is prepared to handle
28977 insns involving scalar mode MODE. For a scalar mode to be
28978 considered supported, all the basic arithmetic and comparisons
28981 The default version of this hook returns true for any mode
28982 required to handle the basic C types (as defined by the port).
28983 Included here are the double-word arithmetic supported by the code
28986 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode
28988 Define this to return nonzero if the port is prepared to handle
28989 insns involving vector mode MODE. At the very least, it must have
28990 move patterns for this mode.
28993 File: gccint.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling
28995 17.10.8 How Scalar Function Values Are Returned
28996 -----------------------------------------------
28998 This section discusses the macros that control returning scalars as
28999 values--values that can fit in registers.
29001 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE,
29002 const_tree FN_DECL_OR_TYPE, bool OUTGOING)
29003 Define this to return an RTX representing the place where a
29004 function returns or receives a value of data type RET_TYPE, a tree
29005 node representing a data type. FN_DECL_OR_TYPE is a tree node
29006 representing `FUNCTION_DECL' or `FUNCTION_TYPE' of a function
29007 being called. If OUTGOING is false, the hook should compute the
29008 register in which the caller will see the return value.
29009 Otherwise, the hook should return an RTX representing the place
29010 where a function returns a value.
29012 On many machines, only `TYPE_MODE (RET_TYPE)' is relevant.
29013 (Actually, on most machines, scalar values are returned in the same
29014 place regardless of mode.) The value of the expression is usually
29015 a `reg' RTX for the hard register where the return value is stored.
29016 The value can also be a `parallel' RTX, if the return value is in
29017 multiple places. See `FUNCTION_ARG' for an explanation of the
29018 `parallel' form. Note that the callee will populate every
29019 location specified in the `parallel', but if the first element of
29020 the `parallel' contains the whole return value, callers will use
29021 that element as the canonical location and ignore the others. The
29022 m68k port uses this type of `parallel' to return pointers in both
29023 `%a0' (the canonical location) and `%d0'.
29025 If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply
29026 the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is
29029 If the precise function being called is known, FUNC is a tree node
29030 (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This
29031 makes it possible to use a different value-returning convention
29032 for specific functions when all their calls are known.
29034 Some target machines have "register windows" so that the register
29035 in which a function returns its value is not the same as the one
29036 in which the caller sees the value. For such machines, you should
29037 return different RTX depending on OUTGOING.
29039 `TARGET_FUNCTION_VALUE' is not used for return values with
29040 aggregate data types, because these are returned in another way.
29041 See `TARGET_STRUCT_VALUE_RTX' and related macros, below.
29043 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC)
29044 This macro has been deprecated. Use `TARGET_FUNCTION_VALUE' for a
29045 new target instead.
29047 -- Macro: FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC)
29048 This macro has been deprecated. Use `TARGET_FUNCTION_VALUE' for a
29049 new target instead.
29051 -- Macro: LIBCALL_VALUE (MODE)
29052 A C expression to create an RTX representing the place where a
29053 library function returns a value of mode MODE.
29055 Note that "library function" in this context means a compiler
29056 support routine, used to perform arithmetic, whose name is known
29057 specially by the compiler and was not mentioned in the C code being
29060 -- Target Hook: rtx TARGET_LIBCALL_VALUE (enum machine_mode
29061 MODE, const_rtx FUN) Define this hook if the back-end needs to
29062 know the name of the libcall function in order to determine where
29063 the result should be returned.
29065 The mode of the result is given by MODE and the name of the called
29066 library function is given by FUN. The hook should return an RTX
29067 representing the place where the library function result will be
29070 If this hook is not defined, then LIBCALL_VALUE will be used.
29072 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO)
29073 A C expression that is nonzero if REGNO is the number of a hard
29074 register in which the values of called function may come back.
29076 A register whose use for returning values is limited to serving as
29077 the second of a pair (for a value of type `double', say) need not
29078 be recognized by this macro. So for most machines, this definition
29081 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
29083 If the machine has register windows, so that the caller and the
29084 called function use different registers for the return value, this
29085 macro should recognize only the caller's register numbers.
29087 -- Macro: TARGET_ENUM_VA_LIST (IDX, PNAME, PTYPE)
29088 This target macro is used in function `c_common_nodes_and_builtins'
29089 to iterate through the target specific builtin types for va_list.
29090 The variable IDX is used as iterator. PNAME has to be a pointer to
29091 a `const char *' and PTYPE a pointer to a `tree' typed variable.
29092 The arguments PNAME and PTYPE are used to store the result of this
29093 macro and are set to the name of the va_list builtin type and its
29094 internal type. If the return value of this macro is zero, then
29095 there is no more element. Otherwise the IDX should be increased
29096 for the next call of this macro to iterate through all types.
29098 -- Macro: APPLY_RESULT_SIZE
29099 Define this macro if `untyped_call' and `untyped_return' need more
29100 space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and
29101 restoring an arbitrary return value.
29103 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE)
29104 This hook should return true if values of type TYPE are returned
29105 at the most significant end of a register (in other words, if they
29106 are padded at the least significant end). You can assume that TYPE
29107 is returned in a register; the caller is required to check this.
29109 Note that the register provided by `TARGET_FUNCTION_VALUE' must be
29110 able to hold the complete return value. For example, if a 1-, 2-
29111 or 3-byte structure is returned at the most significant end of a
29112 4-byte register, `TARGET_FUNCTION_VALUE' should provide an
29116 File: gccint.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling
29118 17.10.9 How Large Values Are Returned
29119 -------------------------------------
29121 When a function value's mode is `BLKmode' (and in some other cases),
29122 the value is not returned according to `TARGET_FUNCTION_VALUE' (*note
29123 Scalar Return::). Instead, the caller passes the address of a block of
29124 memory in which the value should be stored. This address is called the
29125 "structure value address".
29127 This section describes how to control returning structure values in
29130 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE,
29132 This target hook should return a nonzero value to say to return the
29133 function value in memory, just as large structures are always
29134 returned. Here TYPE will be the data type of the value, and FNTYPE
29135 will be the type of the function doing the returning, or `NULL' for
29138 Note that values of mode `BLKmode' must be explicitly handled by
29139 this function. Also, the option `-fpcc-struct-return' takes
29140 effect regardless of this macro. On most systems, it is possible
29141 to leave the hook undefined; this causes a default definition to
29142 be used, whose value is the constant 1 for `BLKmode' values, and 0
29145 Do not use this hook to indicate that structures and unions should
29146 always be returned in memory. You should instead use
29147 `DEFAULT_PCC_STRUCT_RETURN' to indicate this.
29149 -- Macro: DEFAULT_PCC_STRUCT_RETURN
29150 Define this macro to be 1 if all structure and union return values
29151 must be in memory. Since this results in slower code, this should
29152 be defined only if needed for compatibility with other compilers
29153 or with an ABI. If you define this macro to be 0, then the
29154 conventions used for structure and union return values are decided
29155 by the `TARGET_RETURN_IN_MEMORY' target hook.
29157 If not defined, this defaults to the value 1.
29159 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING)
29160 This target hook should return the location of the structure value
29161 address (normally a `mem' or `reg'), or 0 if the address is passed
29162 as an "invisible" first argument. Note that FNDECL may be `NULL',
29163 for libcalls. You do not need to define this target hook if the
29164 address is always passed as an "invisible" first argument.
29166 On some architectures the place where the structure value address
29167 is found by the called function is not the same place that the
29168 caller put it. This can be due to register windows, or it could
29169 be because the function prologue moves it to a different place.
29170 INCOMING is `1' or `2' when the location is needed in the context
29171 of the called function, and `0' in the context of the caller.
29173 If INCOMING is nonzero and the address is to be found on the
29174 stack, return a `mem' which refers to the frame pointer. If
29175 INCOMING is `2', the result is being used to fetch the structure
29176 value address at the beginning of a function. If you need to emit
29177 adjusting code, you should do it at this point.
29179 -- Macro: PCC_STATIC_STRUCT_RETURN
29180 Define this macro if the usual system convention on the target
29181 machine for returning structures and unions is for the called
29182 function to return the address of a static variable containing the
29185 Do not define this if the usual system convention is for the
29186 caller to pass an address to the subroutine.
29188 This macro has effect in `-fpcc-struct-return' mode, but it does
29189 nothing when you use `-freg-struct-return' mode.
29192 File: gccint.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling
29194 17.10.10 Caller-Saves Register Allocation
29195 -----------------------------------------
29197 If you enable it, GCC can save registers around function calls. This
29198 makes it possible to use call-clobbered registers to hold variables that
29199 must live across calls.
29201 -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS)
29202 A C expression to determine whether it is worthwhile to consider
29203 placing a pseudo-register in a call-clobbered hard register and
29204 saving and restoring it around each function call. The expression
29205 should be 1 when this is worth doing, and 0 otherwise.
29207 If you don't define this macro, a default is used which is good on
29208 most machines: `4 * CALLS < REFS'.
29210 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS)
29211 A C expression specifying which mode is required for saving NREGS
29212 of a pseudo-register in call-clobbered hard register REGNO. If
29213 REGNO is unsuitable for caller save, `VOIDmode' should be
29214 returned. For most machines this macro need not be defined since
29215 GCC will select the smallest suitable mode.
29218 File: gccint.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling
29220 17.10.11 Function Entry and Exit
29221 --------------------------------
29223 This section describes the macros that output function entry
29224 ("prologue") and exit ("epilogue") code.
29226 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE,
29227 HOST_WIDE_INT SIZE)
29228 If defined, a function that outputs the assembler code for entry
29229 to a function. The prologue is responsible for setting up the
29230 stack frame, initializing the frame pointer register, saving
29231 registers that must be saved, and allocating SIZE additional bytes
29232 of storage for the local variables. SIZE is an integer. FILE is
29233 a stdio stream to which the assembler code should be output.
29235 The label for the beginning of the function need not be output by
29236 this macro. That has already been done when the macro is run.
29238 To determine which registers to save, the macro can refer to the
29239 array `regs_ever_live': element R is nonzero if hard register R is
29240 used anywhere within the function. This implies the function
29241 prologue should save register R, provided it is not one of the
29242 call-used registers. (`TARGET_ASM_FUNCTION_EPILOGUE' must
29243 likewise use `regs_ever_live'.)
29245 On machines that have "register windows", the function entry code
29246 does not save on the stack the registers that are in the windows,
29247 even if they are supposed to be preserved by function calls;
29248 instead it takes appropriate steps to "push" the register stack,
29249 if any non-call-used registers are used in the function.
29251 On machines where functions may or may not have frame-pointers, the
29252 function entry code must vary accordingly; it must set up the frame
29253 pointer if one is wanted, and not otherwise. To determine whether
29254 a frame pointer is in wanted, the macro can refer to the variable
29255 `frame_pointer_needed'. The variable's value will be 1 at run
29256 time in a function that needs a frame pointer. *Note
29259 The function entry code is responsible for allocating any stack
29260 space required for the function. This stack space consists of the
29261 regions listed below. In most cases, these regions are allocated
29262 in the order listed, with the last listed region closest to the
29263 top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is
29264 defined, and the highest address if it is not defined). You can
29265 use a different order for a machine if doing so is more convenient
29266 or required for compatibility reasons. Except in cases where
29267 required by standard or by a debugger, there is no reason why the
29268 stack layout used by GCC need agree with that used by other
29269 compilers for a machine.
29271 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE)
29272 If defined, a function that outputs assembler code at the end of a
29273 prologue. This should be used when the function prologue is being
29274 emitted as RTL, and you have some extra assembler that needs to be
29275 emitted. *Note prologue instruction pattern::.
29277 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE)
29278 If defined, a function that outputs assembler code at the start of
29279 an epilogue. This should be used when the function epilogue is
29280 being emitted as RTL, and you have some extra assembler that needs
29281 to be emitted. *Note epilogue instruction pattern::.
29283 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE,
29284 HOST_WIDE_INT SIZE)
29285 If defined, a function that outputs the assembler code for exit
29286 from a function. The epilogue is responsible for restoring the
29287 saved registers and stack pointer to their values when the
29288 function was called, and returning control to the caller. This
29289 macro takes the same arguments as the macro
29290 `TARGET_ASM_FUNCTION_PROLOGUE', and the registers to restore are
29291 determined from `regs_ever_live' and `CALL_USED_REGISTERS' in the
29294 On some machines, there is a single instruction that does all the
29295 work of returning from the function. On these machines, give that
29296 instruction the name `return' and do not define the macro
29297 `TARGET_ASM_FUNCTION_EPILOGUE' at all.
29299 Do not define a pattern named `return' if you want the
29300 `TARGET_ASM_FUNCTION_EPILOGUE' to be used. If you want the target
29301 switches to control whether return instructions or epilogues are
29302 used, define a `return' pattern with a validity condition that
29303 tests the target switches appropriately. If the `return'
29304 pattern's validity condition is false, epilogues will be used.
29306 On machines where functions may or may not have frame-pointers, the
29307 function exit code must vary accordingly. Sometimes the code for
29308 these two cases is completely different. To determine whether a
29309 frame pointer is wanted, the macro can refer to the variable
29310 `frame_pointer_needed'. The variable's value will be 1 when
29311 compiling a function that needs a frame pointer.
29313 Normally, `TARGET_ASM_FUNCTION_PROLOGUE' and
29314 `TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially.
29315 The C variable `current_function_is_leaf' is nonzero for such a
29316 function. *Note Leaf Functions::.
29318 On some machines, some functions pop their arguments on exit while
29319 others leave that for the caller to do. For example, the 68020
29320 when given `-mrtd' pops arguments in functions that take a fixed
29321 number of arguments.
29323 Your definition of the macro `RETURN_POPS_ARGS' decides which
29324 functions pop their own arguments. `TARGET_ASM_FUNCTION_EPILOGUE'
29325 needs to know what was decided. The number of bytes of the current
29326 function's arguments that this function should pop is available in
29327 `crtl->args.pops_args'. *Note Scalar Return::.
29329 * A region of `current_function_pretend_args_size' bytes of
29330 uninitialized space just underneath the first argument arriving on
29331 the stack. (This may not be at the very start of the allocated
29332 stack region if the calling sequence has pushed anything else
29333 since pushing the stack arguments. But usually, on such machines,
29334 nothing else has been pushed yet, because the function prologue
29335 itself does all the pushing.) This region is used on machines
29336 where an argument may be passed partly in registers and partly in
29337 memory, and, in some cases to support the features in `<stdarg.h>'.
29339 * An area of memory used to save certain registers used by the
29340 function. The size of this area, which may also include space for
29341 such things as the return address and pointers to previous stack
29342 frames, is machine-specific and usually depends on which registers
29343 have been used in the function. Machines with register windows
29344 often do not require a save area.
29346 * A region of at least SIZE bytes, possibly rounded up to an
29347 allocation boundary, to contain the local variables of the
29348 function. On some machines, this region and the save area may
29349 occur in the opposite order, with the save area closer to the top
29352 * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a region of
29353 `current_function_outgoing_args_size' bytes to be used for outgoing
29354 argument lists of the function. *Note Stack Arguments::.
29356 -- Macro: EXIT_IGNORE_STACK
29357 Define this macro as a C expression that is nonzero if the return
29358 instruction or the function epilogue ignores the value of the stack
29359 pointer; in other words, if it is safe to delete an instruction to
29360 adjust the stack pointer before a return from the function. The
29363 Note that this macro's value is relevant only for functions for
29364 which frame pointers are maintained. It is never safe to delete a
29365 final stack adjustment in a function that has no frame pointer,
29366 and the compiler knows this regardless of `EXIT_IGNORE_STACK'.
29368 -- Macro: EPILOGUE_USES (REGNO)
29369 Define this macro as a C expression that is nonzero for registers
29370 that are used by the epilogue or the `return' pattern. The stack
29371 and frame pointer registers are already assumed to be used as
29374 -- Macro: EH_USES (REGNO)
29375 Define this macro as a C expression that is nonzero for registers
29376 that are used by the exception handling mechanism, and so should
29377 be considered live on entry to an exception edge.
29379 -- Macro: DELAY_SLOTS_FOR_EPILOGUE
29380 Define this macro if the function epilogue contains delay slots to
29381 which instructions from the rest of the function can be "moved".
29382 The definition should be a C expression whose value is an integer
29383 representing the number of delay slots there.
29385 -- Macro: ELIGIBLE_FOR_EPILOGUE_DELAY (INSN, N)
29386 A C expression that returns 1 if INSN can be placed in delay slot
29387 number N of the epilogue.
29389 The argument N is an integer which identifies the delay slot now
29390 being considered (since different slots may have different rules of
29391 eligibility). It is never negative and is always less than the
29392 number of epilogue delay slots (what `DELAY_SLOTS_FOR_EPILOGUE'
29393 returns). If you reject a particular insn for a given delay slot,
29394 in principle, it may be reconsidered for a subsequent delay slot.
29395 Also, other insns may (at least in principle) be considered for
29396 the so far unfilled delay slot.
29398 The insns accepted to fill the epilogue delay slots are put in an
29399 RTL list made with `insn_list' objects, stored in the variable
29400 `current_function_epilogue_delay_list'. The insn for the first
29401 delay slot comes first in the list. Your definition of the macro
29402 `TARGET_ASM_FUNCTION_EPILOGUE' should fill the delay slots by
29403 outputting the insns in this list, usually by calling
29406 You need not define this macro if you did not define
29407 `DELAY_SLOTS_FOR_EPILOGUE'.
29409 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree
29410 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
29411 VCALL_OFFSET, tree FUNCTION)
29412 A function that outputs the assembler code for a thunk function,
29413 used to implement C++ virtual function calls with multiple
29414 inheritance. The thunk acts as a wrapper around a virtual
29415 function, adjusting the implicit object parameter before handing
29416 control off to the real function.
29418 First, emit code to add the integer DELTA to the location that
29419 contains the incoming first argument. Assume that this argument
29420 contains a pointer, and is the one used to pass the `this' pointer
29421 in C++. This is the incoming argument _before_ the function
29422 prologue, e.g. `%o0' on a sparc. The addition must preserve the
29423 values of all other incoming arguments.
29425 Then, if VCALL_OFFSET is nonzero, an additional adjustment should
29426 be made after adding `delta'. In particular, if P is the adjusted
29427 pointer, the following adjustment should be made:
29429 p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
29431 After the additions, emit code to jump to FUNCTION, which is a
29432 `FUNCTION_DECL'. This is a direct pure jump, not a call, and does
29433 not touch the return address. Hence returning from FUNCTION will
29434 return to whoever called the current `thunk'.
29436 The effect must be as if FUNCTION had been called directly with
29437 the adjusted first argument. This macro is responsible for
29438 emitting all of the code for a thunk function;
29439 `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE'
29442 The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already
29443 been extracted from it.) It might possibly be useful on some
29444 targets, but probably not.
29446 If you do not define this macro, the target-independent code in
29447 the C++ front end will generate a less efficient heavyweight thunk
29448 that calls FUNCTION instead of jumping to it. The generic
29449 approach does not support varargs.
29451 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree
29452 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT
29453 VCALL_OFFSET, const_tree FUNCTION)
29454 A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would
29455 be able to output the assembler code for the thunk function
29456 specified by the arguments it is passed, and false otherwise. In
29457 the latter case, the generic approach will be used by the C++
29458 front end, with the limitations previously exposed.
29461 File: gccint.info, Node: Profiling, Next: Tail Calls, Prev: Function Entry, Up: Stack and Calling
29463 17.10.12 Generating Code for Profiling
29464 --------------------------------------
29466 These macros will help you generate code for profiling.
29468 -- Macro: FUNCTION_PROFILER (FILE, LABELNO)
29469 A C statement or compound statement to output to FILE some
29470 assembler code to call the profiling subroutine `mcount'.
29472 The details of how `mcount' expects to be called are determined by
29473 your operating system environment, not by GCC. To figure them out,
29474 compile a small program for profiling using the system's installed
29475 C compiler and look at the assembler code that results.
29477 Older implementations of `mcount' expect the address of a counter
29478 variable to be loaded into some register. The name of this
29479 variable is `LP' followed by the number LABELNO, so you would
29480 generate the name using `LP%d' in a `fprintf'.
29482 -- Macro: PROFILE_HOOK
29483 A C statement or compound statement to output to FILE some assembly
29484 code to call the profiling subroutine `mcount' even the target does
29485 not support profiling.
29487 -- Macro: NO_PROFILE_COUNTERS
29488 Define this macro to be an expression with a nonzero value if the
29489 `mcount' subroutine on your system does not need a counter variable
29490 allocated for each function. This is true for almost all modern
29491 implementations. If you define this macro, you must not use the
29492 LABELNO argument to `FUNCTION_PROFILER'.
29494 -- Macro: PROFILE_BEFORE_PROLOGUE
29495 Define this macro if the code for function profiling should come
29496 before the function prologue. Normally, the profiling code comes
29500 File: gccint.info, Node: Tail Calls, Next: Stack Smashing Protection, Prev: Profiling, Up: Stack and Calling
29502 17.10.13 Permitting tail calls
29503 ------------------------------
29505 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
29507 True if it is ok to do sibling call optimization for the specified
29508 call expression EXP. DECL will be the called function, or `NULL'
29509 if this is an indirect call.
29511 It is not uncommon for limitations of calling conventions to
29512 prevent tail calls to functions outside the current unit of
29513 translation, or during PIC compilation. The hook is used to
29514 enforce these restrictions, as the `sibcall' md pattern can not
29515 fail, or fall over to a "normal" call. The criteria for
29516 successful sibling call optimization may vary greatly between
29517 different architectures.
29519 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS)
29520 Add any hard registers to REGS that are live on entry to the
29521 function. This hook only needs to be defined to provide registers
29522 that cannot be found by examination of FUNCTION_ARG_REGNO_P, the
29523 callee saved registers, STATIC_CHAIN_INCOMING_REGNUM,
29524 STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX,
29525 FRAME_POINTER_REGNUM, EH_USES, FRAME_POINTER_REGNUM,
29526 ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM.
29529 File: gccint.info, Node: Stack Smashing Protection, Prev: Tail Calls, Up: Stack and Calling
29531 17.10.14 Stack smashing protection
29532 ----------------------------------
29534 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)
29535 This hook returns a `DECL' node for the external variable to use
29536 for the stack protection guard. This variable is initialized by
29537 the runtime to some random value and is used to initialize the
29538 guard value that is placed at the top of the local stack frame.
29539 The type of this variable must be `ptr_type_node'.
29541 The default version of this hook creates a variable called
29542 `__stack_chk_guard', which is normally defined in `libgcc2.c'.
29544 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)
29545 This hook returns a tree expression that alerts the runtime that
29546 the stack protect guard variable has been modified. This
29547 expression should involve a call to a `noreturn' function.
29549 The default version of this hook invokes a function called
29550 `__stack_chk_fail', taking no arguments. This function is
29551 normally defined in `libgcc2.c'.
29554 File: gccint.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros
29556 17.11 Implementing the Varargs Macros
29557 =====================================
29559 GCC comes with an implementation of `<varargs.h>' and `<stdarg.h>' that
29560 work without change on machines that pass arguments on the stack.
29561 Other machines require their own implementations of varargs, and the
29562 two machine independent header files must have conditionals to include
29565 ISO `<stdarg.h>' differs from traditional `<varargs.h>' mainly in the
29566 calling convention for `va_start'. The traditional implementation
29567 takes just one argument, which is the variable in which to store the
29568 argument pointer. The ISO implementation of `va_start' takes an
29569 additional second argument. The user is supposed to write the last
29570 named argument of the function here.
29572 However, `va_start' should not use this argument. The way to find the
29573 end of the named arguments is with the built-in functions described
29576 -- Macro: __builtin_saveregs ()
29577 Use this built-in function to save the argument registers in
29578 memory so that the varargs mechanism can access them. Both ISO
29579 and traditional versions of `va_start' must use
29580 `__builtin_saveregs', unless you use
29581 `TARGET_SETUP_INCOMING_VARARGS' (see below) instead.
29583 On some machines, `__builtin_saveregs' is open-coded under the
29584 control of the target hook `TARGET_EXPAND_BUILTIN_SAVEREGS'. On
29585 other machines, it calls a routine written in assembler language,
29586 found in `libgcc2.c'.
29588 Code generated for the call to `__builtin_saveregs' appears at the
29589 beginning of the function, as opposed to where the call to
29590 `__builtin_saveregs' is written, regardless of what the code is.
29591 This is because the registers must be saved before the function
29592 starts to use them for its own purposes.
29594 -- Macro: __builtin_args_info (CATEGORY)
29595 Use this built-in function to find the first anonymous arguments in
29598 In general, a machine may have several categories of registers
29599 used for arguments, each for a particular category of data types.
29600 (For example, on some machines, floating-point registers are used
29601 for floating-point arguments while other arguments are passed in
29602 the general registers.) To make non-varargs functions use the
29603 proper calling convention, you have defined the `CUMULATIVE_ARGS'
29604 data type to record how many registers in each category have been
29607 `__builtin_args_info' accesses the same data structure of type
29608 `CUMULATIVE_ARGS' after the ordinary argument layout is finished
29609 with it, with CATEGORY specifying which word to access. Thus, the
29610 value indicates the first unused register in a given category.
29612 Normally, you would use `__builtin_args_info' in the implementation
29613 of `va_start', accessing each category just once and storing the
29614 value in the `va_list' object. This is because `va_list' will
29615 have to update the values, and there is no way to alter the values
29616 accessed by `__builtin_args_info'.
29618 -- Macro: __builtin_next_arg (LASTARG)
29619 This is the equivalent of `__builtin_args_info', for stack
29620 arguments. It returns the address of the first anonymous stack
29621 argument, as type `void *'. If `ARGS_GROW_DOWNWARD', it returns
29622 the address of the location above the first anonymous stack
29623 argument. Use it in `va_start' to initialize the pointer for
29624 fetching arguments from the stack. Also use it in `va_start' to
29625 verify that the second parameter LASTARG is the last named argument
29626 of the current function.
29628 -- Macro: __builtin_classify_type (OBJECT)
29629 Since each machine has its own conventions for which data types are
29630 passed in which kind of register, your implementation of `va_arg'
29631 has to embody these conventions. The easiest way to categorize the
29632 specified data type is to use `__builtin_classify_type' together
29633 with `sizeof' and `__alignof__'.
29635 `__builtin_classify_type' ignores the value of OBJECT, considering
29636 only its data type. It returns an integer describing what kind of
29637 type that is--integer, floating, pointer, structure, and so on.
29639 The file `typeclass.h' defines an enumeration that you can use to
29640 interpret the values of `__builtin_classify_type'.
29642 These machine description macros help implement varargs:
29644 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
29645 If defined, this hook produces the machine-specific code for a
29646 call to `__builtin_saveregs'. This code will be moved to the very
29647 beginning of the function, before any parameter access are made.
29648 The return value of this function should be an RTX that contains
29649 the value to use as the return of `__builtin_saveregs'.
29651 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS
29652 *ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int
29653 *PRETEND_ARGS_SIZE, int SECOND_TIME)
29654 This target hook offers an alternative to using
29655 `__builtin_saveregs' and defining the hook
29656 `TARGET_EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous
29657 register arguments into the stack so that all the arguments appear
29658 to have been passed consecutively on the stack. Once this is
29659 done, you can use the standard implementation of varargs that
29660 works for machines that pass all their arguments on the stack.
29662 The argument ARGS_SO_FAR points to the `CUMULATIVE_ARGS' data
29663 structure, containing the values that are obtained after
29664 processing the named arguments. The arguments MODE and TYPE
29665 describe the last named argument--its machine mode and its data
29666 type as a tree node.
29668 The target hook should do two things: first, push onto the stack
29669 all the argument registers _not_ used for the named arguments, and
29670 second, store the size of the data thus pushed into the
29671 `int'-valued variable pointed to by PRETEND_ARGS_SIZE. The value
29672 that you store here will serve as additional offset for setting up
29675 Because you must generate code to push the anonymous arguments at
29676 compile time without knowing their data types,
29677 `TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that
29678 have just a single category of argument register and use it
29679 uniformly for all data types.
29681 If the argument SECOND_TIME is nonzero, it means that the
29682 arguments of the function are being analyzed for the second time.
29683 This happens for an inline function, which is not actually
29684 compiled until the end of the source file. The hook
29685 `TARGET_SETUP_INCOMING_VARARGS' should not generate any
29686 instructions in this case.
29688 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS
29690 Define this hook to return `true' if the location where a function
29691 argument is passed depends on whether or not it is a named
29694 This hook controls how the NAMED argument to `FUNCTION_ARG' is set
29695 for varargs and stdarg functions. If this hook returns `true',
29696 the NAMED argument is always true for named arguments, and false
29697 for unnamed arguments. If it returns `false', but
29698 `TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns `true', then all
29699 arguments are treated as named. Otherwise, all named arguments
29700 except the last are treated as named.
29702 You need not define this hook if it always returns `false'.
29704 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED
29705 (CUMULATIVE_ARGS *CA)
29706 If you need to conditionally change ABIs so that one works with
29707 `TARGET_SETUP_INCOMING_VARARGS', but the other works like neither
29708 `TARGET_SETUP_INCOMING_VARARGS' nor
29709 `TARGET_STRICT_ARGUMENT_NAMING' was defined, then define this hook
29710 to return `true' if `TARGET_SETUP_INCOMING_VARARGS' is used,
29711 `false' otherwise. Otherwise, you should not define this hook.
29714 File: gccint.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros
29716 17.12 Trampolines for Nested Functions
29717 ======================================
29719 A "trampoline" is a small piece of code that is created at run time
29720 when the address of a nested function is taken. It normally resides on
29721 the stack, in the stack frame of the containing function. These macros
29722 tell GCC how to generate code to allocate and initialize a trampoline.
29724 The instructions in the trampoline must do two things: load a constant
29725 address into the static chain register, and jump to the real address of
29726 the nested function. On CISC machines such as the m68k, this requires
29727 two instructions, a move immediate and a jump. Then the two addresses
29728 exist in the trampoline as word-long immediate operands. On RISC
29729 machines, it is often necessary to load each address into a register in
29730 two parts. Then pieces of each address form separate immediate
29733 The code generated to initialize the trampoline must store the variable
29734 parts--the static chain value and the function address--into the
29735 immediate operands of the instructions. On a CISC machine, this is
29736 simply a matter of copying each address to a memory reference at the
29737 proper offset from the start of the trampoline. On a RISC machine, it
29738 may be necessary to take out pieces of the address and store them
29741 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F)
29742 This hook is called by `assemble_trampoline_template' to output,
29743 on the stream F, assembler code for a block of data that contains
29744 the constant parts of a trampoline. This code should not include a
29745 label--the label is taken care of automatically.
29747 If you do not define this hook, it means no template is needed for
29748 the target. Do not define this hook on systems where the block
29749 move code to copy the trampoline into place would be larger than
29750 the code to generate it on the spot.
29752 -- Macro: TRAMPOLINE_SECTION
29753 Return the section into which the trampoline template is to be
29754 placed (*note Sections::). The default value is
29755 `readonly_data_section'.
29757 -- Macro: TRAMPOLINE_SIZE
29758 A C expression for the size in bytes of the trampoline, as an
29761 -- Macro: TRAMPOLINE_ALIGNMENT
29762 Alignment required for trampolines, in bits.
29764 If you don't define this macro, the value of `FUNCTION_ALIGNMENT'
29765 is used for aligning trampolines.
29767 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL,
29769 This hook is called to initialize a trampoline. M_TRAMP is an RTX
29770 for the memory block for the trampoline; FNDECL is the
29771 `FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX
29772 for the static chain value that should be passed to the function
29775 If the target defines `TARGET_ASM_TRAMPOLINE_TEMPLATE', then the
29776 first thing this hook should do is emit a block move into M_TRAMP
29777 from the memory block returned by `assemble_trampoline_template'.
29778 Note that the block move need only cover the constant parts of the
29779 trampoline. If the target isolates the variable parts of the
29780 trampoline to the end, not all `TRAMPOLINE_SIZE' bytes need be
29783 If the target requires any other actions, such as flushing caches
29784 or enabling stack execution, these actions should be performed
29785 after initializing the trampoline proper.
29787 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR)
29788 This hook should perform any machine-specific adjustment in the
29789 address of the trampoline. Its argument contains the address of
29790 the memory block that was passed to `TARGET_TRAMPOLINE_INIT'. In
29791 case the address to be used for a function call should be
29792 different from the address at which the template was stored, the
29793 different address should be returned; otherwise ADDR should be
29794 returned unchanged. If this hook is not defined, ADDR will be
29795 used for function calls.
29797 Implementing trampolines is difficult on many machines because they
29798 have separate instruction and data caches. Writing into a stack
29799 location fails to clear the memory in the instruction cache, so when
29800 the program jumps to that location, it executes the old contents.
29802 Here are two possible solutions. One is to clear the relevant parts of
29803 the instruction cache whenever a trampoline is set up. The other is to
29804 make all trampolines identical, by having them jump to a standard
29805 subroutine. The former technique makes trampoline execution faster; the
29806 latter makes initialization faster.
29808 To clear the instruction cache when a trampoline is initialized, define
29809 the following macro.
29811 -- Macro: CLEAR_INSN_CACHE (BEG, END)
29812 If defined, expands to a C expression clearing the _instruction
29813 cache_ in the specified interval. The definition of this macro
29814 would typically be a series of `asm' statements. Both BEG and END
29815 are both pointer expressions.
29817 The operating system may also require the stack to be made executable
29818 before calling the trampoline. To implement this requirement, define
29819 the following macro.
29821 -- Macro: ENABLE_EXECUTE_STACK
29822 Define this macro if certain operations must be performed before
29823 executing code located on the stack. The macro should expand to a
29824 series of C file-scope constructs (e.g. functions) and provide a
29825 unique entry point named `__enable_execute_stack'. The target is
29826 responsible for emitting calls to the entry point in the code, for
29827 example from the `TARGET_TRAMPOLINE_INIT' hook.
29829 To use a standard subroutine, define the following macro. In addition,
29830 you must make sure that the instructions in a trampoline fill an entire
29831 cache line with identical instructions, or else ensure that the
29832 beginning of the trampoline code is always aligned at the same point in
29833 its cache line. Look in `m68k.h' as a guide.
29835 -- Macro: TRANSFER_FROM_TRAMPOLINE
29836 Define this macro if trampolines need a special subroutine to do
29837 their work. The macro should expand to a series of `asm'
29838 statements which will be compiled with GCC. They go in a library
29839 function named `__transfer_from_trampoline'.
29841 If you need to avoid executing the ordinary prologue code of a
29842 compiled C function when you jump to the subroutine, you can do so
29843 by placing a special label of your own in the assembler code. Use
29844 one `asm' statement to generate an assembler label, and another to
29845 make the label global. Then trampolines can use that label to
29846 jump directly to your special assembler code.
29849 File: gccint.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros
29851 17.13 Implicit Calls to Library Routines
29852 ========================================
29854 Here is an explanation of implicit calls to library routines.
29856 -- Macro: DECLARE_LIBRARY_RENAMES
29857 This macro, if defined, should expand to a piece of C code that
29858 will get expanded when compiling functions for libgcc.a. It can
29859 be used to provide alternate names for GCC's internal library
29860 functions if there are ABI-mandated names that the compiler should
29863 -- Target Hook: void TARGET_INIT_LIBFUNCS (void)
29864 This hook should declare additional library routines or rename
29865 existing ones, using the functions `set_optab_libfunc' and
29866 `init_one_libfunc' defined in `optabs.c'. `init_optabs' calls
29867 this macro after initializing all the normal library routines.
29869 The default is to do nothing. Most ports don't need to define
29872 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON)
29873 This macro should return `true' if the library routine that
29874 implements the floating point comparison operator COMPARISON in
29875 mode MODE will return a boolean, and FALSE if it will return a
29878 GCC's own floating point libraries return tristates from the
29879 comparison operators, so the default returns false always. Most
29880 ports don't need to define this macro.
29882 -- Macro: TARGET_LIB_INT_CMP_BIASED
29883 This macro should evaluate to `true' if the integer comparison
29884 functions (like `__cmpdi2') return 0 to indicate that the first
29885 operand is smaller than the second, 1 to indicate that they are
29886 equal, and 2 to indicate that the first operand is greater than
29887 the second. If this macro evaluates to `false' the comparison
29888 functions return -1, 0, and 1 instead of 0, 1, and 2. If the
29889 target uses the routines in `libgcc.a', you do not need to define
29892 -- Macro: US_SOFTWARE_GOFAST
29893 Define this macro if your system C library uses the US Software
29894 GOFAST library to provide floating point emulation.
29896 In addition to defining this macro, your architecture must set
29897 `TARGET_INIT_LIBFUNCS' to `gofast_maybe_init_libfuncs', or else
29898 call that function from its version of that hook. It is defined
29899 in `config/gofast.h', which must be included by your
29900 architecture's `CPU.c' file. See `sparc/sparc.c' for an example.
29902 If this macro is defined, the
29903 `TARGET_FLOAT_LIB_COMPARE_RETURNS_BOOL' target hook must return
29904 false for `SFmode' and `DFmode' comparisons.
29906 -- Macro: TARGET_EDOM
29907 The value of `EDOM' on the target machine, as a C integer constant
29908 expression. If you don't define this macro, GCC does not attempt
29909 to deposit the value of `EDOM' into `errno' directly. Look in
29910 `/usr/include/errno.h' to find the value of `EDOM' on your system.
29912 If you do not define `TARGET_EDOM', then compiled code reports
29913 domain errors by calling the library function and letting it
29914 report the error. If mathematical functions on your system use
29915 `matherr' when there is an error, then you should leave
29916 `TARGET_EDOM' undefined so that `matherr' is used normally.
29918 -- Macro: GEN_ERRNO_RTX
29919 Define this macro as a C expression to create an rtl expression
29920 that refers to the global "variable" `errno'. (On certain systems,
29921 `errno' may not actually be a variable.) If you don't define this
29922 macro, a reasonable default is used.
29924 -- Macro: TARGET_C99_FUNCTIONS
29925 When this macro is nonzero, GCC will implicitly optimize `sin'
29926 calls into `sinf' and similarly for other functions defined by C99
29927 standard. The default is zero because a number of existing
29928 systems lack support for these functions in their runtime so this
29929 macro needs to be redefined to one on systems that do support the
29932 -- Macro: TARGET_HAS_SINCOS
29933 When this macro is nonzero, GCC will implicitly optimize calls to
29934 `sin' and `cos' with the same argument to a call to `sincos'. The
29935 default is zero. The target has to provide the following
29937 void sincos(double x, double *sin, double *cos);
29938 void sincosf(float x, float *sin, float *cos);
29939 void sincosl(long double x, long double *sin, long double *cos);
29941 -- Macro: NEXT_OBJC_RUNTIME
29942 Define this macro to generate code for Objective-C message sending
29943 using the calling convention of the NeXT system. This calling
29944 convention involves passing the object, the selector and the
29945 method arguments all at once to the method-lookup library function.
29947 The default calling convention passes just the object and the
29948 selector to the lookup function, which returns a pointer to the
29952 File: gccint.info, Node: Addressing Modes, Next: Anchored Addresses, Prev: Library Calls, Up: Target Macros
29954 17.14 Addressing Modes
29955 ======================
29957 This is about addressing modes.
29959 -- Macro: HAVE_PRE_INCREMENT
29960 -- Macro: HAVE_PRE_DECREMENT
29961 -- Macro: HAVE_POST_INCREMENT
29962 -- Macro: HAVE_POST_DECREMENT
29963 A C expression that is nonzero if the machine supports
29964 pre-increment, pre-decrement, post-increment, or post-decrement
29965 addressing respectively.
29967 -- Macro: HAVE_PRE_MODIFY_DISP
29968 -- Macro: HAVE_POST_MODIFY_DISP
29969 A C expression that is nonzero if the machine supports pre- or
29970 post-address side-effect generation involving constants other than
29971 the size of the memory operand.
29973 -- Macro: HAVE_PRE_MODIFY_REG
29974 -- Macro: HAVE_POST_MODIFY_REG
29975 A C expression that is nonzero if the machine supports pre- or
29976 post-address side-effect generation involving a register
29979 -- Macro: CONSTANT_ADDRESS_P (X)
29980 A C expression that is 1 if the RTX X is a constant which is a
29981 valid address. On most machines the default definition of
29982 `(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable,
29983 but a few machines are more restrictive as to which constant
29984 addresses are supported.
29986 -- Macro: CONSTANT_P (X)
29987 `CONSTANT_P', which is defined by target-independent code, accepts
29988 integer-values expressions whose values are not explicitly known,
29989 such as `symbol_ref', `label_ref', and `high' expressions and
29990 `const' arithmetic expressions, in addition to `const_int' and
29991 `const_double' expressions.
29993 -- Macro: MAX_REGS_PER_ADDRESS
29994 A number, the maximum number of registers that can appear in a
29995 valid memory address. Note that it is up to you to specify a
29996 value equal to the maximum number that
29997 `TARGET_LEGITIMATE_ADDRESS_P' would ever accept.
29999 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode
30000 MODE, rtx X, bool STRICT)
30001 A function that returns whether X (an RTX) is a legitimate memory
30002 address on the target machine for a memory operand of mode MODE.
30004 Legitimate addresses are defined in two variants: a strict variant
30005 and a non-strict one. The STRICT parameter chooses which variant
30006 is desired by the caller.
30008 The strict variant is used in the reload pass. It must be defined
30009 so that any pseudo-register that has not been allocated a hard
30010 register is considered a memory reference. This is because in
30011 contexts where some kind of register is required, a
30012 pseudo-register with no hard register must be rejected. For
30013 non-hard registers, the strict variant should look up the
30014 `reg_renumber' array; it should then proceed using the hard
30015 register number in the array, or treat the pseudo as a memory
30016 reference if the array holds `-1'.
30018 The non-strict variant is used in other passes. It must be
30019 defined to accept all pseudo-registers in every context where some
30020 kind of register is required.
30022 Normally, constant addresses which are the sum of a `symbol_ref'
30023 and an integer are stored inside a `const' RTX to mark them as
30024 constant. Therefore, there is no need to recognize such sums
30025 specifically as legitimate addresses. Normally you would simply
30026 recognize any `const' as legitimate.
30028 Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant
30029 sums that are not marked with `const'. It assumes that a naked
30030 `plus' indicates indexing. If so, then you _must_ reject such
30031 naked constant sums as illegitimate addresses, so that none of
30032 them will be given to `PRINT_OPERAND_ADDRESS'.
30034 On some machines, whether a symbolic address is legitimate depends
30035 on the section that the address refers to. On these machines,
30036 define the target hook `TARGET_ENCODE_SECTION_INFO' to store the
30037 information into the `symbol_ref', and then check for it here.
30038 When you see a `const', you will have to look inside it to find the
30039 `symbol_ref' in order to determine the section. *Note Assembler
30042 Some ports are still using a deprecated legacy substitute for this
30043 hook, the `GO_IF_LEGITIMATE_ADDRESS' macro. This macro has this
30046 #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL)
30048 and should `goto LABEL' if the address X is a valid address on the
30049 target machine for a memory operand of mode MODE. Whether the
30050 strict or non-strict variants are desired is defined by the
30051 `REG_OK_STRICT' macro introduced earlier in this section. Using
30052 the hook is usually simpler because it limits the number of files
30053 that are recompiled when changes are made.
30055 -- Macro: TARGET_MEM_CONSTRAINT
30056 A single character to be used instead of the default `'m''
30057 character for general memory addresses. This defines the
30058 constraint letter which matches the memory addresses accepted by
30059 `TARGET_LEGITIMATE_ADDRESS_P'. Define this macro if you want to
30060 support new address formats in your back end without changing the
30061 semantics of the `'m'' constraint. This is necessary in order to
30062 preserve functionality of inline assembly constructs using the
30065 -- Macro: FIND_BASE_TERM (X)
30066 A C expression to determine the base term of address X, or to
30067 provide a simplified version of X from which `alias.c' can easily
30068 find the base term. This macro is used in only two places:
30069 `find_base_value' and `find_base_term' in `alias.c'.
30071 It is always safe for this macro to not be defined. It exists so
30072 that alias analysis can understand machine-dependent addresses.
30074 The typical use of this macro is to handle addresses containing a
30075 label_ref or symbol_ref within an UNSPEC.
30077 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, enum
30079 This hook is given an invalid memory address X for an operand of
30080 mode MODE and should try to return a valid memory address.
30082 X will always be the result of a call to `break_out_memory_refs',
30083 and OLDX will be the operand that was given to that function to
30086 The code of the hook should not alter the substructure of X. If
30087 it transforms X into a more legitimate form, it should return the
30090 It is not necessary for this hook to come up with a legitimate
30091 address. The compiler has standard ways of doing so in all cases.
30092 In fact, it is safe to omit this hook or make it return X if it
30093 cannot find a valid way to legitimize the address. But often a
30094 machine-dependent strategy can generate better code.
30096 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS,
30098 A C compound statement that attempts to replace X, which is an
30099 address that needs reloading, with a valid memory address for an
30100 operand of mode MODE. WIN will be a C statement label elsewhere
30101 in the code. It is not necessary to define this macro, but it
30102 might be useful for performance reasons.
30104 For example, on the i386, it is sometimes possible to use a single
30105 reload register instead of two by reloading a sum of two pseudo
30106 registers into a register. On the other hand, for number of RISC
30107 processors offsets are limited so that often an intermediate
30108 address needs to be generated in order to address a stack slot.
30109 By defining `LEGITIMIZE_RELOAD_ADDRESS' appropriately, the
30110 intermediate addresses generated for adjacent some stack slots can
30111 be made identical, and thus be shared.
30113 _Note_: This macro should be used with caution. It is necessary
30114 to know something of how reload works in order to effectively use
30115 this, and it is quite easy to produce macros that build in too
30116 much knowledge of reload internals.
30118 _Note_: This macro must be able to reload an address created by a
30119 previous invocation of this macro. If it fails to handle such
30120 addresses then the compiler may generate incorrect code or abort.
30122 The macro definition should use `push_reload' to indicate parts
30123 that need reloading; OPNUM, TYPE and IND_LEVELS are usually
30124 suitable to be passed unaltered to `push_reload'.
30126 The code generated by this macro must not alter the substructure of
30127 X. If it transforms X into a more legitimate form, it should
30128 assign X (which will always be a C variable) a new value. This
30129 also applies to parts that you change indirectly by calling
30132 The macro definition may use `strict_memory_address_p' to test if
30133 the address has become legitimate.
30135 If you want to change only a part of X, one standard way of doing
30136 this is to use `copy_rtx'. Note, however, that it unshares only a
30137 single level of rtl. Thus, if the part to be changed is not at the
30138 top level, you'll need to replace first the top level. It is not
30139 necessary for this macro to come up with a legitimate address;
30140 but often a machine-dependent strategy can generate better code.
30142 -- Macro: GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL)
30143 A C statement or compound statement with a conditional `goto
30144 LABEL;' executed if memory address X (an RTX) can have different
30145 meanings depending on the machine mode of the memory reference it
30146 is used for or if the address is valid for some modes but not
30149 Autoincrement and autodecrement addresses typically have
30150 mode-dependent effects because the amount of the increment or
30151 decrement is the size of the operand being addressed. Some
30152 machines have other mode-dependent addresses. Many RISC machines
30153 have no mode-dependent addresses.
30155 You may assume that ADDR is a valid address for the machine.
30157 -- Macro: LEGITIMATE_CONSTANT_P (X)
30158 A C expression that is nonzero if X is a legitimate constant for
30159 an immediate operand on the target machine. You can assume that X
30160 satisfies `CONSTANT_P', so you need not check this. In fact, `1'
30161 is a suitable definition for this macro on machines where anything
30162 `CONSTANT_P' is valid.
30164 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X)
30165 This hook is used to undo the possibly obfuscating effects of the
30166 `LEGITIMIZE_ADDRESS' and `LEGITIMIZE_RELOAD_ADDRESS' target
30167 macros. Some backend implementations of these macros wrap symbol
30168 references inside an `UNSPEC' rtx to represent PIC or similar
30169 addressing modes. This target hook allows GCC's optimizers to
30170 understand the semantics of these opaque `UNSPEC's by converting
30171 them back into their original form.
30173 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (rtx X)
30174 This hook should return true if X is of a form that cannot (or
30175 should not) be spilled to the constant pool. The default version
30176 of this hook returns false.
30178 The primary reason to define this hook is to prevent reload from
30179 deciding that a non-legitimate constant would be better reloaded
30180 from the constant pool instead of spilling and reloading a register
30181 holding the constant. This restriction is often true of addresses
30182 of TLS symbols for various targets.
30184 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum
30185 machine_mode MODE, const_rtx X)
30186 This hook should return true if pool entries for constant X can be
30187 placed in an `object_block' structure. MODE is the mode of X.
30189 The default version returns false for all constants.
30191 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (unsigned FN, bool
30193 This hook should return the DECL of a function that implements
30194 reciprocal of the builtin function with builtin function code FN,
30195 or `NULL_TREE' if such a function is not available. MD_FN is true
30196 when FN is a code of a machine-dependent builtin function. When
30197 SQRT is true, additional optimizations that apply only to the
30198 reciprocal of a square root function are performed, and only
30199 reciprocals of `sqrt' function are valid.
30201 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
30202 This hook should return the DECL of a function F that given an
30203 address ADDR as an argument returns a mask M that can be used to
30204 extract from two vectors the relevant data that resides in ADDR in
30205 case ADDR is not properly aligned.
30207 The autovectorizer, when vectorizing a load operation from an
30208 address ADDR that may be unaligned, will generate two vector loads
30209 from the two aligned addresses around ADDR. It then generates a
30210 `REALIGN_LOAD' operation to extract the relevant data from the two
30211 loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and
30212 V2, are the two vectors, each of size VS, and the third argument,
30213 OFF, defines how the data will be extracted from these two
30214 vectors: if OFF is 0, then the returned vector is V2; otherwise,
30215 the returned vector is composed from the last VS-OFF elements of
30216 V1 concatenated to the first OFF elements of V2.
30218 If this hook is defined, the autovectorizer will generate a call
30219 to F (using the DECL tree that this hook returns) and will use the
30220 return value of F as the argument OFF to `REALIGN_LOAD'.
30221 Therefore, the mask M returned by F should comply with the
30222 semantics expected by `REALIGN_LOAD' described above. If this
30223 hook is not defined, then ADDR will be used as the argument OFF to
30224 `REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR
30225 will be considered.
30227 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN (tree X)
30228 This hook should return the DECL of a function F that implements
30229 widening multiplication of the even elements of two input vectors
30232 If this hook is defined, the autovectorizer will use it along with
30233 the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD' target hook when
30234 vectorizing widening multiplication in cases that the order of the
30235 results does not have to be preserved (e.g. used only by a
30236 reduction computation). Otherwise, the `widen_mult_hi/lo' idioms
30239 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD (tree X)
30240 This hook should return the DECL of a function F that implements
30241 widening multiplication of the odd elements of two input vectors
30244 If this hook is defined, the autovectorizer will use it along with
30245 the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN' target hook when
30246 vectorizing widening multiplication in cases that the order of the
30247 results does not have to be preserved (e.g. used only by a
30248 reduction computation). Otherwise, the `widen_mult_hi/lo' idioms
30251 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (bool
30253 Returns the cost to be added to the overhead involved with
30254 executing the vectorized version of a loop.
30256 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
30257 (const_tree TYPE, bool IS_PACKED)
30258 Return true if vector alignment is reachable (by peeling N
30259 iterations) for the given type.
30261 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VEC_PERM (tree TYPE,
30262 tree *MASK_ELEMENT_TYPE)
30263 Target builtin that implements vector permute.
30265 -- Target Hook: bool TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK (tree
30266 VEC_TYPE, tree MASK)
30267 Return true if a vector created for `builtin_vec_perm' is valid.
30269 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned
30271 This hook should return the DECL of a function that implements
30272 conversion of the input vector of type TYPE. If TYPE is an
30273 integral type, the result of the conversion is a vector of
30274 floating-point type of the same size. If TYPE is a floating-point
30275 type, the result of the conversion is a vector of integral type of
30276 the same size. The value of CODE is one of the enumerators in
30277 `enum tree_code' and specifies how the conversion is to be applied
30278 (truncation, rounding, etc.).
30280 If this hook is defined, the autovectorizer will use the
30281 `TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing
30282 conversion. Otherwise, it will return `NULL_TREE'.
30284 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
30285 (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN)
30286 This hook should return the decl of a function that implements the
30287 vectorized variant of the builtin function with builtin function
30288 code CODE or `NULL_TREE' if such a function is not available. The
30289 value of FNDECL is the builtin function declaration. The return
30290 type of the vectorized function shall be of vector type
30291 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN.
30293 -- Target Hook: bool TARGET_SUPPORT_VECTOR_MISALIGNMENT (enum
30294 machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool
30296 This hook should return true if the target supports misaligned
30297 vector store/load of a specific factor denoted in the MISALIGNMENT
30298 parameter. The vector store/load should be of machine mode MODE
30299 and the elements in the vectors should be of type TYPE. IS_PACKED
30300 parameter is true if the memory access is defined in a packed
30304 File: gccint.info, Node: Anchored Addresses, Next: Condition Code, Prev: Addressing Modes, Up: Target Macros
30306 17.15 Anchored Addresses
30307 ========================
30309 GCC usually addresses every static object as a separate entity. For
30310 example, if we have:
30312 static int a, b, c;
30313 int foo (void) { return a + b + c; }
30315 the code for `foo' will usually calculate three separate symbolic
30316 addresses: those of `a', `b' and `c'. On some targets, it would be
30317 better to calculate just one symbolic address and access the three
30318 variables relative to it. The equivalent pseudocode would be something
30323 register int *xr = &x;
30324 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
30327 (which isn't valid C). We refer to shared addresses like `x' as
30328 "section anchors". Their use is controlled by `-fsection-anchors'.
30330 The hooks below describe the target properties that GCC needs to know
30331 in order to make effective use of section anchors. It won't use
30332 section anchors at all unless either `TARGET_MIN_ANCHOR_OFFSET' or
30333 `TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value.
30335 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
30336 The minimum offset that should be applied to a section anchor. On
30337 most targets, it should be the smallest offset that can be applied
30338 to a base register while still giving a legitimate address for
30339 every mode. The default value is 0.
30341 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
30342 Like `TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive)
30343 offset that should be applied to section anchors. The default
30346 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X)
30347 Write the assembly code to define section anchor X, which is a
30348 `SYMBOL_REF' for which `SYMBOL_REF_ANCHOR_P (X)' is true. The
30349 hook is called with the assembly output position set to the
30350 beginning of `SYMBOL_REF_BLOCK (X)'.
30352 If `ASM_OUTPUT_DEF' is available, the hook's default definition
30353 uses it to define the symbol as `. + SYMBOL_REF_BLOCK_OFFSET (X)'.
30354 If `ASM_OUTPUT_DEF' is not available, the hook's default definition
30355 is `NULL', which disables the use of section anchors altogether.
30357 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X)
30358 Return true if GCC should attempt to use anchors to access
30359 `SYMBOL_REF' X. You can assume `SYMBOL_REF_HAS_BLOCK_INFO_P (X)'
30360 and `!SYMBOL_REF_ANCHOR_P (X)'.
30362 The default version is correct for most targets, but you might
30363 need to intercept this hook to handle things like target-specific
30364 attributes or target-specific sections.
30367 File: gccint.info, Node: Condition Code, Next: Costs, Prev: Anchored Addresses, Up: Target Macros
30369 17.16 Condition Code Status
30370 ===========================
30372 The macros in this section can be split in two families, according to
30373 the two ways of representing condition codes in GCC.
30375 The first representation is the so called `(cc0)' representation
30376 (*note Jump Patterns::), where all instructions can have an implicit
30377 clobber of the condition codes. The second is the condition code
30378 register representation, which provides better schedulability for
30379 architectures that do have a condition code register, but on which most
30380 instructions do not affect it. The latter category includes most RISC
30383 The implicit clobbering poses a strong restriction on the placement of
30384 the definition and use of the condition code, which need to be in
30385 adjacent insns for machines using `(cc0)'. This can prevent important
30386 optimizations on some machines. For example, on the IBM RS/6000, there
30387 is a delay for taken branches unless the condition code register is set
30388 three instructions earlier than the conditional branch. The instruction
30389 scheduler cannot perform this optimization if it is not permitted to
30390 separate the definition and use of the condition code register.
30392 For this reason, it is possible and suggested to use a register to
30393 represent the condition code for new ports. If there is a specific
30394 condition code register in the machine, use a hard register. If the
30395 condition code or comparison result can be placed in any general
30396 register, or if there are multiple condition registers, use a pseudo
30397 register. Registers used to store the condition code value will
30398 usually have a mode that is in class `MODE_CC'.
30400 Alternatively, you can use `BImode' if the comparison operator is
30401 specified already in the compare instruction. In this case, you are not
30402 interested in most macros in this section.
30406 * CC0 Condition Codes:: Old style representation of condition codes.
30407 * MODE_CC Condition Codes:: Modern representation of condition codes.
30408 * Cond. Exec. Macros:: Macros to control conditional execution.
30411 File: gccint.info, Node: CC0 Condition Codes, Next: MODE_CC Condition Codes, Up: Condition Code
30413 17.16.1 Representation of condition codes using `(cc0)'
30414 -------------------------------------------------------
30416 The file `conditions.h' defines a variable `cc_status' to describe how
30417 the condition code was computed (in case the interpretation of the
30418 condition code depends on the instruction that it was set by). This
30419 variable contains the RTL expressions on which the condition code is
30420 currently based, and several standard flags.
30422 Sometimes additional machine-specific flags must be defined in the
30423 machine description header file. It can also add additional
30424 machine-specific information by defining `CC_STATUS_MDEP'.
30426 -- Macro: CC_STATUS_MDEP
30427 C code for a data type which is used for declaring the `mdep'
30428 component of `cc_status'. It defaults to `int'.
30430 This macro is not used on machines that do not use `cc0'.
30432 -- Macro: CC_STATUS_MDEP_INIT
30433 A C expression to initialize the `mdep' field to "empty". The
30434 default definition does nothing, since most machines don't use the
30435 field anyway. If you want to use the field, you should probably
30436 define this macro to initialize it.
30438 This macro is not used on machines that do not use `cc0'.
30440 -- Macro: NOTICE_UPDATE_CC (EXP, INSN)
30441 A C compound statement to set the components of `cc_status'
30442 appropriately for an insn INSN whose body is EXP. It is this
30443 macro's responsibility to recognize insns that set the condition
30444 code as a byproduct of other activity as well as those that
30445 explicitly set `(cc0)'.
30447 This macro is not used on machines that do not use `cc0'.
30449 If there are insns that do not set the condition code but do alter
30450 other machine registers, this macro must check to see whether they
30451 invalidate the expressions that the condition code is recorded as
30452 reflecting. For example, on the 68000, insns that store in address
30453 registers do not set the condition code, which means that usually
30454 `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns.
30455 But suppose that the previous insn set the condition code based
30456 on location `a4@(102)' and the current insn stores a new value in
30457 `a4'. Although the condition code is not changed by this, it will
30458 no longer be true that it reflects the contents of `a4@(102)'.
30459 Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case
30460 to say that nothing is known about the condition code value.
30462 The definition of `NOTICE_UPDATE_CC' must be prepared to deal with
30463 the results of peephole optimization: insns whose patterns are
30464 `parallel' RTXs containing various `reg', `mem' or constants which
30465 are just the operands. The RTL structure of these insns is not
30466 sufficient to indicate what the insns actually do. What
30467 `NOTICE_UPDATE_CC' should do when it sees one is just to run
30470 A possible definition of `NOTICE_UPDATE_CC' is to call a function
30471 that looks at an attribute (*note Insn Attributes::) named, for
30472 example, `cc'. This avoids having detailed information about
30473 patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'.
30476 File: gccint.info, Node: MODE_CC Condition Codes, Next: Cond. Exec. Macros, Prev: CC0 Condition Codes, Up: Condition Code
30478 17.16.2 Representation of condition codes using registers
30479 ---------------------------------------------------------
30481 -- Macro: SELECT_CC_MODE (OP, X, Y)
30482 On many machines, the condition code may be produced by other
30483 instructions than compares, for example the branch can use
30484 directly the condition code set by a subtract instruction.
30485 However, on some machines when the condition code is set this way
30486 some bits (such as the overflow bit) are not set in the same way
30487 as a test instruction, so that a different branch instruction must
30488 be used for some conditional branches. When this happens, use the
30489 machine mode of the condition code register to record different
30490 formats of the condition code register. Modes can also be used to
30491 record which compare instruction (e.g. a signed or an unsigned
30492 comparison) produced the condition codes.
30494 If other modes than `CCmode' are required, add them to
30495 `MACHINE-modes.def' and define `SELECT_CC_MODE' to choose a mode
30496 given an operand of a compare. This is needed because the modes
30497 have to be chosen not only during RTL generation but also, for
30498 example, by instruction combination. The result of
30499 `SELECT_CC_MODE' should be consistent with the mode used in the
30500 patterns; for example to support the case of the add on the SPARC
30501 discussed above, we have the pattern
30504 [(set (reg:CC_NOOV 0)
30506 (plus:SI (match_operand:SI 0 "register_operand" "%r")
30507 (match_operand:SI 1 "arith_operand" "rI"))
30512 together with a `SELECT_CC_MODE' that returns `CC_NOOVmode' for
30513 comparisons whose argument is a `plus':
30515 #define SELECT_CC_MODE(OP,X,Y) \
30516 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
30517 ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode) \
30518 : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \
30519 || GET_CODE (X) == NEG) \
30520 ? CC_NOOVmode : CCmode))
30522 Another reason to use modes is to retain information on which
30523 operands were used by the comparison; see `REVERSIBLE_CC_MODE'
30524 later in this section.
30526 You should define this macro if and only if you define extra CC
30527 modes in `MACHINE-modes.def'.
30529 -- Macro: CANONICALIZE_COMPARISON (CODE, OP0, OP1)
30530 On some machines not all possible comparisons are defined, but you
30531 can convert an invalid comparison into a valid one. For example,
30532 the Alpha does not have a `GT' comparison, but you can use an `LT'
30533 comparison instead and swap the order of the operands.
30535 On such machines, define this macro to be a C statement to do any
30536 required conversions. CODE is the initial comparison code and OP0
30537 and OP1 are the left and right operands of the comparison,
30538 respectively. You should modify CODE, OP0, and OP1 as required.
30540 GCC will not assume that the comparison resulting from this macro
30541 is valid but will see if the resulting insn matches a pattern in
30544 You need not define this macro if it would never change the
30545 comparison code or operands.
30547 -- Macro: REVERSIBLE_CC_MODE (MODE)
30548 A C expression whose value is one if it is always safe to reverse a
30549 comparison whose mode is MODE. If `SELECT_CC_MODE' can ever
30550 return MODE for a floating-point inequality comparison, then
30551 `REVERSIBLE_CC_MODE (MODE)' must be zero.
30553 You need not define this macro if it would always returns zero or
30554 if the floating-point format is anything other than
30555 `IEEE_FLOAT_FORMAT'. For example, here is the definition used on
30556 the SPARC, where floating-point inequality comparisons are always
30559 #define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode)
30561 -- Macro: REVERSE_CONDITION (CODE, MODE)
30562 A C expression whose value is reversed condition code of the CODE
30563 for comparison done in CC_MODE MODE. The macro is used only in
30564 case `REVERSIBLE_CC_MODE (MODE)' is nonzero. Define this macro in
30565 case machine has some non-standard way how to reverse certain
30566 conditionals. For instance in case all floating point conditions
30567 are non-trapping, compiler may freely convert unordered compares
30568 to ordered one. Then definition may look like:
30570 #define REVERSE_CONDITION(CODE, MODE) \
30571 ((MODE) != CCFPmode ? reverse_condition (CODE) \
30572 : reverse_condition_maybe_unordered (CODE))
30574 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int
30575 *P1, unsigned int *P2)
30576 On targets which do not use `(cc0)', and which use a hard register
30577 rather than a pseudo-register to hold condition codes, the regular
30578 CSE passes are often not able to identify cases in which the hard
30579 register is set to a common value. Use this hook to enable a
30580 small pass which optimizes such cases. This hook should return
30581 true to enable this pass, and it should set the integers to which
30582 its arguments point to the hard register numbers used for
30583 condition codes. When there is only one such register, as is true
30584 on most systems, the integer pointed to by P2 should be set to
30587 The default version of this hook returns false.
30589 -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum
30590 machine_mode M1, enum machine_mode M2)
30591 On targets which use multiple condition code modes in class
30592 `MODE_CC', it is sometimes the case that a comparison can be
30593 validly done in more than one mode. On such a system, define this
30594 target hook to take two mode arguments and to return a mode in
30595 which both comparisons may be validly done. If there is no such
30596 mode, return `VOIDmode'.
30598 The default version of this hook checks whether the modes are the
30599 same. If they are, it returns that mode. If they are different,
30600 it returns `VOIDmode'.
30603 File: gccint.info, Node: Cond. Exec. Macros, Prev: MODE_CC Condition Codes, Up: Condition Code
30605 17.16.3 Macros to control conditional execution
30606 -----------------------------------------------
30608 There is one macro that may need to be defined for targets supporting
30609 conditional execution, independent of how they represent conditional
30612 -- Macro: REVERSE_CONDEXEC_PREDICATES_P (OP1, OP2)
30613 A C expression that returns true if the conditional execution
30614 predicate OP1, a comparison operation, is the inverse of OP2 and
30615 vice versa. Define this to return 0 if the target has conditional
30616 execution predicates that cannot be reversed safely. There is no
30617 need to validate that the arguments of op1 and op2 are the same,
30618 this is done separately. If no expansion is specified, this macro
30619 is defined as follows:
30621 #define REVERSE_CONDEXEC_PREDICATES_P (x, y) \
30622 (GET_CODE ((x)) == reversed_comparison_code ((y), NULL))
30625 File: gccint.info, Node: Costs, Next: Scheduling, Prev: Condition Code, Up: Target Macros
30627 17.17 Describing Relative Costs of Operations
30628 =============================================
30630 These macros let you describe the relative speed of various operations
30631 on the target machine.
30633 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO)
30634 A C expression for the cost of moving data of mode MODE from a
30635 register in class FROM to one in class TO. The classes are
30636 expressed using the enumeration values such as `GENERAL_REGS'. A
30637 value of 2 is the default; other values are interpreted relative to
30640 It is not required that the cost always equal 2 when FROM is the
30641 same as TO; on some machines it is expensive to move between
30642 registers if they are not general registers.
30644 If reload sees an insn consisting of a single `set' between two
30645 hard registers, and if `REGISTER_MOVE_COST' applied to their
30646 classes returns a value of 2, reload does not check to ensure that
30647 the constraints of the insn are met. Setting a cost of other than
30648 2 will allow reload to verify that the constraints are met. You
30649 should do this if the `movM' pattern's constraints do not allow
30652 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN)
30653 A C expression for the cost of moving data of mode MODE between a
30654 register of class CLASS and memory; IN is zero if the value is to
30655 be written to memory, nonzero if it is to be read in. This cost
30656 is relative to those in `REGISTER_MOVE_COST'. If moving between
30657 registers and memory is more expensive than between two registers,
30658 you should define this macro to express the relative cost.
30660 If you do not define this macro, GCC uses a default cost of 4 plus
30661 the cost of copying via a secondary reload register, if one is
30662 needed. If your machine requires a secondary reload register to
30663 copy between memory and a register of CLASS but the reload
30664 mechanism is more complex than copying via an intermediate, define
30665 this macro to reflect the actual cost of the move.
30667 GCC defines the function `memory_move_secondary_cost' if secondary
30668 reloads are needed. It computes the costs due to copying via a
30669 secondary register. If your machine copies from memory using a
30670 secondary register in the conventional way but the default base
30671 value of 4 is not correct for your machine, define this macro to
30672 add some other value to the result of that function. The
30673 arguments to that function are the same as to this macro.
30675 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P)
30676 A C expression for the cost of a branch instruction. A value of 1
30677 is the default; other values are interpreted relative to that.
30678 Parameter SPEED_P is true when the branch in question should be
30679 optimized for speed. When it is false, `BRANCH_COST' should be
30680 returning value optimal for code size rather then performance
30681 considerations. PREDICTABLE_P is true for well predictable
30682 branches. On many architectures the `BRANCH_COST' can be reduced
30685 Here are additional macros which do not specify precise relative costs,
30686 but only that certain actions are more expensive than GCC would
30689 -- Macro: SLOW_BYTE_ACCESS
30690 Define this macro as a C expression which is nonzero if accessing
30691 less than a word of memory (i.e. a `char' or a `short') is no
30692 faster than accessing a word of memory, i.e., if such access
30693 require more than one instruction or if there is no difference in
30694 cost between byte and (aligned) word loads.
30696 When this macro is not defined, the compiler will access a field by
30697 finding the smallest containing object; when it is defined, a
30698 fullword load will be used if alignment permits. Unless bytes
30699 accesses are faster than word accesses, using word accesses is
30700 preferable since it may eliminate subsequent memory access if
30701 subsequent accesses occur to other fields in the same word of the
30702 structure, but to different bytes.
30704 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT)
30705 Define this macro to be the value 1 if memory accesses described
30706 by the MODE and ALIGNMENT parameters have a cost many times greater
30707 than aligned accesses, for example if they are emulated in a trap
30710 When this macro is nonzero, the compiler will act as if
30711 `STRICT_ALIGNMENT' were nonzero when generating code for block
30712 moves. This can cause significantly more instructions to be
30713 produced. Therefore, do not set this macro nonzero if unaligned
30714 accesses only add a cycle or two to the time for a memory access.
30716 If the value of this macro is always zero, it need not be defined.
30717 If this macro is defined, it should produce a nonzero value when
30718 `STRICT_ALIGNMENT' is nonzero.
30720 -- Macro: MOVE_RATIO (SPEED)
30721 The threshold of number of scalar memory-to-memory move insns,
30722 _below_ which a sequence of insns should be generated instead of a
30723 string move insn or a library call. Increasing the value will
30724 always make code faster, but eventually incurs high cost in
30725 increased code size.
30727 Note that on machines where the corresponding move insn is a
30728 `define_expand' that emits a sequence of insns, this macro counts
30729 the number of such sequences.
30731 The parameter SPEED is true if the code is currently being
30732 optimized for speed rather than size.
30734 If you don't define this, a reasonable default is used.
30736 -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT)
30737 A C expression used to determine whether `move_by_pieces' will be
30738 used to copy a chunk of memory, or whether some other block move
30739 mechanism will be used. Defaults to 1 if `move_by_pieces_ninsns'
30740 returns less than `MOVE_RATIO'.
30742 -- Macro: MOVE_MAX_PIECES
30743 A C expression used by `move_by_pieces' to determine the largest
30744 unit a load or store used to copy memory is. Defaults to
30747 -- Macro: CLEAR_RATIO (SPEED)
30748 The threshold of number of scalar move insns, _below_ which a
30749 sequence of insns should be generated to clear memory instead of a
30750 string clear insn or a library call. Increasing the value will
30751 always make code faster, but eventually incurs high cost in
30752 increased code size.
30754 The parameter SPEED is true if the code is currently being
30755 optimized for speed rather than size.
30757 If you don't define this, a reasonable default is used.
30759 -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT)
30760 A C expression used to determine whether `clear_by_pieces' will be
30761 used to clear a chunk of memory, or whether some other block clear
30762 mechanism will be used. Defaults to 1 if `move_by_pieces_ninsns'
30763 returns less than `CLEAR_RATIO'.
30765 -- Macro: SET_RATIO (SPEED)
30766 The threshold of number of scalar move insns, _below_ which a
30767 sequence of insns should be generated to set memory to a constant
30768 value, instead of a block set insn or a library call. Increasing
30769 the value will always make code faster, but eventually incurs high
30770 cost in increased code size.
30772 The parameter SPEED is true if the code is currently being
30773 optimized for speed rather than size.
30775 If you don't define this, it defaults to the value of `MOVE_RATIO'.
30777 -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT)
30778 A C expression used to determine whether `store_by_pieces' will be
30779 used to set a chunk of memory to a constant value, or whether some
30780 other mechanism will be used. Used by `__builtin_memset' when
30781 storing values other than constant zero. Defaults to 1 if
30782 `move_by_pieces_ninsns' returns less than `SET_RATIO'.
30784 -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT)
30785 A C expression used to determine whether `store_by_pieces' will be
30786 used to set a chunk of memory to a constant string value, or
30787 whether some other mechanism will be used. Used by
30788 `__builtin_strcpy' when called with a constant source string.
30789 Defaults to 1 if `move_by_pieces_ninsns' returns less than
30792 -- Macro: USE_LOAD_POST_INCREMENT (MODE)
30793 A C expression used to determine whether a load postincrement is a
30794 good thing to use for a given mode. Defaults to the value of
30795 `HAVE_POST_INCREMENT'.
30797 -- Macro: USE_LOAD_POST_DECREMENT (MODE)
30798 A C expression used to determine whether a load postdecrement is a
30799 good thing to use for a given mode. Defaults to the value of
30800 `HAVE_POST_DECREMENT'.
30802 -- Macro: USE_LOAD_PRE_INCREMENT (MODE)
30803 A C expression used to determine whether a load preincrement is a
30804 good thing to use for a given mode. Defaults to the value of
30805 `HAVE_PRE_INCREMENT'.
30807 -- Macro: USE_LOAD_PRE_DECREMENT (MODE)
30808 A C expression used to determine whether a load predecrement is a
30809 good thing to use for a given mode. Defaults to the value of
30810 `HAVE_PRE_DECREMENT'.
30812 -- Macro: USE_STORE_POST_INCREMENT (MODE)
30813 A C expression used to determine whether a store postincrement is
30814 a good thing to use for a given mode. Defaults to the value of
30815 `HAVE_POST_INCREMENT'.
30817 -- Macro: USE_STORE_POST_DECREMENT (MODE)
30818 A C expression used to determine whether a store postdecrement is
30819 a good thing to use for a given mode. Defaults to the value of
30820 `HAVE_POST_DECREMENT'.
30822 -- Macro: USE_STORE_PRE_INCREMENT (MODE)
30823 This macro is used to determine whether a store preincrement is a
30824 good thing to use for a given mode. Defaults to the value of
30825 `HAVE_PRE_INCREMENT'.
30827 -- Macro: USE_STORE_PRE_DECREMENT (MODE)
30828 This macro is used to determine whether a store predecrement is a
30829 good thing to use for a given mode. Defaults to the value of
30830 `HAVE_PRE_DECREMENT'.
30832 -- Macro: NO_FUNCTION_CSE
30833 Define this macro if it is as good or better to call a constant
30834 function address than to call an address kept in a register.
30836 -- Macro: RANGE_TEST_NON_SHORT_CIRCUIT
30837 Define this macro if a non-short-circuit operation produced by
30838 `fold_range_test ()' is optimal. This macro defaults to true if
30839 `BRANCH_COST' is greater than or equal to the value 2.
30841 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int
30842 OUTER_CODE, int *TOTAL, bool SPEED)
30843 This target hook describes the relative costs of RTL expressions.
30845 The cost may depend on the precise form of the expression, which is
30846 available for examination in X, and the rtx code of the expression
30847 in which it is contained, found in OUTER_CODE. CODE is the
30848 expression code--redundant, since it can be obtained with
30851 In implementing this hook, you can use the construct
30852 `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions.
30854 On entry to the hook, `*TOTAL' contains a default estimate for the
30855 cost of the expression. The hook should modify this value as
30856 necessary. Traditionally, the default costs are `COSTS_N_INSNS
30857 (5)' for multiplications, `COSTS_N_INSNS (7)' for division and
30858 modulus operations, and `COSTS_N_INSNS (1)' for all other
30861 When optimizing for code size, i.e. when `speed' is false, this
30862 target hook should be used to estimate the relative size cost of
30863 an expression, again relative to `COSTS_N_INSNS'.
30865 The hook returns true when all subexpressions of X have been
30866 processed, and false when `rtx_cost' should recurse.
30868 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, bool SPEED)
30869 This hook computes the cost of an addressing mode that contains
30870 ADDRESS. If not defined, the cost is computed from the ADDRESS
30871 expression and the `TARGET_RTX_COST' hook.
30873 For most CISC machines, the default cost is a good approximation
30874 of the true cost of the addressing mode. However, on RISC
30875 machines, all instructions normally have the same length and
30876 execution time. Hence all addresses will have equal costs.
30878 In cases where more than one form of an address is known, the form
30879 with the lowest cost will be used. If multiple forms have the
30880 same, lowest, cost, the one that is the most complex will be used.
30882 For example, suppose an address that is equal to the sum of a
30883 register and a constant is used twice in the same basic block.
30884 When this macro is not defined, the address will be computed in a
30885 register and memory references will be indirect through that
30886 register. On machines where the cost of the addressing mode
30887 containing the sum is no higher than that of a simple indirect
30888 reference, this will produce an additional instruction and
30889 possibly require an additional register. Proper specification of
30890 this macro eliminates this overhead for such machines.
30892 This hook is never called with an invalid address.
30894 On machines where an address involving more than one register is as
30895 cheap as an address computation involving only one register,
30896 defining `TARGET_ADDRESS_COST' to reflect this can cause two
30897 registers to be live over a region of code where only one would
30898 have been if `TARGET_ADDRESS_COST' were not defined in that
30899 manner. This effect should be considered in the definition of
30900 this macro. Equivalent costs should probably only be given to
30901 addresses with different numbers of registers on machines with
30905 File: gccint.info, Node: Scheduling, Next: Sections, Prev: Costs, Up: Target Macros
30907 17.18 Adjusting the Instruction Scheduler
30908 =========================================
30910 The instruction scheduler may need a fair amount of machine-specific
30911 adjustment in order to produce good code. GCC provides several target
30912 hooks for this purpose. It is usually enough to define just a few of
30913 them: try the first ones in this list first.
30915 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void)
30916 This hook returns the maximum number of instructions that can ever
30917 issue at the same time on the target machine. The default is one.
30918 Although the insn scheduler can define itself the possibility of
30919 issue an insn on the same cycle, the value can serve as an
30920 additional constraint to issue insns on the same simulated
30921 processor cycle (see hooks `TARGET_SCHED_REORDER' and
30922 `TARGET_SCHED_REORDER2'). This value must be constant over the
30923 entire compilation. If you need it to vary depending on what the
30924 instructions are, you must use `TARGET_SCHED_VARIABLE_ISSUE'.
30926 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int
30927 VERBOSE, rtx INSN, int MORE)
30928 This hook is executed by the scheduler after it has scheduled an
30929 insn from the ready list. It should return the number of insns
30930 which can still be issued in the current cycle. The default is
30931 `MORE - 1' for insns other than `CLOBBER' and `USE', which
30932 normally are not counted against the issue rate. You should
30933 define this hook if some insns take more machine resources than
30934 others, so that fewer insns can follow them in the same cycle.
30935 FILE is either a null pointer, or a stdio stream to write any
30936 debug output to. VERBOSE is the verbose level provided by
30937 `-fsched-verbose-N'. INSN is the instruction that was scheduled.
30939 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx
30940 DEP_INSN, int COST)
30941 This function corrects the value of COST based on the relationship
30942 between INSN and DEP_INSN through the dependence LINK. It should
30943 return the new value. The default is to make no adjustment to
30944 COST. This can be used for example to specify to the scheduler
30945 using the traditional pipeline description that an output- or
30946 anti-dependence does not incur the same cost as a data-dependence.
30947 If the scheduler using the automaton based pipeline description,
30948 the cost of anti-dependence is zero and the cost of
30949 output-dependence is maximum of one and the difference of latency
30950 times of the first and the second insns. If these values are not
30951 acceptable, you could use the hook to modify them too. See also
30952 *note Processor pipeline description::.
30954 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int
30956 This hook adjusts the integer scheduling priority PRIORITY of
30957 INSN. It should return the new priority. Increase the priority to
30958 execute INSN earlier, reduce the priority to execute INSN later.
30959 Do not define this hook if you do not need to adjust the
30960 scheduling priorities of insns.
30962 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx
30963 *READY, int *N_READYP, int CLOCK)
30964 This hook is executed by the scheduler after it has scheduled the
30965 ready list, to allow the machine description to reorder it (for
30966 example to combine two small instructions together on `VLIW'
30967 machines). FILE is either a null pointer, or a stdio stream to
30968 write any debug output to. VERBOSE is the verbose level provided
30969 by `-fsched-verbose-N'. READY is a pointer to the ready list of
30970 instructions that are ready to be scheduled. N_READYP is a
30971 pointer to the number of elements in the ready list. The scheduler
30972 reads the ready list in reverse order, starting with
30973 READY[*N_READYP - 1] and going to READY[0]. CLOCK is the timer
30974 tick of the scheduler. You may modify the ready list and the
30975 number of ready insns. The return value is the number of insns
30976 that can issue this cycle; normally this is just `issue_rate'.
30977 See also `TARGET_SCHED_REORDER2'.
30979 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE,
30980 rtx *READY, int *N_READYP, int CLOCK)
30981 Like `TARGET_SCHED_REORDER', but called at a different time. That
30982 function is called whenever the scheduler starts a new cycle.
30983 This one is called once per iteration over a cycle, immediately
30984 after `TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list
30985 and return the number of insns to be scheduled in the same cycle.
30986 Defining this hook can be useful if there are frequent situations
30987 where scheduling one insn causes other insns to become ready in
30988 the same cycle. These other insns can then be taken into account
30991 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx
30993 This hook is called after evaluation forward dependencies of insns
30994 in chain given by two parameter values (HEAD and TAIL
30995 correspondingly) but before insns scheduling of the insn chain.
30996 For example, it can be used for better insn classification if it
30997 requires analysis of dependencies. This hook can use backward and
30998 forward dependencies of the insn scheduler because they are already
31001 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int
31003 This hook is executed by the scheduler at the beginning of each
31004 block of instructions that are to be scheduled. FILE is either a
31005 null pointer, or a stdio stream to write any debug output to.
31006 VERBOSE is the verbose level provided by `-fsched-verbose-N'.
31007 MAX_READY is the maximum number of insns in the current scheduling
31008 region that can be live at the same time. This can be used to
31009 allocate scratch space if it is needed, e.g. by
31010 `TARGET_SCHED_REORDER'.
31012 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE)
31013 This hook is executed by the scheduler at the end of each block of
31014 instructions that are to be scheduled. It can be used to perform
31015 cleanup of any actions done by the other scheduling hooks. FILE
31016 is either a null pointer, or a stdio stream to write any debug
31017 output to. VERBOSE is the verbose level provided by
31018 `-fsched-verbose-N'.
31020 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int
31021 VERBOSE, int OLD_MAX_UID)
31022 This hook is executed by the scheduler after function level
31023 initializations. FILE is either a null pointer, or a stdio stream
31024 to write any debug output to. VERBOSE is the verbose level
31025 provided by `-fsched-verbose-N'. OLD_MAX_UID is the maximum insn
31026 uid when scheduling begins.
31028 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int
31030 This is the cleanup hook corresponding to
31031 `TARGET_SCHED_INIT_GLOBAL'. FILE is either a null pointer, or a
31032 stdio stream to write any debug output to. VERBOSE is the verbose
31033 level provided by `-fsched-verbose-N'.
31035 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
31036 The hook returns an RTL insn. The automaton state used in the
31037 pipeline hazard recognizer is changed as if the insn were scheduled
31038 when the new simulated processor cycle starts. Usage of the hook
31039 may simplify the automaton pipeline description for some VLIW
31040 processors. If the hook is defined, it is used only for the
31041 automaton based pipeline description. The default is not to
31042 change the state when the new simulated processor cycle starts.
31044 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
31045 The hook can be used to initialize data used by the previous hook.
31047 -- Target Hook: rtx TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
31048 The hook is analogous to `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used
31049 to changed the state as if the insn were scheduled when the new
31050 simulated processor cycle finishes.
31052 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
31053 The hook is analogous to `TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but
31054 used to initialize data used by the previous hook.
31056 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
31057 The hook to notify target that the current simulated cycle is
31058 about to finish. The hook is analogous to
31059 `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in
31060 more complicated situations - e.g., when advancing state on a
31061 single insn is not enough.
31063 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
31064 The hook to notify target that new simulated cycle has just
31065 started. The hook is analogous to
31066 `TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in
31067 more complicated situations - e.g., when advancing state on a
31068 single insn is not enough.
31070 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
31072 This hook controls better choosing an insn from the ready insn
31073 queue for the DFA-based insn scheduler. Usually the scheduler
31074 chooses the first insn from the queue. If the hook returns a
31075 positive value, an additional scheduler code tries all
31076 permutations of `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
31077 ()' subsequent ready insns to choose an insn whose issue will
31078 result in maximal number of issued insns on the same cycle. For
31079 the VLIW processor, the code could actually solve the problem of
31080 packing simple insns into the VLIW insn. Of course, if the rules
31081 of VLIW packing are described in the automaton.
31083 This code also could be used for superscalar RISC processors. Let
31084 us consider a superscalar RISC processor with 3 pipelines. Some
31085 insns can be executed in pipelines A or B, some insns can be
31086 executed only in pipelines B or C, and one insn can be executed in
31087 pipeline B. The processor may issue the 1st insn into A and the
31088 2nd one into B. In this case, the 3rd insn will wait for freeing B
31089 until the next cycle. If the scheduler issues the 3rd insn the
31090 first, the processor could issue all 3 insns per cycle.
31092 Actually this code demonstrates advantages of the automaton based
31093 pipeline hazard recognizer. We try quickly and easy many insn
31094 schedules to choose the best one.
31096 The default is no multipass scheduling.
31098 -- Target Hook: int
31099 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx INSN)
31100 This hook controls what insns from the ready insn queue will be
31101 considered for the multipass insn scheduling. If the hook returns
31102 zero for INSN, the insn will be not chosen to be issued.
31104 The default is that any ready insns can be chosen to be issued.
31106 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int
31107 VERBOSE, rtx INSN, int LAST_CLOCK, int CLOCK, int *SORT_P)
31108 This hook is called by the insn scheduler before issuing INSN on
31109 cycle CLOCK. If the hook returns nonzero, INSN is not issued on
31110 this processor cycle. Instead, the processor cycle is advanced.
31111 If *SORT_P is zero, the insn ready queue is not sorted on the new
31112 cycle start as usually. DUMP and VERBOSE specify the file and
31113 verbosity level to use for debugging output. LAST_CLOCK and CLOCK
31114 are, respectively, the processor cycle on which the previous insn
31115 has been issued, and the current processor cycle.
31117 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep
31118 *_DEP, int COST, int DISTANCE)
31119 This hook is used to define which dependences are considered
31120 costly by the target, so costly that it is not advisable to
31121 schedule the insns that are involved in the dependence too close
31122 to one another. The parameters to this hook are as follows: The
31123 first parameter _DEP is the dependence being evaluated. The
31124 second parameter COST is the cost of the dependence as estimated
31125 by the scheduler, and the third parameter DISTANCE is the distance
31126 in cycles between the two insns. The hook returns `true' if
31127 considering the distance between the two insns the dependence
31128 between them is considered costly by the target, and `false'
31131 Defining this hook can be useful in multiple-issue out-of-order
31132 machines, where (a) it's practically hopeless to predict the
31133 actual data/resource delays, however: (b) there's a better chance
31134 to predict the actual grouping that will be formed, and (c)
31135 correctly emulating the grouping can be very important. In such
31136 targets one may want to allow issuing dependent insns closer to
31137 one another--i.e., closer than the dependence distance; however,
31138 not in cases of "costly dependences", which this hooks allows to
31141 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void)
31142 This hook is called by the insn scheduler after emitting a new
31143 instruction to the instruction stream. The hook notifies a target
31144 backend to extend its per instruction data structures.
31146 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void)
31147 Return a pointer to a store large enough to hold target scheduling
31150 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool
31152 Initialize store pointed to by TC to hold target scheduling
31153 context. It CLEAN_P is true then initialize TC as if scheduler is
31154 at the beginning of the block. Otherwise, copy the current
31157 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC)
31158 Copy target scheduling context pointed to by TC to the current
31161 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC)
31162 Deallocate internal data in target scheduling context pointed to
31165 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC)
31166 Deallocate a store for target scheduling context pointed to by TC.
31168 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int
31169 REQUEST, rtx *NEW_PAT)
31170 This hook is called by the insn scheduler when INSN has only
31171 speculative dependencies and therefore can be scheduled
31172 speculatively. The hook is used to check if the pattern of INSN
31173 has a speculative version and, in case of successful check, to
31174 generate that speculative pattern. The hook should return 1, if
31175 the instruction has a speculative form, or -1, if it doesn't.
31176 REQUEST describes the type of requested speculation. If the
31177 return value equals 1 then NEW_PAT is assigned the generated
31178 speculative pattern.
31180 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (int DEP_STATUS)
31181 This hook is called by the insn scheduler during generation of
31182 recovery code for INSN. It should return `true', if the
31183 corresponding check instruction should branch to recovery code, or
31186 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx INSN, rtx LABEL,
31188 This hook is called by the insn scheduler to generate a pattern
31189 for recovery check instruction. If MUTATE_P is zero, then INSN is
31190 a speculative instruction for which the check should be generated.
31191 LABEL is either a label of a basic block, where recovery code
31192 should be emitted, or a null pointer, when requested check doesn't
31193 branch to recovery code (a simple check). If MUTATE_P is nonzero,
31194 then a pattern for a branchy check corresponding to a simple check
31195 denoted by INSN should be generated. In this case LABEL can't be
31198 -- Target Hook: bool
31199 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC (const_rtx
31201 This hook is used as a workaround for
31202 `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being
31203 called on the first instruction of the ready list. The hook is
31204 used to discard speculative instructions that stand first in the
31205 ready list from being scheduled on the current cycle. If the hook
31206 returns `false', INSN will not be chosen to be issued. For
31207 non-speculative instructions, the hook should always return
31208 `true'. For example, in the ia64 backend the hook is used to
31209 cancel data speculative insns when the ALAT table is nearly full.
31211 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct
31212 spec_info_def *SPEC_INFO)
31213 This hook is used by the insn scheduler to find out what features
31214 should be enabled/used. The structure *SPEC_INFO should be filled
31215 in by the target. The structure describes speculation types that
31216 can be used in the scheduler.
31218 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G)
31219 This hook is called by the swing modulo scheduler to calculate a
31220 resource-based lower bound which is based on the resources
31221 available in the machine and the resources required by each
31222 instruction. The target backend can use G to calculate such
31223 bound. A very simple lower bound will be used in case this hook
31224 is not implemented: the total number of instructions divided by
31228 File: gccint.info, Node: Sections, Next: PIC, Prev: Scheduling, Up: Target Macros
31230 17.19 Dividing the Output into Sections (Texts, Data, ...)
31231 ==========================================================
31233 An object file is divided into sections containing different types of
31234 data. In the most common case, there are three sections: the "text
31235 section", which holds instructions and read-only data; the "data
31236 section", which holds initialized writable data; and the "bss section",
31237 which holds uninitialized data. Some systems have other kinds of
31240 `varasm.c' provides several well-known sections, such as
31241 `text_section', `data_section' and `bss_section'. The normal way of
31242 controlling a `FOO_section' variable is to define the associated
31243 `FOO_SECTION_ASM_OP' macro, as described below. The macros are only
31244 read once, when `varasm.c' initializes itself, so their values must be
31245 run-time constants. They may however depend on command-line flags.
31247 _Note:_ Some run-time files, such `crtstuff.c', also make use of the
31248 `FOO_SECTION_ASM_OP' macros, and expect them to be string literals.
31250 Some assemblers require a different string to be written every time a
31251 section is selected. If your assembler falls into this category, you
31252 should define the `TARGET_ASM_INIT_SECTIONS' hook and use
31253 `get_unnamed_section' to set up the sections.
31255 You must always create a `text_section', either by defining
31256 `TEXT_SECTION_ASM_OP' or by initializing `text_section' in
31257 `TARGET_ASM_INIT_SECTIONS'. The same is true of `data_section' and
31258 `DATA_SECTION_ASM_OP'. If you do not create a distinct
31259 `readonly_data_section', the default is to reuse `text_section'.
31261 All the other `varasm.c' sections are optional, and are null if the
31262 target does not provide them.
31264 -- Macro: TEXT_SECTION_ASM_OP
31265 A C expression whose value is a string, including spacing,
31266 containing the assembler operation that should precede
31267 instructions and read-only data. Normally `"\t.text"' is right.
31269 -- Macro: HOT_TEXT_SECTION_NAME
31270 If defined, a C string constant for the name of the section
31271 containing most frequently executed functions of the program. If
31272 not defined, GCC will provide a default definition if the target
31273 supports named sections.
31275 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME
31276 If defined, a C string constant for the name of the section
31277 containing unlikely executed functions in the program.
31279 -- Macro: DATA_SECTION_ASM_OP
31280 A C expression whose value is a string, including spacing,
31281 containing the assembler operation to identify the following data
31282 as writable initialized data. Normally `"\t.data"' is right.
31284 -- Macro: SDATA_SECTION_ASM_OP
31285 If defined, a C expression whose value is a string, including
31286 spacing, containing the assembler operation to identify the
31287 following data as initialized, writable small data.
31289 -- Macro: READONLY_DATA_SECTION_ASM_OP
31290 A C expression whose value is a string, including spacing,
31291 containing the assembler operation to identify the following data
31292 as read-only initialized data.
31294 -- Macro: BSS_SECTION_ASM_OP
31295 If defined, a C expression whose value is a string, including
31296 spacing, containing the assembler operation to identify the
31297 following data as uninitialized global data. If not defined, and
31298 neither `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
31299 uninitialized global data will be output in the data section if
31300 `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
31303 -- Macro: SBSS_SECTION_ASM_OP
31304 If defined, a C expression whose value is a string, including
31305 spacing, containing the assembler operation to identify the
31306 following data as uninitialized, writable small data.
31308 -- Macro: TLS_COMMON_ASM_OP
31309 If defined, a C expression whose value is a string containing the
31310 assembler operation to identify the following data as thread-local
31311 common data. The default is `".tls_common"'.
31313 -- Macro: TLS_SECTION_ASM_FLAG
31314 If defined, a C expression whose value is a character constant
31315 containing the flag used to mark a section as a TLS section. The
31318 -- Macro: INIT_SECTION_ASM_OP
31319 If defined, a C expression whose value is a string, including
31320 spacing, containing the assembler operation to identify the
31321 following data as initialization code. If not defined, GCC will
31322 assume such a section does not exist. This section has no
31323 corresponding `init_section' variable; it is used entirely in
31326 -- Macro: FINI_SECTION_ASM_OP
31327 If defined, a C expression whose value is a string, including
31328 spacing, containing the assembler operation to identify the
31329 following data as finalization code. If not defined, GCC will
31330 assume such a section does not exist. This section has no
31331 corresponding `fini_section' variable; it is used entirely in
31334 -- Macro: INIT_ARRAY_SECTION_ASM_OP
31335 If defined, a C expression whose value is a string, including
31336 spacing, containing the assembler operation to identify the
31337 following data as part of the `.init_array' (or equivalent)
31338 section. If not defined, GCC will assume such a section does not
31339 exist. Do not define both this macro and `INIT_SECTION_ASM_OP'.
31341 -- Macro: FINI_ARRAY_SECTION_ASM_OP
31342 If defined, a C expression whose value is a string, including
31343 spacing, containing the assembler operation to identify the
31344 following data as part of the `.fini_array' (or equivalent)
31345 section. If not defined, GCC will assume such a section does not
31346 exist. Do not define both this macro and `FINI_SECTION_ASM_OP'.
31348 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION)
31349 If defined, an ASM statement that switches to a different section
31350 via SECTION_OP, calls FUNCTION, and switches back to the text
31351 section. This is used in `crtstuff.c' if `INIT_SECTION_ASM_OP' or
31352 `FINI_SECTION_ASM_OP' to calls to initialization and finalization
31353 functions from the init and fini sections. By default, this macro
31354 uses a simple function call. Some ports need hand-crafted
31355 assembly code to avoid dependencies on registers initialized in
31356 the function prologue or to ensure that constant pools don't end
31357 up too far way in the text section.
31359 -- Macro: TARGET_LIBGCC_SDATA_SECTION
31360 If defined, a string which names the section into which small
31361 variables defined in crtstuff and libgcc should go. This is useful
31362 when the target has options for optimizing access to small data,
31363 and you want the crtstuff and libgcc routines to be conservative
31364 in what they expect of your application yet liberal in what your
31365 application expects. For example, for targets with a `.sdata'
31366 section (like MIPS), you could compile crtstuff with `-G 0' so
31367 that it doesn't require small data support from your application,
31368 but use this macro to put small data into `.sdata' so that your
31369 application can access these variables whether it uses small data
31372 -- Macro: FORCE_CODE_SECTION_ALIGN
31373 If defined, an ASM statement that aligns a code section to some
31374 arbitrary boundary. This is used to force all fragments of the
31375 `.init' and `.fini' sections to have to same alignment and thus
31376 prevent the linker from having to add any padding.
31378 -- Macro: JUMP_TABLES_IN_TEXT_SECTION
31379 Define this macro to be an expression with a nonzero value if jump
31380 tables (for `tablejump' insns) should be output in the text
31381 section, along with the assembler instructions. Otherwise, the
31382 readonly data section is used.
31384 This macro is irrelevant if there is no separate readonly data
31387 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void)
31388 Define this hook if you need to do something special to set up the
31389 `varasm.c' sections, or if your target has some special sections
31390 of its own that you need to create.
31392 GCC calls this hook after processing the command line, but before
31393 writing any assembly code, and before calling any of the
31394 section-returning hooks described below.
31396 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void)
31397 Return a mask describing how relocations should be treated when
31398 selecting sections. Bit 1 should be set if global relocations
31399 should be placed in a read-write section; bit 0 should be set if
31400 local relocations should be placed in a read-write section.
31402 The default version of this function returns 3 when `-fpic' is in
31403 effect, and 0 otherwise. The hook is typically redefined when the
31404 target cannot support (some kinds of) dynamic relocations in
31405 read-only sections even in executables.
31407 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int
31408 RELOC, unsigned HOST_WIDE_INT ALIGN)
31409 Return the section into which EXP should be placed. You can
31410 assume that EXP is either a `VAR_DECL' node or a constant of some
31411 sort. RELOC indicates whether the initial value of EXP requires
31412 link-time relocations. Bit 0 is set when variable contains local
31413 relocations only, while bit 1 is set for global relocations.
31414 ALIGN is the constant alignment in bits.
31416 The default version of this function takes care of putting
31417 read-only variables in `readonly_data_section'.
31419 See also USE_SELECT_SECTION_FOR_FUNCTIONS.
31421 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS
31422 Define this macro if you wish TARGET_ASM_SELECT_SECTION to be
31423 called for `FUNCTION_DECL's as well as for variables and constants.
31425 In the case of a `FUNCTION_DECL', RELOC will be zero if the
31426 function has been determined to be likely to be called, and
31427 nonzero if it is unlikely to be called.
31429 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC)
31430 Build up a unique section name, expressed as a `STRING_CST' node,
31431 and assign it to `DECL_SECTION_NAME (DECL)'. As with
31432 `TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial
31433 value of EXP requires link-time relocations.
31435 The default version of this function appends the symbol name to the
31436 ELF section name that would normally be used for the symbol. For
31437 example, the function `foo' would be placed in `.text.foo'.
31438 Whatever the actual target object format, this is often good
31441 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree
31443 Return the readonly data section associated with
31444 `DECL_SECTION_NAME (DECL)'. The default version of this function
31445 selects `.gnu.linkonce.r.name' if the function's section is
31446 `.gnu.linkonce.t.name', `.rodata.name' if function is in
31447 `.text.name', and the normal readonly-data section otherwise.
31449 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum
31450 machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN)
31451 Return the section into which a constant X, of mode MODE, should
31452 be placed. You can assume that X is some kind of constant in RTL.
31453 The argument MODE is redundant except in the case of a
31454 `const_int' rtx. ALIGN is the constant alignment in bits.
31456 The default version of this function takes care of putting symbolic
31457 constants in `flag_pic' mode in `data_section' and everything else
31458 in `readonly_data_section'.
31460 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL,
31462 Define this hook if you need to postprocess the assembler name
31463 generated by target-independent code. The ID provided to this
31464 hook will be the computed name (e.g., the macro `DECL_NAME' of the
31465 DECL in C, or the mangled name of the DECL in C++). The return
31466 value of the hook is an `IDENTIFIER_NODE' for the appropriate
31467 mangled name on your target system. The default implementation of
31468 this hook just returns the ID provided.
31470 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL,
31472 Define this hook if references to a symbol or a constant must be
31473 treated differently depending on something about the variable or
31474 function named by the symbol (such as what section it is in).
31476 The hook is executed immediately after rtl has been created for
31477 DECL, which may be a variable or function declaration or an entry
31478 in the constant pool. In either case, RTL is the rtl in question.
31479 Do _not_ use `DECL_RTL (DECL)' in this hook; that field may not
31480 have been initialized yet.
31482 In the case of a constant, it is safe to assume that the rtl is a
31483 `mem' whose address is a `symbol_ref'. Most decls will also have
31484 this form, but that is not guaranteed. Global register variables,
31485 for instance, will have a `reg' for their rtl. (Normally the
31486 right thing to do with such unusual rtl is leave it alone.)
31488 The NEW_DECL_P argument will be true if this is the first time
31489 that `TARGET_ENCODE_SECTION_INFO' has been invoked on this decl.
31490 It will be false for subsequent invocations, which will happen for
31491 duplicate declarations. Whether or not anything must be done for
31492 the duplicate declaration depends on whether the hook examines
31493 `DECL_ATTRIBUTES'. NEW_DECL_P is always true when the hook is
31494 called for a constant.
31496 The usual thing for this hook to do is to record flags in the
31497 `symbol_ref', using `SYMBOL_REF_FLAG' or `SYMBOL_REF_FLAGS'.
31498 Historically, the name string was modified if it was necessary to
31499 encode more than one bit of information, but this practice is now
31500 discouraged; use `SYMBOL_REF_FLAGS'.
31502 The default definition of this hook, `default_encode_section_info'
31503 in `varasm.c', sets a number of commonly-useful bits in
31504 `SYMBOL_REF_FLAGS'. Check whether the default does what you need
31505 before overriding it.
31507 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char
31509 Decode NAME and return the real name part, sans the characters
31510 that `TARGET_ENCODE_SECTION_INFO' may have added.
31512 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP)
31513 Returns true if EXP should be placed into a "small data" section.
31514 The default version of this hook always returns false.
31516 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION
31517 Contains the value true if the target places read-only "small
31518 data" into a separate section. The default value is false.
31520 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP)
31521 Returns true if EXP names an object for which name resolution
31522 rules must resolve to the current "module" (dynamic shared library
31523 or executable image).
31525 The default version of this hook implements the name resolution
31526 rules for ELF, which has a looser model of global name binding
31527 than other currently supported object file formats.
31529 -- Target Hook: bool TARGET_HAVE_TLS
31530 Contains the value true if the target supports thread-local
31531 storage. The default value is false.
31534 File: gccint.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros
31536 17.20 Position Independent Code
31537 ===============================
31539 This section describes macros that help implement generation of position
31540 independent code. Simply defining these macros is not enough to
31541 generate valid PIC; you must also add support to the hook
31542 `TARGET_LEGITIMATE_ADDRESS_P' and to the macro `PRINT_OPERAND_ADDRESS',
31543 as well as `LEGITIMIZE_ADDRESS'. You must modify the definition of
31544 `movsi' to do something appropriate when the source operand contains a
31545 symbolic address. You may also need to alter the handling of switch
31546 statements so that they use relative addresses.
31548 -- Macro: PIC_OFFSET_TABLE_REGNUM
31549 The register number of the register used to address a table of
31550 static data addresses in memory. In some cases this register is
31551 defined by a processor's "application binary interface" (ABI).
31552 When this macro is defined, RTL is generated for this register
31553 once, as with the stack pointer and frame pointer registers. If
31554 this macro is not defined, it is up to the machine-dependent files
31555 to allocate such a register (if necessary). Note that this
31556 register must be fixed when in use (e.g. when `flag_pic' is true).
31558 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
31559 Define this macro if the register defined by
31560 `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. Do not define
31561 this macro if `PIC_OFFSET_TABLE_REGNUM' is not defined.
31563 -- Macro: LEGITIMATE_PIC_OPERAND_P (X)
31564 A C expression that is nonzero if X is a legitimate immediate
31565 operand on the target machine when generating position independent
31566 code. You can assume that X satisfies `CONSTANT_P', so you need
31567 not check this. You can also assume FLAG_PIC is true, so you need
31568 not check it either. You need not define this macro if all
31569 constants (including `SYMBOL_REF') can be immediate operands when
31570 generating position independent code.
31573 File: gccint.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros
31575 17.21 Defining the Output Assembler Language
31576 ============================================
31578 This section describes macros whose principal purpose is to describe how
31579 to write instructions in assembler language--rather than what the
31584 * File Framework:: Structural information for the assembler file.
31585 * Data Output:: Output of constants (numbers, strings, addresses).
31586 * Uninitialized Data:: Output of uninitialized variables.
31587 * Label Output:: Output and generation of labels.
31588 * Initialization:: General principles of initialization
31589 and termination routines.
31590 * Macros for Initialization::
31591 Specific macros that control the handling of
31592 initialization and termination routines.
31593 * Instruction Output:: Output of actual instructions.
31594 * Dispatch Tables:: Output of jump tables.
31595 * Exception Region Output:: Output of exception region code.
31596 * Alignment Output:: Pseudo ops for alignment and skipping data.
31599 File: gccint.info, Node: File Framework, Next: Data Output, Up: Assembler Format
31601 17.21.1 The Overall Framework of an Assembler File
31602 --------------------------------------------------
31604 This describes the overall framework of an assembly file.
31606 -- Target Hook: void TARGET_ASM_FILE_START (void)
31607 Output to `asm_out_file' any text which the assembler expects to
31608 find at the beginning of a file. The default behavior is
31609 controlled by two flags, documented below. Unless your target's
31610 assembler is quite unusual, if you override the default, you
31611 should call `default_file_start' at some point in your target
31612 hook. This lets other target files rely on these variables.
31614 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF
31615 If this flag is true, the text of the macro `ASM_APP_OFF' will be
31616 printed as the very first line in the assembly file, unless
31617 `-fverbose-asm' is in effect. (If that macro has been defined to
31618 the empty string, this variable has no effect.) With the normal
31619 definition of `ASM_APP_OFF', the effect is to notify the GNU
31620 assembler that it need not bother stripping comments or extra
31621 whitespace from its input. This allows it to work a bit faster.
31623 The default is false. You should not set it to true unless you
31624 have verified that your port does not generate any extra
31625 whitespace or comments that will cause GAS to issue errors in
31628 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
31629 If this flag is true, `output_file_directive' will be called for
31630 the primary source file, immediately after printing `ASM_APP_OFF'
31631 (if that is enabled). Most ELF assemblers expect this to be done.
31632 The default is false.
31634 -- Target Hook: void TARGET_ASM_FILE_END (void)
31635 Output to `asm_out_file' any text which the assembler expects to
31636 find at the end of a file. The default is to output nothing.
31638 -- Function: void file_end_indicate_exec_stack ()
31639 Some systems use a common convention, the `.note.GNU-stack'
31640 special section, to indicate whether or not an object file relies
31641 on the stack being executable. If your system uses this
31642 convention, you should define `TARGET_ASM_FILE_END' to this
31643 function. If you need to do other things in that hook, have your
31644 hook function call this function.
31646 -- Target Hook: void TARGET_ASM_LTO_START (void)
31647 Output to `asm_out_file' any text which the assembler expects to
31648 find at the start of an LTO section. The default is to output
31651 -- Target Hook: void TARGET_ASM_LTO_END (void)
31652 Output to `asm_out_file' any text which the assembler expects to
31653 find at the end of an LTO section. The default is to output
31656 -- Target Hook: void TARGET_ASM_CODE_END (void)
31657 Output to `asm_out_file' any text which is needed before emitting
31658 unwind info and debug info at the end of a file. Some targets emit
31659 here PIC setup thunks that cannot be emitted at the end of file,
31660 because they couldn't have unwind info then. The default is to
31663 -- Macro: ASM_COMMENT_START
31664 A C string constant describing how to begin a comment in the target
31665 assembler language. The compiler assumes that the comment will
31666 end at the end of the line.
31668 -- Macro: ASM_APP_ON
31669 A C string constant for text to be output before each `asm'
31670 statement or group of consecutive ones. Normally this is
31671 `"#APP"', which is a comment that has no effect on most assemblers
31672 but tells the GNU assembler that it must check the lines that
31673 follow for all valid assembler constructs.
31675 -- Macro: ASM_APP_OFF
31676 A C string constant for text to be output after each `asm'
31677 statement or group of consecutive ones. Normally this is
31678 `"#NO_APP"', which tells the GNU assembler to resume making the
31679 time-saving assumptions that are valid for ordinary compiler
31682 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)
31683 A C statement to output COFF information or DWARF debugging
31684 information which indicates that filename NAME is the current
31685 source file to the stdio stream STREAM.
31687 This macro need not be defined if the standard form of output for
31688 the file format in use is appropriate.
31690 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING)
31691 A C statement to output the string STRING to the stdio stream
31692 STREAM. If you do not call the function `output_quoted_string' in
31693 your config files, GCC will only call it to output filenames to
31694 the assembler source. So you can use it to canonicalize the format
31695 of the filename using this macro.
31697 -- Macro: ASM_OUTPUT_IDENT (STREAM, STRING)
31698 A C statement to output something to the assembler file to handle a
31699 `#ident' directive containing the text STRING. If this macro is
31700 not defined, nothing is output for a `#ident' directive.
31702 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME,
31703 unsigned int FLAGS, tree DECL)
31704 Output assembly directives to switch to section NAME. The section
31705 should have attributes as specified by FLAGS, which is a bit mask
31706 of the `SECTION_*' flags defined in `output.h'. If DECL is
31707 non-NULL, it is the `VAR_DECL' or `FUNCTION_DECL' with which this
31708 section is associated.
31710 -- Target Hook: bool TARGET_HAVE_NAMED_SECTIONS
31711 This flag is true if the target supports
31712 `TARGET_ASM_NAMED_SECTION'.
31714 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
31715 This flag is true if we can create zeroed data by switching to a
31716 BSS section and then using `ASM_OUTPUT_SKIP' to allocate the space.
31717 This is true on most ELF targets.
31719 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL,
31720 const char *NAME, int RELOC)
31721 Choose a set of section attributes for use by
31722 `TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a
31723 section name, and whether or not the declaration's initializer may
31724 contain runtime relocations. DECL may be null, in which case
31725 read-write data should be assumed.
31727 The default version of this function handles choosing code vs data,
31728 read-only vs read-write data, and `flag_pic'. You should only
31729 need to override this if your target has special flags that might
31730 be set via `__attribute__'.
31732 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type
31733 TYPE, const char *TEXT)
31734 Provides the target with the ability to record the gcc command line
31735 switches that have been passed to the compiler, and options that
31736 are enabled. The TYPE argument specifies what is being recorded.
31737 It can take the following values:
31739 `SWITCH_TYPE_PASSED'
31740 TEXT is a command line switch that has been set by the user.
31742 `SWITCH_TYPE_ENABLED'
31743 TEXT is an option which has been enabled. This might be as a
31744 direct result of a command line switch, or because it is
31745 enabled by default or because it has been enabled as a side
31746 effect of a different command line switch. For example, the
31747 `-O2' switch enables various different individual
31748 optimization passes.
31750 `SWITCH_TYPE_DESCRIPTIVE'
31751 TEXT is either NULL or some descriptive text which should be
31752 ignored. If TEXT is NULL then it is being used to warn the
31753 target hook that either recording is starting or ending. The
31754 first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL,
31755 the warning is for start up and the second time the warning
31756 is for wind down. This feature is to allow the target hook
31757 to make any necessary preparations before it starts to record
31758 switches and to perform any necessary tidying up after it has
31759 finished recording switches.
31761 `SWITCH_TYPE_LINE_START'
31762 This option can be ignored by this target hook.
31764 `SWITCH_TYPE_LINE_END'
31765 This option can be ignored by this target hook.
31767 The hook's return value must be zero. Other return values may be
31768 supported in the future.
31770 By default this hook is set to NULL, but an example implementation
31771 is provided for ELF based targets. Called ELF_RECORD_GCC_SWITCHES,
31772 it records the switches as ASCII text inside a new, string
31773 mergeable section in the assembler output file. The name of the
31774 new section is provided by the
31775 `TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook.
31777 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
31778 This is the name of the section that will be created by the example
31779 ELF implementation of the `TARGET_ASM_RECORD_GCC_SWITCHES' target
31783 File: gccint.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format
31785 17.21.2 Output of Data
31786 ----------------------
31788 -- Target Hook: const char * TARGET_ASM_BYTE_OP
31789 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP
31790 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP
31791 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP
31792 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP
31793 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP
31794 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP
31795 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP
31796 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP
31797 These hooks specify assembly directives for creating certain kinds
31798 of integer object. The `TARGET_ASM_BYTE_OP' directive creates a
31799 byte-sized object, the `TARGET_ASM_ALIGNED_HI_OP' one creates an
31800 aligned two-byte object, and so on. Any of the hooks may be
31801 `NULL', indicating that no suitable directive is available.
31803 The compiler will print these strings at the start of a new line,
31804 followed immediately by the object's initial value. In most cases,
31805 the string should contain a tab, a pseudo-op, and then another tab.
31807 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int
31809 The `assemble_integer' function uses this hook to output an
31810 integer object. X is the object's value, SIZE is its size in
31811 bytes and ALIGNED_P indicates whether it is aligned. The function
31812 should return `true' if it was able to output the object. If it
31813 returns false, `assemble_integer' will try to split the object
31814 into smaller parts.
31816 The default implementation of this hook will use the
31817 `TARGET_ASM_BYTE_OP' family of strings, returning `false' when the
31818 relevant string is `NULL'.
31820 -- Macro: OUTPUT_ADDR_CONST_EXTRA (STREAM, X, FAIL)
31821 A C statement to recognize RTX patterns that `output_addr_const'
31822 can't deal with, and output assembly code to STREAM corresponding
31823 to the pattern X. This may be used to allow machine-dependent
31824 `UNSPEC's to appear within constants.
31826 If `OUTPUT_ADDR_CONST_EXTRA' fails to recognize a pattern, it must
31827 `goto fail', so that a standard error message is printed. If it
31828 prints an error message itself, by calling, for example,
31829 `output_operand_lossage', it may just complete normally.
31831 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN)
31832 A C statement to output to the stdio stream STREAM an assembler
31833 instruction to assemble a string constant containing the LEN bytes
31834 at PTR. PTR will be a C expression of type `char *' and LEN a C
31835 expression of type `int'.
31837 If the assembler has a `.ascii' pseudo-op as found in the Berkeley
31838 Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'.
31840 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N)
31841 A C statement to output word N of a function descriptor for DECL.
31842 This must be defined if `TARGET_VTABLE_USES_DESCRIPTORS' is
31843 defined, and is otherwise unused.
31845 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION
31846 You may define this macro as a C expression. You should define the
31847 expression to have a nonzero value if GCC should output the
31848 constant pool for a function before the code for the function, or
31849 a zero value if GCC should output the constant pool after the
31850 function. If you do not define this macro, the usual case, GCC
31851 will output the constant pool before the function.
31853 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE)
31854 A C statement to output assembler commands to define the start of
31855 the constant pool for a function. FUNNAME is a string giving the
31856 name of the function. Should the return type of the function be
31857 required, it can be obtained via FUNDECL. SIZE is the size, in
31858 bytes, of the constant pool that will be written immediately after
31861 If no constant-pool prefix is required, the usual case, this macro
31862 need not be defined.
31864 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN,
31866 A C statement (with or without semicolon) to output a constant in
31867 the constant pool, if it needs special treatment. (This macro
31868 need not do anything for RTL expressions that can be output
31871 The argument FILE is the standard I/O stream to output the
31872 assembler code on. X is the RTL expression for the constant to
31873 output, and MODE is the machine mode (in case X is a `const_int').
31874 ALIGN is the required alignment for the value X; you should
31875 output an assembler directive to force this much alignment.
31877 The argument LABELNO is a number to use in an internal label for
31878 the address of this pool entry. The definition of this macro is
31879 responsible for outputting the label definition at the proper
31880 place. Here is how to do this:
31882 `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO);
31884 When you output a pool entry specially, you should end with a
31885 `goto' to the label JUMPTO. This will prevent the same pool entry
31886 from being output a second time in the usual manner.
31888 You need not define this macro if it would do nothing.
31890 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE)
31891 A C statement to output assembler commands to at the end of the
31892 constant pool for a function. FUNNAME is a string giving the name
31893 of the function. Should the return type of the function be
31894 required, you can obtain it via FUNDECL. SIZE is the size, in
31895 bytes, of the constant pool that GCC wrote immediately before this
31898 If no constant-pool epilogue is required, the usual case, you need
31899 not define this macro.
31901 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR)
31902 Define this macro as a C expression which is nonzero if C is used
31903 as a logical line separator by the assembler. STR points to the
31904 position in the string where C was found; this can be used if a
31905 line separator uses multiple characters.
31907 If you do not define this macro, the default is that only the
31908 character `;' is treated as a logical line separator.
31910 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN
31911 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN
31912 These target hooks are C string constants, describing the syntax
31913 in the assembler for grouping arithmetic expressions. If not
31914 overridden, they default to normal parentheses, which is correct
31915 for most assemblers.
31917 These macros are provided by `real.h' for writing the definitions of
31918 `ASM_OUTPUT_DOUBLE' and the like:
31920 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L)
31921 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L)
31922 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)
31923 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L)
31924 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L)
31925 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L)
31926 These translate X, of type `REAL_VALUE_TYPE', to the target's
31927 floating point representation, and store its bit pattern in the
31928 variable L. For `REAL_VALUE_TO_TARGET_SINGLE' and
31929 `REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple
31930 `long int'. For the others, it should be an array of `long int'.
31931 The number of elements in this array is determined by the size of
31932 the desired target floating point data type: 32 bits of it go in
31933 each `long int' array element. Each array element holds 32 bits
31934 of the result, even if `long int' is wider than 32 bits on the
31937 The array element values are designed so that you can print them
31938 out using `fprintf' in the order they should appear in the target
31942 File: gccint.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format
31944 17.21.3 Output of Uninitialized Variables
31945 -----------------------------------------
31947 Each of the macros in this section is used to do the whole job of
31948 outputting a single uninitialized variable.
31950 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)
31951 A C statement (sans semicolon) to output to the stdio stream
31952 STREAM the assembler definition of a common-label named NAME whose
31953 size is SIZE bytes. The variable ROUNDED is the size rounded up
31954 to whatever alignment the caller wants. It is possible that SIZE
31955 may be zero, for instance if a struct with no other member than a
31956 zero-length array is defined. In this case, the backend must
31957 output a symbol definition that allocates at least one byte, both
31958 so that the address of the resulting object does not compare equal
31959 to any other, and because some object formats cannot even express
31960 the concept of a zero-sized common symbol, as that is how they
31961 represent an ordinary undefined external.
31963 Use the expression `assemble_name (STREAM, NAME)' to output the
31964 name itself; before and after that, output the additional
31965 assembler syntax for defining the name, and a newline.
31967 This macro controls how the assembler definitions of uninitialized
31968 common global variables are output.
31970 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)
31971 Like `ASM_OUTPUT_COMMON' except takes the required alignment as a
31972 separate, explicit argument. If you define this macro, it is used
31973 in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in
31974 handling the required alignment of the variable. The alignment is
31975 specified as the number of bits.
31977 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE,
31979 Like `ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable
31980 to be output, if there is one, or `NULL_TREE' if there is no
31981 corresponding variable. If you define this macro, GCC will use it
31982 in place of both `ASM_OUTPUT_COMMON' and
31983 `ASM_OUTPUT_ALIGNED_COMMON'. Define this macro when you need to
31984 see the variable's decl in order to chose what to output.
31986 -- Macro: ASM_OUTPUT_BSS (STREAM, DECL, NAME, SIZE, ROUNDED)
31987 A C statement (sans semicolon) to output to the stdio stream
31988 STREAM the assembler definition of uninitialized global DECL named
31989 NAME whose size is SIZE bytes. The variable ROUNDED is the size
31990 rounded up to whatever alignment the caller wants.
31992 Try to use function `asm_output_bss' defined in `varasm.c' when
31993 defining this macro. If unable, use the expression `assemble_name
31994 (STREAM, NAME)' to output the name itself; before and after that,
31995 output the additional assembler syntax for defining the name, and
31998 There are two ways of handling global BSS. One is to define either
31999 this macro or its aligned counterpart, `ASM_OUTPUT_ALIGNED_BSS'.
32000 The other is to have `TARGET_ASM_SELECT_SECTION' return a
32001 switchable BSS section (*note
32002 TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::). You do not need to do
32005 Some languages do not have `common' data, and require a non-common
32006 form of global BSS in order to handle uninitialized globals
32007 efficiently. C++ is one example of this. However, if the target
32008 does not support global BSS, the front end may choose to make
32009 globals common in order to save space in the object file.
32011 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT)
32012 Like `ASM_OUTPUT_BSS' except takes the required alignment as a
32013 separate, explicit argument. If you define this macro, it is used
32014 in place of `ASM_OUTPUT_BSS', and gives you more flexibility in
32015 handling the required alignment of the variable. The alignment is
32016 specified as the number of bits.
32018 Try to use function `asm_output_aligned_bss' defined in file
32019 `varasm.c' when defining this macro.
32021 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)
32022 A C statement (sans semicolon) to output to the stdio stream
32023 STREAM the assembler definition of a local-common-label named NAME
32024 whose size is SIZE bytes. The variable ROUNDED is the size
32025 rounded up to whatever alignment the caller wants.
32027 Use the expression `assemble_name (STREAM, NAME)' to output the
32028 name itself; before and after that, output the additional
32029 assembler syntax for defining the name, and a newline.
32031 This macro controls how the assembler definitions of uninitialized
32032 static variables are output.
32034 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)
32035 Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a
32036 separate, explicit argument. If you define this macro, it is used
32037 in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in
32038 handling the required alignment of the variable. The alignment is
32039 specified as the number of bits.
32041 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE,
32043 Like `ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to
32044 be output, if there is one, or `NULL_TREE' if there is no
32045 corresponding variable. If you define this macro, GCC will use it
32046 in place of both `ASM_OUTPUT_DECL' and `ASM_OUTPUT_ALIGNED_DECL'.
32047 Define this macro when you need to see the variable's decl in
32048 order to chose what to output.
32051 File: gccint.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format
32053 17.21.4 Output and Generation of Labels
32054 ---------------------------------------
32056 This is about outputting labels.
32058 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME)
32059 A C statement (sans semicolon) to output to the stdio stream
32060 STREAM the assembler definition of a label named NAME. Use the
32061 expression `assemble_name (STREAM, NAME)' to output the name
32062 itself; before and after that, output the additional assembler
32063 syntax for defining the name, and a newline. A default definition
32064 of this macro is provided which is correct for most systems.
32066 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME)
32067 Identical to `ASM_OUTPUT_LABEL', except that NAME is known to
32068 refer to a compiler-generated label. The default definition uses
32069 `assemble_name_raw', which is like `assemble_name' except that it
32072 -- Macro: SIZE_ASM_OP
32073 A C string containing the appropriate assembler directive to
32074 specify the size of a symbol, without any arguments. On systems
32075 that use ELF, the default (in `config/elfos.h') is `"\t.size\t"';
32076 on other systems, the default is not to define this macro.
32078 Define this macro only if it is correct to use the default
32079 definitions of `ASM_OUTPUT_SIZE_DIRECTIVE' and
32080 `ASM_OUTPUT_MEASURED_SIZE' for your system. If you need your own
32081 custom definitions of those macros, or if you do not need explicit
32082 symbol sizes at all, do not define this macro.
32084 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE)
32085 A C statement (sans semicolon) to output to the stdio stream
32086 STREAM a directive telling the assembler that the size of the
32087 symbol NAME is SIZE. SIZE is a `HOST_WIDE_INT'. If you define
32088 `SIZE_ASM_OP', a default definition of this macro is provided.
32090 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME)
32091 A C statement (sans semicolon) to output to the stdio stream
32092 STREAM a directive telling the assembler to calculate the size of
32093 the symbol NAME by subtracting its address from the current
32096 If you define `SIZE_ASM_OP', a default definition of this macro is
32097 provided. The default assumes that the assembler recognizes a
32098 special `.' symbol as referring to the current address, and can
32099 calculate the difference between this and another symbol. If your
32100 assembler does not recognize `.' or cannot do calculations with
32101 it, you will need to redefine `ASM_OUTPUT_MEASURED_SIZE' to use
32102 some other technique.
32104 -- Macro: TYPE_ASM_OP
32105 A C string containing the appropriate assembler directive to
32106 specify the type of a symbol, without any arguments. On systems
32107 that use ELF, the default (in `config/elfos.h') is `"\t.type\t"';
32108 on other systems, the default is not to define this macro.
32110 Define this macro only if it is correct to use the default
32111 definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you
32112 need your own custom definition of this macro, or if you do not
32113 need explicit symbol types at all, do not define this macro.
32115 -- Macro: TYPE_OPERAND_FMT
32116 A C string which specifies (using `printf' syntax) the format of
32117 the second operand to `TYPE_ASM_OP'. On systems that use ELF, the
32118 default (in `config/elfos.h') is `"@%s"'; on other systems, the
32119 default is not to define this macro.
32121 Define this macro only if it is correct to use the default
32122 definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you
32123 need your own custom definition of this macro, or if you do not
32124 need explicit symbol types at all, do not define this macro.
32126 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE)
32127 A C statement (sans semicolon) to output to the stdio stream
32128 STREAM a directive telling the assembler that the type of the
32129 symbol NAME is TYPE. TYPE is a C string; currently, that string
32130 is always either `"function"' or `"object"', but you should not
32133 If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default
32134 definition of this macro is provided.
32136 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)
32137 A C statement (sans semicolon) to output to the stdio stream
32138 STREAM any text necessary for declaring the name NAME of a
32139 function which is being defined. This macro is responsible for
32140 outputting the label definition (perhaps using
32141 `ASM_OUTPUT_LABEL'). The argument DECL is the `FUNCTION_DECL'
32142 tree node representing the function.
32144 If this macro is not defined, then the function name is defined in
32145 the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
32147 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
32150 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)
32151 A C statement (sans semicolon) to output to the stdio stream
32152 STREAM any text necessary for declaring the size of a function
32153 which is being defined. The argument NAME is the name of the
32154 function. The argument DECL is the `FUNCTION_DECL' tree node
32155 representing the function.
32157 If this macro is not defined, then the function size is not
32160 You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition
32163 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)
32164 A C statement (sans semicolon) to output to the stdio stream
32165 STREAM any text necessary for declaring the name NAME of an
32166 initialized variable which is being defined. This macro must
32167 output the label definition (perhaps using `ASM_OUTPUT_LABEL').
32168 The argument DECL is the `VAR_DECL' tree node representing the
32171 If this macro is not defined, then the variable name is defined in
32172 the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
32174 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or
32175 `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro.
32177 -- Macro: ASM_DECLARE_CONSTANT_NAME (STREAM, NAME, EXP, SIZE)
32178 A C statement (sans semicolon) to output to the stdio stream
32179 STREAM any text necessary for declaring the name NAME of a
32180 constant which is being defined. This macro is responsible for
32181 outputting the label definition (perhaps using
32182 `ASM_OUTPUT_LABEL'). The argument EXP is the value of the
32183 constant, and SIZE is the size of the constant in bytes. NAME
32184 will be an internal label.
32186 If this macro is not defined, then the NAME is defined in the
32187 usual manner as a label (by means of `ASM_OUTPUT_LABEL').
32189 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition
32192 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME)
32193 A C statement (sans semicolon) to output to the stdio stream
32194 STREAM any text necessary for claiming a register REGNO for a
32195 global variable DECL with name NAME.
32197 If you don't define this macro, that is equivalent to defining it
32200 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)
32201 A C statement (sans semicolon) to finish up declaring a variable
32202 name once the compiler has processed its initializer fully and
32203 thus has had a chance to determine the size of an array when
32204 controlled by an initializer. This is used on systems where it's
32205 necessary to declare something about the size of the object.
32207 If you don't define this macro, that is equivalent to defining it
32210 You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or
32211 `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro.
32213 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const
32215 This target hook is a function to output to the stdio stream
32216 STREAM some commands that will make the label NAME global; that
32217 is, available for reference from other files.
32219 The default implementation relies on a proper definition of
32222 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM,
32224 This target hook is a function to output to the stdio stream
32225 STREAM some commands that will make the name associated with DECL
32226 global; that is, available for reference from other files.
32228 The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL
32231 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME)
32232 A C statement (sans semicolon) to output to the stdio stream
32233 STREAM some commands that will make the label NAME weak; that is,
32234 available for reference from other files but only used if no other
32235 definition is available. Use the expression `assemble_name
32236 (STREAM, NAME)' to output the name itself; before and after that,
32237 output the additional assembler syntax for making that name weak,
32240 If you don't define this macro or `ASM_WEAKEN_DECL', GCC will not
32241 support weak symbols and you should not define the `SUPPORTS_WEAK'
32244 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE)
32245 Combines (and replaces) the function of `ASM_WEAKEN_LABEL' and
32246 `ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function
32247 or variable decl. If VALUE is not `NULL', this C statement should
32248 output to the stdio stream STREAM assembler code which defines
32249 (equates) the weak symbol NAME to have the value VALUE. If VALUE
32250 is `NULL', it should output commands to make NAME weak.
32252 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE)
32253 Outputs a directive that enables NAME to be used to refer to
32254 symbol VALUE with weak-symbol semantics. `decl' is the
32255 declaration of `name'.
32257 -- Macro: SUPPORTS_WEAK
32258 A C expression which evaluates to true if the target supports weak
32261 If you don't define this macro, `defaults.h' provides a default
32262 definition. If either `ASM_WEAKEN_LABEL' or `ASM_WEAKEN_DECL' is
32263 defined, the default definition is `1'; otherwise, it is `0'.
32264 Define this macro if you want to control weak symbol support with
32265 a compiler flag such as `-melf'.
32267 -- Macro: MAKE_DECL_ONE_ONLY (DECL)
32268 A C statement (sans semicolon) to mark DECL to be emitted as a
32269 public symbol such that extra copies in multiple translation units
32270 will be discarded by the linker. Define this macro if your object
32271 file format provides support for this concept, such as the `COMDAT'
32272 section flags in the Microsoft Windows PE/COFF format, and this
32273 support requires changes to DECL, such as putting it in a separate
32276 -- Macro: SUPPORTS_ONE_ONLY
32277 A C expression which evaluates to true if the target supports
32278 one-only semantics.
32280 If you don't define this macro, `varasm.c' provides a default
32281 definition. If `MAKE_DECL_ONE_ONLY' is defined, the default
32282 definition is `1'; otherwise, it is `0'. Define this macro if you
32283 want to control one-only symbol support with a compiler flag, or if
32284 setting the `DECL_ONE_ONLY' flag is enough to mark a declaration to
32285 be emitted as one-only.
32287 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int
32289 This target hook is a function to output to ASM_OUT_FILE some
32290 commands that will make the symbol(s) associated with DECL have
32291 hidden, protected or internal visibility as specified by
32294 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC
32295 A C expression that evaluates to true if the target's linker
32296 expects that weak symbols do not appear in a static archive's
32297 table of contents. The default is `0'.
32299 Leaving weak symbols out of an archive's table of contents means
32300 that, if a symbol will only have a definition in one translation
32301 unit and will have undefined references from other translation
32302 units, that symbol should not be weak. Defining this macro to be
32303 nonzero will thus have the effect that certain symbols that would
32304 normally be weak (explicit template instantiations, and vtables
32305 for polymorphic classes with noninline key methods) will instead
32308 The C++ ABI requires this macro to be zero. Define this macro for
32309 targets where full C++ ABI compliance is impossible and where
32310 linker restrictions require weak symbols to be left out of a
32311 static archive's table of contents.
32313 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)
32314 A C statement (sans semicolon) to output to the stdio stream
32315 STREAM any text necessary for declaring the name of an external
32316 symbol named NAME which is referenced in this compilation but not
32317 defined. The value of DECL is the tree node for the declaration.
32319 This macro need not be defined if it does not need to output
32320 anything. The GNU assembler and most Unix assemblers don't
32323 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF)
32324 This target hook is a function to output to ASM_OUT_FILE an
32325 assembler pseudo-op to declare a library function name external.
32326 The name of the library function is given by SYMREF, which is a
32329 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char
32331 This target hook is a function to output to ASM_OUT_FILE an
32332 assembler directive to annotate SYMBOL as used. The Darwin target
32333 uses the .no_dead_code_strip directive.
32335 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME)
32336 A C statement (sans semicolon) to output to the stdio stream
32337 STREAM a reference in assembler syntax to a label named NAME.
32338 This should add `_' to the front of the name, if that is customary
32339 on your operating system, as it is in most Berkeley Unix systems.
32340 This macro is used in `assemble_name'.
32342 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM)
32343 A C statement (sans semicolon) to output a reference to
32344 `SYMBOL_REF' SYM. If not defined, `assemble_name' will be used to
32345 output the name of the symbol. This macro may be used to modify
32346 the way a symbol is referenced depending on information encoded by
32347 `TARGET_ENCODE_SECTION_INFO'.
32349 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF)
32350 A C statement (sans semicolon) to output a reference to BUF, the
32351 result of `ASM_GENERATE_INTERNAL_LABEL'. If not defined,
32352 `assemble_name' will be used to output the name of the symbol.
32353 This macro is not used by `output_asm_label', or the `%l'
32354 specifier that calls it; the intention is that this macro should
32355 be set when it is necessary to output a label differently when its
32356 address is being taken.
32358 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const
32359 char *PREFIX, unsigned long LABELNO)
32360 A function to output to the stdio stream STREAM a label whose name
32361 is made from the string PREFIX and the number LABELNO.
32363 It is absolutely essential that these labels be distinct from the
32364 labels used for user-level functions and variables. Otherwise,
32365 certain programs will have name conflicts with internal labels.
32367 It is desirable to exclude internal labels from the symbol table
32368 of the object file. Most assemblers have a naming convention for
32369 labels that should be excluded; on many systems, the letter `L' at
32370 the beginning of a label has this effect. You should find out what
32371 convention your system uses, and follow it.
32373 The default version of this function utilizes
32374 `ASM_GENERATE_INTERNAL_LABEL'.
32376 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM)
32377 A C statement to output to the stdio stream STREAM a debug info
32378 label whose name is made from the string PREFIX and the number
32379 NUM. This is useful for VLIW targets, where debug info labels may
32380 need to be treated differently than branch target labels. On some
32381 systems, branch target labels must be at the beginning of
32382 instruction bundles, but debug info labels can occur in the middle
32383 of instruction bundles.
32385 If this macro is not defined, then
32386 `(*targetm.asm_out.internal_label)' will be used.
32388 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)
32389 A C statement to store into the string STRING a label whose name
32390 is made from the string PREFIX and the number NUM.
32392 This string, when output subsequently by `assemble_name', should
32393 produce the output that `(*targetm.asm_out.internal_label)' would
32394 produce with the same PREFIX and NUM.
32396 If the string begins with `*', then `assemble_name' will output
32397 the rest of the string unchanged. It is often convenient for
32398 `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way. If the
32399 string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to
32400 output the string, and may change it. (Of course,
32401 `ASM_OUTPUT_LABELREF' is also part of your machine description, so
32402 you should know what it does on your machine.)
32404 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)
32405 A C expression to assign to OUTVAR (which is a variable of type
32406 `char *') a newly allocated string made from the string NAME and
32407 the number NUMBER, with some suitable punctuation added. Use
32408 `alloca' to get space for the string.
32410 The string will be used as an argument to `ASM_OUTPUT_LABELREF' to
32411 produce an assembler label for an internal static variable whose
32412 name is NAME. Therefore, the string must be such as to result in
32413 valid assembler code. The argument NUMBER is different each time
32414 this macro is executed; it prevents conflicts between
32415 similarly-named internal static variables in different scopes.
32417 Ideally this string should not be a valid C identifier, to prevent
32418 any conflict with the user's own symbols. Most assemblers allow
32419 periods or percent signs in assembler symbols; putting at least
32420 one of these between the name and the number will suffice.
32422 If this macro is not defined, a default definition will be provided
32423 which is correct for most systems.
32425 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE)
32426 A C statement to output to the stdio stream STREAM assembler code
32427 which defines (equates) the symbol NAME to have the value VALUE.
32429 If `SET_ASM_OP' is defined, a default definition is provided which
32430 is correct for most systems.
32432 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME,
32434 A C statement to output to the stdio stream STREAM assembler code
32435 which defines (equates) the symbol whose tree node is DECL_OF_NAME
32436 to have the value of the tree node DECL_OF_VALUE. This macro will
32437 be used in preference to `ASM_OUTPUT_DEF' if it is defined and if
32438 the tree nodes are available.
32440 If `SET_ASM_OP' is defined, a default definition is provided which
32441 is correct for most systems.
32443 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE)
32444 A C statement that evaluates to true if the assembler code which
32445 defines (equates) the symbol whose tree node is DECL_OF_NAME to
32446 have the value of the tree node DECL_OF_VALUE should be emitted
32447 near the end of the current compilation unit. The default is to
32448 not defer output of defines. This macro affects defines output by
32449 `ASM_OUTPUT_DEF' and `ASM_OUTPUT_DEF_FROM_DECLS'.
32451 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)
32452 A C statement to output to the stdio stream STREAM assembler code
32453 which defines (equates) the weak symbol NAME to have the value
32454 VALUE. If VALUE is `NULL', it defines NAME as an undefined weak
32457 Define this macro if the target only supports weak aliases; define
32458 `ASM_OUTPUT_DEF' instead if possible.
32460 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME,
32462 Define this macro to override the default assembler names used for
32463 Objective-C methods.
32465 The default name is a unique method number followed by the name of
32466 the class (e.g. `_1_Foo'). For methods in categories, the name of
32467 the category is also included in the assembler name (e.g.
32470 These names are safe on most systems, but make debugging difficult
32471 since the method's selector is not present in the name.
32472 Therefore, particular systems define other ways of computing names.
32474 BUF is an expression of type `char *' which gives you a buffer in
32475 which to store the name; its length is as long as CLASS_NAME,
32476 CAT_NAME and SEL_NAME put together, plus 50 characters extra.
32478 The argument IS_INST specifies whether the method is an instance
32479 method or a class method; CLASS_NAME is the name of the class;
32480 CAT_NAME is the name of the category (or `NULL' if the method is
32481 not in a category); and SEL_NAME is the name of the selector.
32483 On systems where the assembler can handle quoted names, you can
32484 use this macro to provide more human-readable names.
32486 -- Macro: ASM_DECLARE_CLASS_REFERENCE (STREAM, NAME)
32487 A C statement (sans semicolon) to output to the stdio stream
32488 STREAM commands to declare that the label NAME is an Objective-C
32489 class reference. This is only needed for targets whose linkers
32490 have special support for NeXT-style runtimes.
32492 -- Macro: ASM_DECLARE_UNRESOLVED_REFERENCE (STREAM, NAME)
32493 A C statement (sans semicolon) to output to the stdio stream
32494 STREAM commands to declare that the label NAME is an unresolved
32495 Objective-C class reference. This is only needed for targets
32496 whose linkers have special support for NeXT-style runtimes.
32499 File: gccint.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format
32501 17.21.5 How Initialization Functions Are Handled
32502 ------------------------------------------------
32504 The compiled code for certain languages includes "constructors" (also
32505 called "initialization routines")--functions to initialize data in the
32506 program when the program is started. These functions need to be called
32507 before the program is "started"--that is to say, before `main' is
32510 Compiling some languages generates "destructors" (also called
32511 "termination routines") that should be called when the program
32514 To make the initialization and termination functions work, the compiler
32515 must output something in the assembler code to cause those functions to
32516 be called at the appropriate time. When you port the compiler to a new
32517 system, you need to specify how to do this.
32519 There are two major ways that GCC currently supports the execution of
32520 initialization and termination functions. Each way has two variants.
32521 Much of the structure is common to all four variations.
32523 The linker must build two lists of these functions--a list of
32524 initialization functions, called `__CTOR_LIST__', and a list of
32525 termination functions, called `__DTOR_LIST__'.
32527 Each list always begins with an ignored function pointer (which may
32528 hold 0, -1, or a count of the function pointers after it, depending on
32529 the environment). This is followed by a series of zero or more function
32530 pointers to constructors (or destructors), followed by a function
32531 pointer containing zero.
32533 Depending on the operating system and its executable file format,
32534 either `crtstuff.c' or `libgcc2.c' traverses these lists at startup
32535 time and exit time. Constructors are called in reverse order of the
32536 list; destructors in forward order.
32538 The best way to handle static constructors works only for object file
32539 formats which provide arbitrarily-named sections. A section is set
32540 aside for a list of constructors, and another for a list of destructors.
32541 Traditionally these are called `.ctors' and `.dtors'. Each object file
32542 that defines an initialization function also puts a word in the
32543 constructor section to point to that function. The linker accumulates
32544 all these words into one contiguous `.ctors' section. Termination
32545 functions are handled similarly.
32547 This method will be chosen as the default by `target-def.h' if
32548 `TARGET_ASM_NAMED_SECTION' is defined. A target that does not support
32549 arbitrary sections, but does support special designated constructor and
32550 destructor sections may define `CTORS_SECTION_ASM_OP' and
32551 `DTORS_SECTION_ASM_OP' to achieve the same effect.
32553 When arbitrary sections are available, there are two variants,
32554 depending upon how the code in `crtstuff.c' is called. On systems that
32555 support a ".init" section which is executed at program startup, parts
32556 of `crtstuff.c' are compiled into that section. The program is linked
32557 by the `gcc' driver like this:
32559 ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o
32561 The prologue of a function (`__init') appears in the `.init' section
32562 of `crti.o'; the epilogue appears in `crtn.o'. Likewise for the
32563 function `__fini' in the ".fini" section. Normally these files are
32564 provided by the operating system or by the GNU C library, but are
32565 provided by GCC for a few targets.
32567 The objects `crtbegin.o' and `crtend.o' are (for most targets)
32568 compiled from `crtstuff.c'. They contain, among other things, code
32569 fragments within the `.init' and `.fini' sections that branch to
32570 routines in the `.text' section. The linker will pull all parts of a
32571 section together, which results in a complete `__init' function that
32572 invokes the routines we need at startup.
32574 To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
32577 If no init section is available, when GCC compiles any function called
32578 `main' (or more accurately, any function designated as a program entry
32579 point by the language front end calling `expand_main_function'), it
32580 inserts a procedure call to `__main' as the first executable code after
32581 the function prologue. The `__main' function is defined in `libgcc2.c'
32582 and runs the global constructors.
32584 In file formats that don't support arbitrary sections, there are again
32585 two variants. In the simplest variant, the GNU linker (GNU `ld') and
32586 an `a.out' format must be used. In this case, `TARGET_ASM_CONSTRUCTOR'
32587 is defined to produce a `.stabs' entry of type `N_SETT', referencing
32588 the name `__CTOR_LIST__', and with the address of the void function
32589 containing the initialization code as its value. The GNU linker
32590 recognizes this as a request to add the value to a "set"; the values
32591 are accumulated, and are eventually placed in the executable as a
32592 vector in the format described above, with a leading (ignored) count
32593 and a trailing zero element. `TARGET_ASM_DESTRUCTOR' is handled
32594 similarly. Since no init section is available, the absence of
32595 `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main'
32596 as above, starting the initialization process.
32598 The last variant uses neither arbitrary sections nor the GNU linker.
32599 This is preferable when you want to do dynamic linking and when using
32600 file formats which the GNU linker does not support, such as `ECOFF'. In
32601 this case, `TARGET_HAVE_CTORS_DTORS' is false, initialization and
32602 termination functions are recognized simply by their names. This
32603 requires an extra program in the linkage step, called `collect2'. This
32604 program pretends to be the linker, for use with GCC; it does its job by
32605 running the ordinary linker, but also arranges to include the vectors of
32606 initialization and termination functions. These functions are called
32607 via `__main' as described above. In order to use this method,
32608 `use_collect2' must be defined in the target in `config.gcc'.
32610 The following section describes the specific macros that control and
32611 customize the handling of initialization and termination functions.
32614 File: gccint.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format
32616 17.21.6 Macros Controlling Initialization Routines
32617 --------------------------------------------------
32619 Here are the macros that control how the compiler handles initialization
32620 and termination functions:
32622 -- Macro: INIT_SECTION_ASM_OP
32623 If defined, a C string constant, including spacing, for the
32624 assembler operation to identify the following data as
32625 initialization code. If not defined, GCC will assume such a
32626 section does not exist. When you are using special sections for
32627 initialization and termination functions, this macro also controls
32628 how `crtstuff.c' and `libgcc2.c' arrange to run the initialization
32631 -- Macro: HAS_INIT_SECTION
32632 If defined, `main' will not call `__main' as described above.
32633 This macro should be defined for systems that control start-up code
32634 on a symbol-by-symbol basis, such as OSF/1, and should not be
32635 defined explicitly for systems that support `INIT_SECTION_ASM_OP'.
32637 -- Macro: LD_INIT_SWITCH
32638 If defined, a C string constant for a switch that tells the linker
32639 that the following symbol is an initialization routine.
32641 -- Macro: LD_FINI_SWITCH
32642 If defined, a C string constant for a switch that tells the linker
32643 that the following symbol is a finalization routine.
32645 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC)
32646 If defined, a C statement that will write a function that can be
32647 automatically called when a shared library is loaded. The function
32648 should call FUNC, which takes no arguments. If not defined, and
32649 the object format requires an explicit initialization function,
32650 then a function called `_GLOBAL__DI' will be generated.
32652 This function and the following one are used by collect2 when
32653 linking a shared library that needs constructors or destructors,
32654 or has DWARF2 exception tables embedded in the code.
32656 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC)
32657 If defined, a C statement that will write a function that can be
32658 automatically called when a shared library is unloaded. The
32659 function should call FUNC, which takes no arguments. If not
32660 defined, and the object format requires an explicit finalization
32661 function, then a function called `_GLOBAL__DD' will be generated.
32663 -- Macro: INVOKE__main
32664 If defined, `main' will call `__main' despite the presence of
32665 `INIT_SECTION_ASM_OP'. This macro should be defined for systems
32666 where the init section is not actually run automatically, but is
32667 still useful for collecting the lists of constructors and
32670 -- Macro: SUPPORTS_INIT_PRIORITY
32671 If nonzero, the C++ `init_priority' attribute is supported and the
32672 compiler should emit instructions to control the order of
32673 initialization of objects. If zero, the compiler will issue an
32674 error message upon encountering an `init_priority' attribute.
32676 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS
32677 This value is true if the target supports some "native" method of
32678 collecting constructors and destructors to be run at startup and
32679 exit. It is false if we must use `collect2'.
32681 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY)
32682 If defined, a function that outputs assembler code to arrange to
32683 call the function referenced by SYMBOL at initialization time.
32685 Assume that SYMBOL is a `SYMBOL_REF' for a function taking no
32686 arguments and with no return value. If the target supports
32687 initialization priorities, PRIORITY is a value between 0 and
32688 `MAX_INIT_PRIORITY'; otherwise it must be `DEFAULT_INIT_PRIORITY'.
32690 If this macro is not defined by the target, a suitable default will
32691 be chosen if (1) the target supports arbitrary section names, (2)
32692 the target defines `CTORS_SECTION_ASM_OP', or (3) `USE_COLLECT2'
32695 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY)
32696 This is like `TARGET_ASM_CONSTRUCTOR' but used for termination
32697 functions rather than initialization functions.
32699 If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine
32700 generated for the generated object file will have static linkage.
32702 If your system uses `collect2' as the means of processing
32703 constructors, then that program normally uses `nm' to scan an object
32704 file for constructor functions to be called.
32706 On certain kinds of systems, you can define this macro to make
32707 `collect2' work faster (and, in some cases, make it work at all):
32709 -- Macro: OBJECT_FORMAT_COFF
32710 Define this macro if the system uses COFF (Common Object File
32711 Format) object files, so that `collect2' can assume this format
32712 and scan object files directly for dynamic constructor/destructor
32715 This macro is effective only in a native compiler; `collect2' as
32716 part of a cross compiler always uses `nm' for the target machine.
32718 -- Macro: REAL_NM_FILE_NAME
32719 Define this macro as a C string constant containing the file name
32720 to use to execute `nm'. The default is to search the path
32723 If your system supports shared libraries and has a program to list
32724 the dynamic dependencies of a given library or executable, you can
32725 define these macros to enable support for running initialization
32726 and termination functions in shared libraries:
32728 -- Macro: LDD_SUFFIX
32729 Define this macro to a C string constant containing the name of
32730 the program which lists dynamic dependencies, like `"ldd"' under
32733 -- Macro: PARSE_LDD_OUTPUT (PTR)
32734 Define this macro to be C code that extracts filenames from the
32735 output of the program denoted by `LDD_SUFFIX'. PTR is a variable
32736 of type `char *' that points to the beginning of a line of output
32737 from `LDD_SUFFIX'. If the line lists a dynamic dependency, the
32738 code must advance PTR to the beginning of the filename on that
32739 line. Otherwise, it must set PTR to `NULL'.
32741 -- Macro: SHLIB_SUFFIX
32742 Define this macro to a C string constant containing the default
32743 shared library extension of the target (e.g., `".so"'). `collect2'
32744 strips version information after this suffix when generating global
32745 constructor and destructor names. This define is only needed on
32746 targets that use `collect2' to process constructors and
32750 File: gccint.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format
32752 17.21.7 Output of Assembler Instructions
32753 ----------------------------------------
32755 This describes assembler instruction output.
32757 -- Macro: REGISTER_NAMES
32758 A C initializer containing the assembler's names for the machine
32759 registers, each one as a C string constant. This is what
32760 translates register numbers in the compiler into assembler
32763 -- Macro: ADDITIONAL_REGISTER_NAMES
32764 If defined, a C initializer for an array of structures containing
32765 a name and a register number. This macro defines additional names
32766 for hard registers, thus allowing the `asm' option in declarations
32767 to refer to registers using alternate names.
32769 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR)
32770 Define this macro if you are using an unusual assembler that
32771 requires different names for the machine instructions.
32773 The definition is a C statement or statements which output an
32774 assembler instruction opcode to the stdio stream STREAM. The
32775 macro-operand PTR is a variable of type `char *' which points to
32776 the opcode name in its "internal" form--the form that is written
32777 in the machine description. The definition should output the
32778 opcode name to STREAM, performing any translation you desire, and
32779 increment the variable PTR to point at the end of the opcode so
32780 that it will not be output twice.
32782 In fact, your macro definition may process less than the entire
32783 opcode name, or more than the opcode name; but if you want to
32784 process text that includes `%'-sequences to substitute operands,
32785 you must take care of the substitution yourself. Just be sure to
32786 increment PTR over whatever text should not be output normally.
32788 If you need to look at the operand values, they can be found as the
32789 elements of `recog_data.operand'.
32791 If the macro definition does nothing, the instruction is output in
32794 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)
32795 If defined, a C statement to be executed just prior to the output
32796 of assembler code for INSN, to modify the extracted operands so
32797 they will be output differently.
32799 Here the argument OPVEC is the vector containing the operands
32800 extracted from INSN, and NOPERANDS is the number of elements of
32801 the vector which contain meaningful data for this insn. The
32802 contents of this vector are what will be used to convert the insn
32803 template into assembler code, so you can change the assembler
32804 output by changing the contents of the vector.
32806 This macro is useful when various assembler syntaxes share a single
32807 file of instruction patterns; by defining this macro differently,
32808 you can cause a large class of instructions to be output
32809 differently (such as with rearranged operands). Naturally,
32810 variations in assembler syntax affecting individual insn patterns
32811 ought to be handled by writing conditional output routines in
32814 If this macro is not defined, it is equivalent to a null statement.
32816 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, rtx
32817 INSN, rtx *OPVEC, int NOPERANDS)
32818 If defined, this target hook is a function which is executed just
32819 after the output of assembler code for INSN, to change the mode of
32820 the assembler if necessary.
32822 Here the argument OPVEC is the vector containing the operands
32823 extracted from INSN, and NOPERANDS is the number of elements of
32824 the vector which contain meaningful data for this insn. The
32825 contents of this vector are what was used to convert the insn
32826 template into assembler code, so you can change the assembler mode
32827 by checking the contents of the vector.
32829 -- Macro: PRINT_OPERAND (STREAM, X, CODE)
32830 A C compound statement to output to stdio stream STREAM the
32831 assembler syntax for an instruction operand X. X is an RTL
32834 CODE is a value that can be used to specify one of several ways of
32835 printing the operand. It is used when identical operands must be
32836 printed differently depending on the context. CODE comes from the
32837 `%' specification that was used to request printing of the
32838 operand. If the specification was just `%DIGIT' then CODE is 0;
32839 if the specification was `%LTR DIGIT' then CODE is the ASCII code
32842 If X is a register, this macro should print the register's name.
32843 The names can be found in an array `reg_names' whose type is `char
32844 *[]'. `reg_names' is initialized from `REGISTER_NAMES'.
32846 When the machine description has a specification `%PUNCT' (a `%'
32847 followed by a punctuation character), this macro is called with a
32848 null pointer for X and the punctuation character for CODE.
32850 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE)
32851 A C expression which evaluates to true if CODE is a valid
32852 punctuation character for use in the `PRINT_OPERAND' macro. If
32853 `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
32854 punctuation characters (except for the standard one, `%') are used
32857 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X)
32858 A C compound statement to output to stdio stream STREAM the
32859 assembler syntax for an instruction operand that is a memory
32860 reference whose address is X. X is an RTL expression.
32862 On some machines, the syntax for a symbolic address depends on the
32863 section that the address refers to. On these machines, define the
32864 hook `TARGET_ENCODE_SECTION_INFO' to store the information into the
32865 `symbol_ref', and then check for it here. *Note Assembler
32868 -- Macro: DBR_OUTPUT_SEQEND (FILE)
32869 A C statement, to be executed after all slot-filler instructions
32870 have been output. If necessary, call `dbr_sequence_length' to
32871 determine the number of slots filled in a sequence (zero if not
32872 currently outputting a sequence), to decide how many no-ops to
32873 output, or whatever.
32875 Don't define this macro if it has nothing to do, but it is helpful
32876 in reading assembly output if the extent of the delay sequence is
32877 made explicit (e.g. with white space).
32879 Note that output routines for instructions with delay slots must be
32880 prepared to deal with not being output as part of a sequence (i.e. when
32881 the scheduling pass is not run, or when no slot fillers could be
32882 found.) The variable `final_sequence' is null when not processing a
32883 sequence, otherwise it contains the `sequence' rtx being output.
32885 -- Macro: REGISTER_PREFIX
32886 -- Macro: LOCAL_LABEL_PREFIX
32887 -- Macro: USER_LABEL_PREFIX
32888 -- Macro: IMMEDIATE_PREFIX
32889 If defined, C string expressions to be used for the `%R', `%L',
32890 `%U', and `%I' options of `asm_fprintf' (see `final.c'). These
32891 are useful when a single `md' file must support multiple assembler
32892 formats. In that case, the various `tm.h' files can define these
32893 macros differently.
32895 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT)
32896 If defined this macro should expand to a series of `case'
32897 statements which will be parsed inside the `switch' statement of
32898 the `asm_fprintf' function. This allows targets to define extra
32899 printf formats which may useful when generating their assembler
32900 statements. Note that uppercase letters are reserved for future
32901 generic extensions to asm_fprintf, and so are not available to
32902 target specific code. The output file is given by the parameter
32903 FILE. The varargs input pointer is ARGPTR and the rest of the
32904 format string, starting the character after the one that is being
32905 switched upon, is pointed to by FORMAT.
32907 -- Macro: ASSEMBLER_DIALECT
32908 If your target supports multiple dialects of assembler language
32909 (such as different opcodes), define this macro as a C expression
32910 that gives the numeric index of the assembler language dialect to
32911 use, with zero as the first variant.
32913 If this macro is defined, you may use constructs of the form
32914 `{option0|option1|option2...}'
32915 in the output templates of patterns (*note Output Template::) or
32916 in the first argument of `asm_fprintf'. This construct outputs
32917 `option0', `option1', `option2', etc., if the value of
32918 `ASSEMBLER_DIALECT' is zero, one, two, etc. Any special characters
32919 within these strings retain their usual meaning. If there are
32920 fewer alternatives within the braces than the value of
32921 `ASSEMBLER_DIALECT', the construct outputs nothing.
32923 If you do not define this macro, the characters `{', `|' and `}'
32924 do not have any special meaning when used in templates or operands
32927 Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX',
32928 `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the
32929 variations in assembler language syntax with that mechanism.
32930 Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax
32931 if the syntax variant are larger and involve such things as
32932 different opcodes or operand order.
32934 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO)
32935 A C expression to output to STREAM some assembler code which will
32936 push hard register number REGNO onto the stack. The code need not
32937 be optimal, since this macro is used only when profiling.
32939 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO)
32940 A C expression to output to STREAM some assembler code which will
32941 pop hard register number REGNO off of the stack. The code need
32942 not be optimal, since this macro is used only when profiling.
32945 File: gccint.info, Node: Dispatch Tables, Next: Exception Region Output, Prev: Instruction Output, Up: Assembler Format
32947 17.21.8 Output of Dispatch Tables
32948 ---------------------------------
32950 This concerns dispatch tables.
32952 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
32953 A C statement to output to the stdio stream STREAM an assembler
32954 pseudo-instruction to generate a difference between two labels.
32955 VALUE and REL are the numbers of two internal labels. The
32956 definitions of these labels are output using
32957 `(*targetm.asm_out.internal_label)', and they must be printed in
32958 the same way here. For example,
32960 fprintf (STREAM, "\t.word L%d-L%d\n",
32963 You must provide this macro on machines where the addresses in a
32964 dispatch table are relative to the table's own address. If
32965 defined, GCC will also use this macro on all machines when
32966 producing PIC. BODY is the body of the `ADDR_DIFF_VEC'; it is
32967 provided so that the mode and flags can be read.
32969 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
32970 This macro should be provided on machines where the addresses in a
32971 dispatch table are absolute.
32973 The definition should be a C statement to output to the stdio
32974 stream STREAM an assembler pseudo-instruction to generate a
32975 reference to a label. VALUE is the number of an internal label
32976 whose definition is output using
32977 `(*targetm.asm_out.internal_label)'. For example,
32979 fprintf (STREAM, "\t.word L%d\n", VALUE)
32981 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
32982 Define this if the label before a jump-table needs to be output
32983 specially. The first three arguments are the same as for
32984 `(*targetm.asm_out.internal_label)'; the fourth argument is the
32985 jump-table which follows (a `jump_insn' containing an `addr_vec'
32986 or `addr_diff_vec').
32988 This feature is used on system V to output a `swbeg' statement for
32991 If this macro is not defined, these labels are output with
32992 `(*targetm.asm_out.internal_label)'.
32994 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
32995 Define this if something special must be output at the end of a
32996 jump-table. The definition should be a C statement to be executed
32997 after the assembler code for the table is written. It should write
32998 the appropriate code to stdio stream STREAM. The argument TABLE
32999 is the jump-table insn, and NUM is the label-number of the
33002 If this macro is not defined, nothing special is output at the end
33005 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree
33006 DECL, int FOR_EH, int EMPTY)
33007 This target hook emits a label at the beginning of each FDE. It
33008 should be defined on targets where FDEs need special labels, and it
33009 should write the appropriate label, for the FDE associated with the
33010 function declaration DECL, to the stdio stream STREAM. The third
33011 argument, FOR_EH, is a boolean: true if this is for an exception
33012 table. The fourth argument, EMPTY, is a boolean: true if this is
33013 a placeholder label for an omitted FDE.
33015 The default is that FDEs are not given nonlocal labels.
33017 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM)
33018 This target hook emits a label at the beginning of the exception
33019 table. It should be defined on targets where it is desirable for
33020 the table to be broken up according to function.
33022 The default is that no label is emitted.
33024 -- Target Hook: void TARGET_UNWIND_EMIT (FILE *STREAM, rtx INSN)
33025 This target hook emits assembly directives required to unwind the
33026 given instruction. This is only used when TARGET_UNWIND_INFO is
33030 File: gccint.info, Node: Exception Region Output, Next: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format
33032 17.21.9 Assembler Commands for Exception Regions
33033 ------------------------------------------------
33035 This describes commands marking the start and the end of an exception
33038 -- Macro: EH_FRAME_SECTION_NAME
33039 If defined, a C string constant for the name of the section
33040 containing exception handling frame unwind information. If not
33041 defined, GCC will provide a default definition if the target
33042 supports named sections. `crtstuff.c' uses this macro to switch
33043 to the appropriate section.
33045 You should define this symbol if your target supports DWARF 2 frame
33046 unwind information and the default definition does not work.
33048 -- Macro: EH_FRAME_IN_DATA_SECTION
33049 If defined, DWARF 2 frame unwind information will be placed in the
33050 data section even though the target supports named sections. This
33051 might be necessary, for instance, if the system linker does garbage
33052 collection and sections cannot be marked as not to be collected.
33054 Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also
33057 -- Macro: EH_TABLES_CAN_BE_READ_ONLY
33058 Define this macro to 1 if your target is such that no frame unwind
33059 information encoding used with non-PIC code will ever require a
33060 runtime relocation, but the linker may not support merging
33061 read-only and read-write sections into a single read-write section.
33063 -- Macro: MASK_RETURN_ADDR
33064 An rtx used to mask the return address found via
33065 `RETURN_ADDR_RTX', so that it does not contain any extraneous set
33068 -- Macro: DWARF2_UNWIND_INFO
33069 Define this macro to 0 if your target supports DWARF 2 frame unwind
33070 information, but it does not yet work with exception handling.
33071 Otherwise, if your target supports this information (if it defines
33072 `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or
33073 `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1.
33075 If `TARGET_UNWIND_INFO' is defined, the target specific unwinder
33076 will be used in all cases. Defining this macro will enable the
33077 generation of DWARF 2 frame debugging information.
33079 If `TARGET_UNWIND_INFO' is not defined, and this macro is defined
33080 to 1, the DWARF 2 unwinder will be the default exception handling
33081 mechanism; otherwise, the `setjmp'/`longjmp'-based scheme will be
33084 -- Macro: TARGET_UNWIND_INFO
33085 Define this macro if your target has ABI specified unwind tables.
33086 Usually these will be output by `TARGET_UNWIND_EMIT'.
33088 -- Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT
33089 This variable should be set to `true' if the target ABI requires
33090 unwinding tables even when exceptions are not used.
33092 -- Macro: MUST_USE_SJLJ_EXCEPTIONS
33093 This macro need only be defined if `DWARF2_UNWIND_INFO' is
33094 runtime-variable. In that case, `except.h' cannot correctly
33095 determine the corresponding definition of
33096 `MUST_USE_SJLJ_EXCEPTIONS', so the target must provide it directly.
33098 -- Macro: DONT_USE_BUILTIN_SETJMP
33099 Define this macro to 1 if the `setjmp'/`longjmp'-based scheme
33100 should use the `setjmp'/`longjmp' functions from the C library
33101 instead of the `__builtin_setjmp'/`__builtin_longjmp' machinery.
33103 -- Macro: DWARF_CIE_DATA_ALIGNMENT
33104 This macro need only be defined if the target might save registers
33105 in the function prologue at an offset to the stack pointer that is
33106 not aligned to `UNITS_PER_WORD'. The definition should be the
33107 negative minimum alignment if `STACK_GROWS_DOWNWARD' is defined,
33108 and the positive minimum alignment otherwise. *Note SDB and
33109 DWARF::. Only applicable if the target supports DWARF 2 frame
33110 unwind information.
33112 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
33113 Contains the value true if the target should add a zero word onto
33114 the end of a Dwarf-2 frame info section when used for exception
33115 handling. Default value is false if `EH_FRAME_SECTION_NAME' is
33116 defined, and true otherwise.
33118 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG)
33119 Given a register, this hook should return a parallel of registers
33120 to represent where to find the register pieces. Define this hook
33121 if the register and its mode are represented in Dwarf in
33122 non-contiguous locations, or if the register should be represented
33123 in more than one register in Dwarf. Otherwise, this hook should
33124 return `NULL_RTX'. If not defined, the default is to return
33127 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS)
33128 If some registers are represented in Dwarf-2 unwind information in
33129 multiple pieces, define this hook to fill in information about the
33130 sizes of those pieces in the table used by the unwinder at runtime.
33131 It will be called by `expand_builtin_init_dwarf_reg_sizes' after
33132 filling in a single size corresponding to each hard register;
33133 ADDRESS is the address of the table.
33135 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM)
33136 This hook is used to output a reference from a frame unwinding
33137 table to the type_info object identified by SYM. It should return
33138 `true' if the reference was output. Returning `false' will cause
33139 the reference to be output using the normal Dwarf2 routines.
33141 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER
33142 This flag should be set to `true' on targets that use an ARM EABI
33143 based unwinding library, and `false' on other targets. This
33144 effects the format of unwinding tables, and how the unwinder in
33145 entered after running a cleanup. The default is `false'.
33148 File: gccint.info, Node: Alignment Output, Prev: Exception Region Output, Up: Assembler Format
33150 17.21.10 Assembler Commands for Alignment
33151 -----------------------------------------
33153 This describes commands for alignment.
33155 -- Macro: JUMP_ALIGN (LABEL)
33156 The alignment (log base 2) to put in front of LABEL, which is a
33157 common destination of jumps and has no fallthru incoming edge.
33159 This macro need not be defined if you don't want any special
33160 alignment to be done at such a time. Most machine descriptions do
33161 not currently define the macro.
33163 Unless it's necessary to inspect the LABEL parameter, it is better
33164 to set the variable ALIGN_JUMPS in the target's
33165 `OVERRIDE_OPTIONS'. Otherwise, you should try to honor the user's
33166 selection in ALIGN_JUMPS in a `JUMP_ALIGN' implementation.
33168 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL)
33169 The alignment (log base 2) to put in front of LABEL, which follows
33172 This macro need not be defined if you don't want any special
33173 alignment to be done at such a time. Most machine descriptions do
33174 not currently define the macro.
33176 -- Macro: LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
33177 The maximum number of bytes to skip when applying
33178 `LABEL_ALIGN_AFTER_BARRIER'. This works only if
33179 `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
33181 -- Macro: LOOP_ALIGN (LABEL)
33182 The alignment (log base 2) to put in front of LABEL, which follows
33183 a `NOTE_INSN_LOOP_BEG' note.
33185 This macro need not be defined if you don't want any special
33186 alignment to be done at such a time. Most machine descriptions do
33187 not currently define the macro.
33189 Unless it's necessary to inspect the LABEL parameter, it is better
33190 to set the variable `align_loops' in the target's
33191 `OVERRIDE_OPTIONS'. Otherwise, you should try to honor the user's
33192 selection in `align_loops' in a `LOOP_ALIGN' implementation.
33194 -- Macro: LOOP_ALIGN_MAX_SKIP
33195 The maximum number of bytes to skip when applying `LOOP_ALIGN'.
33196 This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
33198 -- Macro: LABEL_ALIGN (LABEL)
33199 The alignment (log base 2) to put in front of LABEL. If
33200 `LABEL_ALIGN_AFTER_BARRIER' / `LOOP_ALIGN' specify a different
33201 alignment, the maximum of the specified values is used.
33203 Unless it's necessary to inspect the LABEL parameter, it is better
33204 to set the variable `align_labels' in the target's
33205 `OVERRIDE_OPTIONS'. Otherwise, you should try to honor the user's
33206 selection in `align_labels' in a `LABEL_ALIGN' implementation.
33208 -- Macro: LABEL_ALIGN_MAX_SKIP
33209 The maximum number of bytes to skip when applying `LABEL_ALIGN'.
33210 This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined.
33212 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES)
33213 A C statement to output to the stdio stream STREAM an assembler
33214 instruction to advance the location counter by NBYTES bytes.
33215 Those bytes should be zero when loaded. NBYTES will be a C
33216 expression of type `unsigned HOST_WIDE_INT'.
33218 -- Macro: ASM_NO_SKIP_IN_TEXT
33219 Define this macro if `ASM_OUTPUT_SKIP' should not be used in the
33220 text section because it fails to put zeros in the bytes that are
33221 skipped. This is true on many Unix systems, where the pseudo-op
33222 to skip bytes produces no-op instructions rather than zeros when
33223 used in the text section.
33225 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER)
33226 A C statement to output to the stdio stream STREAM an assembler
33227 command to advance the location counter to a multiple of 2 to the
33228 POWER bytes. POWER will be a C expression of type `int'.
33230 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER)
33231 Like `ASM_OUTPUT_ALIGN', except that the "nop" instruction is used
33232 for padding, if necessary.
33234 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP)
33235 A C statement to output to the stdio stream STREAM an assembler
33236 command to advance the location counter to a multiple of 2 to the
33237 POWER bytes, but only if MAX_SKIP or fewer bytes are needed to
33238 satisfy the alignment request. POWER and MAX_SKIP will be a C
33239 expression of type `int'.
33242 File: gccint.info, Node: Debugging Info, Next: Floating Point, Prev: Assembler Format, Up: Target Macros
33244 17.22 Controlling Debugging Information Format
33245 ==============================================
33247 This describes how to specify debugging information.
33251 * All Debuggers:: Macros that affect all debugging formats uniformly.
33252 * DBX Options:: Macros enabling specific options in DBX format.
33253 * DBX Hooks:: Hook macros for varying DBX format.
33254 * File Names and DBX:: Macros controlling output of file names in DBX format.
33255 * SDB and DWARF:: Macros for SDB (COFF) and DWARF formats.
33256 * VMS Debug:: Macros for VMS debug format.
33259 File: gccint.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info
33261 17.22.1 Macros Affecting All Debugging Formats
33262 ----------------------------------------------
33264 These macros affect all debugging formats.
33266 -- Macro: DBX_REGISTER_NUMBER (REGNO)
33267 A C expression that returns the DBX register number for the
33268 compiler register number REGNO. In the default macro provided,
33269 the value of this expression will be REGNO itself. But sometimes
33270 there are some registers that the compiler knows about and DBX
33271 does not, or vice versa. In such cases, some register may need to
33272 have one number in the compiler and another for DBX.
33274 If two registers have consecutive numbers inside GCC, and they can
33275 be used as a pair to hold a multiword value, then they _must_ have
33276 consecutive numbers after renumbering with `DBX_REGISTER_NUMBER'.
33277 Otherwise, debuggers will be unable to access such a pair, because
33278 they expect register pairs to be consecutive in their own
33281 If you find yourself defining `DBX_REGISTER_NUMBER' in way that
33282 does not preserve register pairs, then what you must do instead is
33283 redefine the actual register numbering scheme.
33285 -- Macro: DEBUGGER_AUTO_OFFSET (X)
33286 A C expression that returns the integer offset value for an
33287 automatic variable having address X (an RTL expression). The
33288 default computation assumes that X is based on the frame-pointer
33289 and gives the offset from the frame-pointer. This is required for
33290 targets that produce debugging output for DBX or COFF-style
33291 debugging output for SDB and allow the frame-pointer to be
33292 eliminated when the `-g' options is used.
33294 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X)
33295 A C expression that returns the integer offset value for an
33296 argument having address X (an RTL expression). The nominal offset
33299 -- Macro: PREFERRED_DEBUGGING_TYPE
33300 A C expression that returns the type of debugging output GCC should
33301 produce when the user specifies just `-g'. Define this if you
33302 have arranged for GCC to support more than one format of debugging
33303 output. Currently, the allowable values are `DBX_DEBUG',
33304 `SDB_DEBUG', `DWARF_DEBUG', `DWARF2_DEBUG', `XCOFF_DEBUG',
33305 `VMS_DEBUG', and `VMS_AND_DWARF2_DEBUG'.
33307 When the user specifies `-ggdb', GCC normally also uses the value
33308 of this macro to select the debugging output format, but with two
33309 exceptions. If `DWARF2_DEBUGGING_INFO' is defined, GCC uses the
33310 value `DWARF2_DEBUG'. Otherwise, if `DBX_DEBUGGING_INFO' is
33311 defined, GCC uses `DBX_DEBUG'.
33313 The value of this macro only affects the default debugging output;
33314 the user can always get a specific type of output by using
33315 `-gstabs', `-gcoff', `-gdwarf-2', `-gxcoff', or `-gvms'.
33318 File: gccint.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info
33320 17.22.2 Specific Options for DBX Output
33321 ---------------------------------------
33323 These are specific options for DBX output.
33325 -- Macro: DBX_DEBUGGING_INFO
33326 Define this macro if GCC should produce debugging output for DBX
33327 in response to the `-g' option.
33329 -- Macro: XCOFF_DEBUGGING_INFO
33330 Define this macro if GCC should produce XCOFF format debugging
33331 output in response to the `-g' option. This is a variant of DBX
33334 -- Macro: DEFAULT_GDB_EXTENSIONS
33335 Define this macro to control whether GCC should by default generate
33336 GDB's extended version of DBX debugging information (assuming
33337 DBX-format debugging information is enabled at all). If you don't
33338 define the macro, the default is 1: always generate the extended
33339 information if there is any occasion to.
33341 -- Macro: DEBUG_SYMS_TEXT
33342 Define this macro if all `.stabs' commands should be output while
33343 in the text section.
33345 -- Macro: ASM_STABS_OP
33346 A C string constant, including spacing, naming the assembler
33347 pseudo op to use instead of `"\t.stabs\t"' to define an ordinary
33348 debugging symbol. If you don't define this macro, `"\t.stabs\t"'
33349 is used. This macro applies only to DBX debugging information
33352 -- Macro: ASM_STABD_OP
33353 A C string constant, including spacing, naming the assembler
33354 pseudo op to use instead of `"\t.stabd\t"' to define a debugging
33355 symbol whose value is the current location. If you don't define
33356 this macro, `"\t.stabd\t"' is used. This macro applies only to
33357 DBX debugging information format.
33359 -- Macro: ASM_STABN_OP
33360 A C string constant, including spacing, naming the assembler
33361 pseudo op to use instead of `"\t.stabn\t"' to define a debugging
33362 symbol with no name. If you don't define this macro,
33363 `"\t.stabn\t"' is used. This macro applies only to DBX debugging
33364 information format.
33366 -- Macro: DBX_NO_XREFS
33367 Define this macro if DBX on your system does not support the
33368 construct `xsTAGNAME'. On some systems, this construct is used to
33369 describe a forward reference to a structure named TAGNAME. On
33370 other systems, this construct is not supported at all.
33372 -- Macro: DBX_CONTIN_LENGTH
33373 A symbol name in DBX-format debugging information is normally
33374 continued (split into two separate `.stabs' directives) when it
33375 exceeds a certain length (by default, 80 characters). On some
33376 operating systems, DBX requires this splitting; on others,
33377 splitting must not be done. You can inhibit splitting by defining
33378 this macro with the value zero. You can override the default
33379 splitting-length by defining this macro as an expression for the
33382 -- Macro: DBX_CONTIN_CHAR
33383 Normally continuation is indicated by adding a `\' character to
33384 the end of a `.stabs' string when a continuation follows. To use
33385 a different character instead, define this macro as a character
33386 constant for the character you want to use. Do not define this
33387 macro if backslash is correct for your system.
33389 -- Macro: DBX_STATIC_STAB_DATA_SECTION
33390 Define this macro if it is necessary to go to the data section
33391 before outputting the `.stabs' pseudo-op for a non-global static
33394 -- Macro: DBX_TYPE_DECL_STABS_CODE
33395 The value to use in the "code" field of the `.stabs' directive for
33396 a typedef. The default is `N_LSYM'.
33398 -- Macro: DBX_STATIC_CONST_VAR_CODE
33399 The value to use in the "code" field of the `.stabs' directive for
33400 a static variable located in the text section. DBX format does not
33401 provide any "right" way to do this. The default is `N_FUN'.
33403 -- Macro: DBX_REGPARM_STABS_CODE
33404 The value to use in the "code" field of the `.stabs' directive for
33405 a parameter passed in registers. DBX format does not provide any
33406 "right" way to do this. The default is `N_RSYM'.
33408 -- Macro: DBX_REGPARM_STABS_LETTER
33409 The letter to use in DBX symbol data to identify a symbol as a
33410 parameter passed in registers. DBX format does not customarily
33411 provide any way to do this. The default is `'P''.
33413 -- Macro: DBX_FUNCTION_FIRST
33414 Define this macro if the DBX information for a function and its
33415 arguments should precede the assembler code for the function.
33416 Normally, in DBX format, the debugging information entirely
33417 follows the assembler code.
33419 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE
33420 Define this macro, with value 1, if the value of a symbol
33421 describing the scope of a block (`N_LBRAC' or `N_RBRAC') should be
33422 relative to the start of the enclosing function. Normally, GCC
33423 uses an absolute address.
33425 -- Macro: DBX_LINES_FUNCTION_RELATIVE
33426 Define this macro, with value 1, if the value of a symbol
33427 indicating the current line number (`N_SLINE') should be relative
33428 to the start of the enclosing function. Normally, GCC uses an
33431 -- Macro: DBX_USE_BINCL
33432 Define this macro if GCC should generate `N_BINCL' and `N_EINCL'
33433 stabs for included header files, as on Sun systems. This macro
33434 also directs GCC to output a type number as a pair of a file
33435 number and a type number within the file. Normally, GCC does not
33436 generate `N_BINCL' or `N_EINCL' stabs, and it outputs a single
33437 number for a type number.
33440 File: gccint.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info
33442 17.22.3 Open-Ended Hooks for DBX Format
33443 ---------------------------------------
33445 These are hooks for DBX format.
33447 -- Macro: DBX_OUTPUT_LBRAC (STREAM, NAME)
33448 Define this macro to say how to output to STREAM the debugging
33449 information for the start of a scope level for variable names. The
33450 argument NAME is the name of an assembler symbol (for use with
33451 `assemble_name') whose value is the address where the scope begins.
33453 -- Macro: DBX_OUTPUT_RBRAC (STREAM, NAME)
33454 Like `DBX_OUTPUT_LBRAC', but for the end of a scope level.
33456 -- Macro: DBX_OUTPUT_NFUN (STREAM, LSCOPE_LABEL, DECL)
33457 Define this macro if the target machine requires special handling
33458 to output an `N_FUN' entry for the function DECL.
33460 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER)
33461 A C statement to output DBX debugging information before code for
33462 line number LINE of the current source file to the stdio stream
33463 STREAM. COUNTER is the number of time the macro was invoked,
33464 including the current invocation; it is intended to generate
33465 unique labels in the assembly output.
33467 This macro should not be defined if the default output is correct,
33468 or if it can be made correct by defining
33469 `DBX_LINES_FUNCTION_RELATIVE'.
33471 -- Macro: NO_DBX_FUNCTION_END
33472 Some stabs encapsulation formats (in particular ECOFF), cannot
33473 handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx
33474 extension construct. On those machines, define this macro to turn
33475 this feature off without disturbing the rest of the gdb extensions.
33477 -- Macro: NO_DBX_BNSYM_ENSYM
33478 Some assemblers cannot handle the `.stabd BNSYM/ENSYM,0,0' gdb dbx
33479 extension construct. On those machines, define this macro to turn
33480 this feature off without disturbing the rest of the gdb extensions.
33483 File: gccint.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info
33485 17.22.4 File Names in DBX Format
33486 --------------------------------
33488 This describes file names in DBX format.
33490 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)
33491 A C statement to output DBX debugging information to the stdio
33492 stream STREAM, which indicates that file NAME is the main source
33493 file--the file specified as the input file for compilation. This
33494 macro is called only once, at the beginning of compilation.
33496 This macro need not be defined if the standard form of output for
33497 DBX debugging information is appropriate.
33499 It may be necessary to refer to a label equal to the beginning of
33500 the text section. You can use `assemble_name (stream,
33501 ltext_label_name)' to do so. If you do this, you must also set
33502 the variable USED_LTEXT_LABEL_NAME to `true'.
33504 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY
33505 Define this macro, with value 1, if GCC should not emit an
33506 indication of the current directory for compilation and current
33507 source language at the beginning of the file.
33509 -- Macro: NO_DBX_GCC_MARKER
33510 Define this macro, with value 1, if GCC should not emit an
33511 indication that this object file was compiled by GCC. The default
33512 is to emit an `N_OPT' stab at the beginning of every source file,
33513 with `gcc2_compiled.' for the string and value 0.
33515 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)
33516 A C statement to output DBX debugging information at the end of
33517 compilation of the main source file NAME. Output should be
33518 written to the stdio stream STREAM.
33520 If you don't define this macro, nothing special is output at the
33521 end of compilation, which is correct for most machines.
33523 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
33524 Define this macro _instead of_ defining
33525 `DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at
33526 the end of compilation is an `N_SO' stab with an empty string,
33527 whose value is the highest absolute text address in the file.
33530 File: gccint.info, Node: SDB and DWARF, Next: VMS Debug, Prev: File Names and DBX, Up: Debugging Info
33532 17.22.5 Macros for SDB and DWARF Output
33533 ---------------------------------------
33535 Here are macros for SDB and DWARF output.
33537 -- Macro: SDB_DEBUGGING_INFO
33538 Define this macro if GCC should produce COFF-style debugging output
33539 for SDB in response to the `-g' option.
33541 -- Macro: DWARF2_DEBUGGING_INFO
33542 Define this macro if GCC should produce dwarf version 2 format
33543 debugging output in response to the `-g' option.
33545 -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree
33547 Define this to enable the dwarf attribute
33548 `DW_AT_calling_convention' to be emitted for each function.
33549 Instead of an integer return the enum value for the `DW_CC_'
33552 To support optional call frame debugging information, you must also
33553 define `INCOMING_RETURN_ADDR_RTX' and either set
33554 `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the
33555 prologue, or call `dwarf2out_def_cfa' and `dwarf2out_reg_save' as
33556 appropriate from `TARGET_ASM_FUNCTION_PROLOGUE' if you don't.
33558 -- Macro: DWARF2_FRAME_INFO
33559 Define this macro to a nonzero value if GCC should always output
33560 Dwarf 2 frame information. If `DWARF2_UNWIND_INFO' (*note
33561 Exception Region Output:: is nonzero, GCC will output this
33562 information not matter how you define `DWARF2_FRAME_INFO'.
33564 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO
33565 Define this macro to be a nonzero value if the assembler can
33566 generate Dwarf 2 line debug info sections. This will result in
33567 much more compact line number tables, and hence is desirable if it
33570 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2)
33571 A C statement to issue assembly directives that create a difference
33572 LAB1 minus LAB2, using an integer of the given SIZE.
33574 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION)
33575 A C statement to issue assembly directives that create a
33576 section-relative reference to the given LABEL, using an integer of
33577 the given SIZE. The label is known to be defined in the given
33580 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL)
33581 A C statement to issue assembly directives that create a
33582 self-relative reference to the given LABEL, using an integer of
33585 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL)
33586 A C statement to issue assembly directives that create a reference
33587 to the DWARF table identifier LABEL from the current section. This
33588 is used on some systems to avoid garbage collecting a DWARF table
33589 which is referenced by a function.
33591 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int
33593 If defined, this target hook is a function which outputs a
33594 DTP-relative reference to the given TLS symbol of the specified
33597 -- Macro: PUT_SDB_...
33598 Define these macros to override the assembler syntax for the
33599 special SDB assembler directives. See `sdbout.c' for a list of
33600 these macros and their arguments. If the standard syntax is used,
33601 you need not define them yourself.
33603 -- Macro: SDB_DELIM
33604 Some assemblers do not support a semicolon as a delimiter, even
33605 between SDB assembler directives. In that case, define this macro
33606 to be the delimiter to use (usually `\n'). It is not necessary to
33607 define a new set of `PUT_SDB_OP' macros if this is the only change
33610 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES
33611 Define this macro to allow references to unknown structure, union,
33612 or enumeration tags to be emitted. Standard COFF does not allow
33613 handling of unknown references, MIPS ECOFF has support for it.
33615 -- Macro: SDB_ALLOW_FORWARD_REFERENCES
33616 Define this macro to allow references to structure, union, or
33617 enumeration tags that have not yet been seen to be handled. Some
33618 assemblers choke if forward tags are used, while some require it.
33620 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE)
33621 A C statement to output SDB debugging information before code for
33622 line number LINE of the current source file to the stdio stream
33623 STREAM. The default is to emit an `.ln' directive.
33626 File: gccint.info, Node: VMS Debug, Prev: SDB and DWARF, Up: Debugging Info
33628 17.22.6 Macros for VMS Debug Format
33629 -----------------------------------
33631 Here are macros for VMS debug format.
33633 -- Macro: VMS_DEBUGGING_INFO
33634 Define this macro if GCC should produce debugging output for VMS
33635 in response to the `-g' option. The default behavior for VMS is
33636 to generate minimal debug info for a traceback in the absence of
33637 `-g' unless explicitly overridden with `-g0'. This behavior is
33638 controlled by `OPTIMIZATION_OPTIONS' and `OVERRIDE_OPTIONS'.
33641 File: gccint.info, Node: Floating Point, Next: Mode Switching, Prev: Debugging Info, Up: Target Macros
33643 17.23 Cross Compilation and Floating Point
33644 ==========================================
33646 While all modern machines use twos-complement representation for
33647 integers, there are a variety of representations for floating point
33648 numbers. This means that in a cross-compiler the representation of
33649 floating point numbers in the compiled program may be different from
33650 that used in the machine doing the compilation.
33652 Because different representation systems may offer different amounts of
33653 range and precision, all floating point constants must be represented in
33654 the target machine's format. Therefore, the cross compiler cannot
33655 safely use the host machine's floating point arithmetic; it must emulate
33656 the target's arithmetic. To ensure consistency, GCC always uses
33657 emulation to work with floating point values, even when the host and
33658 target floating point formats are identical.
33660 The following macros are provided by `real.h' for the compiler to use.
33661 All parts of the compiler which generate or optimize floating-point
33662 calculations must use these macros. They may evaluate their operands
33663 more than once, so operands must not have side effects.
33665 -- Macro: REAL_VALUE_TYPE
33666 The C data type to be used to hold a floating point value in the
33667 target machine's format. Typically this is a `struct' containing
33668 an array of `HOST_WIDE_INT', but all code should treat it as an
33671 -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
33672 Compares for equality the two values, X and Y. If the target
33673 floating point format supports negative zeroes and/or NaNs,
33674 `REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and `REAL_VALUES_EQUAL
33675 (NaN, NaN)' is false.
33677 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
33678 Tests whether X is less than Y.
33680 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X)
33681 Truncates X to a signed integer, rounding toward zero.
33683 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX
33684 (REAL_VALUE_TYPE X)
33685 Truncates X to an unsigned integer, rounding toward zero. If X is
33686 negative, returns zero.
33688 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum
33690 Converts STRING into a floating point number in the target
33691 machine's representation for mode MODE. This routine can handle
33692 both decimal and hexadecimal floating point constants, using the
33693 syntax defined by the C language for both.
33695 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X)
33696 Returns 1 if X is negative (including negative zero), 0 otherwise.
33698 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X)
33699 Determines whether X represents infinity (positive or negative).
33701 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X)
33702 Determines whether X represents a "NaN" (not-a-number).
33704 -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code
33705 CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y)
33706 Calculates an arithmetic operation on the two floating point values
33707 X and Y, storing the result in OUTPUT (which must be a variable).
33709 The operation to be performed is specified by CODE. Only the
33710 following codes are supported: `PLUS_EXPR', `MINUS_EXPR',
33711 `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'.
33713 If `REAL_ARITHMETIC' is asked to evaluate division by zero and the
33714 target's floating point format cannot represent infinity, it will
33715 call `abort'. Callers should check for this situation first, using
33716 `MODE_HAS_INFINITIES'. *Note Storage Layout::.
33718 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X)
33719 Returns the negative of the floating point value X.
33721 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X)
33722 Returns the absolute value of X.
33724 -- Macro: REAL_VALUE_TYPE REAL_VALUE_TRUNCATE (REAL_VALUE_TYPE MODE,
33725 enum machine_mode X)
33726 Truncates the floating point value X to fit in MODE. The return
33727 value is still a full-size `REAL_VALUE_TYPE', but it has an
33728 appropriate bit pattern to be output as a floating constant whose
33729 precision accords with mode MODE.
33731 -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT
33732 HIGH, REAL_VALUE_TYPE X)
33733 Converts a floating point value X into a double-precision integer
33734 which is then stored into LOW and HIGH. If the value is not
33735 integral, it is truncated.
33737 -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT
33738 LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE)
33739 Converts a double-precision integer found in LOW and HIGH, into a
33740 floating point value which is then stored into X. The value is
33741 truncated to fit in mode MODE.
33744 File: gccint.info, Node: Mode Switching, Next: Target Attributes, Prev: Floating Point, Up: Target Macros
33746 17.24 Mode Switching Instructions
33747 =================================
33749 The following macros control mode switching optimizations:
33751 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY)
33752 Define this macro if the port needs extra instructions inserted
33753 for mode switching in an optimizing compilation.
33755 For an example, the SH4 can perform both single and double
33756 precision floating point operations, but to perform a single
33757 precision operation, the FPSCR PR bit has to be cleared, while for
33758 a double precision operation, this bit has to be set. Changing
33759 the PR bit requires a general purpose register as a scratch
33760 register, hence these FPSCR sets have to be inserted before
33761 reload, i.e. you can't put this into instruction emitting or
33762 `TARGET_MACHINE_DEPENDENT_REORG'.
33764 You can have multiple entities that are mode-switched, and select
33765 at run time which entities actually need it.
33766 `OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY
33767 that needs mode-switching. If you define this macro, you also
33768 have to define `NUM_MODES_FOR_MODE_SWITCHING', `MODE_NEEDED',
33769 `MODE_PRIORITY_TO_MODE' and `EMIT_MODE_SET'. `MODE_AFTER',
33770 `MODE_ENTRY', and `MODE_EXIT' are optional.
33772 -- Macro: NUM_MODES_FOR_MODE_SWITCHING
33773 If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as
33774 initializer for an array of integers. Each initializer element N
33775 refers to an entity that needs mode switching, and specifies the
33776 number of different modes that might need to be set for this
33777 entity. The position of the initializer in the
33778 initializer--starting counting at zero--determines the integer
33779 that is used to refer to the mode-switched entity in question. In
33780 macros that take mode arguments / yield a mode result, modes are
33781 represented as numbers 0 ... N - 1. N is used to specify that no
33782 mode switch is needed / supplied.
33784 -- Macro: MODE_NEEDED (ENTITY, INSN)
33785 ENTITY is an integer specifying a mode-switched entity. If
33786 `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to
33787 return an integer value not larger than the corresponding element
33788 in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY
33789 must be switched into prior to the execution of INSN.
33791 -- Macro: MODE_AFTER (MODE, INSN)
33792 If this macro is defined, it is evaluated for every INSN during
33793 mode switching. It determines the mode that an insn results in (if
33794 different from the incoming mode).
33796 -- Macro: MODE_ENTRY (ENTITY)
33797 If this macro is defined, it is evaluated for every ENTITY that
33798 needs mode switching. It should evaluate to an integer, which is
33799 a mode that ENTITY is assumed to be switched to at function entry.
33800 If `MODE_ENTRY' is defined then `MODE_EXIT' must be defined.
33802 -- Macro: MODE_EXIT (ENTITY)
33803 If this macro is defined, it is evaluated for every ENTITY that
33804 needs mode switching. It should evaluate to an integer, which is
33805 a mode that ENTITY is assumed to be switched to at function exit.
33806 If `MODE_EXIT' is defined then `MODE_ENTRY' must be defined.
33808 -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N)
33809 This macro specifies the order in which modes for ENTITY are
33810 processed. 0 is the highest priority,
33811 `NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest. The value
33812 of the macro should be an integer designating a mode for ENTITY.
33813 For any fixed ENTITY, `mode_priority_to_mode' (ENTITY, N) shall be
33814 a bijection in 0 ... `num_modes_for_mode_switching[ENTITY] - 1'.
33816 -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE)
33817 Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE
33818 is the set of hard registers live at the point where the insn(s)
33819 are to be inserted.
33822 File: gccint.info, Node: Target Attributes, Next: Emulated TLS, Prev: Mode Switching, Up: Target Macros
33824 17.25 Defining target-specific uses of `__attribute__'
33825 ======================================================
33827 Target-specific attributes may be defined for functions, data and types.
33828 These are described using the following target hooks; they also need to
33829 be documented in `extend.texi'.
33831 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE
33832 If defined, this target hook points to an array of `struct
33833 attribute_spec' (defined in `tree.h') specifying the machine
33834 specific attributes for this target and some of the restrictions
33835 on the entities to which these attributes are applied and the
33836 arguments they take.
33838 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1,
33840 If defined, this target hook is a function which returns zero if
33841 the attributes on TYPE1 and TYPE2 are incompatible, one if they
33842 are compatible, and two if they are nearly compatible (which
33843 causes a warning to be generated). If this is not defined,
33844 machine-specific attributes are supposed always to be compatible.
33846 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE)
33847 If defined, this target hook is a function which assigns default
33848 attributes to the newly defined TYPE.
33850 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree
33852 Define this target hook if the merging of type attributes needs
33853 special handling. If defined, the result is a list of the combined
33854 `TYPE_ATTRIBUTES' of TYPE1 and TYPE2. It is assumed that
33855 `comptypes' has already been called and returned 1. This function
33856 may call `merge_attributes' to handle machine-independent merging.
33858 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree
33860 Define this target hook if the merging of decl attributes needs
33861 special handling. If defined, the result is a list of the combined
33862 `DECL_ATTRIBUTES' of OLDDECL and NEWDECL. NEWDECL is a duplicate
33863 declaration of OLDDECL. Examples of when this is needed are when
33864 one attribute overrides another, or when an attribute is nullified
33865 by a subsequent definition. This function may call
33866 `merge_attributes' to handle machine-independent merging.
33868 If the only target-specific handling you require is `dllimport'
33869 for Microsoft Windows targets, you should define the macro
33870 `TARGET_DLLIMPORT_DECL_ATTRIBUTES' to `1'. The compiler will then
33871 define a function called `merge_dllimport_decl_attributes' which
33872 can then be defined as the expansion of
33873 `TARGET_MERGE_DECL_ATTRIBUTES'. You can also add
33874 `handle_dll_attribute' in the attribute table for your port to
33875 perform initial processing of the `dllimport' and `dllexport'
33876 attributes. This is done in `i386/cygwin.h' and `i386/i386.c',
33879 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree
33881 DECL is a variable or function with `__attribute__((dllimport))'
33882 specified. Use this hook if the target needs to add extra
33883 validation checks to `handle_dll_attribute'.
33885 -- Macro: TARGET_DECLSPEC
33886 Define this macro to a nonzero value if you want to treat
33887 `__declspec(X)' as equivalent to `__attribute((X))'. By default,
33888 this behavior is enabled only for targets that define
33889 `TARGET_DLLIMPORT_DECL_ATTRIBUTES'. The current implementation of
33890 `__declspec' is via a built-in macro, but you should not rely on
33891 this implementation detail.
33893 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree
33895 Define this target hook if you want to be able to add attributes
33896 to a decl when it is being created. This is normally useful for
33897 back ends which wish to implement a pragma by using the attributes
33898 which correspond to the pragma's effect. The NODE argument is the
33899 decl which is being created. The ATTR_PTR argument is a pointer
33900 to the attribute list for this decl. The list itself should not
33901 be modified, since it may be shared with other decls, but
33902 attributes may be chained on the head of the list and `*ATTR_PTR'
33903 modified to point to the new attributes, or a copy of the list may
33904 be made if further changes are needed.
33906 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree
33908 This target hook returns `true' if it is ok to inline FNDECL into
33909 the current function, despite its having target-specific
33910 attributes, `false' otherwise. By default, if a function has a
33911 target specific attribute attached to it, it will not be inlined.
33913 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL,
33914 tree NAME, tree ARGS, int FLAGS)
33915 This hook is called to parse the `attribute(option("..."))', and
33916 it allows the function to set different target machine compile time
33917 options for the current function that might be different than the
33918 options specified on the command line. The hook should return
33919 `true' if the options are valid.
33921 The hook should set the DECL_FUNCTION_SPECIFIC_TARGET field in the
33922 function declaration to hold a pointer to a target specific STRUCT
33923 CL_TARGET_OPTION structure.
33925 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR)
33926 This hook is called to save any additional target specific
33927 information in the STRUCT CL_TARGET_OPTION structure for function
33928 specific options. *Note Option file format::.
33930 -- Target Hook: void TARGET_OPTION_RESTORE (struct cl_target_option
33932 This hook is called to restore any additional target specific
33933 information in the STRUCT CL_TARGET_OPTION structure for function
33936 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT,
33937 struct cl_target_option *PTR)
33938 This hook is called to print any additional target specific
33939 information in the STRUCT CL_TARGET_OPTION structure for function
33942 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (target ARGS)
33943 This target hook parses the options for `#pragma GCC option' to
33944 set the machine specific options for functions that occur later in
33945 the input stream. The options should be the same as handled by the
33946 `TARGET_VALID_OPTION_ATTRIBUTE_P' hook.
33948 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE)
33949 This target hook returns `false' if the CALLER function cannot
33950 inline CALLEE, based on target specific information. By default,
33951 inlining is not allowed if the callee function has function
33952 specific target options and the caller does not use the same
33956 File: gccint.info, Node: Emulated TLS, Next: MIPS Coprocessors, Prev: Target Attributes, Up: Target Macros
33958 17.26 Emulating TLS
33959 ===================
33961 For targets whose psABI does not provide Thread Local Storage via
33962 specific relocations and instruction sequences, an emulation layer is
33963 used. A set of target hooks allows this emulation layer to be
33964 configured for the requirements of a particular target. For instance
33965 the psABI may in fact specify TLS support in terms of an emulation
33968 The emulation layer works by creating a control object for every TLS
33969 object. To access the TLS object, a lookup function is provided which,
33970 when given the address of the control object, will return the address
33971 of the current thread's instance of the TLS object.
33973 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS
33974 Contains the name of the helper function that uses a TLS control
33975 object to locate a TLS instance. The default causes libgcc's
33976 emulated TLS helper function to be used.
33978 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON
33979 Contains the name of the helper function that should be used at
33980 program startup to register TLS objects that are implicitly
33981 initialized to zero. If this is `NULL', all TLS objects will have
33982 explicit initializers. The default causes libgcc's emulated TLS
33983 registration function to be used.
33985 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION
33986 Contains the name of the section in which TLS control variables
33987 should be placed. The default of `NULL' allows these to be placed
33990 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION
33991 Contains the name of the section in which TLS initializers should
33992 be placed. The default of `NULL' allows these to be placed in any
33995 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX
33996 Contains the prefix to be prepended to TLS control variable names.
33997 The default of `NULL' uses a target-specific prefix.
33999 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX
34000 Contains the prefix to be prepended to TLS initializer objects.
34001 The default of `NULL' uses a target-specific prefix.
34003 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME)
34004 Specifies a function that generates the FIELD_DECLs for a TLS
34005 control object type. TYPE is the RECORD_TYPE the fields are for
34006 and NAME should be filled with the structure tag, if the default of
34007 `__emutls_object' is unsuitable. The default creates a type
34008 suitable for libgcc's emulated TLS function.
34010 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree
34012 Specifies a function that generates the CONSTRUCTOR to initialize a
34013 TLS control object. VAR is the TLS control object, DECL is the
34014 TLS object and TMPL_ADDR is the address of the initializer. The
34015 default initializes libgcc's emulated TLS control object.
34017 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED
34018 Specifies whether the alignment of TLS control variable objects is
34019 fixed and should not be increased as some backends may do to
34020 optimize single objects. The default is false.
34022 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
34023 Specifies whether a DWARF `DW_OP_form_tls_address' location
34024 descriptor may be used to describe emulated TLS control objects.
34027 File: gccint.info, Node: MIPS Coprocessors, Next: PCH Target, Prev: Emulated TLS, Up: Target Macros
34029 17.27 Defining coprocessor specifics for MIPS targets.
34030 ======================================================
34032 The MIPS specification allows MIPS implementations to have as many as 4
34033 coprocessors, each with as many as 32 private registers. GCC supports
34034 accessing these registers and transferring values between the registers
34035 and memory using asm-ized variables. For example:
34037 register unsigned int cp0count asm ("c0r1");
34042 ("c0r1" is the default name of register 1 in coprocessor 0; alternate
34043 names may be added as described below, or the default names may be
34044 overridden entirely in `SUBTARGET_CONDITIONAL_REGISTER_USAGE'.)
34046 Coprocessor registers are assumed to be epilogue-used; sets to them
34047 will be preserved even if it does not appear that the register is used
34048 again later in the function.
34050 Another note: according to the MIPS spec, coprocessor 1 (if present) is
34051 the FPU. One accesses COP1 registers through standard mips
34052 floating-point support; they are not included in this mechanism.
34054 There is one macro used in defining the MIPS coprocessor interface
34055 which you may want to override in subtargets; it is described below.
34057 -- Macro: ALL_COP_ADDITIONAL_REGISTER_NAMES
34058 A comma-separated list (with leading comma) of pairs describing the
34059 alternate names of coprocessor registers. The format of each
34061 { ALTERNATENAME, REGISTER_NUMBER}
34065 File: gccint.info, Node: PCH Target, Next: C++ ABI, Prev: MIPS Coprocessors, Up: Target Macros
34067 17.28 Parameters for Precompiled Header Validity Checking
34068 =========================================================
34070 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ)
34071 This hook returns a pointer to the data needed by
34072 `TARGET_PCH_VALID_P' and sets `*SZ' to the size of the data in
34075 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA,
34077 This hook checks whether the options used to create a PCH file are
34078 compatible with the current settings. It returns `NULL' if so and
34079 a suitable error message if not. Error messages will be presented
34080 to the user and must be localized using `_(MSG)'.
34082 DATA is the data that was returned by `TARGET_GET_PCH_VALIDITY'
34083 when the PCH file was created and SZ is the size of that data in
34084 bytes. It's safe to assume that the data was created by the same
34085 version of the compiler, so no format checking is needed.
34087 The default definition of `default_pch_valid_p' should be suitable
34090 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int
34092 If this hook is nonnull, the default implementation of
34093 `TARGET_PCH_VALID_P' will use it to check for compatible values of
34094 `target_flags'. PCH_FLAGS specifies the value that `target_flags'
34095 had when the PCH file was created. The return value is the same
34096 as for `TARGET_PCH_VALID_P'.
34099 File: gccint.info, Node: C++ ABI, Next: Named Address Spaces, Prev: PCH Target, Up: Target Macros
34101 17.29 C++ ABI parameters
34102 ========================
34104 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void)
34105 Define this hook to override the integer type used for guard
34106 variables. These are used to implement one-time construction of
34107 static objects. The default is long_long_integer_type_node.
34109 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void)
34110 This hook determines how guard variables are used. It should
34111 return `false' (the default) if the first byte should be used. A
34112 return value of `true' indicates that only the least significant
34113 bit should be used.
34115 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE)
34116 This hook returns the size of the cookie to use when allocating an
34117 array whose elements have the indicated TYPE. Assumes that it is
34118 already known that a cookie is needed. The default is `max(sizeof
34119 (size_t), alignof(type))', as defined in section 2.7 of the
34120 IA64/Generic C++ ABI.
34122 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void)
34123 This hook should return `true' if the element size should be
34124 stored in array cookies. The default is to return `false'.
34126 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int
34128 If defined by a backend this hook allows the decision made to
34129 export class TYPE to be overruled. Upon entry IMPORT_EXPORT will
34130 contain 1 if the class is going to be exported, -1 if it is going
34131 to be imported and 0 otherwise. This function should return the
34132 modified value and perform any other actions necessary to support
34133 the backend's targeted operating system.
34135 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
34136 This hook should return `true' if constructors and destructors
34137 return the address of the object created/destroyed. The default
34138 is to return `false'.
34140 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
34141 This hook returns true if the key method for a class (i.e., the
34142 method which, if defined in the current translation unit, causes
34143 the virtual table to be emitted) may be an inline function. Under
34144 the standard Itanium C++ ABI the key method may be an inline
34145 function so long as the function is not declared inline in the
34146 class definition. Under some variants of the ABI, an inline
34147 function can never be the key method. The default is to return
34150 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree
34152 DECL is a virtual table, virtual table table, typeinfo object, or
34153 other similar implicit class data object that will be emitted with
34154 external linkage in this translation unit. No ELF visibility has
34155 been explicitly specified. If the target needs to specify a
34156 visibility other than that of the containing class, use this hook
34157 to set `DECL_VISIBILITY' and `DECL_VISIBILITY_SPECIFIED'.
34159 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
34160 This hook returns true (the default) if virtual tables and other
34161 similar implicit class data objects are always COMDAT if they have
34162 external linkage. If this hook returns false, then class data for
34163 classes whose virtual table will be emitted in only one translation
34164 unit will not be COMDAT.
34166 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)
34167 This hook returns true (the default) if the RTTI information for
34168 the basic types which is defined in the C++ runtime should always
34169 be COMDAT, false if it should not be COMDAT.
34171 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void)
34172 This hook returns true if `__aeabi_atexit' (as defined by the ARM
34173 EABI) should be used to register static destructors when
34174 `-fuse-cxa-atexit' is in effect. The default is to return false
34175 to use `__cxa_atexit'.
34177 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
34178 This hook returns true if the target `atexit' function can be used
34179 in the same manner as `__cxa_atexit' to register C++ static
34180 destructors. This requires that `atexit'-registered functions in
34181 shared libraries are run in the correct order when the libraries
34182 are unloaded. The default is to return false.
34184 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE)
34185 TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has
34186 just been defined. Use this hook to make adjustments to the class
34187 (eg, tweak visibility or perform any other required target
34191 File: gccint.info, Node: Named Address Spaces, Next: Misc, Prev: C++ ABI, Up: Target Macros
34193 17.30 Adding support for named address spaces
34194 =============================================
34196 The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards
34197 committee, `Programming Languages - C - Extensions to support embedded
34198 processors', specifies a syntax for embedded processors to specify
34199 alternate address spaces. You can configure a GCC port to support
34200 section 5.1 of the draft report to add support for address spaces other
34201 than the default address space. These address spaces are new keywords
34202 that are similar to the `volatile' and `const' type attributes.
34204 Pointers to named address spaces can have a different size than
34205 pointers to the generic address space.
34207 For example, the SPU port uses the `__ea' address space to refer to
34208 memory in the host processor, rather than memory local to the SPU
34209 processor. Access to memory in the `__ea' address space involves
34210 issuing DMA operations to move data between the host processor and the
34211 local processor memory address space. Pointers in the `__ea' address
34212 space are either 32 bits or 64 bits based on the `-mea32' or `-mea64'
34213 switches (native SPU pointers are always 32 bits).
34215 Internally, address spaces are represented as a small integer in the
34216 range 0 to 15 with address space 0 being reserved for the generic
34219 -- Macro: TARGET_ADDR_SPACE_KEYWORDS
34220 A list of `ADDR_SPACE_KEYWORD' macros to define each named address
34221 keyword. The `ADDR_SPACE_KEYWORD' macro takes two arguments, the
34222 keyword string and the number of the named address space. For
34223 example, the SPU port uses the following to declare `__ea' as the
34224 keyword for named address space #1:
34225 #define ADDR_SPACE_EA 1
34226 #define TARGET_ADDR_SPACE_KEYWORDS ADDR_SPACE_KEYWORD ("__ea", ADDR_SPACE_EA)
34228 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_POINTER_MODE
34229 (addr_space_t ADDRESS_SPACE)
34230 Define this to return the machine mode to use for pointers to
34231 ADDRESS_SPACE if the target supports named address spaces. The
34232 default version of this hook returns `ptr_mode' for the generic
34233 address space only.
34235 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE
34236 (addr_space_t ADDRESS_SPACE)
34237 Define this to return the machine mode to use for addresses in
34238 ADDRESS_SPACE if the target supports named address spaces. The
34239 default version of this hook returns `Pmode' for the generic
34240 address space only.
34242 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum
34243 machine_mode MODE, addr_space_t AS)
34244 Define this to return nonzero if the port can handle pointers with
34245 machine mode MODE to address space AS. This target hook is the
34246 same as the `TARGET_VALID_POINTER_MODE' target hook, except that
34247 it includes explicit named address space support. The default
34248 version of this hook returns true for the modes returned by either
34249 the `TARGET_ADDR_SPACE_POINTER_MODE' or
34250 `TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given
34253 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (enum
34254 machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS)
34255 Define this to return true if EXP is a valid address for mode MODE
34256 in the named address space AS. The STRICT parameter says whether
34257 strict addressing is in effect after reload has finished. This
34258 target hook is the same as the `TARGET_LEGITIMATE_ADDRESS_P'
34259 target hook, except that it includes explicit named address space
34262 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx
34263 OLDX, enum machine_mode MODE, addr_space_t AS)
34264 Define this to modify an invalid address X to be a valid address
34265 with mode MODE in the named address space AS. This target hook is
34266 the same as the `TARGET_LEGITIMIZE_ADDRESS' target hook, except
34267 that it includes explicit named address space support.
34269 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t
34270 SUPERSET, addr_space_t SUBSET)
34271 Define this to return whether the SUBSET named address space is
34272 contained within the SUPERSET named address space. Pointers to a
34273 named address space that is a subset of another named address space
34274 will be converted automatically without a cast if used together in
34275 arithmetic operations. Pointers to a superset address space can be
34276 converted to pointers to a subset address space via explicit casts.
34278 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE,
34280 Define this to convert the pointer expression represented by the
34281 RTL OP with type FROM_TYPE that points to a named address space to
34282 a new pointer expression with type TO_TYPE that points to a
34283 different named address space. When this hook it called, it is
34284 guaranteed that one of the two address spaces is a subset of the
34285 other, as determined by the `TARGET_ADDR_SPACE_SUBSET_P' target
34289 File: gccint.info, Node: Misc, Prev: Named Address Spaces, Up: Target Macros
34291 17.31 Miscellaneous Parameters
34292 ==============================
34294 Here are several miscellaneous parameters.
34296 -- Macro: HAS_LONG_COND_BRANCH
34297 Define this boolean macro to indicate whether or not your
34298 architecture has conditional branches that can span all of memory.
34299 It is used in conjunction with an optimization that partitions
34300 hot and cold basic blocks into separate sections of the
34301 executable. If this macro is set to false, gcc will convert any
34302 conditional branches that attempt to cross between sections into
34303 unconditional branches or indirect jumps.
34305 -- Macro: HAS_LONG_UNCOND_BRANCH
34306 Define this boolean macro to indicate whether or not your
34307 architecture has unconditional branches that can span all of
34308 memory. It is used in conjunction with an optimization that
34309 partitions hot and cold basic blocks into separate sections of the
34310 executable. If this macro is set to false, gcc will convert any
34311 unconditional branches that attempt to cross between sections into
34314 -- Macro: CASE_VECTOR_MODE
34315 An alias for a machine mode name. This is the machine mode that
34316 elements of a jump-table should have.
34318 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY)
34319 Optional: return the preferred mode for an `addr_diff_vec' when
34320 the minimum and maximum offset are known. If you define this, it
34321 enables extra code in branch shortening to deal with
34322 `addr_diff_vec'. To make this work, you also have to define
34323 `INSN_ALIGN' and make the alignment for `addr_diff_vec' explicit.
34324 The BODY argument is provided so that the offset_unsigned and scale
34325 flags can be updated.
34327 -- Macro: CASE_VECTOR_PC_RELATIVE
34328 Define this macro to be a C expression to indicate when jump-tables
34329 should contain relative addresses. You need not define this macro
34330 if jump-tables never contain relative addresses, or jump-tables
34331 should contain relative addresses only when `-fPIC' or `-fPIC' is
34334 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void)
34335 This function return the smallest number of different values for
34336 which it is best to use a jump-table instead of a tree of
34337 conditional branches. The default is four for machines with a
34338 `casesi' instruction and five otherwise. This is best for most
34341 -- Macro: CASE_USE_BIT_TESTS
34342 Define this macro to be a C expression to indicate whether C switch
34343 statements may be implemented by a sequence of bit tests. This is
34344 advantageous on processors that can efficiently implement left
34345 shift of 1 by the number of bits held in a register, but
34346 inappropriate on targets that would require a loop. By default,
34347 this macro returns `true' if the target defines an `ashlsi3'
34348 pattern, and `false' otherwise.
34350 -- Macro: WORD_REGISTER_OPERATIONS
34351 Define this macro if operations between registers with integral
34352 mode smaller than a word are always performed on the entire
34353 register. Most RISC machines have this property and most CISC
34356 -- Macro: LOAD_EXTEND_OP (MEM_MODE)
34357 Define this macro to be a C expression indicating when insns that
34358 read memory in MEM_MODE, an integral mode narrower than a word,
34359 set the bits outside of MEM_MODE to be either the sign-extension
34360 or the zero-extension of the data read. Return `SIGN_EXTEND' for
34361 values of MEM_MODE for which the insn sign-extends, `ZERO_EXTEND'
34362 for which it zero-extends, and `UNKNOWN' for other modes.
34364 This macro is not called with MEM_MODE non-integral or with a width
34365 greater than or equal to `BITS_PER_WORD', so you may return any
34366 value in this case. Do not define this macro if it would always
34367 return `UNKNOWN'. On machines where this macro is defined, you
34368 will normally define it as the constant `SIGN_EXTEND' or
34371 You may return a non-`UNKNOWN' value even if for some hard
34372 registers the sign extension is not performed, if for the
34373 `REGNO_REG_CLASS' of these hard registers
34374 `CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is
34375 MEM_MODE and the TO mode is any integral mode larger than this but
34376 not larger than `word_mode'.
34378 You must return `UNKNOWN' if for some hard registers that allow
34379 this mode, `CANNOT_CHANGE_MODE_CLASS' says that they cannot change
34380 to `word_mode', but that they can change to another integral mode
34381 that is larger then MEM_MODE but still smaller than `word_mode'.
34383 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND
34384 Define this macro if loading short immediate values into registers
34387 -- Macro: FIXUNS_TRUNC_LIKE_FIX_TRUNC
34388 Define this macro if the same instructions that convert a floating
34389 point number to a signed fixed point number also convert validly
34390 to an unsigned one.
34392 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum
34394 When `-ffast-math' is in effect, GCC tries to optimize divisions
34395 by the same divisor, by turning them into multiplications by the
34396 reciprocal. This target hook specifies the minimum number of
34397 divisions that should be there for GCC to perform the optimization
34398 for a variable of mode MODE. The default implementation returns 3
34399 if the machine has an instruction for the division, and 2 if it
34403 The maximum number of bytes that a single instruction can move
34404 quickly between memory and registers or between two memory
34407 -- Macro: MAX_MOVE_MAX
34408 The maximum number of bytes that a single instruction can move
34409 quickly between memory and registers or between two memory
34410 locations. If this is undefined, the default is `MOVE_MAX'.
34411 Otherwise, it is the constant value that is the largest value that
34412 `MOVE_MAX' can have at run-time.
34414 -- Macro: SHIFT_COUNT_TRUNCATED
34415 A C expression that is nonzero if on this machine the number of
34416 bits actually used for the count of a shift operation is equal to
34417 the number of bits needed to represent the size of the object
34418 being shifted. When this macro is nonzero, the compiler will
34419 assume that it is safe to omit a sign-extend, zero-extend, and
34420 certain bitwise `and' instructions that truncates the count of a
34421 shift operation. On machines that have instructions that act on
34422 bit-fields at variable positions, which may include `bit test'
34423 instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables
34424 deletion of truncations of the values that serve as arguments to
34425 bit-field instructions.
34427 If both types of instructions truncate the count (for shifts) and
34428 position (for bit-field operations), or if no variable-position
34429 bit-field instructions exist, you should define this macro.
34431 However, on some machines, such as the 80386 and the 680x0,
34432 truncation only applies to shift operations and not the (real or
34433 pretended) bit-field operations. Define `SHIFT_COUNT_TRUNCATED'
34434 to be zero on such machines. Instead, add patterns to the `md'
34435 file that include the implied truncation of the shift instructions.
34437 You need not define this macro if it would always have the value
34440 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK
34441 (enum machine_mode MODE)
34442 This function describes how the standard shift patterns for MODE
34443 deal with shifts by negative amounts or by more than the width of
34444 the mode. *Note shift patterns::.
34446 On many machines, the shift patterns will apply a mask M to the
34447 shift count, meaning that a fixed-width shift of X by Y is
34448 equivalent to an arbitrary-width shift of X by Y & M. If this is
34449 true for mode MODE, the function should return M, otherwise it
34450 should return 0. A return value of 0 indicates that no particular
34451 behavior is guaranteed.
34453 Note that, unlike `SHIFT_COUNT_TRUNCATED', this function does
34454 _not_ apply to general shift rtxes; it applies only to instructions
34455 that are generated by the named shift patterns.
34457 The default implementation of this function returns
34458 `GET_MODE_BITSIZE (MODE) - 1' if `SHIFT_COUNT_TRUNCATED' and 0
34459 otherwise. This definition is always safe, but if
34460 `SHIFT_COUNT_TRUNCATED' is false, and some shift patterns
34461 nevertheless truncate the shift count, you may get better code by
34464 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)
34465 A C expression which is nonzero if on this machine it is safe to
34466 "convert" an integer of INPREC bits to one of OUTPREC bits (where
34467 OUTPREC is smaller than INPREC) by merely operating on it as if it
34468 had only OUTPREC bits.
34470 On many machines, this expression can be 1.
34472 When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for
34473 modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result.
34474 If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in
34475 such cases may improve things.
34477 -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE,
34478 enum machine_mode REP_MODE)
34479 The representation of an integral mode can be such that the values
34480 are always extended to a wider integral mode. Return
34481 `SIGN_EXTEND' if values of MODE are represented in sign-extended
34482 form to REP_MODE. Return `UNKNOWN' otherwise. (Currently, none
34483 of the targets use zero-extended representation this way so unlike
34484 `LOAD_EXTEND_OP', `TARGET_MODE_REP_EXTENDED' is expected to return
34485 either `SIGN_EXTEND' or `UNKNOWN'. Also no target extends MODE to
34486 REP_MODE so that REP_MODE is not the next widest integral mode and
34487 currently we take advantage of this fact.)
34489 Similarly to `LOAD_EXTEND_OP' you may return a non-`UNKNOWN' value
34490 even if the extension is not performed on certain hard registers
34491 as long as for the `REGNO_REG_CLASS' of these hard registers
34492 `CANNOT_CHANGE_MODE_CLASS' returns nonzero.
34494 Note that `TARGET_MODE_REP_EXTENDED' and `LOAD_EXTEND_OP' describe
34495 two related properties. If you define `TARGET_MODE_REP_EXTENDED
34496 (mode, word_mode)' you probably also want to define
34497 `LOAD_EXTEND_OP (mode)' to return the same type of extension.
34499 In order to enforce the representation of `mode',
34500 `TRULY_NOOP_TRUNCATION' should return false when truncating to
34503 -- Macro: STORE_FLAG_VALUE
34504 A C expression describing the value returned by a comparison
34505 operator with an integral mode and stored by a store-flag
34506 instruction (`sCOND') when the condition is true. This
34507 description must apply to _all_ the `sCOND' patterns and all the
34508 comparison operators whose results have a `MODE_INT' mode.
34510 A value of 1 or -1 means that the instruction implementing the
34511 comparison operator returns exactly 1 or -1 when the comparison is
34512 true and 0 when the comparison is false. Otherwise, the value
34513 indicates which bits of the result are guaranteed to be 1 when the
34514 comparison is true. This value is interpreted in the mode of the
34515 comparison operation, which is given by the mode of the first
34516 operand in the `sCOND' pattern. Either the low bit or the sign
34517 bit of `STORE_FLAG_VALUE' be on. Presently, only those bits are
34518 used by the compiler.
34520 If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will
34521 generate code that depends only on the specified bits. It can also
34522 replace comparison operators with equivalent operations if they
34523 cause the required bits to be set, even if the remaining bits are
34524 undefined. For example, on a machine whose comparison operators
34525 return an `SImode' value and where `STORE_FLAG_VALUE' is defined as
34526 `0x80000000', saying that just the sign bit is relevant, the
34529 (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0))
34531 can be converted to
34533 (ashift:SI X (const_int N))
34535 where N is the appropriate shift count to move the bit being
34536 tested into the sign bit.
34538 There is no way to describe a machine that always sets the
34539 low-order bit for a true value, but does not guarantee the value
34540 of any other bits, but we do not know of any machine that has such
34541 an instruction. If you are trying to port GCC to such a machine,
34542 include an instruction to perform a logical-and of the result with
34543 1 in the pattern for the comparison operators and let us know at
34546 Often, a machine will have multiple instructions that obtain a
34547 value from a comparison (or the condition codes). Here are rules
34548 to guide the choice of value for `STORE_FLAG_VALUE', and hence the
34549 instructions to be used:
34551 * Use the shortest sequence that yields a valid definition for
34552 `STORE_FLAG_VALUE'. It is more efficient for the compiler to
34553 "normalize" the value (convert it to, e.g., 1 or 0) than for
34554 the comparison operators to do so because there may be
34555 opportunities to combine the normalization with other
34558 * For equal-length sequences, use a value of 1 or -1, with -1
34559 being slightly preferred on machines with expensive jumps and
34560 1 preferred on other machines.
34562 * As a second choice, choose a value of `0x80000001' if
34563 instructions exist that set both the sign and low-order bits
34564 but do not define the others.
34566 * Otherwise, use a value of `0x80000000'.
34568 Many machines can produce both the value chosen for
34569 `STORE_FLAG_VALUE' and its negation in the same number of
34570 instructions. On those machines, you should also define a pattern
34571 for those cases, e.g., one matching
34573 (set A (neg:M (ne:M B C)))
34575 Some machines can also perform `and' or `plus' operations on
34576 condition code values with less instructions than the corresponding
34577 `sCOND' insn followed by `and' or `plus'. On those machines,
34578 define the appropriate patterns. Use the names `incscc' and
34579 `decscc', respectively, for the patterns which perform `plus' or
34580 `minus' operations on condition code values. See `rs6000.md' for
34581 some examples. The GNU Superoptizer can be used to find such
34582 instruction sequences on other machines.
34584 If this macro is not defined, the default value, 1, is used. You
34585 need not define `STORE_FLAG_VALUE' if the machine has no store-flag
34586 instructions, or if the value generated by these instructions is 1.
34588 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE)
34589 A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is
34590 returned when comparison operators with floating-point results are
34591 true. Define this macro on machines that have comparison
34592 operations that return floating-point values. If there are no
34593 such operations, do not define this macro.
34595 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE)
34596 A C expression that gives a rtx representing the nonzero true
34597 element for vector comparisons. The returned rtx should be valid
34598 for the inner mode of MODE which is guaranteed to be a vector
34599 mode. Define this macro on machines that have vector comparison
34600 operations that return a vector result. If there are no such
34601 operations, do not define this macro. Typically, this macro is
34602 defined as `const1_rtx' or `constm1_rtx'. This macro may return
34603 `NULL_RTX' to prevent the compiler optimizing such vector
34604 comparison operations for the given mode.
34606 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
34607 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
34608 A C expression that indicates whether the architecture defines a
34609 value for `clz' or `ctz' with a zero operand. A result of `0'
34610 indicates the value is undefined. If the value is defined for
34611 only the RTL expression, the macro should evaluate to `1'; if the
34612 value applies also to the corresponding optab entry (which is
34613 normally the case if it expands directly into the corresponding
34614 RTL), then the macro should evaluate to `2'. In the cases where
34615 the value is defined, VALUE should be set to this value.
34617 If this macro is not defined, the value of `clz' or `ctz' at zero
34618 is assumed to be undefined.
34620 This macro must be defined if the target's expansion for `ffs'
34621 relies on a particular value to get correct results. Otherwise it
34622 is not necessary, though it may be used to optimize some corner
34623 cases, and to provide a default expansion for the `ffs' optab.
34625 Note that regardless of this macro the "definedness" of `clz' and
34626 `ctz' at zero do _not_ extend to the builtin functions visible to
34627 the user. Thus one may be free to adjust the value at will to
34628 match the target expansion of these operations without fear of
34632 An alias for the machine mode for pointers. On most machines,
34633 define this to be the integer mode corresponding to the width of a
34634 hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit
34635 machines. On some machines you must define this to be one of the
34636 partial integer modes, such as `PSImode'.
34638 The width of `Pmode' must be at least as large as the value of
34639 `POINTER_SIZE'. If it is not equal, you must define the macro
34640 `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to
34643 -- Macro: FUNCTION_MODE
34644 An alias for the machine mode used for memory references to
34645 functions being called, in `call' RTL expressions. On most CISC
34646 machines, where an instruction can begin at any byte address, this
34647 should be `QImode'. On most RISC machines, where all instructions
34648 have fixed size and alignment, this should be a mode with the same
34649 size and alignment as the machine instruction words - typically
34650 `SImode' or `HImode'.
34652 -- Macro: STDC_0_IN_SYSTEM_HEADERS
34653 In normal operation, the preprocessor expands `__STDC__' to the
34654 constant 1, to signify that GCC conforms to ISO Standard C. On
34655 some hosts, like Solaris, the system compiler uses a different
34656 convention, where `__STDC__' is normally 0, but is 1 if the user
34657 specifies strict conformance to the C Standard.
34659 Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host
34660 convention when processing system header files, but when
34661 processing user files `__STDC__' will always expand to 1.
34663 -- Macro: NO_IMPLICIT_EXTERN_C
34664 Define this macro if the system header files support C++ as well
34665 as C. This macro inhibits the usual method of using system header
34666 files in C++, which is to pretend that the file's contents are
34667 enclosed in `extern "C" {...}'.
34669 -- Macro: REGISTER_TARGET_PRAGMAS ()
34670 Define this macro if you want to implement any target-specific
34671 pragmas. If defined, it is a C expression which makes a series of
34672 calls to `c_register_pragma' or `c_register_pragma_with_expansion'
34673 for each pragma. The macro may also do any setup required for the
34676 The primary reason to define this macro is to provide
34677 compatibility with other compilers for the same target. In
34678 general, we discourage definition of target-specific pragmas for
34681 If the pragma can be implemented by attributes then you should
34682 consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as
34685 Preprocessor macros that appear on pragma lines are not expanded.
34686 All `#pragma' directives that do not match any registered pragma
34687 are silently ignored, unless the user specifies
34688 `-Wunknown-pragmas'.
34690 -- Function: void c_register_pragma (const char *SPACE, const char
34691 *NAME, void (*CALLBACK) (struct cpp_reader *))
34692 -- Function: void c_register_pragma_with_expansion (const char *SPACE,
34693 const char *NAME, void (*CALLBACK) (struct cpp_reader *))
34694 Each call to `c_register_pragma' or
34695 `c_register_pragma_with_expansion' establishes one pragma. The
34696 CALLBACK routine will be called when the preprocessor encounters a
34699 #pragma [SPACE] NAME ...
34701 SPACE is the case-sensitive namespace of the pragma, or `NULL' to
34702 put the pragma in the global namespace. The callback routine
34703 receives PFILE as its first argument, which can be passed on to
34704 cpplib's functions if necessary. You can lex tokens after the
34705 NAME by calling `pragma_lex'. Tokens that are not read by the
34706 callback will be silently ignored. The end of the line is
34707 indicated by a token of type `CPP_EOF'. Macro expansion occurs on
34708 the arguments of pragmas registered with
34709 `c_register_pragma_with_expansion' but not on the arguments of
34710 pragmas registered with `c_register_pragma'.
34712 Note that the use of `pragma_lex' is specific to the C and C++
34713 compilers. It will not work in the Java or Fortran compilers, or
34714 any other language compilers for that matter. Thus if
34715 `pragma_lex' is going to be called from target-specific code, it
34716 must only be done so when building the C and C++ compilers. This
34717 can be done by defining the variables `c_target_objs' and
34718 `cxx_target_objs' in the target entry in the `config.gcc' file.
34719 These variables should name the target-specific, language-specific
34720 object file which contains the code that uses `pragma_lex'. Note
34721 it will also be necessary to add a rule to the makefile fragment
34722 pointed to by `tmake_file' that shows how to build this object
34725 -- Macro: HANDLE_SYSV_PRAGMA
34726 Define this macro (to a value of 1) if you want the System V style
34727 pragmas `#pragma pack(<n>)' and `#pragma weak <name> [=<value>]'
34728 to be supported by gcc.
34730 The pack pragma specifies the maximum alignment (in bytes) of
34731 fields within a structure, in much the same way as the
34732 `__aligned__' and `__packed__' `__attribute__'s do. A pack value
34733 of zero resets the behavior to the default.
34735 A subtlety for Microsoft Visual C/C++ style bit-field packing
34736 (e.g. -mms-bitfields) for targets that support it: When a
34737 bit-field is inserted into a packed record, the whole size of the
34738 underlying type is used by one or more same-size adjacent
34739 bit-fields (that is, if its long:3, 32 bits is used in the record,
34740 and any additional adjacent long bit-fields are packed into the
34741 same chunk of 32 bits. However, if the size changes, a new field
34742 of that size is allocated).
34744 If both MS bit-fields and `__attribute__((packed))' are used, the
34745 latter will take precedence. If `__attribute__((packed))' is used
34746 on a single field when MS bit-fields are in use, it will take
34747 precedence for that field, but the alignment of the rest of the
34748 structure may affect its placement.
34750 The weak pragma only works if `SUPPORTS_WEAK' and
34751 `ASM_WEAKEN_LABEL' are defined. If enabled it allows the creation
34752 of specifically named weak labels, optionally with a value.
34754 -- Macro: HANDLE_PRAGMA_PACK_PUSH_POP
34755 Define this macro (to a value of 1) if you want to support the
34756 Win32 style pragmas `#pragma pack(push[,N])' and `#pragma
34757 pack(pop)'. The `pack(push,[N])' pragma specifies the maximum
34758 alignment (in bytes) of fields within a structure, in much the
34759 same way as the `__aligned__' and `__packed__' `__attribute__'s
34760 do. A pack value of zero resets the behavior to the default.
34761 Successive invocations of this pragma cause the previous values to
34762 be stacked, so that invocations of `#pragma pack(pop)' will return
34763 to the previous value.
34765 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION
34766 Define this macro, as well as `HANDLE_SYSV_PRAGMA', if macros
34767 should be expanded in the arguments of `#pragma pack'.
34769 -- Target Hook: bool TARGET_HANDLE_PRAGMA_EXTERN_PREFIX
34770 True if `#pragma extern_prefix' is to be supported.
34772 -- Macro: TARGET_DEFAULT_PACK_STRUCT
34773 If your target requires a structure packing default other than 0
34774 (meaning the machine default), define this macro to the necessary
34775 value (in bytes). This must be a value that would also be valid
34776 to use with `#pragma pack()' (that is, a small power of two).
34778 -- Macro: DOLLARS_IN_IDENTIFIERS
34779 Define this macro to control use of the character `$' in
34780 identifier names for the C family of languages. 0 means `$' is
34781 not allowed by default; 1 means it is allowed. 1 is the default;
34782 there is no need to define this macro in that case.
34784 -- Macro: NO_DOLLAR_IN_LABEL
34785 Define this macro if the assembler does not accept the character
34786 `$' in label names. By default constructors and destructors in
34787 G++ have `$' in the identifiers. If this macro is defined, `.' is
34790 -- Macro: NO_DOT_IN_LABEL
34791 Define this macro if the assembler does not accept the character
34792 `.' in label names. By default constructors and destructors in G++
34793 have names that use `.'. If this macro is defined, these names
34794 are rewritten to avoid `.'.
34796 -- Macro: INSN_SETS_ARE_DELAYED (INSN)
34797 Define this macro as a C expression that is nonzero if it is safe
34798 for the delay slot scheduler to place instructions in the delay
34799 slot of INSN, even if they appear to use a resource set or
34800 clobbered in INSN. INSN is always a `jump_insn' or an `insn'; GCC
34801 knows that every `call_insn' has this behavior. On machines where
34802 some `insn' or `jump_insn' is really a function call and hence has
34803 this behavior, you should define this macro.
34805 You need not define this macro if it would always return zero.
34807 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN)
34808 Define this macro as a C expression that is nonzero if it is safe
34809 for the delay slot scheduler to place instructions in the delay
34810 slot of INSN, even if they appear to set or clobber a resource
34811 referenced in INSN. INSN is always a `jump_insn' or an `insn'.
34812 On machines where some `insn' or `jump_insn' is really a function
34813 call and its operands are registers whose use is actually in the
34814 subroutine it calls, you should define this macro. Doing so
34815 allows the delay slot scheduler to move instructions which copy
34816 arguments into the argument registers into the delay slot of INSN.
34818 You need not define this macro if it would always return zero.
34820 -- Macro: MULTIPLE_SYMBOL_SPACES
34821 Define this macro as a C expression that is nonzero if, in some
34822 cases, global symbols from one translation unit may not be bound
34823 to undefined symbols in another translation unit without user
34824 intervention. For instance, under Microsoft Windows symbols must
34825 be explicitly imported from shared libraries (DLLs).
34827 You need not define this macro if it would always evaluate to zero.
34829 -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree
34830 INPUTS, tree CLOBBERS)
34831 This target hook should add to CLOBBERS `STRING_CST' trees for any
34832 hard regs the port wishes to automatically clobber for an asm. It
34833 should return the result of the last `tree_cons' used to add a
34834 clobber. The OUTPUTS, INPUTS and CLOBBER lists are the
34835 corresponding parameters to the asm and may be inspected to avoid
34836 clobbering a register that is an input or output of the asm. You
34837 can use `tree_overlaps_hard_reg_set', declared in `tree.h', to test
34838 for overlap with regards to asm-declared registers.
34840 -- Macro: MATH_LIBRARY
34841 Define this macro as a C string constant for the linker argument
34842 to link in the system math library, or `""' if the target does not
34843 have a separate math library.
34845 You need only define this macro if the default of `"-lm"' is wrong.
34847 -- Macro: LIBRARY_PATH_ENV
34848 Define this macro as a C string constant for the environment
34849 variable that specifies where the linker should look for libraries.
34851 You need only define this macro if the default of `"LIBRARY_PATH"'
34854 -- Macro: TARGET_POSIX_IO
34855 Define this macro if the target supports the following POSIX file
34856 functions, access, mkdir and file locking with fcntl / F_SETLKW.
34857 Defining `TARGET_POSIX_IO' will enable the test coverage code to
34858 use file locking when exiting a program, which avoids race
34859 conditions if the program has forked. It will also create
34860 directories at run-time for cross-profiling.
34862 -- Macro: MAX_CONDITIONAL_EXECUTE
34863 A C expression for the maximum number of instructions to execute
34864 via conditional execution instructions instead of a branch. A
34865 value of `BRANCH_COST'+1 is the default if the machine does not
34866 use cc0, and 1 if it does use cc0.
34868 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR)
34869 Used if the target needs to perform machine-dependent
34870 modifications on the conditionals used for turning basic blocks
34871 into conditionally executed code. CE_INFO points to a data
34872 structure, `struct ce_if_block', which contains information about
34873 the currently processed blocks. TRUE_EXPR and FALSE_EXPR are the
34874 tests that are used for converting the then-block and the
34875 else-block, respectively. Set either TRUE_EXPR or FALSE_EXPR to a
34876 null pointer if the tests cannot be converted.
34878 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR,
34880 Like `IFCVT_MODIFY_TESTS', but used when converting more
34881 complicated if-statements into conditions combined by `and' and
34882 `or' operations. BB contains the basic block that contains the
34883 test that is currently being processed and about to be turned into
34886 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN)
34887 A C expression to modify the PATTERN of an INSN that is to be
34888 converted to conditional execution format. CE_INFO points to a
34889 data structure, `struct ce_if_block', which contains information
34890 about the currently processed blocks.
34892 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO)
34893 A C expression to perform any final machine dependent
34894 modifications in converting code to conditional execution. The
34895 involved basic blocks can be found in the `struct ce_if_block'
34896 structure that is pointed to by CE_INFO.
34898 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO)
34899 A C expression to cancel any machine dependent modifications in
34900 converting code to conditional execution. The involved basic
34901 blocks can be found in the `struct ce_if_block' structure that is
34902 pointed to by CE_INFO.
34904 -- Macro: IFCVT_INIT_EXTRA_FIELDS (CE_INFO)
34905 A C expression to initialize any extra fields in a `struct
34906 ce_if_block' structure, which are defined by the
34907 `IFCVT_EXTRA_FIELDS' macro.
34909 -- Macro: IFCVT_EXTRA_FIELDS
34910 If defined, it should expand to a set of field declarations that
34911 will be added to the `struct ce_if_block' structure. These should
34912 be initialized by the `IFCVT_INIT_EXTRA_FIELDS' macro.
34914 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void)
34915 If non-null, this hook performs a target-specific pass over the
34916 instruction stream. The compiler will run it at all optimization
34917 levels, just before the point at which it normally does
34918 delayed-branch scheduling.
34920 The exact purpose of the hook varies from target to target. Some
34921 use it to do transformations that are necessary for correctness,
34922 such as laying out in-function constant pools or avoiding hardware
34923 hazards. Others use it as an opportunity to do some
34924 machine-dependent optimizations.
34926 You need not implement the hook if it has nothing to do. The
34927 default definition is null.
34929 -- Target Hook: void TARGET_INIT_BUILTINS (void)
34930 Define this hook if you have any machine-specific built-in
34931 functions that need to be defined. It should be a function that
34932 performs the necessary setup.
34934 Machine specific built-in functions can be useful to expand
34935 special machine instructions that would otherwise not normally be
34936 generated because they have no equivalent in the source language
34937 (for example, SIMD vector instructions or prefetch instructions).
34939 To create a built-in function, call the function
34940 `lang_hooks.builtin_function' which is defined by the language
34941 front end. You can use any type nodes set up by
34942 `build_common_tree_nodes' and `build_common_tree_nodes_2'; only
34943 language front ends that use those two functions will call
34944 `TARGET_INIT_BUILTINS'.
34946 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool
34948 Define this hook if you have any machine-specific built-in
34949 functions that need to be defined. It should be a function that
34950 returns the builtin function declaration for the builtin function
34951 code CODE. If there is no such builtin and it cannot be
34952 initialized at this time if INITIALIZE_P is true the function
34953 should return `NULL_TREE'. If CODE is out of range the function
34954 should return `error_mark_node'.
34956 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx
34957 SUBTARGET, enum machine_mode MODE, int IGNORE)
34958 Expand a call to a machine specific built-in function that was set
34959 up by `TARGET_INIT_BUILTINS'. EXP is the expression for the
34960 function call; the result should go to TARGET if that is
34961 convenient, and have mode MODE if that is convenient. SUBTARGET
34962 may be used as the target for computing one of EXP's operands.
34963 IGNORE is nonzero if the value is to be ignored. This function
34964 should return the result of the call to the built-in function.
34966 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int
34967 LOC, tree FNDECL, void *ARGLIST)
34968 Select a replacement for a machine specific built-in function that
34969 was set up by `TARGET_INIT_BUILTINS'. This is done _before_
34970 regular type checking, and so allows the target to implement a
34971 crude form of function overloading. FNDECL is the declaration of
34972 the built-in function. ARGLIST is the list of arguments passed to
34973 the built-in function. The result is a complete expression that
34974 implements the operation, usually another `CALL_EXPR'. ARGLIST
34975 really has type `VEC(tree,gc)*'
34977 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, tree ARGLIST,
34979 Fold a call to a machine specific built-in function that was set
34980 up by `TARGET_INIT_BUILTINS'. FNDECL is the declaration of the
34981 built-in function. ARGLIST is the list of arguments passed to the
34982 built-in function. The result is another tree containing a
34983 simplified expression for the call's result. If IGNORE is true
34984 the value will be ignored.
34986 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const_rtx
34988 Take an instruction in INSN and return NULL if it is valid within a
34989 low-overhead loop, otherwise return a string explaining why doloop
34990 could not be applied.
34992 Many targets use special registers for low-overhead looping. For
34993 any instruction that clobbers these this function should return a
34994 string indicating the reason why the doloop could not be applied.
34995 By default, the RTL loop optimizer does not use a present doloop
34996 pattern for loops containing function calls or branch on table
34999 -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2)
35000 Take a branch insn in BRANCH1 and another in BRANCH2. Return true
35001 if redirecting BRANCH1 to the destination of BRANCH2 is possible.
35003 On some targets, branches may have a limited range. Optimizing the
35004 filling of delay slots can result in branches being redirected,
35005 and this may in turn cause a branch offset to overflow.
35007 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE)
35008 This target hook returns `true' if X is considered to be
35009 commutative. Usually, this is just COMMUTATIVE_P (X), but the HP
35010 PA doesn't consider PLUS to be commutative inside a MEM.
35011 OUTER_CODE is the rtx code of the enclosing rtl, if known,
35012 otherwise it is UNKNOWN.
35014 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG)
35015 When the initial value of a hard register has been copied in a
35016 pseudo register, it is often not necessary to actually allocate
35017 another register to this pseudo register, because the original
35018 hard register or a stack slot it has been saved into can be used.
35019 `TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register
35020 allocation once for each hard register that had its initial value
35021 copied by using `get_func_hard_reg_initial_val' or
35022 `get_hard_reg_initial_val'. Possible values are `NULL_RTX', if
35023 you don't want to do any special allocation, a `REG' rtx--that
35024 would typically be the hard register itself, if it is known not to
35025 be clobbered--or a `MEM'. If you are returning a `MEM', this is
35026 only a hint for the allocator; it might decide to use another
35027 register anyways. You may use `current_function_leaf_function' in
35028 the hook, functions that use `REG_N_SETS', to determine if the hard
35029 register in question will not be clobbered. The default value of
35030 this hook is `NULL', which disables any special allocation.
35032 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned
35034 This target hook returns nonzero if X, an `unspec' or
35035 `unspec_volatile' operation, might cause a trap. Targets can use
35036 this hook to enhance precision of analysis for `unspec' and
35037 `unspec_volatile' operations. You may call `may_trap_p_1' to
35038 analyze inner elements of X in which case FLAGS should be passed
35041 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL)
35042 The compiler invokes this hook whenever it changes its current
35043 function context (`cfun'). You can define this function if the
35044 back end needs to perform any initialization or reset actions on a
35045 per-function basis. For example, it may be used to implement
35046 function attributes that affect register usage or code generation
35047 patterns. The argument DECL is the declaration for the new
35048 function context, and may be null to indicate that the compiler
35049 has left a function context and is returning to processing at the
35050 top level. The default hook function does nothing.
35052 GCC sets `cfun' to a dummy function context during initialization
35053 of some parts of the back end. The hook function is not invoked
35054 in this situation; you need not worry about the hook being invoked
35055 recursively, or when the back end is in a partially-initialized
35056 state. `cfun' might be `NULL' to indicate processing at top level,
35057 outside of any function scope.
35059 -- Macro: TARGET_OBJECT_SUFFIX
35060 Define this macro to be a C string representing the suffix for
35061 object files on your target machine. If you do not define this
35062 macro, GCC will use `.o' as the suffix for object files.
35064 -- Macro: TARGET_EXECUTABLE_SUFFIX
35065 Define this macro to be a C string representing the suffix to be
35066 automatically added to executable files on your target machine.
35067 If you do not define this macro, GCC will use the null string as
35068 the suffix for executable files.
35070 -- Macro: COLLECT_EXPORT_LIST
35071 If defined, `collect2' will scan the individual object files
35072 specified on its command line and create an export list for the
35073 linker. Define this macro for systems like AIX, where the linker
35074 discards object files that are not referenced from `main' and uses
35077 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL)
35078 Define this macro to a C expression representing a variant of the
35079 method call MDECL, if Java Native Interface (JNI) methods must be
35080 invoked differently from other methods on your target. For
35081 example, on 32-bit Microsoft Windows, JNI methods must be invoked
35082 using the `stdcall' calling convention and this macro is then
35083 defined as this expression:
35085 build_type_attribute_variant (MDECL,
35087 (get_identifier ("stdcall"),
35090 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
35091 This target hook returns `true' past the point in which new jump
35092 instructions could be created. On machines that require a
35093 register for every jump such as the SHmedia ISA of SH5, this point
35094 would typically be reload, so this target hook should be defined
35095 to a function such as:
35098 cannot_modify_jumps_past_reload_p ()
35100 return (reload_completed || reload_in_progress);
35103 -- Target Hook: enum reg_class TARGET_BRANCH_TARGET_REGISTER_CLASS
35105 This target hook returns a register class for which branch target
35106 register optimizations should be applied. All registers in this
35107 class should be usable interchangeably. After reload, registers
35108 in this class will be re-allocated and loads will be hoisted out
35109 of loops and be subjected to inter-block scheduling.
35111 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool
35112 AFTER_PROLOGUE_EPILOGUE_GEN)
35113 Branch target register optimization will by default exclude
35114 callee-saved registers that are not already live during the
35115 current function; if this target hook returns true, they will be
35116 included. The target code must than make sure that all target
35117 registers in the class returned by
35118 `TARGET_BRANCH_TARGET_REGISTER_CLASS' that might need saving are
35119 saved. AFTER_PROLOGUE_EPILOGUE_GEN indicates if prologues and
35120 epilogues have already been generated. Note, even if you only
35121 return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, you still
35122 are likely to have to make special provisions in
35123 `INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved
35126 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void)
35127 This target hook returns true if the target supports conditional
35128 execution. This target hook is required only when the target has
35129 several different modes and they have different conditional
35130 execution capability, such as ARM.
35132 -- Macro: POWI_MAX_MULTS
35133 If defined, this macro is interpreted as a signed integer C
35134 expression that specifies the maximum number of floating point
35135 multiplications that should be emitted when expanding
35136 exponentiation by an integer constant inline. When this value is
35137 defined, exponentiation requiring more than this number of
35138 multiplications is implemented by calling the system library's
35139 `pow', `powf' or `powl' routines. The default value places no
35140 upper bound on the multiplication count.
35142 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char
35143 *IPREFIX, int STDINC)
35144 This target hook should register any extra include files for the
35145 target. The parameter STDINC indicates if normal include files
35146 are present. The parameter SYSROOT is the system root directory.
35147 The parameter IPREFIX is the prefix for the gcc directory.
35149 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const
35150 char *IPREFIX, int STDINC)
35151 This target hook should register any extra include files for the
35152 target before any standard headers. The parameter STDINC
35153 indicates if normal include files are present. The parameter
35154 SYSROOT is the system root directory. The parameter IPREFIX is
35155 the prefix for the gcc directory.
35157 -- Macro: void TARGET_OPTF (char *PATH)
35158 This target hook should register special include paths for the
35159 target. The parameter PATH is the include to register. On Darwin
35160 systems, this is used for Framework includes, which have semantics
35161 that are different from `-I'.
35163 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL)
35164 This target macro returns `true' if it is safe to use a local alias
35165 for a virtual function FNDECL when constructing thunks, `false'
35166 otherwise. By default, the macro returns `true' for all
35167 functions, if a target supports aliases (i.e. defines
35168 `ASM_OUTPUT_DEF'), `false' otherwise,
35170 -- Macro: TARGET_FORMAT_TYPES
35171 If defined, this macro is the name of a global variable containing
35172 target-specific format checking information for the `-Wformat'
35173 option. The default is to have no target-specific format checks.
35175 -- Macro: TARGET_N_FORMAT_TYPES
35176 If defined, this macro is the number of entries in
35177 `TARGET_FORMAT_TYPES'.
35179 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES
35180 If defined, this macro is the name of a global variable containing
35181 target-specific format overrides for the `-Wformat' option. The
35182 default is to have no target-specific format overrides. If defined,
35183 `TARGET_FORMAT_TYPES' must be defined, too.
35185 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT
35186 If defined, this macro specifies the number of entries in
35187 `TARGET_OVERRIDES_FORMAT_ATTRIBUTES'.
35189 -- Macro: TARGET_OVERRIDES_FORMAT_INIT
35190 If defined, this macro specifies the optional initialization
35191 routine for target specific customizations of the system printf
35192 and scanf formatter settings.
35194 -- Target Hook: bool TARGET_RELAXED_ORDERING
35195 If set to `true', means that the target's memory model does not
35196 guarantee that loads which do not depend on one another will access
35197 main memory in the order of the instruction stream; if ordering is
35198 important, an explicit memory barrier must be used. This is true
35199 of many recent processors which implement a policy of "relaxed,"
35200 "weak," or "release" memory consistency, such as Alpha, PowerPC,
35201 and ia64. The default is `false'.
35203 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN
35204 (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL)
35205 If defined, this macro returns the diagnostic message when it is
35206 illegal to pass argument VAL to function FUNCDECL with prototype
35209 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree
35210 FROMTYPE, const_tree TOTYPE)
35211 If defined, this macro returns the diagnostic message when it is
35212 invalid to convert from FROMTYPE to TOTYPE, or `NULL' if validity
35213 should be determined by the front end.
35215 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP,
35217 If defined, this macro returns the diagnostic message when it is
35218 invalid to apply operation OP (where unary plus is denoted by
35219 `CONVERT_EXPR') to an operand of type TYPE, or `NULL' if validity
35220 should be determined by the front end.
35222 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP,
35223 const_tree TYPE1, const_tree TYPE2)
35224 If defined, this macro returns the diagnostic message when it is
35225 invalid to apply operation OP to operands of types TYPE1 and
35226 TYPE2, or `NULL' if validity should be determined by the front end.
35228 -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree
35230 If defined, this macro returns the diagnostic message when it is
35231 invalid for functions to include parameters of type TYPE, or
35232 `NULL' if validity should be determined by the front end. This is
35233 currently used only by the C and C++ front ends.
35235 -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree
35237 If defined, this macro returns the diagnostic message when it is
35238 invalid for functions to have return type TYPE, or `NULL' if
35239 validity should be determined by the front end. This is currently
35240 used only by the C and C++ front ends.
35242 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE)
35243 If defined, this target hook returns the type to which values of
35244 TYPE should be promoted when they appear in expressions, analogous
35245 to the integer promotions, or `NULL_TREE' to use the front end's
35246 normal promotion rules. This hook is useful when there are
35247 target-specific types with special promotion rules. This is
35248 currently used only by the C and C++ front ends.
35250 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR)
35251 If defined, this hook returns the result of converting EXPR to
35252 TYPE. It should return the converted expression, or `NULL_TREE'
35253 to apply the front end's normal conversion rules. This hook is
35254 useful when there are target-specific types with special
35255 conversion rules. This is currently used only by the C and C++
35258 -- Macro: TARGET_USE_JCR_SECTION
35259 This macro determines whether to use the JCR section to register
35260 Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1
35261 if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true,
35264 -- Macro: OBJC_JBLEN
35265 This macro determines the size of the objective C jump buffer for
35266 the NeXT runtime. By default, OBJC_JBLEN is defined to an
35269 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE
35270 Define this macro if any target-specific attributes need to be
35271 attached to the functions in `libgcc' that provide low-level
35272 support for call stack unwinding. It is used in declarations in
35273 `unwind-generic.h' and the associated definitions of those
35276 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void)
35277 Define this macro to update the current function stack boundary if
35280 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void)
35281 This hook should return an rtx for Dynamic Realign Argument
35282 Pointer (DRAP) if a different argument pointer register is needed
35283 to access the function's argument list due to stack realignment.
35284 Return `NULL' if no DRAP is needed.
35286 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void)
35287 When optimization is disabled, this hook indicates whether or not
35288 arguments should be allocated to stack slots. Normally, GCC
35289 allocates stacks slots for arguments when not optimizing in order
35290 to make debugging easier. However, when a function is declared
35291 with `__attribute__((naked))', there is no stack frame, and the
35292 compiler cannot safely move arguments from the registers in which
35293 they are passed to the stack. Therefore, this hook should return
35294 true in general, but false for naked functions. The default
35295 implementation always returns true.
35297 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR
35298 On some architectures it can take multiple instructions to
35299 synthesize a constant. If there is another constant already in a
35300 register that is close enough in value then it is preferable that
35301 the new constant is computed from this register using immediate
35302 addition or subtraction. We accomplish this through CSE. Besides
35303 the value of the constant we also add a lower and an upper
35304 constant anchor to the available expressions. These are then
35305 queried when encountering new constants. The anchors are computed
35306 by rounding the constant up and down to a multiple of the value of
35307 `TARGET_CONST_ANCHOR'. `TARGET_CONST_ANCHOR' should be the
35308 maximum positive value accepted by immediate-add plus one. We
35309 currently assume that the value of `TARGET_CONST_ANCHOR' is a
35310 power of 2. For example, on MIPS, where add-immediate takes a
35311 16-bit signed value, `TARGET_CONST_ANCHOR' is set to `0x8000'.
35312 The default value is zero, which disables this optimization.
35315 File: gccint.info, Node: Host Config, Next: Fragments, Prev: Target Macros, Up: Top
35317 18 Host Configuration
35318 *********************
35320 Most details about the machine and system on which the compiler is
35321 actually running are detected by the `configure' script. Some things
35322 are impossible for `configure' to detect; these are described in two
35323 ways, either by macros defined in a file named `xm-MACHINE.h' or by
35324 hook functions in the file specified by the OUT_HOST_HOOK_OBJ variable
35325 in `config.gcc'. (The intention is that very few hosts will need a
35326 header file but nearly every fully supported host will need to override
35329 If you need to define only a few macros, and they have simple
35330 definitions, consider using the `xm_defines' variable in your
35331 `config.gcc' entry instead of creating a host configuration header.
35332 *Note System Config::.
35336 * Host Common:: Things every host probably needs implemented.
35337 * Filesystem:: Your host can't have the letter `a' in filenames?
35338 * Host Misc:: Rare configuration options for hosts.
35341 File: gccint.info, Node: Host Common, Next: Filesystem, Up: Host Config
35346 Some things are just not portable, even between similar operating
35347 systems, and are too difficult for autoconf to detect. They get
35348 implemented using hook functions in the file specified by the
35349 HOST_HOOK_OBJ variable in `config.gcc'.
35351 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)
35352 This host hook is used to set up handling for extra signals. The
35353 most common thing to do in this hook is to detect stack overflow.
35355 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int
35357 This host hook returns the address of some space that is likely to
35358 be free in some subsequent invocation of the compiler. We intend
35359 to load the PCH data at this address such that the data need not
35360 be relocated. The area should be able to hold SIZE bytes. If the
35361 host uses `mmap', FD is an open file descriptor that can be used
35364 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS,
35365 size_t SIZE, int FD, size_t OFFSET)
35366 This host hook is called when a PCH file is about to be loaded.
35367 We want to load SIZE bytes from FD at OFFSET into memory at
35368 ADDRESS. The given address will be the result of a previous
35369 invocation of `HOST_HOOKS_GT_PCH_GET_ADDRESS'. Return -1 if we
35370 couldn't allocate SIZE bytes at ADDRESS. Return 0 if the memory
35371 is allocated but the data is not loaded. Return 1 if the hook has
35372 performed everything.
35374 If the implementation uses reserved address space, free any
35375 reserved space beyond SIZE, regardless of the return value. If no
35376 PCH will be loaded, this hook may be called with SIZE zero, in
35377 which case all reserved address space should be freed.
35379 Do not try to handle values of ADDRESS that could not have been
35380 returned by this executable; just return -1. Such values usually
35381 indicate an out-of-date PCH file (built by some other GCC
35382 executable), and such a PCH file won't work.
35384 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);
35385 This host hook returns the alignment required for allocating
35386 virtual memory. Usually this is the same as getpagesize, but on
35387 some hosts the alignment for reserving memory differs from the
35388 pagesize for committing memory.
35391 File: gccint.info, Node: Filesystem, Next: Host Misc, Prev: Host Common, Up: Host Config
35393 18.2 Host Filesystem
35394 ====================
35396 GCC needs to know a number of things about the semantics of the host
35397 machine's filesystem. Filesystems with Unix and MS-DOS semantics are
35398 automatically detected. For other systems, you can define the
35399 following macros in `xm-MACHINE.h'.
35401 `HAVE_DOS_BASED_FILE_SYSTEM'
35402 This macro is automatically defined by `system.h' if the host file
35403 system obeys the semantics defined by MS-DOS instead of Unix. DOS
35404 file systems are case insensitive, file specifications may begin
35405 with a drive letter, and both forward slash and backslash (`/' and
35406 `\') are directory separators.
35410 If defined, these macros expand to character constants specifying
35411 separators for directory names within a file specification.
35412 `system.h' will automatically give them appropriate values on Unix
35413 and MS-DOS file systems. If your file system is neither of these,
35414 define one or both appropriately in `xm-MACHINE.h'.
35416 However, operating systems like VMS, where constructing a pathname
35417 is more complicated than just stringing together directory names
35418 separated by a special character, should not define either of these
35422 If defined, this macro should expand to a character constant
35423 specifying the separator for elements of search paths. The default
35424 value is a colon (`:'). DOS-based systems usually, but not
35425 always, use semicolon (`;').
35428 Define this macro if the host system is VMS.
35430 `HOST_OBJECT_SUFFIX'
35431 Define this macro to be a C string representing the suffix for
35432 object files on your host machine. If you do not define this
35433 macro, GCC will use `.o' as the suffix for object files.
35435 `HOST_EXECUTABLE_SUFFIX'
35436 Define this macro to be a C string representing the suffix for
35437 executable files on your host machine. If you do not define this
35438 macro, GCC will use the null string as the suffix for executable
35442 A pathname defined by the host operating system, which can be
35443 opened as a file and written to, but all the information written
35444 is discarded. This is commonly known as a "bit bucket" or "null
35445 device". If you do not define this macro, GCC will use
35446 `/dev/null' as the bit bucket. If the host does not support a bit
35447 bucket, define this macro to an invalid filename.
35449 `UPDATE_PATH_HOST_CANONICALIZE (PATH)'
35450 If defined, a C statement (sans semicolon) that performs
35451 host-dependent canonicalization when a path used in a compilation
35452 driver or preprocessor is canonicalized. PATH is a malloc-ed path
35453 to be canonicalized. If the C statement does canonicalize PATH
35454 into a different buffer, the old path should be freed and the new
35455 buffer should have been allocated with malloc.
35458 Define this macro to be a C string representing the format to use
35459 for constructing the index part of debugging dump file names. The
35460 resultant string must fit in fifteen bytes. The full filename
35461 will be the concatenation of: the prefix of the assembler file
35462 name, the string resulting from applying this format to an index
35463 number, and a string unique to each dump file kind, e.g. `rtl'.
35465 If you do not define this macro, GCC will use `.%02d.'. You should
35466 define this macro if using the default will create an invalid file
35469 `DELETE_IF_ORDINARY'
35470 Define this macro to be a C statement (sans semicolon) that
35471 performs host-dependent removal of ordinary temp files in the
35472 compilation driver.
35474 If you do not define this macro, GCC will use the default version.
35475 You should define this macro if the default version does not
35476 reliably remove the temp file as, for example, on VMS which allows
35477 multiple versions of a file.
35479 `HOST_LACKS_INODE_NUMBERS'
35480 Define this macro if the host filesystem does not report
35481 meaningful inode numbers in struct stat.
35484 File: gccint.info, Node: Host Misc, Prev: Filesystem, Up: Host Config
35490 A C expression for the status code to be returned when the compiler
35491 exits after serious errors. The default is the system-provided
35492 macro `EXIT_FAILURE', or `1' if the system doesn't define that
35493 macro. Define this macro only if these defaults are incorrect.
35495 `SUCCESS_EXIT_CODE'
35496 A C expression for the status code to be returned when the compiler
35497 exits without serious errors. (Warnings are not serious errors.)
35498 The default is the system-provided macro `EXIT_SUCCESS', or `0' if
35499 the system doesn't define that macro. Define this macro only if
35500 these defaults are incorrect.
35503 Define this macro if GCC should use the C implementation of
35504 `alloca' provided by `libiberty.a'. This only affects how some
35505 parts of the compiler itself allocate memory. It does not change
35508 When GCC is built with a compiler other than itself, the C `alloca'
35509 is always used. This is because most other implementations have
35510 serious bugs. You should define this macro only on a system where
35511 no stack-based `alloca' can possibly work. For instance, if a
35512 system has a small limit on the size of the stack, GCC's builtin
35513 `alloca' will not work reliably.
35515 `COLLECT2_HOST_INITIALIZATION'
35516 If defined, a C statement (sans semicolon) that performs
35517 host-dependent initialization when `collect2' is being initialized.
35519 `GCC_DRIVER_HOST_INITIALIZATION'
35520 If defined, a C statement (sans semicolon) that performs
35521 host-dependent initialization when a compilation driver is being
35524 `HOST_LONG_LONG_FORMAT'
35525 If defined, the string used to indicate an argument of type `long
35526 long' to functions like `printf'. The default value is `"ll"'.
35529 If defined, the string used to indicate an argument of type `long'
35530 to functions like `printf'. The default value is `"l"'.
35533 If defined, the string used to indicate an argument of type `void
35534 *' to functions like `printf'. The default value is `"%p"'.
35536 In addition, if `configure' generates an incorrect definition of any
35537 of the macros in `auto-host.h', you can override that definition in a
35538 host configuration header. If you need to do this, first see if it is
35539 possible to fix `configure'.
35542 File: gccint.info, Node: Fragments, Next: Collect2, Prev: Host Config, Up: Top
35544 19 Makefile Fragments
35545 *********************
35547 When you configure GCC using the `configure' script, it will construct
35548 the file `Makefile' from the template file `Makefile.in'. When it does
35549 this, it can incorporate makefile fragments from the `config'
35550 directory. These are used to set Makefile parameters that are not
35551 amenable to being calculated by autoconf. The list of fragments to
35552 incorporate is set by `config.gcc' (and occasionally `config.build' and
35553 `config.host'); *Note System Config::.
35555 Fragments are named either `t-TARGET' or `x-HOST', depending on
35556 whether they are relevant to configuring GCC to produce code for a
35557 particular target, or to configuring GCC to run on a particular host.
35558 Here TARGET and HOST are mnemonics which usually have some relationship
35559 to the canonical system name, but no formal connection.
35561 If these files do not exist, it means nothing needs to be added for a
35562 given target or host. Most targets need a few `t-TARGET' fragments,
35563 but needing `x-HOST' fragments is rare.
35567 * Target Fragment:: Writing `t-TARGET' files.
35568 * Host Fragment:: Writing `x-HOST' files.
35571 File: gccint.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments
35573 19.1 Target Makefile Fragments
35574 ==============================
35576 Target makefile fragments can set these Makefile variables.
35579 Compiler flags to use when compiling `libgcc2.c'.
35582 A list of source file names to be compiled or assembled and
35583 inserted into `libgcc.a'.
35585 `Floating Point Emulation'
35586 To have GCC include software floating point libraries in `libgcc.a'
35587 define `FPBIT' and `DPBIT' along with a few rules as follows:
35588 # We want fine grained libraries, so use the new code
35589 # to build the floating point emulation libraries.
35594 fp-bit.c: $(srcdir)/config/fp-bit.c
35595 echo '#define FLOAT' > fp-bit.c
35596 cat $(srcdir)/config/fp-bit.c >> fp-bit.c
35598 dp-bit.c: $(srcdir)/config/fp-bit.c
35599 cat $(srcdir)/config/fp-bit.c > dp-bit.c
35601 You may need to provide additional #defines at the beginning of
35602 `fp-bit.c' and `dp-bit.c' to control target endianness and other
35605 `CRTSTUFF_T_CFLAGS'
35606 Special flags used when compiling `crtstuff.c'. *Note
35609 `CRTSTUFF_T_CFLAGS_S'
35610 Special flags used when compiling `crtstuff.c' for shared linking.
35611 Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'.
35612 *Note Initialization::.
35615 For some targets, invoking GCC in different ways produces objects
35616 that can not be linked together. For example, for some targets GCC
35617 produces both big and little endian code. For these targets, you
35618 must arrange for multiple versions of `libgcc.a' to be compiled,
35619 one for each set of incompatible options. When GCC invokes the
35620 linker, it arranges to link in the right version of `libgcc.a',
35621 based on the command line options used.
35623 The `MULTILIB_OPTIONS' macro lists the set of options for which
35624 special versions of `libgcc.a' must be built. Write options that
35625 are mutually incompatible side by side, separated by a slash.
35626 Write options that may be used together separated by a space. The
35627 build procedure will build all combinations of compatible options.
35629 For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020
35630 msoft-float', `Makefile' will build special versions of `libgcc.a'
35631 using the following sets of options: `-m68000', `-m68020',
35632 `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'.
35634 `MULTILIB_DIRNAMES'
35635 If `MULTILIB_OPTIONS' is used, this variable specifies the
35636 directory names that should be used to hold the various libraries.
35637 Write one element in `MULTILIB_DIRNAMES' for each element in
35638 `MULTILIB_OPTIONS'. If `MULTILIB_DIRNAMES' is not used, the
35639 default value will be `MULTILIB_OPTIONS', with all slashes treated
35642 For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020
35643 msoft-float', then the default value of `MULTILIB_DIRNAMES' is
35644 `m68000 m68020 msoft-float'. You may specify a different value if
35645 you desire a different set of directory names.
35648 Sometimes the same option may be written in two different ways.
35649 If an option is listed in `MULTILIB_OPTIONS', GCC needs to know
35650 about any synonyms. In that case, set `MULTILIB_MATCHES' to a
35651 list of items of the form `option=option' to describe all relevant
35652 synonyms. For example, `m68000=mc68000 m68020=mc68020'.
35654 `MULTILIB_EXCEPTIONS'
35655 Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being
35656 specified, there are combinations that should not be built. In
35657 that case, set `MULTILIB_EXCEPTIONS' to be all of the switch
35658 exceptions in shell case syntax that should not be built.
35660 For example the ARM processor cannot execute both hardware floating
35661 point instructions and the reduced size THUMB instructions at the
35662 same time, so there is no need to build libraries with both of
35663 these options enabled. Therefore `MULTILIB_EXCEPTIONS' is set to:
35664 *mthumb/*mhard-float*
35666 `MULTILIB_EXTRA_OPTS'
35667 Sometimes it is desirable that when building multiple versions of
35668 `libgcc.a' certain options should always be passed on to the
35669 compiler. In that case, set `MULTILIB_EXTRA_OPTS' to be the list
35670 of options to be used for all builds. If you set this, you should
35671 probably set `CRTSTUFF_T_CFLAGS' to a dash followed by it.
35673 `NATIVE_SYSTEM_HEADER_DIR'
35674 If the default location for system headers is not `/usr/include',
35675 you must set this to the directory containing the headers. This
35676 value should match the value of the `SYSTEM_INCLUDE_DIR' macro.
35679 Unfortunately, setting `MULTILIB_EXTRA_OPTS' is not enough, since
35680 it does not affect the build of target libraries, at least not the
35681 build of the default multilib. One possible work-around is to use
35682 `DRIVER_SELF_SPECS' to bring options from the `specs' file as if
35683 they had been passed in the compiler driver command line.
35684 However, you don't want to be adding these options after the
35685 toolchain is installed, so you can instead tweak the `specs' file
35686 that will be used during the toolchain build, while you still
35687 install the original, built-in `specs'. The trick is to set
35688 `SPECS' to some other filename (say `specs.install'), that will
35689 then be created out of the built-in specs, and introduce a
35690 `Makefile' rule to generate the `specs' file that's going to be
35691 used at build time out of your `specs.install'.
35694 These are extra flags to pass to the C compiler. They are used
35695 both when building GCC, and when compiling things with the
35696 just-built GCC. This variable is deprecated and should not be
35700 File: gccint.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments
35702 19.2 Host Makefile Fragments
35703 ============================
35705 The use of `x-HOST' fragments is discouraged. You should only use it
35706 for makefile dependencies.
35709 File: gccint.info, Node: Collect2, Next: Header Dirs, Prev: Fragments, Up: Top
35714 GCC uses a utility called `collect2' on nearly all systems to arrange
35715 to call various initialization functions at start time.
35717 The program `collect2' works by linking the program once and looking
35718 through the linker output file for symbols with particular names
35719 indicating they are constructor functions. If it finds any, it creates
35720 a new temporary `.c' file containing a table of them, compiles it, and
35721 links the program a second time including that file.
35723 The actual calls to the constructors are carried out by a subroutine
35724 called `__main', which is called (automatically) at the beginning of
35725 the body of `main' (provided `main' was compiled with GNU CC). Calling
35726 `__main' is necessary, even when compiling C code, to allow linking C
35727 and C++ object code together. (If you use `-nostdlib', you get an
35728 unresolved reference to `__main', since it's defined in the standard
35729 GCC library. Include `-lgcc' at the end of your compiler command line
35730 to resolve this reference.)
35732 The program `collect2' is installed as `ld' in the directory where the
35733 passes of the compiler are installed. When `collect2' needs to find
35734 the _real_ `ld', it tries the following file names:
35736 * a hard coded linker file name, if GCC was configured with the
35737 `--with-ld' option.
35739 * `real-ld' in the directories listed in the compiler's search
35742 * `real-ld' in the directories listed in the environment variable
35745 * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
35748 * `ld' in the compiler's search directories, except that `collect2'
35749 will not execute itself recursively.
35753 "The compiler's search directories" means all the directories where
35754 `gcc' searches for passes of the compiler. This includes directories
35755 that you specify with `-B'.
35757 Cross-compilers search a little differently:
35759 * `real-ld' in the compiler's search directories.
35761 * `TARGET-real-ld' in `PATH'.
35763 * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
35766 * `ld' in the compiler's search directories.
35768 * `TARGET-ld' in `PATH'.
35770 `collect2' explicitly avoids running `ld' using the file name under
35771 which `collect2' itself was invoked. In fact, it remembers up a list
35772 of such names--in case one copy of `collect2' finds another copy (or
35773 version) of `collect2' installed as `ld' in a second place in the
35776 `collect2' searches for the utilities `nm' and `strip' using the same
35777 algorithm as above for `ld'.
35780 File: gccint.info, Node: Header Dirs, Next: Type Information, Prev: Collect2, Up: Top
35782 21 Standard Header File Directories
35783 ***********************************
35785 `GCC_INCLUDE_DIR' means the same thing for native and cross. It is
35786 where GCC stores its private include files, and also where GCC stores
35787 the fixed include files. A cross compiled GCC runs `fixincludes' on
35788 the header files in `$(tooldir)/include'. (If the cross compilation
35789 header files need to be fixed, they must be installed before GCC is
35790 built. If the cross compilation header files are already suitable for
35791 GCC, nothing special need be done).
35793 `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross. It
35794 is where `g++' looks first for header files. The C++ library installs
35795 only target independent header files in that directory.
35797 `LOCAL_INCLUDE_DIR' is used only by native compilers. GCC doesn't
35798 install anything there. It is normally `/usr/local/include'. This is
35799 where local additions to a packaged system should place header files.
35801 `CROSS_INCLUDE_DIR' is used only by cross compilers. GCC doesn't
35802 install anything there.
35804 `TOOL_INCLUDE_DIR' is used for both native and cross compilers. It is
35805 the place for other packages to install header files that GCC will use.
35806 For a cross-compiler, this is the equivalent of `/usr/include'. When
35807 you build a cross-compiler, `fixincludes' processes any header files in
35811 File: gccint.info, Node: Type Information, Next: Plugins, Prev: Header Dirs, Up: Top
35813 22 Memory Management and Type Information
35814 *****************************************
35816 GCC uses some fairly sophisticated memory management techniques, which
35817 involve determining information about GCC's data structures from GCC's
35818 source code and using this information to perform garbage collection and
35819 implement precompiled headers.
35821 A full C parser would be too complicated for this task, so a limited
35822 subset of C is interpreted and special markers are used to determine
35823 what parts of the source to look at. All `struct' and `union'
35824 declarations that define data structures that are allocated under
35825 control of the garbage collector must be marked. All global variables
35826 that hold pointers to garbage-collected memory must also be marked.
35827 Finally, all global variables that need to be saved and restored by a
35828 precompiled header must be marked. (The precompiled header mechanism
35829 can only save static variables if they're scalar. Complex data
35830 structures must be allocated in garbage-collected memory to be saved in
35831 a precompiled header.)
35833 The full format of a marker is
35834 GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...))
35835 but in most cases no options are needed. The outer double parentheses
35836 are still necessary, though: `GTY(())'. Markers can appear:
35838 * In a structure definition, before the open brace;
35840 * In a global variable declaration, after the keyword `static' or
35843 * In a structure field definition, before the name of the field.
35845 Here are some examples of marking simple data structures and globals.
35852 typedef struct GTY(()) TAG
35857 static GTY(()) struct TAG *LIST; /* points to GC memory */
35858 static GTY(()) int COUNTER; /* save counter in a PCH */
35860 The parser understands simple typedefs such as `typedef struct TAG
35861 *NAME;' and `typedef int NAME;'. These don't need to be marked.
35865 * GTY Options:: What goes inside a `GTY(())'.
35866 * GGC Roots:: Making global variables GGC roots.
35867 * Files:: How the generated files work.
35868 * Invoking the garbage collector:: How to invoke the garbage collector.
35871 File: gccint.info, Node: GTY Options, Next: GGC Roots, Up: Type Information
35873 22.1 The Inside of a `GTY(())'
35874 ==============================
35876 Sometimes the C code is not enough to fully describe the type
35877 structure. Extra information can be provided with `GTY' options and
35878 additional markers. Some options take a parameter, which may be either
35879 a string or a type name, depending on the parameter. If an option
35880 takes no parameter, it is acceptable either to omit the parameter
35881 entirely, or to provide an empty string as a parameter. For example,
35882 `GTY ((skip))' and `GTY ((skip ("")))' are equivalent.
35884 When the parameter is a string, often it is a fragment of C code. Four
35885 special escapes may be used in these strings, to refer to pieces of the
35886 data structure being marked:
35889 The current structure.
35892 The structure that immediately contains the current structure.
35895 The outermost structure that contains the current structure.
35898 A partial expression of the form `[i1][i2]...' that indexes the
35899 array item currently being marked.
35901 For instance, suppose that you have a structure of the form
35908 and `b' is a variable of type `struct B'. When marking `b.foo[11]',
35909 `%h' would expand to `b.foo[11]', `%0' and `%1' would both expand to
35910 `b', and `%a' would expand to `[11]'.
35912 As in ordinary C, adjacent strings will be concatenated; this is
35913 helpful when you have a complicated expression.
35914 GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE"
35915 " ? TYPE_NEXT_VARIANT (&%h.generic)"
35916 " : TREE_CHAIN (&%h.generic)")))
35918 The available options are:
35920 `length ("EXPRESSION")'
35921 There are two places the type machinery will need to be explicitly
35922 told the length of an array. The first case is when a structure
35923 ends in a variable-length array, like this:
35924 struct GTY(()) rtvec_def {
35925 int num_elem; /* number of elements */
35926 rtx GTY ((length ("%h.num_elem"))) elem[1];
35929 In this case, the `length' option is used to override the specified
35930 array length (which should usually be `1'). The parameter of the
35931 option is a fragment of C code that calculates the length.
35933 The second case is when a structure or a global variable contains a
35934 pointer to an array, like this:
35936 GTY ((length ("%h.regno_pointer_align_length"))) regno_decl;
35937 In this case, `regno_decl' has been allocated by writing something
35940 ggc_alloc (x->regno_pointer_align_length * sizeof (tree));
35941 and the `length' provides the length of the field.
35943 This second use of `length' also works on global variables, like:
35944 static GTY((length ("reg_base_value_size")))
35945 rtx *reg_base_value;
35948 If `skip' is applied to a field, the type machinery will ignore it.
35949 This is somewhat dangerous; the only safe use is in a union when
35950 one field really isn't ever used.
35952 `desc ("EXPRESSION")'
35955 The type machinery needs to be told which field of a `union' is
35956 currently active. This is done by giving each field a constant
35957 `tag' value, and then specifying a discriminator using `desc'.
35958 The value of the expression given by `desc' is compared against
35959 each `tag' value, each of which should be different. If no `tag'
35960 is matched, the field marked with `default' is used if there is
35961 one, otherwise no field in the union will be marked.
35963 In the `desc' option, the "current structure" is the union that it
35964 discriminates. Use `%1' to mean the structure containing it.
35965 There are no escapes available to the `tag' option, since it is a
35969 struct GTY(()) tree_binding
35971 struct tree_common common;
35972 union tree_binding_u {
35973 tree GTY ((tag ("0"))) scope;
35974 struct cp_binding_level * GTY ((tag ("1"))) level;
35975 } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope;
35979 In this example, the value of BINDING_HAS_LEVEL_P when applied to a
35980 `struct tree_binding *' is presumed to be 0 or 1. If 1, the type
35981 mechanism will treat the field `level' as being present and if 0,
35982 will treat the field `scope' as being present.
35986 Sometimes it's convenient to define some data structure to work on
35987 generic pointers (that is, `PTR') and then use it with a specific
35988 type. `param_is' specifies the real type pointed to, and
35989 `use_param' says where in the generic data structure that type
35992 For instance, to have a `htab_t' that points to trees, one would
35993 write the definition of `htab_t' like this:
35994 typedef struct GTY(()) {
35996 void ** GTY ((use_param, ...)) entries;
35999 and then declare variables like this:
36000 static htab_t GTY ((param_is (union tree_node))) ict;
36004 In more complicated cases, the data structure might need to work on
36005 several different types, which might not necessarily all be
36006 pointers. For this, `param1_is' through `param9_is' may be used to
36007 specify the real type of a field identified by `use_param1' through
36011 When a structure contains another structure that is parameterized,
36012 there's no need to do anything special, the inner structure
36013 inherits the parameters of the outer one. When a structure
36014 contains a pointer to a parameterized structure, the type
36015 machinery won't automatically detect this (it could, it just
36016 doesn't yet), so it's necessary to tell it that the pointed-to
36017 structure should use the same parameters as the outer structure.
36018 This is done by marking the pointer with the `use_params' option.
36021 `deletable', when applied to a global variable, indicates that when
36022 garbage collection runs, there's no need to mark anything pointed
36023 to by this variable, it can just be set to `NULL' instead. This
36024 is used to keep a list of free structures around for re-use.
36026 `if_marked ("EXPRESSION")'
36027 Suppose you want some kinds of object to be unique, and so you put
36028 them in a hash table. If garbage collection marks the hash table,
36029 these objects will never be freed, even if the last other
36030 reference to them goes away. GGC has special handling to deal
36031 with this: if you use the `if_marked' option on a global hash
36032 table, GGC will call the routine whose name is the parameter to
36033 the option on each hash table entry. If the routine returns
36034 nonzero, the hash table entry will be marked as usual. If the
36035 routine returns zero, the hash table entry will be deleted.
36037 The routine `ggc_marked_p' can be used to determine if an element
36038 has been marked already; in fact, the usual case is to use
36039 `if_marked ("ggc_marked_p")'.
36041 `mark_hook ("HOOK-ROUTINE-NAME")'
36042 If provided for a structure or union type, the given
36043 HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine
36044 called when the garbage collector has just marked the data as
36045 reachable. This routine should not change the data, or call any ggc
36046 routine. Its only argument is a pointer to the just marked (const)
36047 structure or union.
36050 When applied to a field, `maybe_undef' indicates that it's OK if
36051 the structure that this fields points to is never defined, so long
36052 as this field is always `NULL'. This is used to avoid requiring
36053 backends to define certain optional structures. It doesn't work
36054 with language frontends.
36056 `nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")'
36057 The type machinery expects all pointers to point to the start of an
36058 object. Sometimes for abstraction purposes it's convenient to have
36059 a pointer which points inside an object. So long as it's possible
36060 to convert the original object to and from the pointer, such
36061 pointers can still be used. TYPE is the type of the original
36062 object, the TO EXPRESSION returns the pointer given the original
36063 object, and the FROM EXPRESSION returns the original object given
36064 the pointer. The pointer will be available using the `%h' escape.
36066 `chain_next ("EXPRESSION")'
36067 `chain_prev ("EXPRESSION")'
36068 `chain_circular ("EXPRESSION")'
36069 It's helpful for the type machinery to know if objects are often
36070 chained together in long lists; this lets it generate code that
36071 uses less stack space by iterating along the list instead of
36072 recursing down it. `chain_next' is an expression for the next
36073 item in the list, `chain_prev' is an expression for the previous
36074 item. For singly linked lists, use only `chain_next'; for doubly
36075 linked lists, use both. The machinery requires that taking the
36076 next item of the previous item gives the original item.
36077 `chain_circular' is similar to `chain_next', but can be used for
36078 circular single linked lists.
36080 `reorder ("FUNCTION NAME")'
36081 Some data structures depend on the relative ordering of pointers.
36082 If the precompiled header machinery needs to change that ordering,
36083 it will call the function referenced by the `reorder' option,
36084 before changing the pointers in the object that's pointed to by
36085 the field the option applies to. The function must take four
36086 arguments, with the signature
36087 `void *, void *, gt_pointer_operator, void *'. The first
36088 parameter is a pointer to the structure that contains the object
36089 being updated, or the object itself if there is no containing
36090 structure. The second parameter is a cookie that should be
36091 ignored. The third parameter is a routine that, given a pointer,
36092 will update it to its correct new value. The fourth parameter is
36093 a cookie that must be passed to the second parameter.
36095 PCH cannot handle data structures that depend on the absolute
36096 values of pointers. `reorder' functions can be expensive. When
36097 possible, it is better to depend on properties of the data, like
36098 an ID number or the hash of a string instead.
36101 The `special' option is used to mark types that have to be dealt
36102 with by special case machinery. The parameter is the name of the
36103 special case. See `gengtype.c' for further details. Avoid adding
36104 new special cases unless there is no other alternative.
36107 File: gccint.info, Node: GGC Roots, Next: Files, Prev: GTY Options, Up: Type Information
36109 22.2 Marking Roots for the Garbage Collector
36110 ============================================
36112 In addition to keeping track of types, the type machinery also locates
36113 the global variables ("roots") that the garbage collector starts at.
36114 Roots must be declared using one of the following syntaxes:
36116 * `extern GTY(([OPTIONS])) TYPE NAME;'
36118 * `static GTY(([OPTIONS])) TYPE NAME;'
36120 * `GTY(([OPTIONS])) TYPE NAME;'
36121 is _not_ accepted. There should be an `extern' declaration of such a
36122 variable in a header somewhere--mark that, not the definition. Or, if
36123 the variable is only used in one file, make it `static'.
36126 File: gccint.info, Node: Files, Next: Invoking the garbage collector, Prev: GGC Roots, Up: Type Information
36128 22.3 Source Files Containing Type Information
36129 =============================================
36131 Whenever you add `GTY' markers to a source file that previously had
36132 none, or create a new source file containing `GTY' markers, there are
36133 three things you need to do:
36135 1. You need to add the file to the list of source files the type
36136 machinery scans. There are four cases:
36138 a. For a back-end file, this is usually done automatically; if
36139 not, you should add it to `target_gtfiles' in the appropriate
36140 port's entries in `config.gcc'.
36142 b. For files shared by all front ends, add the filename to the
36143 `GTFILES' variable in `Makefile.in'.
36145 c. For files that are part of one front end, add the filename to
36146 the `gtfiles' variable defined in the appropriate
36147 `config-lang.in'. For C, the file is `c-config-lang.in'.
36148 Headers should appear before non-headers in this list.
36150 d. For files that are part of some but not all front ends, add
36151 the filename to the `gtfiles' variable of _all_ the front ends
36154 2. If the file was a header file, you'll need to check that it's
36155 included in the right place to be visible to the generated files.
36156 For a back-end header file, this should be done automatically.
36157 For a front-end header file, it needs to be included by the same
36158 file that includes `gtype-LANG.h'. For other header files, it
36159 needs to be included in `gtype-desc.c', which is a generated file,
36160 so add it to `ifiles' in `open_base_file' in `gengtype.c'.
36162 For source files that aren't header files, the machinery will
36163 generate a header file that should be included in the source file
36164 you just changed. The file will be called `gt-PATH.h' where PATH
36165 is the pathname relative to the `gcc' directory with slashes
36166 replaced by -, so for example the header file to be included in
36167 `cp/parser.c' is called `gt-cp-parser.c'. The generated header
36168 file should be included after everything else in the source file.
36169 Don't forget to mention this file as a dependency in the
36173 For language frontends, there is another file that needs to be included
36174 somewhere. It will be called `gtype-LANG.h', where LANG is the name of
36175 the subdirectory the language is contained in.
36177 Plugins can add additional root tables. Run the `gengtype' utility in
36178 plugin mode as `gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C'
36179 with your plugin files PLUGIN*.C using `GTY' to generate the
36180 PLUGINOUT.H file. The GCC build tree is needed to be present in that
36184 File: gccint.info, Node: Invoking the garbage collector, Prev: Files, Up: Type Information
36186 22.4 How to invoke the garbage collector
36187 ========================================
36189 The GCC garbage collector GGC is only invoked explicitly. In contrast
36190 with many other garbage collectors, it is not implicitly invoked by
36191 allocation routines when a lot of memory has been consumed. So the only
36192 way to have GGC reclaim storage it to call the `ggc_collect' function
36193 explicitly. This call is an expensive operation, as it may have to scan
36194 the entire heap. Beware that local variables (on the GCC call stack)
36195 are not followed by such an invocation (as many other garbage
36196 collectors do): you should reference all your data from static or
36197 external `GTY'-ed variables, and it is advised to call `ggc_collect'
36198 with a shallow call stack. The GGC is an exact mark and sweep garbage
36199 collector (so it does not scan the call stack for pointers). In
36200 practice GCC passes don't often call `ggc_collect' themselves, because
36201 it is called by the pass manager between passes.
36204 File: gccint.info, Node: Plugins, Next: Funding, Prev: Type Information, Up: Top
36209 23.1 Loading Plugins
36210 ====================
36212 Plugins are supported on platforms that support `-ldl -rdynamic'. They
36213 are loaded by the compiler using `dlopen' and invoked at pre-determined
36214 locations in the compilation process.
36216 Plugins are loaded with
36218 `-fplugin=/path/to/NAME.so' `-fplugin-arg-NAME-<key1>[=<value1>]'
36220 The plugin arguments are parsed by GCC and passed to respective
36221 plugins as key-value pairs. Multiple plugins can be invoked by
36222 specifying multiple `-fplugin' arguments.
36227 Plugins are activated by the compiler at specific events as defined in
36228 `gcc-plugin.h'. For each event of interest, the plugin should call
36229 `register_callback' specifying the name of the event and address of the
36230 callback function that will handle that event.
36232 The header `gcc-plugin.h' must be the first gcc header to be included.
36234 23.2.1 Plugin license check
36235 ---------------------------
36237 Every plugin should define the global symbol `plugin_is_GPL_compatible'
36238 to assert that it has been licensed under a GPL-compatible license. If
36239 this symbol does not exist, the compiler will emit a fatal error and
36240 exit with the error message:
36242 fatal error: plugin <name> is not licensed under a GPL-compatible license
36243 <name>: undefined symbol: plugin_is_GPL_compatible
36244 compilation terminated
36246 The type of the symbol is irrelevant. The compiler merely asserts that
36247 it exists in the global scope. Something like this is enough:
36249 int plugin_is_GPL_compatible;
36251 23.2.2 Plugin initialization
36252 ----------------------------
36254 Every plugin should export a function called `plugin_init' that is
36255 called right after the plugin is loaded. This function is responsible
36256 for registering all the callbacks required by the plugin and do any
36257 other required initialization.
36259 This function is called from `compile_file' right before invoking the
36260 parser. The arguments to `plugin_init' are:
36262 * `plugin_info': Plugin invocation information.
36264 * `version': GCC version.
36266 The `plugin_info' struct is defined as follows:
36268 struct plugin_name_args
36270 char *base_name; /* Short name of the plugin
36271 (filename without .so suffix). */
36272 const char *full_name; /* Path to the plugin as specified with
36274 int argc; /* Number of arguments specified with
36275 -fplugin-arg-.... */
36276 struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
36277 const char *version; /* Version string provided by plugin. */
36278 const char *help; /* Help string provided by plugin. */
36281 If initialization fails, `plugin_init' must return a non-zero value.
36282 Otherwise, it should return 0.
36284 The version of the GCC compiler loading the plugin is described by the
36285 following structure:
36287 struct plugin_gcc_version
36289 const char *basever;
36290 const char *datestamp;
36291 const char *devphase;
36292 const char *revision;
36293 const char *configuration_arguments;
36296 The function `plugin_default_version_check' takes two pointers to such
36297 structure and compare them field by field. It can be used by the
36298 plugin's `plugin_init' function.
36300 The version of GCC used to compile the plugin can be found in the
36301 symbol `gcc_version' defined in the header `plugin-version.h'. The
36302 recommended version check to perform looks like
36304 #include "plugin-version.h"
36308 plugin_init (struct plugin_name_args *plugin_info,
36309 struct plugin_gcc_version *version)
36311 if (!plugin_default_version_check (version, &gcc_version))
36316 but you can also check the individual fields if you want a less strict
36319 23.2.3 Plugin callbacks
36320 -----------------------
36322 Callback functions have the following prototype:
36324 /* The prototype for a plugin callback function.
36325 gcc_data - event-specific data provided by GCC
36326 user_data - plugin-specific data provided by the plug-in. */
36327 typedef void (*plugin_callback_func)(void *gcc_data, void *user_data);
36329 Callbacks can be invoked at the following pre-determined events:
36333 PLUGIN_PASS_MANAGER_SETUP, /* To hook into pass manager. */
36334 PLUGIN_FINISH_TYPE, /* After finishing parsing a type. */
36335 PLUGIN_FINISH_UNIT, /* Useful for summary processing. */
36336 PLUGIN_PRE_GENERICIZE, /* Allows to see low level AST in C and C++ frontends. */
36337 PLUGIN_FINISH, /* Called before GCC exits. */
36338 PLUGIN_INFO, /* Information about the plugin. */
36339 PLUGIN_GGC_START, /* Called at start of GCC Garbage Collection. */
36340 PLUGIN_GGC_MARKING, /* Extend the GGC marking. */
36341 PLUGIN_GGC_END, /* Called at end of GGC. */
36342 PLUGIN_REGISTER_GGC_ROOTS, /* Register an extra GGC root table. */
36343 PLUGIN_REGISTER_GGC_CACHES, /* Register an extra GGC cache table. */
36344 PLUGIN_ATTRIBUTES, /* Called during attribute registration */
36345 PLUGIN_START_UNIT, /* Called before processing a translation unit. */
36346 PLUGIN_PRAGMAS, /* Called during pragma registration. */
36347 /* Called before first pass from all_passes. */
36348 PLUGIN_ALL_PASSES_START,
36349 /* Called after last pass from all_passes. */
36350 PLUGIN_ALL_PASSES_END,
36351 /* Called before first ipa pass. */
36352 PLUGIN_ALL_IPA_PASSES_START,
36353 /* Called after last ipa pass. */
36354 PLUGIN_ALL_IPA_PASSES_END,
36355 /* Allows to override pass gate decision for current_pass. */
36356 PLUGIN_OVERRIDE_GATE,
36357 /* Called before executing a pass. */
36358 PLUGIN_PASS_EXECUTION,
36359 /* Called before executing subpasses of a GIMPLE_PASS in
36360 execute_ipa_pass_list. */
36361 PLUGIN_EARLY_GIMPLE_PASSES_START,
36362 /* Called after executing subpasses of a GIMPLE_PASS in
36363 execute_ipa_pass_list. */
36364 PLUGIN_EARLY_GIMPLE_PASSES_END,
36365 /* Called when a pass is first instantiated. */
36368 PLUGIN_EVENT_FIRST_DYNAMIC /* Dummy event used for indexing callback
36372 In addition, plugins can also look up the enumerator of a named event,
36373 and / or generate new events dynamically, by calling the function
36374 `get_named_event_id'.
36376 To register a callback, the plugin calls `register_callback' with the
36379 * `char *name': Plugin name.
36381 * `int event': The event code.
36383 * `plugin_callback_func callback': The function that handles `event'.
36385 * `void *user_data': Pointer to plugin-specific data.
36387 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO,
36388 PLUGIN_REGISTER_GGC_ROOTS and PLUGIN_REGISTER_GGC_CACHES pseudo-events
36389 the `callback' should be null, and the `user_data' is specific.
36391 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as
36392 data from GCC), plugins may register their own pragmas using functions
36393 like `c_register_pragma' or `c_register_pragma_with_expansion'.
36395 23.3 Interacting with the pass manager
36396 ======================================
36398 There needs to be a way to add/reorder/remove passes dynamically. This
36399 is useful for both analysis plugins (plugging in after a certain pass
36400 such as CFG or an IPA pass) and optimization plugins.
36402 Basic support for inserting new passes or replacing existing passes is
36403 provided. A plugin registers a new pass with GCC by calling
36404 `register_callback' with the `PLUGIN_PASS_MANAGER_SETUP' event and a
36405 pointer to a `struct register_pass_info' object defined as follows
36407 enum pass_positioning_ops
36409 PASS_POS_INSERT_AFTER, // Insert after the reference pass.
36410 PASS_POS_INSERT_BEFORE, // Insert before the reference pass.
36411 PASS_POS_REPLACE // Replace the reference pass.
36414 struct register_pass_info
36416 struct opt_pass *pass; /* New pass provided by the plugin. */
36417 const char *reference_pass_name; /* Name of the reference pass for hooking
36418 up the new pass. */
36419 int ref_pass_instance_number; /* Insert the pass at the specified
36420 instance number of the reference pass. */
36421 /* Do it for every instance if it is 0. */
36422 enum pass_positioning_ops pos_op; /* how to insert the new pass. */
36426 /* Sample plugin code that registers a new pass. */
36428 plugin_init (struct plugin_name_args *plugin_info,
36429 struct plugin_gcc_version *version)
36431 struct register_pass_info pass_info;
36435 /* Code to fill in the pass_info object with new pass information. */
36439 /* Register the new pass. */
36440 register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
36445 23.4 Interacting with the GCC Garbage Collector
36446 ===============================================
36448 Some plugins may want to be informed when GGC (the GCC Garbage
36449 Collector) is running. They can register callbacks for the
36450 `PLUGIN_GGC_START' and `PLUGIN_GGC_END' events (for which the callback
36451 is called with a null `gcc_data') to be notified of the start or end of
36452 the GCC garbage collection.
36454 Some plugins may need to have GGC mark additional data. This can be
36455 done by registering a callback (called with a null `gcc_data') for the
36456 `PLUGIN_GGC_MARKING' event. Such callbacks can call the `ggc_set_mark'
36457 routine, preferably thru the `ggc_mark' macro (and conversely, these
36458 routines should usually not be used in plugins outside of the
36459 `PLUGIN_GGC_MARKING' event).
36461 Some plugins may need to add extra GGC root tables, e.g. to handle
36462 their own `GTY'-ed data. This can be done with the
36463 `PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the
36464 extra root table (of type `struct ggc_root_tab*') as `user_data'.
36465 Plugins that want to use the `if_marked' hash table option can add the
36466 extra GGC cache tables generated by `gengtype' using the
36467 `PLUGIN_REGISTER_GGC_CACHES' pseudo-event with a null callback and the
36468 extra cache table (of type `struct ggc_cache_tab*') as `user_data'.
36469 Running the `gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility
36470 generates these extra root tables.
36472 You should understand the details of memory management inside GCC
36473 before using `PLUGIN_GGC_MARKING', `PLUGIN_REGISTER_GGC_ROOTS' or
36474 `PLUGIN_REGISTER_GGC_CACHES'.
36476 23.5 Giving information about a plugin
36477 ======================================
36479 A plugin should give some information to the user about itself. This
36480 uses the following structure:
36484 const char *version;
36488 Such a structure is passed as the `user_data' by the plugin's init
36489 routine using `register_callback' with the `PLUGIN_INFO' pseudo-event
36490 and a null callback.
36492 23.6 Registering custom attributes or pragmas
36493 =============================================
36495 For analysis (or other) purposes it is useful to be able to add custom
36496 attributes or pragmas.
36498 The `PLUGIN_ATTRIBUTES' callback is called during attribute
36499 registration. Use the `register_attribute' function to register custom
36502 /* Attribute handler callback */
36504 handle_user_attribute (tree *node, tree name, tree args,
36505 int flags, bool *no_add_attrs)
36510 /* Attribute definition */
36511 static struct attribute_spec user_attr =
36512 { "user", 1, 1, false, false, false, handle_user_attribute };
36514 /* Plugin callback called during attribute registration.
36515 Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL)
36518 register_attributes (void *event_data, void *data)
36520 warning (0, G_("Callback to register attributes"));
36521 register_attribute (&user_attr);
36524 The `PLUGIN_PRAGMAS' callback is called during pragmas registration.
36525 Use the `c_register_pragma' or `c_register_pragma_with_expansion'
36526 functions to register custom pragmas.
36528 /* Plugin callback called during pragmas registration. Registered with
36529 register_callback (plugin_name, PLUGIN_PRAGMAS,
36530 register_my_pragma, NULL);
36533 register_my_pragma (void *event_data, void *data)
36535 warning (0, G_("Callback to register pragmas"));
36536 c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello);
36539 It is suggested to pass `"GCCPLUGIN"' (or a short name identifying
36540 your plugin) as the "space" argument of your pragma.
36542 23.7 Recording information about pass execution
36543 ===============================================
36545 The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
36546 (the same as current_pass) as `gcc_data' to the callback. You can also
36547 inspect cfun to find out about which function this pass is executed for.
36548 Note that this event will only be invoked if the gate check (if
36549 applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds. You can use
36550 other hooks, like `PLUGIN_ALL_PASSES_START', `PLUGIN_ALL_PASSES_END',
36551 `PLUGIN_ALL_IPA_PASSES_START', `PLUGIN_ALL_IPA_PASSES_END',
36552 `PLUGIN_EARLY_GIMPLE_PASSES_START', and/or
36553 `PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your
36554 plugin(s) in order to get context for the pass execution.
36556 23.8 Controlling which passes are being run
36557 ===========================================
36559 After the original gate function for a pass is called, its result - the
36560 gate status - is stored as an integer. Then the event
36561 `PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in
36562 the `gcc_data' parameter to the callback function. A nonzero value of
36563 the gate status means that the pass is to be executed. You can both
36564 read and write the gate status via the passed pointer.
36566 23.9 Keeping track of available passes
36567 ======================================
36569 When your plugin is loaded, you can inspect the various pass lists to
36570 determine what passes are available. However, other plugins might add
36571 new passes. Also, future changes to GCC might cause generic passes to
36572 be added after plugin loading. When a pass is first added to one of
36573 the pass lists, the event `PLUGIN_NEW_PASS' is invoked, with the
36574 callback parameter `gcc_data' pointing to the new pass.
36576 23.10 Building GCC plugins
36577 ==========================
36579 If plugins are enabled, GCC installs the headers needed to build a
36580 plugin (somewhere in the installation tree, e.g. under `/usr/local').
36581 In particular a `plugin/include' directory is installed, containing all
36582 the header files needed to build plugins.
36584 On most systems, you can query this `plugin' directory by invoking
36585 `gcc -print-file-name=plugin' (replace if needed `gcc' with the
36586 appropriate program path).
36588 The following GNU Makefile excerpt shows how to build a simple plugin:
36591 PLUGIN_SOURCE_FILES= plugin1.c plugin2.c
36592 PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES))
36593 GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin)
36594 CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2
36596 plugin.so: $(PLUGIN_OBJECT_FILES)
36597 $(GCC) -shared $^ -o $@
36599 A single source file plugin may be built with `gcc -I`gcc
36600 -print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o
36601 plugin.so', using backquote shell syntax to query the `plugin'
36604 Plugins needing to use `gengtype' require a GCC build directory for
36605 the same version of GCC that they will be linked against.
36608 File: gccint.info, Node: Funding, Next: GNU Project, Prev: Plugins, Up: Top
36610 Funding Free Software
36611 *********************
36613 If you want to have more free software a few years from now, it makes
36614 sense for you to help encourage people to contribute funds for its
36615 development. The most effective approach known is to encourage
36616 commercial redistributors to donate.
36618 Users of free software systems can boost the pace of development by
36619 encouraging for-a-fee distributors to donate part of their selling price
36620 to free software developers--the Free Software Foundation, and others.
36622 The way to convince distributors to do this is to demand it and expect
36623 it from them. So when you compare distributors, judge them partly by
36624 how much they give to free software development. Show distributors
36625 they must compete to be the one who gives the most.
36627 To make this approach work, you must insist on numbers that you can
36628 compare, such as, "We will donate ten dollars to the Frobnitz project
36629 for each disk sold." Don't be satisfied with a vague promise, such as
36630 "A portion of the profits are donated," since it doesn't give a basis
36633 Even a precise fraction "of the profits from this disk" is not very
36634 meaningful, since creative accounting and unrelated business decisions
36635 can greatly alter what fraction of the sales price counts as profit.
36636 If the price you pay is $50, ten percent of the profit is probably less
36637 than a dollar; it might be a few cents, or nothing at all.
36639 Some redistributors do development work themselves. This is useful
36640 too; but to keep everyone honest, you need to inquire how much they do,
36641 and what kind. Some kinds of development make much more long-term
36642 difference than others. For example, maintaining a separate version of
36643 a program contributes very little; maintaining the standard version of a
36644 program for the whole community contributes much. Easy new ports
36645 contribute little, since someone else would surely do them; difficult
36646 ports such as adding a new CPU to the GNU Compiler Collection
36647 contribute more; major new features or packages contribute the most.
36649 By establishing the idea that supporting further development is "the
36650 proper thing to do" when distributing free software for a fee, we can
36651 assure a steady flow of resources into making more free software.
36653 Copyright (C) 1994 Free Software Foundation, Inc.
36654 Verbatim copying and redistribution of this section is permitted
36655 without royalty; alteration is not permitted.
36658 File: gccint.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top
36660 The GNU Project and GNU/Linux
36661 *****************************
36663 The GNU Project was launched in 1984 to develop a complete Unix-like
36664 operating system which is free software: the GNU system. (GNU is a
36665 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
36666 Variants of the GNU operating system, which use the kernel Linux, are
36667 now widely used; though these systems are often referred to as "Linux",
36668 they are more accurately called GNU/Linux systems.
36670 For more information, see:
36671 `http://www.gnu.org/'
36672 `http://www.gnu.org/gnu/linux-and-gnu.html'
36675 File: gccint.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top
36677 GNU General Public License
36678 **************************
36680 Version 3, 29 June 2007
36682 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
36684 Everyone is permitted to copy and distribute verbatim copies of this
36685 license document, but changing it is not allowed.
36690 The GNU General Public License is a free, copyleft license for software
36691 and other kinds of works.
36693 The licenses for most software and other practical works are designed
36694 to take away your freedom to share and change the works. By contrast,
36695 the GNU General Public License is intended to guarantee your freedom to
36696 share and change all versions of a program-to make sure it remains free
36697 software for all its users. We, the Free Software Foundation, use the
36698 GNU General Public License for most of our software; it applies also to
36699 any other work released this way by its authors. You can apply it to
36700 your programs, too.
36702 When we speak of free software, we are referring to freedom, not
36703 price. Our General Public Licenses are designed to make sure that you
36704 have the freedom to distribute copies of free software (and charge for
36705 them if you wish), that you receive source code or can get it if you
36706 want it, that you can change the software or use pieces of it in new
36707 free programs, and that you know you can do these things.
36709 To protect your rights, we need to prevent others from denying you
36710 these rights or asking you to surrender the rights. Therefore, you
36711 have certain responsibilities if you distribute copies of the software,
36712 or if you modify it: responsibilities to respect the freedom of others.
36714 For example, if you distribute copies of such a program, whether
36715 gratis or for a fee, you must pass on to the recipients the same
36716 freedoms that you received. You must make sure that they, too, receive
36717 or can get the source code. And you must show them these terms so they
36720 Developers that use the GNU GPL protect your rights with two steps:
36721 (1) assert copyright on the software, and (2) offer you this License
36722 giving you legal permission to copy, distribute and/or modify it.
36724 For the developers' and authors' protection, the GPL clearly explains
36725 that there is no warranty for this free software. For both users' and
36726 authors' sake, the GPL requires that modified versions be marked as
36727 changed, so that their problems will not be attributed erroneously to
36728 authors of previous versions.
36730 Some devices are designed to deny users access to install or run
36731 modified versions of the software inside them, although the
36732 manufacturer can do so. This is fundamentally incompatible with the
36733 aim of protecting users' freedom to change the software. The
36734 systematic pattern of such abuse occurs in the area of products for
36735 individuals to use, which is precisely where it is most unacceptable.
36736 Therefore, we have designed this version of the GPL to prohibit the
36737 practice for those products. If such problems arise substantially in
36738 other domains, we stand ready to extend this provision to those domains
36739 in future versions of the GPL, as needed to protect the freedom of
36742 Finally, every program is threatened constantly by software patents.
36743 States should not allow patents to restrict development and use of
36744 software on general-purpose computers, but in those that do, we wish to
36745 avoid the special danger that patents applied to a free program could
36746 make it effectively proprietary. To prevent this, the GPL assures that
36747 patents cannot be used to render the program non-free.
36749 The precise terms and conditions for copying, distribution and
36750 modification follow.
36752 TERMS AND CONDITIONS
36753 ====================
36757 "This License" refers to version 3 of the GNU General Public
36760 "Copyright" also means copyright-like laws that apply to other
36761 kinds of works, such as semiconductor masks.
36763 "The Program" refers to any copyrightable work licensed under this
36764 License. Each licensee is addressed as "you". "Licensees" and
36765 "recipients" may be individuals or organizations.
36767 To "modify" a work means to copy from or adapt all or part of the
36768 work in a fashion requiring copyright permission, other than the
36769 making of an exact copy. The resulting work is called a "modified
36770 version" of the earlier work or a work "based on" the earlier work.
36772 A "covered work" means either the unmodified Program or a work
36773 based on the Program.
36775 To "propagate" a work means to do anything with it that, without
36776 permission, would make you directly or secondarily liable for
36777 infringement under applicable copyright law, except executing it
36778 on a computer or modifying a private copy. Propagation includes
36779 copying, distribution (with or without modification), making
36780 available to the public, and in some countries other activities as
36783 To "convey" a work means any kind of propagation that enables other
36784 parties to make or receive copies. Mere interaction with a user
36785 through a computer network, with no transfer of a copy, is not
36788 An interactive user interface displays "Appropriate Legal Notices"
36789 to the extent that it includes a convenient and prominently visible
36790 feature that (1) displays an appropriate copyright notice, and (2)
36791 tells the user that there is no warranty for the work (except to
36792 the extent that warranties are provided), that licensees may
36793 convey the work under this License, and how to view a copy of this
36794 License. If the interface presents a list of user commands or
36795 options, such as a menu, a prominent item in the list meets this
36800 The "source code" for a work means the preferred form of the work
36801 for making modifications to it. "Object code" means any
36802 non-source form of a work.
36804 A "Standard Interface" means an interface that either is an
36805 official standard defined by a recognized standards body, or, in
36806 the case of interfaces specified for a particular programming
36807 language, one that is widely used among developers working in that
36810 The "System Libraries" of an executable work include anything,
36811 other than the work as a whole, that (a) is included in the normal
36812 form of packaging a Major Component, but which is not part of that
36813 Major Component, and (b) serves only to enable use of the work
36814 with that Major Component, or to implement a Standard Interface
36815 for which an implementation is available to the public in source
36816 code form. A "Major Component", in this context, means a major
36817 essential component (kernel, window system, and so on) of the
36818 specific operating system (if any) on which the executable work
36819 runs, or a compiler used to produce the work, or an object code
36820 interpreter used to run it.
36822 The "Corresponding Source" for a work in object code form means all
36823 the source code needed to generate, install, and (for an executable
36824 work) run the object code and to modify the work, including
36825 scripts to control those activities. However, it does not include
36826 the work's System Libraries, or general-purpose tools or generally
36827 available free programs which are used unmodified in performing
36828 those activities but which are not part of the work. For example,
36829 Corresponding Source includes interface definition files
36830 associated with source files for the work, and the source code for
36831 shared libraries and dynamically linked subprograms that the work
36832 is specifically designed to require, such as by intimate data
36833 communication or control flow between those subprograms and other
36836 The Corresponding Source need not include anything that users can
36837 regenerate automatically from other parts of the Corresponding
36840 The Corresponding Source for a work in source code form is that
36843 2. Basic Permissions.
36845 All rights granted under this License are granted for the term of
36846 copyright on the Program, and are irrevocable provided the stated
36847 conditions are met. This License explicitly affirms your unlimited
36848 permission to run the unmodified Program. The output from running
36849 a covered work is covered by this License only if the output,
36850 given its content, constitutes a covered work. This License
36851 acknowledges your rights of fair use or other equivalent, as
36852 provided by copyright law.
36854 You may make, run and propagate covered works that you do not
36855 convey, without conditions so long as your license otherwise
36856 remains in force. You may convey covered works to others for the
36857 sole purpose of having them make modifications exclusively for
36858 you, or provide you with facilities for running those works,
36859 provided that you comply with the terms of this License in
36860 conveying all material for which you do not control copyright.
36861 Those thus making or running the covered works for you must do so
36862 exclusively on your behalf, under your direction and control, on
36863 terms that prohibit them from making any copies of your
36864 copyrighted material outside their relationship with you.
36866 Conveying under any other circumstances is permitted solely under
36867 the conditions stated below. Sublicensing is not allowed; section
36868 10 makes it unnecessary.
36870 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
36872 No covered work shall be deemed part of an effective technological
36873 measure under any applicable law fulfilling obligations under
36874 article 11 of the WIPO copyright treaty adopted on 20 December
36875 1996, or similar laws prohibiting or restricting circumvention of
36878 When you convey a covered work, you waive any legal power to forbid
36879 circumvention of technological measures to the extent such
36880 circumvention is effected by exercising rights under this License
36881 with respect to the covered work, and you disclaim any intention
36882 to limit operation or modification of the work as a means of
36883 enforcing, against the work's users, your or third parties' legal
36884 rights to forbid circumvention of technological measures.
36886 4. Conveying Verbatim Copies.
36888 You may convey verbatim copies of the Program's source code as you
36889 receive it, in any medium, provided that you conspicuously and
36890 appropriately publish on each copy an appropriate copyright notice;
36891 keep intact all notices stating that this License and any
36892 non-permissive terms added in accord with section 7 apply to the
36893 code; keep intact all notices of the absence of any warranty; and
36894 give all recipients a copy of this License along with the Program.
36896 You may charge any price or no price for each copy that you convey,
36897 and you may offer support or warranty protection for a fee.
36899 5. Conveying Modified Source Versions.
36901 You may convey a work based on the Program, or the modifications to
36902 produce it from the Program, in the form of source code under the
36903 terms of section 4, provided that you also meet all of these
36906 a. The work must carry prominent notices stating that you
36907 modified it, and giving a relevant date.
36909 b. The work must carry prominent notices stating that it is
36910 released under this License and any conditions added under
36911 section 7. This requirement modifies the requirement in
36912 section 4 to "keep intact all notices".
36914 c. You must license the entire work, as a whole, under this
36915 License to anyone who comes into possession of a copy. This
36916 License will therefore apply, along with any applicable
36917 section 7 additional terms, to the whole of the work, and all
36918 its parts, regardless of how they are packaged. This License
36919 gives no permission to license the work in any other way, but
36920 it does not invalidate such permission if you have separately
36923 d. If the work has interactive user interfaces, each must display
36924 Appropriate Legal Notices; however, if the Program has
36925 interactive interfaces that do not display Appropriate Legal
36926 Notices, your work need not make them do so.
36928 A compilation of a covered work with other separate and independent
36929 works, which are not by their nature extensions of the covered
36930 work, and which are not combined with it such as to form a larger
36931 program, in or on a volume of a storage or distribution medium, is
36932 called an "aggregate" if the compilation and its resulting
36933 copyright are not used to limit the access or legal rights of the
36934 compilation's users beyond what the individual works permit.
36935 Inclusion of a covered work in an aggregate does not cause this
36936 License to apply to the other parts of the aggregate.
36938 6. Conveying Non-Source Forms.
36940 You may convey a covered work in object code form under the terms
36941 of sections 4 and 5, provided that you also convey the
36942 machine-readable Corresponding Source under the terms of this
36943 License, in one of these ways:
36945 a. Convey the object code in, or embodied in, a physical product
36946 (including a physical distribution medium), accompanied by the
36947 Corresponding Source fixed on a durable physical medium
36948 customarily used for software interchange.
36950 b. Convey the object code in, or embodied in, a physical product
36951 (including a physical distribution medium), accompanied by a
36952 written offer, valid for at least three years and valid for
36953 as long as you offer spare parts or customer support for that
36954 product model, to give anyone who possesses the object code
36955 either (1) a copy of the Corresponding Source for all the
36956 software in the product that is covered by this License, on a
36957 durable physical medium customarily used for software
36958 interchange, for a price no more than your reasonable cost of
36959 physically performing this conveying of source, or (2) access
36960 to copy the Corresponding Source from a network server at no
36963 c. Convey individual copies of the object code with a copy of
36964 the written offer to provide the Corresponding Source. This
36965 alternative is allowed only occasionally and noncommercially,
36966 and only if you received the object code with such an offer,
36967 in accord with subsection 6b.
36969 d. Convey the object code by offering access from a designated
36970 place (gratis or for a charge), and offer equivalent access
36971 to the Corresponding Source in the same way through the same
36972 place at no further charge. You need not require recipients
36973 to copy the Corresponding Source along with the object code.
36974 If the place to copy the object code is a network server, the
36975 Corresponding Source may be on a different server (operated
36976 by you or a third party) that supports equivalent copying
36977 facilities, provided you maintain clear directions next to
36978 the object code saying where to find the Corresponding Source.
36979 Regardless of what server hosts the Corresponding Source, you
36980 remain obligated to ensure that it is available for as long
36981 as needed to satisfy these requirements.
36983 e. Convey the object code using peer-to-peer transmission,
36984 provided you inform other peers where the object code and
36985 Corresponding Source of the work are being offered to the
36986 general public at no charge under subsection 6d.
36989 A separable portion of the object code, whose source code is
36990 excluded from the Corresponding Source as a System Library, need
36991 not be included in conveying the object code work.
36993 A "User Product" is either (1) a "consumer product", which means
36994 any tangible personal property which is normally used for personal,
36995 family, or household purposes, or (2) anything designed or sold for
36996 incorporation into a dwelling. In determining whether a product
36997 is a consumer product, doubtful cases shall be resolved in favor of
36998 coverage. For a particular product received by a particular user,
36999 "normally used" refers to a typical or common use of that class of
37000 product, regardless of the status of the particular user or of the
37001 way in which the particular user actually uses, or expects or is
37002 expected to use, the product. A product is a consumer product
37003 regardless of whether the product has substantial commercial,
37004 industrial or non-consumer uses, unless such uses represent the
37005 only significant mode of use of the product.
37007 "Installation Information" for a User Product means any methods,
37008 procedures, authorization keys, or other information required to
37009 install and execute modified versions of a covered work in that
37010 User Product from a modified version of its Corresponding Source.
37011 The information must suffice to ensure that the continued
37012 functioning of the modified object code is in no case prevented or
37013 interfered with solely because modification has been made.
37015 If you convey an object code work under this section in, or with,
37016 or specifically for use in, a User Product, and the conveying
37017 occurs as part of a transaction in which the right of possession
37018 and use of the User Product is transferred to the recipient in
37019 perpetuity or for a fixed term (regardless of how the transaction
37020 is characterized), the Corresponding Source conveyed under this
37021 section must be accompanied by the Installation Information. But
37022 this requirement does not apply if neither you nor any third party
37023 retains the ability to install modified object code on the User
37024 Product (for example, the work has been installed in ROM).
37026 The requirement to provide Installation Information does not
37027 include a requirement to continue to provide support service,
37028 warranty, or updates for a work that has been modified or
37029 installed by the recipient, or for the User Product in which it
37030 has been modified or installed. Access to a network may be denied
37031 when the modification itself materially and adversely affects the
37032 operation of the network or violates the rules and protocols for
37033 communication across the network.
37035 Corresponding Source conveyed, and Installation Information
37036 provided, in accord with this section must be in a format that is
37037 publicly documented (and with an implementation available to the
37038 public in source code form), and must require no special password
37039 or key for unpacking, reading or copying.
37041 7. Additional Terms.
37043 "Additional permissions" are terms that supplement the terms of
37044 this License by making exceptions from one or more of its
37045 conditions. Additional permissions that are applicable to the
37046 entire Program shall be treated as though they were included in
37047 this License, to the extent that they are valid under applicable
37048 law. If additional permissions apply only to part of the Program,
37049 that part may be used separately under those permissions, but the
37050 entire Program remains governed by this License without regard to
37051 the additional permissions.
37053 When you convey a copy of a covered work, you may at your option
37054 remove any additional permissions from that copy, or from any part
37055 of it. (Additional permissions may be written to require their own
37056 removal in certain cases when you modify the work.) You may place
37057 additional permissions on material, added by you to a covered work,
37058 for which you have or can give appropriate copyright permission.
37060 Notwithstanding any other provision of this License, for material
37061 you add to a covered work, you may (if authorized by the copyright
37062 holders of that material) supplement the terms of this License
37065 a. Disclaiming warranty or limiting liability differently from
37066 the terms of sections 15 and 16 of this License; or
37068 b. Requiring preservation of specified reasonable legal notices
37069 or author attributions in that material or in the Appropriate
37070 Legal Notices displayed by works containing it; or
37072 c. Prohibiting misrepresentation of the origin of that material,
37073 or requiring that modified versions of such material be
37074 marked in reasonable ways as different from the original
37077 d. Limiting the use for publicity purposes of names of licensors
37078 or authors of the material; or
37080 e. Declining to grant rights under trademark law for use of some
37081 trade names, trademarks, or service marks; or
37083 f. Requiring indemnification of licensors and authors of that
37084 material by anyone who conveys the material (or modified
37085 versions of it) with contractual assumptions of liability to
37086 the recipient, for any liability that these contractual
37087 assumptions directly impose on those licensors and authors.
37089 All other non-permissive additional terms are considered "further
37090 restrictions" within the meaning of section 10. If the Program as
37091 you received it, or any part of it, contains a notice stating that
37092 it is governed by this License along with a term that is a further
37093 restriction, you may remove that term. If a license document
37094 contains a further restriction but permits relicensing or
37095 conveying under this License, you may add to a covered work
37096 material governed by the terms of that license document, provided
37097 that the further restriction does not survive such relicensing or
37100 If you add terms to a covered work in accord with this section, you
37101 must place, in the relevant source files, a statement of the
37102 additional terms that apply to those files, or a notice indicating
37103 where to find the applicable terms.
37105 Additional terms, permissive or non-permissive, may be stated in
37106 the form of a separately written license, or stated as exceptions;
37107 the above requirements apply either way.
37111 You may not propagate or modify a covered work except as expressly
37112 provided under this License. Any attempt otherwise to propagate or
37113 modify it is void, and will automatically terminate your rights
37114 under this License (including any patent licenses granted under
37115 the third paragraph of section 11).
37117 However, if you cease all violation of this License, then your
37118 license from a particular copyright holder is reinstated (a)
37119 provisionally, unless and until the copyright holder explicitly
37120 and finally terminates your license, and (b) permanently, if the
37121 copyright holder fails to notify you of the violation by some
37122 reasonable means prior to 60 days after the cessation.
37124 Moreover, your license from a particular copyright holder is
37125 reinstated permanently if the copyright holder notifies you of the
37126 violation by some reasonable means, this is the first time you have
37127 received notice of violation of this License (for any work) from
37128 that copyright holder, and you cure the violation prior to 30 days
37129 after your receipt of the notice.
37131 Termination of your rights under this section does not terminate
37132 the licenses of parties who have received copies or rights from
37133 you under this License. If your rights have been terminated and
37134 not permanently reinstated, you do not qualify to receive new
37135 licenses for the same material under section 10.
37137 9. Acceptance Not Required for Having Copies.
37139 You are not required to accept this License in order to receive or
37140 run a copy of the Program. Ancillary propagation of a covered work
37141 occurring solely as a consequence of using peer-to-peer
37142 transmission to receive a copy likewise does not require
37143 acceptance. However, nothing other than this License grants you
37144 permission to propagate or modify any covered work. These actions
37145 infringe copyright if you do not accept this License. Therefore,
37146 by modifying or propagating a covered work, you indicate your
37147 acceptance of this License to do so.
37149 10. Automatic Licensing of Downstream Recipients.
37151 Each time you convey a covered work, the recipient automatically
37152 receives a license from the original licensors, to run, modify and
37153 propagate that work, subject to this License. You are not
37154 responsible for enforcing compliance by third parties with this
37157 An "entity transaction" is a transaction transferring control of an
37158 organization, or substantially all assets of one, or subdividing an
37159 organization, or merging organizations. If propagation of a
37160 covered work results from an entity transaction, each party to that
37161 transaction who receives a copy of the work also receives whatever
37162 licenses to the work the party's predecessor in interest had or
37163 could give under the previous paragraph, plus a right to
37164 possession of the Corresponding Source of the work from the
37165 predecessor in interest, if the predecessor has it or can get it
37166 with reasonable efforts.
37168 You may not impose any further restrictions on the exercise of the
37169 rights granted or affirmed under this License. For example, you
37170 may not impose a license fee, royalty, or other charge for
37171 exercise of rights granted under this License, and you may not
37172 initiate litigation (including a cross-claim or counterclaim in a
37173 lawsuit) alleging that any patent claim is infringed by making,
37174 using, selling, offering for sale, or importing the Program or any
37179 A "contributor" is a copyright holder who authorizes use under this
37180 License of the Program or a work on which the Program is based.
37181 The work thus licensed is called the contributor's "contributor
37184 A contributor's "essential patent claims" are all patent claims
37185 owned or controlled by the contributor, whether already acquired or
37186 hereafter acquired, that would be infringed by some manner,
37187 permitted by this License, of making, using, or selling its
37188 contributor version, but do not include claims that would be
37189 infringed only as a consequence of further modification of the
37190 contributor version. For purposes of this definition, "control"
37191 includes the right to grant patent sublicenses in a manner
37192 consistent with the requirements of this License.
37194 Each contributor grants you a non-exclusive, worldwide,
37195 royalty-free patent license under the contributor's essential
37196 patent claims, to make, use, sell, offer for sale, import and
37197 otherwise run, modify and propagate the contents of its
37198 contributor version.
37200 In the following three paragraphs, a "patent license" is any
37201 express agreement or commitment, however denominated, not to
37202 enforce a patent (such as an express permission to practice a
37203 patent or covenant not to sue for patent infringement). To
37204 "grant" such a patent license to a party means to make such an
37205 agreement or commitment not to enforce a patent against the party.
37207 If you convey a covered work, knowingly relying on a patent
37208 license, and the Corresponding Source of the work is not available
37209 for anyone to copy, free of charge and under the terms of this
37210 License, through a publicly available network server or other
37211 readily accessible means, then you must either (1) cause the
37212 Corresponding Source to be so available, or (2) arrange to deprive
37213 yourself of the benefit of the patent license for this particular
37214 work, or (3) arrange, in a manner consistent with the requirements
37215 of this License, to extend the patent license to downstream
37216 recipients. "Knowingly relying" means you have actual knowledge
37217 that, but for the patent license, your conveying the covered work
37218 in a country, or your recipient's use of the covered work in a
37219 country, would infringe one or more identifiable patents in that
37220 country that you have reason to believe are valid.
37222 If, pursuant to or in connection with a single transaction or
37223 arrangement, you convey, or propagate by procuring conveyance of, a
37224 covered work, and grant a patent license to some of the parties
37225 receiving the covered work authorizing them to use, propagate,
37226 modify or convey a specific copy of the covered work, then the
37227 patent license you grant is automatically extended to all
37228 recipients of the covered work and works based on it.
37230 A patent license is "discriminatory" if it does not include within
37231 the scope of its coverage, prohibits the exercise of, or is
37232 conditioned on the non-exercise of one or more of the rights that
37233 are specifically granted under this License. You may not convey a
37234 covered work if you are a party to an arrangement with a third
37235 party that is in the business of distributing software, under
37236 which you make payment to the third party based on the extent of
37237 your activity of conveying the work, and under which the third
37238 party grants, to any of the parties who would receive the covered
37239 work from you, a discriminatory patent license (a) in connection
37240 with copies of the covered work conveyed by you (or copies made
37241 from those copies), or (b) primarily for and in connection with
37242 specific products or compilations that contain the covered work,
37243 unless you entered into that arrangement, or that patent license
37244 was granted, prior to 28 March 2007.
37246 Nothing in this License shall be construed as excluding or limiting
37247 any implied license or other defenses to infringement that may
37248 otherwise be available to you under applicable patent law.
37250 12. No Surrender of Others' Freedom.
37252 If conditions are imposed on you (whether by court order,
37253 agreement or otherwise) that contradict the conditions of this
37254 License, they do not excuse you from the conditions of this
37255 License. If you cannot convey a covered work so as to satisfy
37256 simultaneously your obligations under this License and any other
37257 pertinent obligations, then as a consequence you may not convey it
37258 at all. For example, if you agree to terms that obligate you to
37259 collect a royalty for further conveying from those to whom you
37260 convey the Program, the only way you could satisfy both those
37261 terms and this License would be to refrain entirely from conveying
37264 13. Use with the GNU Affero General Public License.
37266 Notwithstanding any other provision of this License, you have
37267 permission to link or combine any covered work with a work licensed
37268 under version 3 of the GNU Affero General Public License into a
37269 single combined work, and to convey the resulting work. The terms
37270 of this License will continue to apply to the part which is the
37271 covered work, but the special requirements of the GNU Affero
37272 General Public License, section 13, concerning interaction through
37273 a network will apply to the combination as such.
37275 14. Revised Versions of this License.
37277 The Free Software Foundation may publish revised and/or new
37278 versions of the GNU General Public License from time to time.
37279 Such new versions will be similar in spirit to the present
37280 version, but may differ in detail to address new problems or
37283 Each version is given a distinguishing version number. If the
37284 Program specifies that a certain numbered version of the GNU
37285 General Public License "or any later version" applies to it, you
37286 have the option of following the terms and conditions either of
37287 that numbered version or of any later version published by the
37288 Free Software Foundation. If the Program does not specify a
37289 version number of the GNU General Public License, you may choose
37290 any version ever published by the Free Software Foundation.
37292 If the Program specifies that a proxy can decide which future
37293 versions of the GNU General Public License can be used, that
37294 proxy's public statement of acceptance of a version permanently
37295 authorizes you to choose that version for the Program.
37297 Later license versions may give you additional or different
37298 permissions. However, no additional obligations are imposed on any
37299 author or copyright holder as a result of your choosing to follow a
37302 15. Disclaimer of Warranty.
37304 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
37305 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
37306 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
37307 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
37308 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
37309 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
37310 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
37311 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
37312 NECESSARY SERVICING, REPAIR OR CORRECTION.
37314 16. Limitation of Liability.
37316 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
37317 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
37318 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
37319 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
37320 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
37321 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
37322 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
37323 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
37324 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
37325 THE POSSIBILITY OF SUCH DAMAGES.
37327 17. Interpretation of Sections 15 and 16.
37329 If the disclaimer of warranty and limitation of liability provided
37330 above cannot be given local legal effect according to their terms,
37331 reviewing courts shall apply local law that most closely
37332 approximates an absolute waiver of all civil liability in
37333 connection with the Program, unless a warranty or assumption of
37334 liability accompanies a copy of the Program in return for a fee.
37337 END OF TERMS AND CONDITIONS
37338 ===========================
37340 How to Apply These Terms to Your New Programs
37341 =============================================
37343 If you develop a new program, and you want it to be of the greatest
37344 possible use to the public, the best way to achieve this is to make it
37345 free software which everyone can redistribute and change under these
37348 To do so, attach the following notices to the program. It is safest
37349 to attach them to the start of each source file to most effectively
37350 state the exclusion of warranty; and each file should have at least the
37351 "copyright" line and a pointer to where the full notice is found.
37353 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
37354 Copyright (C) YEAR NAME OF AUTHOR
37356 This program is free software: you can redistribute it and/or modify
37357 it under the terms of the GNU General Public License as published by
37358 the Free Software Foundation, either version 3 of the License, or (at
37359 your option) any later version.
37361 This program is distributed in the hope that it will be useful, but
37362 WITHOUT ANY WARRANTY; without even the implied warranty of
37363 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
37364 General Public License for more details.
37366 You should have received a copy of the GNU General Public License
37367 along with this program. If not, see `http://www.gnu.org/licenses/'.
37369 Also add information on how to contact you by electronic and paper
37372 If the program does terminal interaction, make it output a short
37373 notice like this when it starts in an interactive mode:
37375 PROGRAM Copyright (C) YEAR NAME OF AUTHOR
37376 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
37377 This is free software, and you are welcome to redistribute it
37378 under certain conditions; type `show c' for details.
37380 The hypothetical commands `show w' and `show c' should show the
37381 appropriate parts of the General Public License. Of course, your
37382 program's commands might be different; for a GUI interface, you would
37383 use an "about box".
37385 You should also get your employer (if you work as a programmer) or
37386 school, if any, to sign a "copyright disclaimer" for the program, if
37387 necessary. For more information on this, and how to apply and follow
37388 the GNU GPL, see `http://www.gnu.org/licenses/'.
37390 The GNU General Public License does not permit incorporating your
37391 program into proprietary programs. If your program is a subroutine
37392 library, you may consider it more useful to permit linking proprietary
37393 applications with the library. If this is what you want to do, use the
37394 GNU Lesser General Public License instead of this License. But first,
37395 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
37398 File: gccint.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top
37400 GNU Free Documentation License
37401 ******************************
37403 Version 1.2, November 2002
37405 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
37406 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
37408 Everyone is permitted to copy and distribute verbatim copies
37409 of this license document, but changing it is not allowed.
37413 The purpose of this License is to make a manual, textbook, or other
37414 functional and useful document "free" in the sense of freedom: to
37415 assure everyone the effective freedom to copy and redistribute it,
37416 with or without modifying it, either commercially or
37417 noncommercially. Secondarily, this License preserves for the
37418 author and publisher a way to get credit for their work, while not
37419 being considered responsible for modifications made by others.
37421 This License is a kind of "copyleft", which means that derivative
37422 works of the document must themselves be free in the same sense.
37423 It complements the GNU General Public License, which is a copyleft
37424 license designed for free software.
37426 We have designed this License in order to use it for manuals for
37427 free software, because free software needs free documentation: a
37428 free program should come with manuals providing the same freedoms
37429 that the software does. But this License is not limited to
37430 software manuals; it can be used for any textual work, regardless
37431 of subject matter or whether it is published as a printed book.
37432 We recommend this License principally for works whose purpose is
37433 instruction or reference.
37435 1. APPLICABILITY AND DEFINITIONS
37437 This License applies to any manual or other work, in any medium,
37438 that contains a notice placed by the copyright holder saying it
37439 can be distributed under the terms of this License. Such a notice
37440 grants a world-wide, royalty-free license, unlimited in duration,
37441 to use that work under the conditions stated herein. The
37442 "Document", below, refers to any such manual or work. Any member
37443 of the public is a licensee, and is addressed as "you". You
37444 accept the license if you copy, modify or distribute the work in a
37445 way requiring permission under copyright law.
37447 A "Modified Version" of the Document means any work containing the
37448 Document or a portion of it, either copied verbatim, or with
37449 modifications and/or translated into another language.
37451 A "Secondary Section" is a named appendix or a front-matter section
37452 of the Document that deals exclusively with the relationship of the
37453 publishers or authors of the Document to the Document's overall
37454 subject (or to related matters) and contains nothing that could
37455 fall directly within that overall subject. (Thus, if the Document
37456 is in part a textbook of mathematics, a Secondary Section may not
37457 explain any mathematics.) The relationship could be a matter of
37458 historical connection with the subject or with related matters, or
37459 of legal, commercial, philosophical, ethical or political position
37462 The "Invariant Sections" are certain Secondary Sections whose
37463 titles are designated, as being those of Invariant Sections, in
37464 the notice that says that the Document is released under this
37465 License. If a section does not fit the above definition of
37466 Secondary then it is not allowed to be designated as Invariant.
37467 The Document may contain zero Invariant Sections. If the Document
37468 does not identify any Invariant Sections then there are none.
37470 The "Cover Texts" are certain short passages of text that are
37471 listed, as Front-Cover Texts or Back-Cover Texts, in the notice
37472 that says that the Document is released under this License. A
37473 Front-Cover Text may be at most 5 words, and a Back-Cover Text may
37474 be at most 25 words.
37476 A "Transparent" copy of the Document means a machine-readable copy,
37477 represented in a format whose specification is available to the
37478 general public, that is suitable for revising the document
37479 straightforwardly with generic text editors or (for images
37480 composed of pixels) generic paint programs or (for drawings) some
37481 widely available drawing editor, and that is suitable for input to
37482 text formatters or for automatic translation to a variety of
37483 formats suitable for input to text formatters. A copy made in an
37484 otherwise Transparent file format whose markup, or absence of
37485 markup, has been arranged to thwart or discourage subsequent
37486 modification by readers is not Transparent. An image format is
37487 not Transparent if used for any substantial amount of text. A
37488 copy that is not "Transparent" is called "Opaque".
37490 Examples of suitable formats for Transparent copies include plain
37491 ASCII without markup, Texinfo input format, LaTeX input format,
37492 SGML or XML using a publicly available DTD, and
37493 standard-conforming simple HTML, PostScript or PDF designed for
37494 human modification. Examples of transparent image formats include
37495 PNG, XCF and JPG. Opaque formats include proprietary formats that
37496 can be read and edited only by proprietary word processors, SGML or
37497 XML for which the DTD and/or processing tools are not generally
37498 available, and the machine-generated HTML, PostScript or PDF
37499 produced by some word processors for output purposes only.
37501 The "Title Page" means, for a printed book, the title page itself,
37502 plus such following pages as are needed to hold, legibly, the
37503 material this License requires to appear in the title page. For
37504 works in formats which do not have any title page as such, "Title
37505 Page" means the text near the most prominent appearance of the
37506 work's title, preceding the beginning of the body of the text.
37508 A section "Entitled XYZ" means a named subunit of the Document
37509 whose title either is precisely XYZ or contains XYZ in parentheses
37510 following text that translates XYZ in another language. (Here XYZ
37511 stands for a specific section name mentioned below, such as
37512 "Acknowledgements", "Dedications", "Endorsements", or "History".)
37513 To "Preserve the Title" of such a section when you modify the
37514 Document means that it remains a section "Entitled XYZ" according
37515 to this definition.
37517 The Document may include Warranty Disclaimers next to the notice
37518 which states that this License applies to the Document. These
37519 Warranty Disclaimers are considered to be included by reference in
37520 this License, but only as regards disclaiming warranties: any other
37521 implication that these Warranty Disclaimers may have is void and
37522 has no effect on the meaning of this License.
37524 2. VERBATIM COPYING
37526 You may copy and distribute the Document in any medium, either
37527 commercially or noncommercially, provided that this License, the
37528 copyright notices, and the license notice saying this License
37529 applies to the Document are reproduced in all copies, and that you
37530 add no other conditions whatsoever to those of this License. You
37531 may not use technical measures to obstruct or control the reading
37532 or further copying of the copies you make or distribute. However,
37533 you may accept compensation in exchange for copies. If you
37534 distribute a large enough number of copies you must also follow
37535 the conditions in section 3.
37537 You may also lend copies, under the same conditions stated above,
37538 and you may publicly display copies.
37540 3. COPYING IN QUANTITY
37542 If you publish printed copies (or copies in media that commonly
37543 have printed covers) of the Document, numbering more than 100, and
37544 the Document's license notice requires Cover Texts, you must
37545 enclose the copies in covers that carry, clearly and legibly, all
37546 these Cover Texts: Front-Cover Texts on the front cover, and
37547 Back-Cover Texts on the back cover. Both covers must also clearly
37548 and legibly identify you as the publisher of these copies. The
37549 front cover must present the full title with all words of the
37550 title equally prominent and visible. You may add other material
37551 on the covers in addition. Copying with changes limited to the
37552 covers, as long as they preserve the title of the Document and
37553 satisfy these conditions, can be treated as verbatim copying in
37556 If the required texts for either cover are too voluminous to fit
37557 legibly, you should put the first ones listed (as many as fit
37558 reasonably) on the actual cover, and continue the rest onto
37561 If you publish or distribute Opaque copies of the Document
37562 numbering more than 100, you must either include a
37563 machine-readable Transparent copy along with each Opaque copy, or
37564 state in or with each Opaque copy a computer-network location from
37565 which the general network-using public has access to download
37566 using public-standard network protocols a complete Transparent
37567 copy of the Document, free of added material. If you use the
37568 latter option, you must take reasonably prudent steps, when you
37569 begin distribution of Opaque copies in quantity, to ensure that
37570 this Transparent copy will remain thus accessible at the stated
37571 location until at least one year after the last time you
37572 distribute an Opaque copy (directly or through your agents or
37573 retailers) of that edition to the public.
37575 It is requested, but not required, that you contact the authors of
37576 the Document well before redistributing any large number of
37577 copies, to give them a chance to provide you with an updated
37578 version of the Document.
37582 You may copy and distribute a Modified Version of the Document
37583 under the conditions of sections 2 and 3 above, provided that you
37584 release the Modified Version under precisely this License, with
37585 the Modified Version filling the role of the Document, thus
37586 licensing distribution and modification of the Modified Version to
37587 whoever possesses a copy of it. In addition, you must do these
37588 things in the Modified Version:
37590 A. Use in the Title Page (and on the covers, if any) a title
37591 distinct from that of the Document, and from those of
37592 previous versions (which should, if there were any, be listed
37593 in the History section of the Document). You may use the
37594 same title as a previous version if the original publisher of
37595 that version gives permission.
37597 B. List on the Title Page, as authors, one or more persons or
37598 entities responsible for authorship of the modifications in
37599 the Modified Version, together with at least five of the
37600 principal authors of the Document (all of its principal
37601 authors, if it has fewer than five), unless they release you
37602 from this requirement.
37604 C. State on the Title page the name of the publisher of the
37605 Modified Version, as the publisher.
37607 D. Preserve all the copyright notices of the Document.
37609 E. Add an appropriate copyright notice for your modifications
37610 adjacent to the other copyright notices.
37612 F. Include, immediately after the copyright notices, a license
37613 notice giving the public permission to use the Modified
37614 Version under the terms of this License, in the form shown in
37615 the Addendum below.
37617 G. Preserve in that license notice the full lists of Invariant
37618 Sections and required Cover Texts given in the Document's
37621 H. Include an unaltered copy of this License.
37623 I. Preserve the section Entitled "History", Preserve its Title,
37624 and add to it an item stating at least the title, year, new
37625 authors, and publisher of the Modified Version as given on
37626 the Title Page. If there is no section Entitled "History" in
37627 the Document, create one stating the title, year, authors,
37628 and publisher of the Document as given on its Title Page,
37629 then add an item describing the Modified Version as stated in
37630 the previous sentence.
37632 J. Preserve the network location, if any, given in the Document
37633 for public access to a Transparent copy of the Document, and
37634 likewise the network locations given in the Document for
37635 previous versions it was based on. These may be placed in
37636 the "History" section. You may omit a network location for a
37637 work that was published at least four years before the
37638 Document itself, or if the original publisher of the version
37639 it refers to gives permission.
37641 K. For any section Entitled "Acknowledgements" or "Dedications",
37642 Preserve the Title of the section, and preserve in the
37643 section all the substance and tone of each of the contributor
37644 acknowledgements and/or dedications given therein.
37646 L. Preserve all the Invariant Sections of the Document,
37647 unaltered in their text and in their titles. Section numbers
37648 or the equivalent are not considered part of the section
37651 M. Delete any section Entitled "Endorsements". Such a section
37652 may not be included in the Modified Version.
37654 N. Do not retitle any existing section to be Entitled
37655 "Endorsements" or to conflict in title with any Invariant
37658 O. Preserve any Warranty Disclaimers.
37660 If the Modified Version includes new front-matter sections or
37661 appendices that qualify as Secondary Sections and contain no
37662 material copied from the Document, you may at your option
37663 designate some or all of these sections as invariant. To do this,
37664 add their titles to the list of Invariant Sections in the Modified
37665 Version's license notice. These titles must be distinct from any
37666 other section titles.
37668 You may add a section Entitled "Endorsements", provided it contains
37669 nothing but endorsements of your Modified Version by various
37670 parties--for example, statements of peer review or that the text
37671 has been approved by an organization as the authoritative
37672 definition of a standard.
37674 You may add a passage of up to five words as a Front-Cover Text,
37675 and a passage of up to 25 words as a Back-Cover Text, to the end
37676 of the list of Cover Texts in the Modified Version. Only one
37677 passage of Front-Cover Text and one of Back-Cover Text may be
37678 added by (or through arrangements made by) any one entity. If the
37679 Document already includes a cover text for the same cover,
37680 previously added by you or by arrangement made by the same entity
37681 you are acting on behalf of, you may not add another; but you may
37682 replace the old one, on explicit permission from the previous
37683 publisher that added the old one.
37685 The author(s) and publisher(s) of the Document do not by this
37686 License give permission to use their names for publicity for or to
37687 assert or imply endorsement of any Modified Version.
37689 5. COMBINING DOCUMENTS
37691 You may combine the Document with other documents released under
37692 this License, under the terms defined in section 4 above for
37693 modified versions, provided that you include in the combination
37694 all of the Invariant Sections of all of the original documents,
37695 unmodified, and list them all as Invariant Sections of your
37696 combined work in its license notice, and that you preserve all
37697 their Warranty Disclaimers.
37699 The combined work need only contain one copy of this License, and
37700 multiple identical Invariant Sections may be replaced with a single
37701 copy. If there are multiple Invariant Sections with the same name
37702 but different contents, make the title of each such section unique
37703 by adding at the end of it, in parentheses, the name of the
37704 original author or publisher of that section if known, or else a
37705 unique number. Make the same adjustment to the section titles in
37706 the list of Invariant Sections in the license notice of the
37709 In the combination, you must combine any sections Entitled
37710 "History" in the various original documents, forming one section
37711 Entitled "History"; likewise combine any sections Entitled
37712 "Acknowledgements", and any sections Entitled "Dedications". You
37713 must delete all sections Entitled "Endorsements."
37715 6. COLLECTIONS OF DOCUMENTS
37717 You may make a collection consisting of the Document and other
37718 documents released under this License, and replace the individual
37719 copies of this License in the various documents with a single copy
37720 that is included in the collection, provided that you follow the
37721 rules of this License for verbatim copying of each of the
37722 documents in all other respects.
37724 You may extract a single document from such a collection, and
37725 distribute it individually under this License, provided you insert
37726 a copy of this License into the extracted document, and follow
37727 this License in all other respects regarding verbatim copying of
37730 7. AGGREGATION WITH INDEPENDENT WORKS
37732 A compilation of the Document or its derivatives with other
37733 separate and independent documents or works, in or on a volume of
37734 a storage or distribution medium, is called an "aggregate" if the
37735 copyright resulting from the compilation is not used to limit the
37736 legal rights of the compilation's users beyond what the individual
37737 works permit. When the Document is included in an aggregate, this
37738 License does not apply to the other works in the aggregate which
37739 are not themselves derivative works of the Document.
37741 If the Cover Text requirement of section 3 is applicable to these
37742 copies of the Document, then if the Document is less than one half
37743 of the entire aggregate, the Document's Cover Texts may be placed
37744 on covers that bracket the Document within the aggregate, or the
37745 electronic equivalent of covers if the Document is in electronic
37746 form. Otherwise they must appear on printed covers that bracket
37747 the whole aggregate.
37751 Translation is considered a kind of modification, so you may
37752 distribute translations of the Document under the terms of section
37753 4. Replacing Invariant Sections with translations requires special
37754 permission from their copyright holders, but you may include
37755 translations of some or all Invariant Sections in addition to the
37756 original versions of these Invariant Sections. You may include a
37757 translation of this License, and all the license notices in the
37758 Document, and any Warranty Disclaimers, provided that you also
37759 include the original English version of this License and the
37760 original versions of those notices and disclaimers. In case of a
37761 disagreement between the translation and the original version of
37762 this License or a notice or disclaimer, the original version will
37765 If a section in the Document is Entitled "Acknowledgements",
37766 "Dedications", or "History", the requirement (section 4) to
37767 Preserve its Title (section 1) will typically require changing the
37772 You may not copy, modify, sublicense, or distribute the Document
37773 except as expressly provided for under this License. Any other
37774 attempt to copy, modify, sublicense or distribute the Document is
37775 void, and will automatically terminate your rights under this
37776 License. However, parties who have received copies, or rights,
37777 from you under this License will not have their licenses
37778 terminated so long as such parties remain in full compliance.
37780 10. FUTURE REVISIONS OF THIS LICENSE
37782 The Free Software Foundation may publish new, revised versions of
37783 the GNU Free Documentation License from time to time. Such new
37784 versions will be similar in spirit to the present version, but may
37785 differ in detail to address new problems or concerns. See
37786 `http://www.gnu.org/copyleft/'.
37788 Each version of the License is given a distinguishing version
37789 number. If the Document specifies that a particular numbered
37790 version of this License "or any later version" applies to it, you
37791 have the option of following the terms and conditions either of
37792 that specified version or of any later version that has been
37793 published (not as a draft) by the Free Software Foundation. If
37794 the Document does not specify a version number of this License,
37795 you may choose any version ever published (not as a draft) by the
37796 Free Software Foundation.
37798 ADDENDUM: How to use this License for your documents
37799 ====================================================
37801 To use this License in a document you have written, include a copy of
37802 the License in the document and put the following copyright and license
37803 notices just after the title page:
37805 Copyright (C) YEAR YOUR NAME.
37806 Permission is granted to copy, distribute and/or modify this document
37807 under the terms of the GNU Free Documentation License, Version 1.2
37808 or any later version published by the Free Software Foundation;
37809 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
37810 Texts. A copy of the license is included in the section entitled ``GNU
37811 Free Documentation License''.
37813 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
37814 replace the "with...Texts." line with this:
37816 with the Invariant Sections being LIST THEIR TITLES, with
37817 the Front-Cover Texts being LIST, and with the Back-Cover Texts
37820 If you have Invariant Sections without Cover Texts, or some other
37821 combination of the three, merge those two alternatives to suit the
37824 If your document contains nontrivial examples of program code, we
37825 recommend releasing these examples in parallel under your choice of
37826 free software license, such as the GNU General Public License, to
37827 permit their use in free software.
37830 File: gccint.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top
37832 Contributors to GCC
37833 *******************
37835 The GCC project would like to thank its many contributors. Without
37836 them the project would not have been nearly as successful as it has
37837 been. Any omissions in this list are accidental. Feel free to contact
37838 <law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
37839 some of your contributions are not listed. Please keep this list in
37840 alphabetical order.
37842 * Analog Devices helped implement the support for complex data types
37845 * John David Anglin for threading-related fixes and improvements to
37846 libstdc++-v3, and the HP-UX port.
37848 * James van Artsdalen wrote the code that makes efficient use of the
37849 Intel 80387 register stack.
37851 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
37854 * Alasdair Baird for various bug fixes.
37856 * Giovanni Bajo for analyzing lots of complicated C++ problem
37859 * Peter Barada for his work to improve code generation for new
37862 * Gerald Baumgartner added the signature extension to the C++ front
37865 * Godmar Back for his Java improvements and encouragement.
37867 * Scott Bambrough for help porting the Java compiler.
37869 * Wolfgang Bangerth for processing tons of bug reports.
37871 * Jon Beniston for his Microsoft Windows port of Java and port to
37874 * Daniel Berlin for better DWARF2 support, faster/better
37875 optimizations, improved alias analysis, plus migrating GCC to
37878 * Geoff Berry for his Java object serialization work and various
37881 * Uros Bizjak for the implementation of x87 math built-in functions
37882 and for various middle end and i386 back end improvements and bug
37885 * Eric Blake for helping to make GCJ and libgcj conform to the
37888 * Janne Blomqvist for contributions to GNU Fortran.
37890 * Segher Boessenkool for various fixes.
37892 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
37895 * Neil Booth for work on cpplib, lang hooks, debug hooks and other
37896 miscellaneous clean-ups.
37898 * Steven Bosscher for integrating the GNU Fortran front end into GCC
37899 and for contributing to the tree-ssa branch.
37901 * Eric Botcazou for fixing middle- and backend bugs left and right.
37903 * Per Bothner for his direction via the steering committee and
37904 various improvements to the infrastructure for supporting new
37905 languages. Chill front end implementation. Initial
37906 implementations of cpplib, fix-header, config.guess, libio, and
37907 past C++ library (libg++) maintainer. Dreaming up, designing and
37908 implementing much of GCJ.
37910 * Devon Bowen helped port GCC to the Tahoe.
37912 * Don Bowman for mips-vxworks contributions.
37914 * Dave Brolley for work on cpplib and Chill.
37916 * Paul Brook for work on the ARM architecture and maintaining GNU
37919 * Robert Brown implemented the support for Encore 32000 systems.
37921 * Christian Bruel for improvements to local store elimination.
37923 * Herman A.J. ten Brugge for various fixes.
37925 * Joerg Brunsmann for Java compiler hacking and help with the GCJ
37928 * Joe Buck for his direction via the steering committee.
37930 * Craig Burley for leadership of the G77 Fortran effort.
37932 * Stephan Buys for contributing Doxygen notes for libstdc++.
37934 * Paolo Carlini for libstdc++ work: lots of efficiency improvements
37935 to the C++ strings, streambufs and formatted I/O, hard detective
37936 work on the frustrating localization issues, and keeping up with
37937 the problem reports.
37939 * John Carr for his alias work, SPARC hacking, infrastructure
37940 improvements, previous contributions to the steering committee,
37941 loop optimizations, etc.
37943 * Stephane Carrez for 68HC11 and 68HC12 ports.
37945 * Steve Chamberlain for support for the Renesas SH and H8 processors
37946 and the PicoJava processor, and for GCJ config fixes.
37948 * Glenn Chambers for help with the GCJ FAQ.
37950 * John-Marc Chandonia for various libgcj patches.
37952 * Denis Chertykov for contributing and maintaining the AVR port, the
37953 first GCC port for an 8-bit architecture.
37955 * Scott Christley for his Objective-C contributions.
37957 * Eric Christopher for his Java porting help and clean-ups.
37959 * Branko Cibej for more warning contributions.
37961 * The GNU Classpath project for all of their merged runtime code.
37963 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
37964 and other random hacking.
37966 * Michael Cook for libstdc++ cleanup patches to reduce warnings.
37968 * R. Kelley Cook for making GCC buildable from a read-only directory
37969 as well as other miscellaneous build process and documentation
37972 * Ralf Corsepius for SH testing and minor bug fixing.
37974 * Stan Cox for care and feeding of the x86 port and lots of behind
37975 the scenes hacking.
37977 * Alex Crain provided changes for the 3b1.
37979 * Ian Dall for major improvements to the NS32k port.
37981 * Paul Dale for his work to add uClinux platform support to the m68k
37984 * Dario Dariol contributed the four varieties of sample programs
37985 that print a copy of their source.
37987 * Russell Davidson for fstream and stringstream fixes in libstdc++.
37989 * Bud Davis for work on the G77 and GNU Fortran compilers.
37991 * Mo DeJong for GCJ and libgcj bug fixes.
37993 * DJ Delorie for the DJGPP port, build and libiberty maintenance,
37994 various bug fixes, and the M32C and MeP ports.
37996 * Arnaud Desitter for helping to debug GNU Fortran.
37998 * Gabriel Dos Reis for contributions to G++, contributions and
37999 maintenance of GCC diagnostics infrastructure, libstdc++-v3,
38000 including `valarray<>', `complex<>', maintaining the numerics
38001 library (including that pesky `<limits>' :-) and keeping
38002 up-to-date anything to do with numbers.
38004 * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
38005 ISO C99 support, CFG dumping support, etc., plus support of the
38006 C++ runtime libraries including for all kinds of C interface
38007 issues, contributing and maintaining `complex<>', sanity checking
38008 and disbursement, configuration architecture, libio maintenance,
38009 and early math work.
38011 * Zdenek Dvorak for a new loop unroller and various fixes.
38013 * Richard Earnshaw for his ongoing work with the ARM.
38015 * David Edelsohn for his direction via the steering committee,
38016 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
38017 loop changes, doing the entire AIX port of libstdc++ with his bare
38018 hands, and for ensuring GCC properly keeps working on AIX.
38020 * Kevin Ediger for the floating point formatting of num_put::do_put
38023 * Phil Edwards for libstdc++ work including configuration hackery,
38024 documentation maintainer, chief breaker of the web pages, the
38025 occasional iostream bug fix, and work on shared library symbol
38028 * Paul Eggert for random hacking all over GCC.
38030 * Mark Elbrecht for various DJGPP improvements, and for libstdc++
38031 configuration support for locales and fstream-related fixes.
38033 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
38036 * Christian Ehrhardt for dealing with bug reports.
38038 * Ben Elliston for his work to move the Objective-C runtime into its
38039 own subdirectory and for his work on autoconf.
38041 * Revital Eres for work on the PowerPC 750CL port.
38043 * Marc Espie for OpenBSD support.
38045 * Doug Evans for much of the global optimization framework, arc,
38046 m32r, and SPARC work.
38048 * Christopher Faylor for his work on the Cygwin port and for caring
38049 and feeding the gcc.gnu.org box and saving its users tons of spam.
38051 * Fred Fish for BeOS support and Ada fixes.
38053 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
38055 * Peter Gerwinski for various bug fixes and the Pascal front end.
38057 * Kaveh R. Ghazi for his direction via the steering committee,
38058 amazing work to make `-W -Wall -W* -Werror' useful, and
38059 continuously testing GCC on a plethora of platforms. Kaveh
38060 extends his gratitude to the CAIP Center at Rutgers University for
38061 providing him with computing resources to work on Free Software
38062 since the late 1980s.
38064 * John Gilmore for a donation to the FSF earmarked improving GNU
38067 * Judy Goldberg for c++ contributions.
38069 * Torbjorn Granlund for various fixes and the c-torture testsuite,
38070 multiply- and divide-by-constant optimization, improved long long
38071 support, improved leaf function register allocation, and his
38072 direction via the steering committee.
38074 * Anthony Green for his `-Os' contributions, the moxie port, and
38075 Java front end work.
38077 * Stu Grossman for gdb hacking, allowing GCJ developers to debug
38080 * Michael K. Gschwind contributed the port to the PDP-11.
38082 * Richard Guenther for his ongoing middle-end contributions and bug
38083 fixes and for release management.
38085 * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
38086 the support for Dwarf symbolic debugging information, and much of
38087 the support for System V Release 4. He has also worked heavily on
38088 the Intel 386 and 860 support.
38090 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
38093 * Bruno Haible for improvements in the runtime overhead for EH, new
38094 warnings and assorted bug fixes.
38096 * Andrew Haley for his amazing Java compiler and library efforts.
38098 * Chris Hanson assisted in making GCC work on HP-UX for the 9000
38101 * Michael Hayes for various thankless work he's done trying to get
38102 the c30/c40 ports functional. Lots of loop and unroll
38103 improvements and fixes.
38105 * Dara Hazeghi for wading through myriads of target-specific bug
38108 * Kate Hedstrom for staking the G77 folks with an initial testsuite.
38110 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
38111 work, loop opts, and generally fixing lots of old problems we've
38112 ignored for years, flow rewrite and lots of further stuff,
38113 including reviewing tons of patches.
38115 * Aldy Hernandez for working on the PowerPC port, SIMD support, and
38118 * Nobuyuki Hikichi of Software Research Associates, Tokyo,
38119 contributed the support for the Sony NEWS machine.
38121 * Kazu Hirata for caring and feeding the Renesas H8/300 port and
38124 * Katherine Holcomb for work on GNU Fortran.
38126 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
38127 of testing and bug fixing, particularly of GCC configury code.
38129 * Steve Holmgren for MachTen patches.
38131 * Jan Hubicka for his x86 port improvements.
38133 * Falk Hueffner for working on C and optimization bug reports.
38135 * Bernardo Innocenti for his m68k work, including merging of
38136 ColdFire improvements and uClinux support.
38138 * Christian Iseli for various bug fixes.
38140 * Kamil Iskra for general m68k hacking.
38142 * Lee Iverson for random fixes and MIPS testing.
38144 * Andreas Jaeger for testing and benchmarking of GCC and various bug
38147 * Jakub Jelinek for his SPARC work and sibling call optimizations as
38148 well as lots of bug fixes and test cases, and for improving the
38151 * Janis Johnson for ia64 testing and fixes, her quality improvement
38152 sidetracks, and web page maintenance.
38154 * Kean Johnston for SCO OpenServer support and various fixes.
38156 * Tim Josling for the sample language treelang based originally on
38157 Richard Kenner's "toy" language.
38159 * Nicolai Josuttis for additional libstdc++ documentation.
38161 * Klaus Kaempf for his ongoing work to make alpha-vms a viable
38164 * Steven G. Kargl for work on GNU Fortran.
38166 * David Kashtan of SRI adapted GCC to VMS.
38168 * Ryszard Kabatek for many, many libstdc++ bug fixes and
38169 optimizations of strings, especially member functions, and for
38172 * Geoffrey Keating for his ongoing work to make the PPC work for
38173 GNU/Linux and his automatic regression tester.
38175 * Brendan Kehoe for his ongoing work with G++ and for a lot of early
38176 work in just about every part of libstdc++.
38178 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
38181 * Richard Kenner of the New York University Ultracomputer Research
38182 Laboratory wrote the machine descriptions for the AMD 29000, the
38183 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
38184 support for instruction attributes. He also made changes to
38185 better support RISC processors including changes to common
38186 subexpression elimination, strength reduction, function calling
38187 sequence handling, and condition code support, in addition to
38188 generalizing the code for frame pointer elimination and delay slot
38189 scheduling. Richard Kenner was also the head maintainer of GCC
38192 * Mumit Khan for various contributions to the Cygwin and Mingw32
38193 ports and maintaining binary releases for Microsoft Windows hosts,
38194 and for massive libstdc++ porting work to Cygwin/Mingw32.
38196 * Robin Kirkham for cpu32 support.
38198 * Mark Klein for PA improvements.
38200 * Thomas Koenig for various bug fixes.
38202 * Bruce Korb for the new and improved fixincludes code.
38204 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
38207 * Charles LaBrec contributed the support for the Integrated Solutions
38210 * Asher Langton and Mike Kumbera for contributing Cray pointer
38211 support to GNU Fortran, and for other GNU Fortran improvements.
38213 * Jeff Law for his direction via the steering committee,
38214 coordinating the entire egcs project and GCC 2.95, rolling out
38215 snapshots and releases, handling merges from GCC2, reviewing tons
38216 of patches that might have fallen through the cracks else, and
38217 random but extensive hacking.
38219 * Marc Lehmann for his direction via the steering committee and
38220 helping with analysis and improvements of x86 performance.
38222 * Victor Leikehman for work on GNU Fortran.
38224 * Ted Lemon wrote parts of the RTL reader and printer.
38226 * Kriang Lerdsuwanakij for C++ improvements including template as
38227 template parameter support, and many C++ fixes.
38229 * Warren Levy for tremendous work on libgcj (Java Runtime Library)
38230 and random work on the Java front end.
38232 * Alain Lichnewsky ported GCC to the MIPS CPU.
38234 * Oskar Liljeblad for hacking on AWT and his many Java bug reports
38237 * Robert Lipe for OpenServer support, new testsuites, testing, etc.
38239 * Chen Liqin for various S+core related fixes/improvement, and for
38240 maintaining the S+core port.
38242 * Weiwen Liu for testing and various bug fixes.
38244 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
38245 diagnostics fixes and improvements.
38247 * Dave Love for his ongoing work with the Fortran front end and
38250 * Martin von Lo"wis for internal consistency checking infrastructure,
38251 various C++ improvements including namespace support, and tons of
38252 assistance with libstdc++/compiler merges.
38254 * H.J. Lu for his previous contributions to the steering committee,
38255 many x86 bug reports, prototype patches, and keeping the GNU/Linux
38258 * Greg McGary for random fixes and (someday) bounded pointers.
38260 * Andrew MacLeod for his ongoing work in building a real EH system,
38261 various code generation improvements, work on the global
38264 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
38265 hacking improvements to compile-time performance, overall
38266 knowledge and direction in the area of instruction scheduling, and
38267 design and implementation of the automaton based instruction
38270 * Bob Manson for his behind the scenes work on dejagnu.
38272 * Philip Martin for lots of libstdc++ string and vector iterator
38273 fixes and improvements, and string clean up and testsuites.
38275 * All of the Mauve project contributors, for Java test code.
38277 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
38279 * Adam Megacz for his work on the Microsoft Windows port of GCJ.
38281 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
38282 powerpc, haifa, ECOFF debug support, and other assorted hacking.
38284 * Jason Merrill for his direction via the steering committee and
38285 leading the G++ effort.
38287 * Martin Michlmayr for testing GCC on several architectures using the
38288 entire Debian archive.
38290 * David Miller for his direction via the steering committee, lots of
38291 SPARC work, improvements in jump.c and interfacing with the Linux
38294 * Gary Miller ported GCC to Charles River Data Systems machines.
38296 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
38297 the entire libstdc++ testsuite namespace-compatible.
38299 * Mark Mitchell for his direction via the steering committee,
38300 mountains of C++ work, load/store hoisting out of loops, alias
38301 analysis improvements, ISO C `restrict' support, and serving as
38302 release manager for GCC 3.x.
38304 * Alan Modra for various GNU/Linux bits and testing.
38306 * Toon Moene for his direction via the steering committee, Fortran
38307 maintenance, and his ongoing work to make us make Fortran run fast.
38309 * Jason Molenda for major help in the care and feeding of all the
38310 services on the gcc.gnu.org (formerly egcs.cygnus.com)
38311 machine--mail, web services, ftp services, etc etc. Doing all
38312 this work on scrap paper and the backs of envelopes would have
38315 * Catherine Moore for fixing various ugly problems we have sent her
38316 way, including the haifa bug which was killing the Alpha & PowerPC
38319 * Mike Moreton for his various Java patches.
38321 * David Mosberger-Tang for various Alpha improvements, and for the
38322 initial IA-64 port.
38324 * Stephen Moshier contributed the floating point emulator that
38325 assists in cross-compilation and permits support for floating
38326 point numbers wider than 64 bits and for ISO C99 support.
38328 * Bill Moyer for his behind the scenes work on various issues.
38330 * Philippe De Muyter for his work on the m68k port.
38332 * Joseph S. Myers for his work on the PDP-11 port, format checking
38333 and ISO C99 support, and continuous emphasis on (and contributions
38336 * Nathan Myers for his work on libstdc++-v3: architecture and
38337 authorship through the first three snapshots, including
38338 implementation of locale infrastructure, string, shadow C headers,
38339 and the initial project documentation (DESIGN, CHECKLIST, and so
38340 forth). Later, more work on MT-safe string and shadow headers.
38342 * Felix Natter for documentation on porting libstdc++.
38344 * Nathanael Nerode for cleaning up the configuration/build process.
38346 * NeXT, Inc. donated the front end that supports the Objective-C
38349 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
38350 the search engine setup, various documentation fixes and other
38353 * Geoff Noer for his work on getting cygwin native builds working.
38355 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
38356 tracking web pages, GIMPLE tuples, and assorted fixes.
38358 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
38359 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
38360 related infrastructure improvements.
38362 * Alexandre Oliva for various build infrastructure improvements,
38363 scripts and amazing testing work, including keeping libtool issues
38366 * Stefan Olsson for work on mt_alloc.
38368 * Melissa O'Neill for various NeXT fixes.
38370 * Rainer Orth for random MIPS work, including improvements to GCC's
38371 o32 ABI support, improvements to dejagnu's MIPS support, Java
38372 configuration clean-ups and porting work, and maintaining the
38373 IRIX, Solaris 2, and Tru64 UNIX ports.
38375 * Hartmut Penner for work on the s390 port.
38377 * Paul Petersen wrote the machine description for the Alliant FX/8.
38379 * Alexandre Petit-Bianco for implementing much of the Java compiler
38380 and continued Java maintainership.
38382 * Matthias Pfaller for major improvements to the NS32k port.
38384 * Gerald Pfeifer for his direction via the steering committee,
38385 pointing out lots of problems we need to solve, maintenance of the
38386 web pages, and taking care of documentation maintenance in general.
38388 * Andrew Pinski for processing bug reports by the dozen.
38390 * Ovidiu Predescu for his work on the Objective-C front end and
38393 * Jerry Quinn for major performance improvements in C++ formatted
38396 * Ken Raeburn for various improvements to checker, MIPS ports and
38397 various cleanups in the compiler.
38399 * Rolf W. Rasmussen for hacking on AWT.
38401 * David Reese of Sun Microsystems contributed to the Solaris on
38404 * Volker Reichelt for keeping up with the problem reports.
38406 * Joern Rennecke for maintaining the sh port, loop, regmove & reload
38409 * Loren J. Rittle for improvements to libstdc++-v3 including the
38410 FreeBSD port, threading fixes, thread-related configury changes,
38411 critical threading documentation, and solutions to really tricky
38412 I/O problems, as well as keeping GCC properly working on FreeBSD
38413 and continuous testing.
38415 * Craig Rodrigues for processing tons of bug reports.
38417 * Ola Ro"nnerup for work on mt_alloc.
38419 * Gavin Romig-Koch for lots of behind the scenes MIPS work.
38421 * David Ronis inspired and encouraged Craig to rewrite the G77
38422 documentation in texinfo format by contributing a first pass at a
38423 translation of the old `g77-0.5.16/f/DOC' file.
38425 * Ken Rose for fixes to GCC's delay slot filling code.
38427 * Paul Rubin wrote most of the preprocessor.
38429 * Pe'tur Runo'lfsson for major performance improvements in C++
38430 formatted I/O and large file support in C++ filebuf.
38432 * Chip Salzenberg for libstdc++ patches and improvements to locales,
38433 traits, Makefiles, libio, libtool hackery, and "long long" support.
38435 * Juha Sarlin for improvements to the H8 code generator.
38437 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
38440 * Roger Sayle for improvements to constant folding and GCC's RTL
38441 optimizers as well as for fixing numerous bugs.
38443 * Bradley Schatz for his work on the GCJ FAQ.
38445 * Peter Schauer wrote the code to allow debugging to work on the
38448 * William Schelter did most of the work on the Intel 80386 support.
38450 * Tobias Schlu"ter for work on GNU Fortran.
38452 * Bernd Schmidt for various code generation improvements and major
38453 work in the reload pass as well a serving as release manager for
38456 * Peter Schmid for constant testing of libstdc++--especially
38457 application testing, going above and beyond what was requested for
38458 the release criteria--and libstdc++ header file tweaks.
38460 * Jason Schroeder for jcf-dump patches.
38462 * Andreas Schwab for his work on the m68k port.
38464 * Lars Segerlund for work on GNU Fortran.
38466 * Joel Sherrill for his direction via the steering committee, RTEMS
38467 contributions and RTEMS testing.
38469 * Nathan Sidwell for many C++ fixes/improvements.
38471 * Jeffrey Siegal for helping RMS with the original design of GCC,
38472 some code which handles the parse tree and RTL data structures,
38473 constant folding and help with the original VAX & m68k ports.
38475 * Kenny Simpson for prompting libstdc++ fixes due to defect reports
38476 from the LWG (thereby keeping GCC in line with updates from the
38479 * Franz Sirl for his ongoing work with making the PPC port stable
38482 * Andrey Slepuhin for assorted AIX hacking.
38484 * Trevor Smigiel for contributing the SPU port.
38486 * Christopher Smith did the port for Convex machines.
38488 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
38490 * Randy Smith finished the Sun FPA support.
38492 * Scott Snyder for queue, iterator, istream, and string fixes and
38493 libstdc++ testsuite entries. Also for providing the patch to G77
38494 to add rudimentary support for `INTEGER*1', `INTEGER*2', and
38497 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
38499 * Richard Stallman, for writing the original GCC and launching the
38502 * Jan Stein of the Chalmers Computer Society provided support for
38503 Genix, as well as part of the 32000 machine description.
38505 * Nigel Stephens for various mips16 related fixes/improvements.
38507 * Jonathan Stone wrote the machine description for the Pyramid
38510 * Graham Stott for various infrastructure improvements.
38512 * John Stracke for his Java HTTP protocol fixes.
38514 * Mike Stump for his Elxsi port, G++ contributions over the years
38515 and more recently his vxworks contributions
38517 * Jeff Sturm for Java porting help, bug fixes, and encouragement.
38519 * Shigeya Suzuki for this fixes for the bsdi platforms.
38521 * Ian Lance Taylor for his mips16 work, general configury hacking,
38524 * Holger Teutsch provided the support for the Clipper CPU.
38526 * Gary Thomas for his ongoing work to make the PPC work for
38529 * Philipp Thomas for random bug fixes throughout the compiler
38531 * Jason Thorpe for thread support in libstdc++ on NetBSD.
38533 * Kresten Krab Thorup wrote the run time support for the Objective-C
38534 language and the fantastic Java bytecode interpreter.
38536 * Michael Tiemann for random bug fixes, the first instruction
38537 scheduler, initial C++ support, function integration, NS32k, SPARC
38538 and M88k machine description work, delay slot scheduling.
38540 * Andreas Tobler for his work porting libgcj to Darwin.
38542 * Teemu Torma for thread safe exception handling support.
38544 * Leonard Tower wrote parts of the parser, RTL generator, and RTL
38545 definitions, and of the VAX machine description.
38547 * Daniel Towner and Hariharan Sandanagobalane contributed and
38548 maintain the picoChip port.
38550 * Tom Tromey for internationalization support and for his many Java
38551 contributions and libgcj maintainership.
38553 * Lassi Tuura for improvements to config.guess to determine HP
38556 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
38558 * Andy Vaught for the design and initial implementation of the GNU
38561 * Brent Verner for work with the libstdc++ cshadow files and their
38562 associated configure steps.
38564 * Todd Vierling for contributions for NetBSD ports.
38566 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
38569 * Dean Wakerley for converting the install documentation from HTML
38570 to texinfo in time for GCC 3.0.
38572 * Krister Walfridsson for random bug fixes.
38574 * Feng Wang for contributions to GNU Fortran.
38576 * Stephen M. Webb for time and effort on making libstdc++ shadow
38577 files work with the tricky Solaris 8+ headers, and for pushing the
38578 build-time header tree.
38580 * John Wehle for various improvements for the x86 code generator,
38581 related infrastructure improvements to help x86 code generation,
38582 value range propagation and other work, WE32k port.
38584 * Ulrich Weigand for work on the s390 port.
38586 * Zack Weinberg for major work on cpplib and various other bug fixes.
38588 * Matt Welsh for help with Linux Threads support in GCJ.
38590 * Urban Widmark for help fixing java.io.
38592 * Mark Wielaard for new Java library code and his work integrating
38595 * Dale Wiles helped port GCC to the Tahoe.
38597 * Bob Wilson from Tensilica, Inc. for the Xtensa port.
38599 * Jim Wilson for his direction via the steering committee, tackling
38600 hard problems in various places that nobody else wanted to work
38601 on, strength reduction and other loop optimizations.
38603 * Paul Woegerer and Tal Agmon for the CRX port.
38605 * Carlo Wood for various fixes.
38607 * Tom Wood for work on the m88k port.
38609 * Canqun Yang for work on GNU Fortran.
38611 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
38612 description for the Tron architecture (specifically, the Gmicro).
38614 * Kevin Zachmann helped port GCC to the Tahoe.
38616 * Ayal Zaks for Swing Modulo Scheduling (SMS).
38618 * Xiaoqiang Zhang for work on GNU Fortran.
38620 * Gilles Zunino for help porting Java to Irix.
38623 The following people are recognized for their contributions to GNAT,
38624 the Ada front end of GCC:
38627 * Romain Berrendonner
38677 * Hristian Kirtchev
38720 The following people are recognized for their contributions of new
38721 features, bug reports, testing and integration of classpath/libgcj for
38723 * Lillian Angel for `JTree' implementation and lots Free Swing
38724 additions and bug fixes.
38726 * Wolfgang Baer for `GapContent' bug fixes.
38728 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
38729 event fixes, lots of Free Swing work including `JTable' editing.
38731 * Stuart Ballard for RMI constant fixes.
38733 * Goffredo Baroncelli for `HTTPURLConnection' fixes.
38735 * Gary Benson for `MessageFormat' fixes.
38737 * Daniel Bonniot for `Serialization' fixes.
38739 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
38740 and `DOM xml:id' support.
38742 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
38744 * Archie Cobbs for build fixes, VM interface updates,
38745 `URLClassLoader' updates.
38747 * Kelley Cook for build fixes.
38749 * Martin Cordova for Suggestions for better `SocketTimeoutException'.
38751 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
38754 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
38755 2D support. Lots of imageio framework additions, lots of AWT and
38756 Free Swing bug fixes.
38758 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
38759 fixes, better `Proxy' support, bug fixes and IKVM integration.
38761 * Santiago Gala for `AccessControlContext' fixes.
38763 * Nicolas Geoffray for `VMClassLoader' and `AccessController'
38766 * David Gilbert for `basic' and `metal' icon and plaf support and
38767 lots of documenting, Lots of Free Swing and metal theme additions.
38768 `MetalIconFactory' implementation.
38770 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
38772 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
38775 * Kim Ho for `JFileChooser' implementation.
38777 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
38778 updates, `Serialization' fixes, `Properties' XML support and
38779 generic branch work, VMIntegration guide update.
38781 * Bastiaan Huisman for `TimeZone' bug fixing.
38783 * Andreas Jaeger for mprec updates.
38785 * Paul Jenner for better `-Werror' support.
38787 * Ito Kazumitsu for `NetworkInterface' implementation and updates.
38789 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
38790 bug fixes all over. Lots of Free Swing work including styled text.
38792 * Simon Kitching for `String' cleanups and optimization suggestions.
38794 * Michael Koch for configuration fixes, `Locale' updates, bug and
38797 * Guilhem Lavaux for configuration, thread and channel fixes and
38798 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
38800 * David Lichteblau for JCL support library global/local reference
38803 * Aaron Luchko for JDWP updates and documentation fixes.
38805 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
38808 * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
38809 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
38810 and implementing the Qt4 peers.
38812 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
38813 `SystemLogger' and `FileHandler' rotate implementations, NIO
38814 `FileChannel.map' support, security and policy updates.
38816 * Bryce McKinlay for RMI work.
38818 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
38819 testing and documenting.
38821 * Kalle Olavi Niemitalo for build fixes.
38823 * Rainer Orth for build fixes.
38825 * Andrew Overholt for `File' locking fixes.
38827 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
38829 * Olga Rodimina for `MenuSelectionManager' implementation.
38831 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
38833 * Julian Scheid for documentation updates and gjdoc support.
38835 * Christian Schlichtherle for zip fixes and cleanups.
38837 * Robert Schuster for documentation updates and beans fixes,
38838 `TreeNode' enumerations and `ActionCommand' and various fixes, XML
38839 and URL, AWT and Free Swing bug fixes.
38841 * Keith Seitz for lots of JDWP work.
38843 * Christian Thalinger for 64-bit cleanups, Configuration and VM
38844 interface fixes and `CACAO' integration, `fdlibm' updates.
38846 * Gael Thomas for `VMClassLoader' boot packages support suggestions.
38848 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
38849 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
38851 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
38852 integration. `Qt4' build infrastructure, `SHA1PRNG' and
38853 `GdkPixbugDecoder' updates.
38855 * Tom Tromey for Eclipse integration, generics work, lots of bug
38856 fixes and gcj integration including coordinating The Big Merge.
38858 * Mark Wielaard for bug fixes, packaging and release management,
38859 `Clipboard' implementation, system call interrupts and network
38860 timeouts and `GdkPixpufDecoder' fixes.
38863 In addition to the above, all of which also contributed time and
38864 energy in testing GCC, we would like to thank the following for their
38865 contributions to testing:
38867 * Michael Abd-El-Malek
38877 * David Billinghurst
38881 * Stephane Bortzmeyer
38891 * Bradford Castalia
38913 * Charles-Antoine Gauthier
38935 * Kevin B. Hendricks
38939 * Christian Joensson
38947 * Anand Krishnaswamy
38949 * A. O. V. Le Blanc
39013 * Pedro A. M. Vazquez
39023 And finally we'd like to thank everyone who uses the compiler, provides
39024 feedback and generally reminds us why we're doing this work in the first
39028 File: gccint.info, Node: Option Index, Next: Concept Index, Prev: Contributors, Up: Top
39033 GCC's command line options are indexed here without any initial `-' or
39034 `--'. Where an option has both positive and negative forms (such as
39035 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
39036 indexed under the most appropriate form; it may sometimes be useful to
39037 look up both forms.
39042 * msoft-float: Soft float library routines.
39046 File: gccint.info, Node: Concept Index, Prev: Option Index, Up: Top
39054 * ! in constraint: Multi-Alternative. (line 47)
39055 * # in constraint: Modifiers. (line 67)
39056 * # in template: Output Template. (line 66)
39057 * #pragma: Misc. (line 381)
39058 * % in constraint: Modifiers. (line 45)
39059 * % in GTY option: GTY Options. (line 18)
39060 * % in template: Output Template. (line 6)
39061 * & in constraint: Modifiers. (line 25)
39062 * ( <1>: GIMPLE_CALL. (line 63)
39063 * ( <2>: GIMPLE_ASM. (line 21)
39064 * (: Logical Operators. (line 107)
39065 * (nil): RTL Objects. (line 73)
39066 * *: Host Common. (line 17)
39067 * * in constraint: Modifiers. (line 72)
39068 * * in template: Output Statement. (line 29)
39069 * *gimple_assign_lhs_ptr: GIMPLE_ASSIGN. (line 54)
39070 * *gimple_assign_rhs1_ptr: GIMPLE_ASSIGN. (line 60)
39071 * *gimple_assign_rhs2_ptr: GIMPLE_ASSIGN. (line 67)
39072 * *gimple_call_arg_ptr: GIMPLE_CALL. (line 71)
39073 * *gimple_call_lhs_ptr: GIMPLE_CALL. (line 32)
39074 * *gimple_catch_types_ptr: GIMPLE_CATCH. (line 16)
39075 * *gimple_debug_bind_get_value_ptr: GIMPLE_DEBUG. (line 52)
39076 * *gimple_eh_filter_types_ptr: GIMPLE_EH_FILTER. (line 15)
39077 * *gimple_omp_critical_name_ptr: GIMPLE_OMP_CRITICAL.
39079 * *gimple_omp_for_clauses_ptr: GIMPLE_OMP_FOR. (line 23)
39080 * *gimple_omp_for_final_ptr: GIMPLE_OMP_FOR. (line 54)
39081 * *gimple_omp_for_incr_ptr: GIMPLE_OMP_FOR. (line 64)
39082 * *gimple_omp_for_index_ptr: GIMPLE_OMP_FOR. (line 34)
39083 * *gimple_omp_for_initial_ptr: GIMPLE_OMP_FOR. (line 44)
39084 * *gimple_omp_parallel_child_fn_ptr: GIMPLE_OMP_PARALLEL.
39086 * *gimple_omp_parallel_clauses_ptr: GIMPLE_OMP_PARALLEL.
39088 * *gimple_omp_parallel_data_arg_ptr: GIMPLE_OMP_PARALLEL.
39090 * *gimple_omp_sections_clauses_ptr: GIMPLE_OMP_SECTIONS.
39092 * *gimple_omp_sections_control_ptr: GIMPLE_OMP_SECTIONS.
39094 * *gimple_omp_single_clauses_ptr: GIMPLE_OMP_SINGLE. (line 17)
39095 * *gimple_op_ptr: Manipulating GIMPLE statements.
39097 * *gimple_ops <1>: Manipulating GIMPLE statements.
39099 * *gimple_ops: Logical Operators. (line 82)
39100 * *gimple_phi_result_ptr: GIMPLE_PHI. (line 22)
39101 * *gsi_stmt_ptr: Sequence iterators. (line 80)
39102 * + in constraint: Modifiers. (line 12)
39103 * -fsection-anchors <1>: Anchored Addresses. (line 6)
39104 * -fsection-anchors: Special Accessors. (line 110)
39105 * /c in RTL dump: Flags. (line 239)
39106 * /f in RTL dump: Flags. (line 247)
39107 * /i in RTL dump: Flags. (line 299)
39108 * /j in RTL dump: Flags. (line 314)
39109 * /s in RTL dump: Flags. (line 263)
39110 * /u in RTL dump: Flags. (line 324)
39111 * /v in RTL dump: Flags. (line 356)
39112 * 0 in constraint: Simple Constraints. (line 120)
39113 * < in constraint: Simple Constraints. (line 48)
39114 * = in constraint: Modifiers. (line 8)
39115 * > in constraint: Simple Constraints. (line 52)
39116 * ? in constraint: Multi-Alternative. (line 41)
39117 * \: Output Template. (line 46)
39118 * __absvdi2: Integer library routines.
39120 * __absvsi2: Integer library routines.
39122 * __addda3: Fixed-point fractional library routines.
39124 * __adddf3: Soft float library routines.
39126 * __adddq3: Fixed-point fractional library routines.
39128 * __addha3: Fixed-point fractional library routines.
39130 * __addhq3: Fixed-point fractional library routines.
39132 * __addqq3: Fixed-point fractional library routines.
39134 * __addsa3: Fixed-point fractional library routines.
39136 * __addsf3: Soft float library routines.
39138 * __addsq3: Fixed-point fractional library routines.
39140 * __addta3: Fixed-point fractional library routines.
39142 * __addtf3: Soft float library routines.
39144 * __adduda3: Fixed-point fractional library routines.
39146 * __addudq3: Fixed-point fractional library routines.
39148 * __adduha3: Fixed-point fractional library routines.
39150 * __adduhq3: Fixed-point fractional library routines.
39152 * __adduqq3: Fixed-point fractional library routines.
39154 * __addusa3: Fixed-point fractional library routines.
39156 * __addusq3: Fixed-point fractional library routines.
39158 * __adduta3: Fixed-point fractional library routines.
39160 * __addvdi3: Integer library routines.
39162 * __addvsi3: Integer library routines.
39164 * __addxf3: Soft float library routines.
39166 * __ashlda3: Fixed-point fractional library routines.
39168 * __ashldi3: Integer library routines.
39170 * __ashldq3: Fixed-point fractional library routines.
39172 * __ashlha3: Fixed-point fractional library routines.
39174 * __ashlhq3: Fixed-point fractional library routines.
39176 * __ashlqq3: Fixed-point fractional library routines.
39178 * __ashlsa3: Fixed-point fractional library routines.
39180 * __ashlsi3: Integer library routines.
39182 * __ashlsq3: Fixed-point fractional library routines.
39184 * __ashlta3: Fixed-point fractional library routines.
39186 * __ashlti3: Integer library routines.
39188 * __ashluda3: Fixed-point fractional library routines.
39190 * __ashludq3: Fixed-point fractional library routines.
39192 * __ashluha3: Fixed-point fractional library routines.
39194 * __ashluhq3: Fixed-point fractional library routines.
39196 * __ashluqq3: Fixed-point fractional library routines.
39198 * __ashlusa3: Fixed-point fractional library routines.
39200 * __ashlusq3: Fixed-point fractional library routines.
39202 * __ashluta3: Fixed-point fractional library routines.
39204 * __ashrda3: Fixed-point fractional library routines.
39206 * __ashrdi3: Integer library routines.
39208 * __ashrdq3: Fixed-point fractional library routines.
39210 * __ashrha3: Fixed-point fractional library routines.
39212 * __ashrhq3: Fixed-point fractional library routines.
39214 * __ashrqq3: Fixed-point fractional library routines.
39216 * __ashrsa3: Fixed-point fractional library routines.
39218 * __ashrsi3: Integer library routines.
39220 * __ashrsq3: Fixed-point fractional library routines.
39222 * __ashrta3: Fixed-point fractional library routines.
39224 * __ashrti3: Integer library routines.
39226 * __bid_adddd3: Decimal float library routines.
39228 * __bid_addsd3: Decimal float library routines.
39230 * __bid_addtd3: Decimal float library routines.
39232 * __bid_divdd3: Decimal float library routines.
39234 * __bid_divsd3: Decimal float library routines.
39236 * __bid_divtd3: Decimal float library routines.
39238 * __bid_eqdd2: Decimal float library routines.
39240 * __bid_eqsd2: Decimal float library routines.
39242 * __bid_eqtd2: Decimal float library routines.
39244 * __bid_extendddtd2: Decimal float library routines.
39246 * __bid_extendddtf: Decimal float library routines.
39248 * __bid_extendddxf: Decimal float library routines.
39250 * __bid_extenddfdd: Decimal float library routines.
39252 * __bid_extenddftd: Decimal float library routines.
39254 * __bid_extendsddd2: Decimal float library routines.
39256 * __bid_extendsddf: Decimal float library routines.
39258 * __bid_extendsdtd2: Decimal float library routines.
39260 * __bid_extendsdtf: Decimal float library routines.
39262 * __bid_extendsdxf: Decimal float library routines.
39264 * __bid_extendsfdd: Decimal float library routines.
39266 * __bid_extendsfsd: Decimal float library routines.
39268 * __bid_extendsftd: Decimal float library routines.
39270 * __bid_extendtftd: Decimal float library routines.
39272 * __bid_extendxftd: Decimal float library routines.
39274 * __bid_fixdddi: Decimal float library routines.
39276 * __bid_fixddsi: Decimal float library routines.
39278 * __bid_fixsddi: Decimal float library routines.
39280 * __bid_fixsdsi: Decimal float library routines.
39282 * __bid_fixtddi: Decimal float library routines.
39284 * __bid_fixtdsi: Decimal float library routines.
39286 * __bid_fixunsdddi: Decimal float library routines.
39288 * __bid_fixunsddsi: Decimal float library routines.
39290 * __bid_fixunssddi: Decimal float library routines.
39292 * __bid_fixunssdsi: Decimal float library routines.
39294 * __bid_fixunstddi: Decimal float library routines.
39296 * __bid_fixunstdsi: Decimal float library routines.
39298 * __bid_floatdidd: Decimal float library routines.
39300 * __bid_floatdisd: Decimal float library routines.
39302 * __bid_floatditd: Decimal float library routines.
39304 * __bid_floatsidd: Decimal float library routines.
39306 * __bid_floatsisd: Decimal float library routines.
39308 * __bid_floatsitd: Decimal float library routines.
39310 * __bid_floatunsdidd: Decimal float library routines.
39312 * __bid_floatunsdisd: Decimal float library routines.
39314 * __bid_floatunsditd: Decimal float library routines.
39316 * __bid_floatunssidd: Decimal float library routines.
39318 * __bid_floatunssisd: Decimal float library routines.
39320 * __bid_floatunssitd: Decimal float library routines.
39322 * __bid_gedd2: Decimal float library routines.
39324 * __bid_gesd2: Decimal float library routines.
39326 * __bid_getd2: Decimal float library routines.
39328 * __bid_gtdd2: Decimal float library routines.
39330 * __bid_gtsd2: Decimal float library routines.
39332 * __bid_gttd2: Decimal float library routines.
39334 * __bid_ledd2: Decimal float library routines.
39336 * __bid_lesd2: Decimal float library routines.
39338 * __bid_letd2: Decimal float library routines.
39340 * __bid_ltdd2: Decimal float library routines.
39342 * __bid_ltsd2: Decimal float library routines.
39344 * __bid_lttd2: Decimal float library routines.
39346 * __bid_muldd3: Decimal float library routines.
39348 * __bid_mulsd3: Decimal float library routines.
39350 * __bid_multd3: Decimal float library routines.
39352 * __bid_nedd2: Decimal float library routines.
39354 * __bid_negdd2: Decimal float library routines.
39356 * __bid_negsd2: Decimal float library routines.
39358 * __bid_negtd2: Decimal float library routines.
39360 * __bid_nesd2: Decimal float library routines.
39362 * __bid_netd2: Decimal float library routines.
39364 * __bid_subdd3: Decimal float library routines.
39366 * __bid_subsd3: Decimal float library routines.
39368 * __bid_subtd3: Decimal float library routines.
39370 * __bid_truncdddf: Decimal float library routines.
39372 * __bid_truncddsd2: Decimal float library routines.
39374 * __bid_truncddsf: Decimal float library routines.
39376 * __bid_truncdfsd: Decimal float library routines.
39378 * __bid_truncsdsf: Decimal float library routines.
39380 * __bid_trunctddd2: Decimal float library routines.
39382 * __bid_trunctddf: Decimal float library routines.
39384 * __bid_trunctdsd2: Decimal float library routines.
39386 * __bid_trunctdsf: Decimal float library routines.
39388 * __bid_trunctdtf: Decimal float library routines.
39390 * __bid_trunctdxf: Decimal float library routines.
39392 * __bid_trunctfdd: Decimal float library routines.
39394 * __bid_trunctfsd: Decimal float library routines.
39396 * __bid_truncxfdd: Decimal float library routines.
39398 * __bid_truncxfsd: Decimal float library routines.
39400 * __bid_unorddd2: Decimal float library routines.
39402 * __bid_unordsd2: Decimal float library routines.
39404 * __bid_unordtd2: Decimal float library routines.
39406 * __bswapdi2: Integer library routines.
39408 * __bswapsi2: Integer library routines.
39410 * __builtin_args_info: Varargs. (line 42)
39411 * __builtin_classify_type: Varargs. (line 76)
39412 * __builtin_next_arg: Varargs. (line 66)
39413 * __builtin_saveregs: Varargs. (line 24)
39414 * __clear_cache: Miscellaneous routines.
39416 * __clzdi2: Integer library routines.
39418 * __clzsi2: Integer library routines.
39420 * __clzti2: Integer library routines.
39422 * __cmpda2: Fixed-point fractional library routines.
39424 * __cmpdf2: Soft float library routines.
39426 * __cmpdi2: Integer library routines.
39428 * __cmpdq2: Fixed-point fractional library routines.
39430 * __cmpha2: Fixed-point fractional library routines.
39432 * __cmphq2: Fixed-point fractional library routines.
39434 * __cmpqq2: Fixed-point fractional library routines.
39436 * __cmpsa2: Fixed-point fractional library routines.
39438 * __cmpsf2: Soft float library routines.
39440 * __cmpsq2: Fixed-point fractional library routines.
39442 * __cmpta2: Fixed-point fractional library routines.
39444 * __cmptf2: Soft float library routines.
39446 * __cmpti2: Integer library routines.
39448 * __cmpuda2: Fixed-point fractional library routines.
39450 * __cmpudq2: Fixed-point fractional library routines.
39452 * __cmpuha2: Fixed-point fractional library routines.
39454 * __cmpuhq2: Fixed-point fractional library routines.
39456 * __cmpuqq2: Fixed-point fractional library routines.
39458 * __cmpusa2: Fixed-point fractional library routines.
39460 * __cmpusq2: Fixed-point fractional library routines.
39462 * __cmputa2: Fixed-point fractional library routines.
39464 * __CTOR_LIST__: Initialization. (line 25)
39465 * __ctzdi2: Integer library routines.
39467 * __ctzsi2: Integer library routines.
39469 * __ctzti2: Integer library routines.
39471 * __divda3: Fixed-point fractional library routines.
39473 * __divdc3: Soft float library routines.
39475 * __divdf3: Soft float library routines.
39477 * __divdi3: Integer library routines.
39479 * __divdq3: Fixed-point fractional library routines.
39481 * __divha3: Fixed-point fractional library routines.
39483 * __divhq3: Fixed-point fractional library routines.
39485 * __divqq3: Fixed-point fractional library routines.
39487 * __divsa3: Fixed-point fractional library routines.
39489 * __divsc3: Soft float library routines.
39491 * __divsf3: Soft float library routines.
39493 * __divsi3: Integer library routines.
39495 * __divsq3: Fixed-point fractional library routines.
39497 * __divta3: Fixed-point fractional library routines.
39499 * __divtc3: Soft float library routines.
39501 * __divtf3: Soft float library routines.
39503 * __divti3: Integer library routines.
39505 * __divxc3: Soft float library routines.
39507 * __divxf3: Soft float library routines.
39509 * __dpd_adddd3: Decimal float library routines.
39511 * __dpd_addsd3: Decimal float library routines.
39513 * __dpd_addtd3: Decimal float library routines.
39515 * __dpd_divdd3: Decimal float library routines.
39517 * __dpd_divsd3: Decimal float library routines.
39519 * __dpd_divtd3: Decimal float library routines.
39521 * __dpd_eqdd2: Decimal float library routines.
39523 * __dpd_eqsd2: Decimal float library routines.
39525 * __dpd_eqtd2: Decimal float library routines.
39527 * __dpd_extendddtd2: Decimal float library routines.
39529 * __dpd_extendddtf: Decimal float library routines.
39531 * __dpd_extendddxf: Decimal float library routines.
39533 * __dpd_extenddfdd: Decimal float library routines.
39535 * __dpd_extenddftd: Decimal float library routines.
39537 * __dpd_extendsddd2: Decimal float library routines.
39539 * __dpd_extendsddf: Decimal float library routines.
39541 * __dpd_extendsdtd2: Decimal float library routines.
39543 * __dpd_extendsdtf: Decimal float library routines.
39545 * __dpd_extendsdxf: Decimal float library routines.
39547 * __dpd_extendsfdd: Decimal float library routines.
39549 * __dpd_extendsfsd: Decimal float library routines.
39551 * __dpd_extendsftd: Decimal float library routines.
39553 * __dpd_extendtftd: Decimal float library routines.
39555 * __dpd_extendxftd: Decimal float library routines.
39557 * __dpd_fixdddi: Decimal float library routines.
39559 * __dpd_fixddsi: Decimal float library routines.
39561 * __dpd_fixsddi: Decimal float library routines.
39563 * __dpd_fixsdsi: Decimal float library routines.
39565 * __dpd_fixtddi: Decimal float library routines.
39567 * __dpd_fixtdsi: Decimal float library routines.
39569 * __dpd_fixunsdddi: Decimal float library routines.
39571 * __dpd_fixunsddsi: Decimal float library routines.
39573 * __dpd_fixunssddi: Decimal float library routines.
39575 * __dpd_fixunssdsi: Decimal float library routines.
39577 * __dpd_fixunstddi: Decimal float library routines.
39579 * __dpd_fixunstdsi: Decimal float library routines.
39581 * __dpd_floatdidd: Decimal float library routines.
39583 * __dpd_floatdisd: Decimal float library routines.
39585 * __dpd_floatditd: Decimal float library routines.
39587 * __dpd_floatsidd: Decimal float library routines.
39589 * __dpd_floatsisd: Decimal float library routines.
39591 * __dpd_floatsitd: Decimal float library routines.
39593 * __dpd_floatunsdidd: Decimal float library routines.
39595 * __dpd_floatunsdisd: Decimal float library routines.
39597 * __dpd_floatunsditd: Decimal float library routines.
39599 * __dpd_floatunssidd: Decimal float library routines.
39601 * __dpd_floatunssisd: Decimal float library routines.
39603 * __dpd_floatunssitd: Decimal float library routines.
39605 * __dpd_gedd2: Decimal float library routines.
39607 * __dpd_gesd2: Decimal float library routines.
39609 * __dpd_getd2: Decimal float library routines.
39611 * __dpd_gtdd2: Decimal float library routines.
39613 * __dpd_gtsd2: Decimal float library routines.
39615 * __dpd_gttd2: Decimal float library routines.
39617 * __dpd_ledd2: Decimal float library routines.
39619 * __dpd_lesd2: Decimal float library routines.
39621 * __dpd_letd2: Decimal float library routines.
39623 * __dpd_ltdd2: Decimal float library routines.
39625 * __dpd_ltsd2: Decimal float library routines.
39627 * __dpd_lttd2: Decimal float library routines.
39629 * __dpd_muldd3: Decimal float library routines.
39631 * __dpd_mulsd3: Decimal float library routines.
39633 * __dpd_multd3: Decimal float library routines.
39635 * __dpd_nedd2: Decimal float library routines.
39637 * __dpd_negdd2: Decimal float library routines.
39639 * __dpd_negsd2: Decimal float library routines.
39641 * __dpd_negtd2: Decimal float library routines.
39643 * __dpd_nesd2: Decimal float library routines.
39645 * __dpd_netd2: Decimal float library routines.
39647 * __dpd_subdd3: Decimal float library routines.
39649 * __dpd_subsd3: Decimal float library routines.
39651 * __dpd_subtd3: Decimal float library routines.
39653 * __dpd_truncdddf: Decimal float library routines.
39655 * __dpd_truncddsd2: Decimal float library routines.
39657 * __dpd_truncddsf: Decimal float library routines.
39659 * __dpd_truncdfsd: Decimal float library routines.
39661 * __dpd_truncsdsf: Decimal float library routines.
39663 * __dpd_trunctddd2: Decimal float library routines.
39665 * __dpd_trunctddf: Decimal float library routines.
39667 * __dpd_trunctdsd2: Decimal float library routines.
39669 * __dpd_trunctdsf: Decimal float library routines.
39671 * __dpd_trunctdtf: Decimal float library routines.
39673 * __dpd_trunctdxf: Decimal float library routines.
39675 * __dpd_trunctfdd: Decimal float library routines.
39677 * __dpd_trunctfsd: Decimal float library routines.
39679 * __dpd_truncxfdd: Decimal float library routines.
39681 * __dpd_truncxfsd: Decimal float library routines.
39683 * __dpd_unorddd2: Decimal float library routines.
39685 * __dpd_unordsd2: Decimal float library routines.
39687 * __dpd_unordtd2: Decimal float library routines.
39689 * __DTOR_LIST__: Initialization. (line 25)
39690 * __eqdf2: Soft float library routines.
39692 * __eqsf2: Soft float library routines.
39694 * __eqtf2: Soft float library routines.
39696 * __extenddftf2: Soft float library routines.
39698 * __extenddfxf2: Soft float library routines.
39700 * __extendsfdf2: Soft float library routines.
39702 * __extendsftf2: Soft float library routines.
39704 * __extendsfxf2: Soft float library routines.
39706 * __ffsdi2: Integer library routines.
39708 * __ffsti2: Integer library routines.
39710 * __fixdfdi: Soft float library routines.
39712 * __fixdfsi: Soft float library routines.
39714 * __fixdfti: Soft float library routines.
39716 * __fixsfdi: Soft float library routines.
39718 * __fixsfsi: Soft float library routines.
39720 * __fixsfti: Soft float library routines.
39722 * __fixtfdi: Soft float library routines.
39724 * __fixtfsi: Soft float library routines.
39726 * __fixtfti: Soft float library routines.
39728 * __fixunsdfdi: Soft float library routines.
39730 * __fixunsdfsi: Soft float library routines.
39732 * __fixunsdfti: Soft float library routines.
39734 * __fixunssfdi: Soft float library routines.
39736 * __fixunssfsi: Soft float library routines.
39738 * __fixunssfti: Soft float library routines.
39740 * __fixunstfdi: Soft float library routines.
39742 * __fixunstfsi: Soft float library routines.
39744 * __fixunstfti: Soft float library routines.
39746 * __fixunsxfdi: Soft float library routines.
39748 * __fixunsxfsi: Soft float library routines.
39750 * __fixunsxfti: Soft float library routines.
39752 * __fixxfdi: Soft float library routines.
39754 * __fixxfsi: Soft float library routines.
39756 * __fixxfti: Soft float library routines.
39758 * __floatdidf: Soft float library routines.
39760 * __floatdisf: Soft float library routines.
39762 * __floatditf: Soft float library routines.
39764 * __floatdixf: Soft float library routines.
39766 * __floatsidf: Soft float library routines.
39768 * __floatsisf: Soft float library routines.
39770 * __floatsitf: Soft float library routines.
39772 * __floatsixf: Soft float library routines.
39774 * __floattidf: Soft float library routines.
39776 * __floattisf: Soft float library routines.
39778 * __floattitf: Soft float library routines.
39780 * __floattixf: Soft float library routines.
39782 * __floatundidf: Soft float library routines.
39784 * __floatundisf: Soft float library routines.
39786 * __floatunditf: Soft float library routines.
39788 * __floatundixf: Soft float library routines.
39790 * __floatunsidf: Soft float library routines.
39792 * __floatunsisf: Soft float library routines.
39794 * __floatunsitf: Soft float library routines.
39796 * __floatunsixf: Soft float library routines.
39798 * __floatuntidf: Soft float library routines.
39800 * __floatuntisf: Soft float library routines.
39802 * __floatuntitf: Soft float library routines.
39804 * __floatuntixf: Soft float library routines.
39806 * __fractdadf: Fixed-point fractional library routines.
39808 * __fractdadi: Fixed-point fractional library routines.
39810 * __fractdadq: Fixed-point fractional library routines.
39812 * __fractdaha2: Fixed-point fractional library routines.
39814 * __fractdahi: Fixed-point fractional library routines.
39816 * __fractdahq: Fixed-point fractional library routines.
39818 * __fractdaqi: Fixed-point fractional library routines.
39820 * __fractdaqq: Fixed-point fractional library routines.
39822 * __fractdasa2: Fixed-point fractional library routines.
39824 * __fractdasf: Fixed-point fractional library routines.
39826 * __fractdasi: Fixed-point fractional library routines.
39828 * __fractdasq: Fixed-point fractional library routines.
39830 * __fractdata2: Fixed-point fractional library routines.
39832 * __fractdati: Fixed-point fractional library routines.
39834 * __fractdauda: Fixed-point fractional library routines.
39836 * __fractdaudq: Fixed-point fractional library routines.
39838 * __fractdauha: Fixed-point fractional library routines.
39840 * __fractdauhq: Fixed-point fractional library routines.
39842 * __fractdauqq: Fixed-point fractional library routines.
39844 * __fractdausa: Fixed-point fractional library routines.
39846 * __fractdausq: Fixed-point fractional library routines.
39848 * __fractdauta: Fixed-point fractional library routines.
39850 * __fractdfda: Fixed-point fractional library routines.
39852 * __fractdfdq: Fixed-point fractional library routines.
39854 * __fractdfha: Fixed-point fractional library routines.
39856 * __fractdfhq: Fixed-point fractional library routines.
39858 * __fractdfqq: Fixed-point fractional library routines.
39860 * __fractdfsa: Fixed-point fractional library routines.
39862 * __fractdfsq: Fixed-point fractional library routines.
39864 * __fractdfta: Fixed-point fractional library routines.
39866 * __fractdfuda: Fixed-point fractional library routines.
39868 * __fractdfudq: Fixed-point fractional library routines.
39870 * __fractdfuha: Fixed-point fractional library routines.
39872 * __fractdfuhq: Fixed-point fractional library routines.
39874 * __fractdfuqq: Fixed-point fractional library routines.
39876 * __fractdfusa: Fixed-point fractional library routines.
39878 * __fractdfusq: Fixed-point fractional library routines.
39880 * __fractdfuta: Fixed-point fractional library routines.
39882 * __fractdida: Fixed-point fractional library routines.
39884 * __fractdidq: Fixed-point fractional library routines.
39886 * __fractdiha: Fixed-point fractional library routines.
39888 * __fractdihq: Fixed-point fractional library routines.
39890 * __fractdiqq: Fixed-point fractional library routines.
39892 * __fractdisa: Fixed-point fractional library routines.
39894 * __fractdisq: Fixed-point fractional library routines.
39896 * __fractdita: Fixed-point fractional library routines.
39898 * __fractdiuda: Fixed-point fractional library routines.
39900 * __fractdiudq: Fixed-point fractional library routines.
39902 * __fractdiuha: Fixed-point fractional library routines.
39904 * __fractdiuhq: Fixed-point fractional library routines.
39906 * __fractdiuqq: Fixed-point fractional library routines.
39908 * __fractdiusa: Fixed-point fractional library routines.
39910 * __fractdiusq: Fixed-point fractional library routines.
39912 * __fractdiuta: Fixed-point fractional library routines.
39914 * __fractdqda: Fixed-point fractional library routines.
39916 * __fractdqdf: Fixed-point fractional library routines.
39918 * __fractdqdi: Fixed-point fractional library routines.
39920 * __fractdqha: Fixed-point fractional library routines.
39922 * __fractdqhi: Fixed-point fractional library routines.
39924 * __fractdqhq2: Fixed-point fractional library routines.
39926 * __fractdqqi: Fixed-point fractional library routines.
39928 * __fractdqqq2: Fixed-point fractional library routines.
39930 * __fractdqsa: Fixed-point fractional library routines.
39932 * __fractdqsf: Fixed-point fractional library routines.
39934 * __fractdqsi: Fixed-point fractional library routines.
39936 * __fractdqsq2: Fixed-point fractional library routines.
39938 * __fractdqta: Fixed-point fractional library routines.
39940 * __fractdqti: Fixed-point fractional library routines.
39942 * __fractdquda: Fixed-point fractional library routines.
39944 * __fractdqudq: Fixed-point fractional library routines.
39946 * __fractdquha: Fixed-point fractional library routines.
39948 * __fractdquhq: Fixed-point fractional library routines.
39950 * __fractdquqq: Fixed-point fractional library routines.
39952 * __fractdqusa: Fixed-point fractional library routines.
39954 * __fractdqusq: Fixed-point fractional library routines.
39956 * __fractdquta: Fixed-point fractional library routines.
39958 * __fracthada2: Fixed-point fractional library routines.
39960 * __fracthadf: Fixed-point fractional library routines.
39962 * __fracthadi: Fixed-point fractional library routines.
39964 * __fracthadq: Fixed-point fractional library routines.
39966 * __fracthahi: Fixed-point fractional library routines.
39968 * __fracthahq: Fixed-point fractional library routines.
39970 * __fracthaqi: Fixed-point fractional library routines.
39972 * __fracthaqq: Fixed-point fractional library routines.
39974 * __fracthasa2: Fixed-point fractional library routines.
39976 * __fracthasf: Fixed-point fractional library routines.
39978 * __fracthasi: Fixed-point fractional library routines.
39980 * __fracthasq: Fixed-point fractional library routines.
39982 * __fracthata2: Fixed-point fractional library routines.
39984 * __fracthati: Fixed-point fractional library routines.
39986 * __fracthauda: Fixed-point fractional library routines.
39988 * __fracthaudq: Fixed-point fractional library routines.
39990 * __fracthauha: Fixed-point fractional library routines.
39992 * __fracthauhq: Fixed-point fractional library routines.
39994 * __fracthauqq: Fixed-point fractional library routines.
39996 * __fracthausa: Fixed-point fractional library routines.
39998 * __fracthausq: Fixed-point fractional library routines.
40000 * __fracthauta: Fixed-point fractional library routines.
40002 * __fracthida: Fixed-point fractional library routines.
40004 * __fracthidq: Fixed-point fractional library routines.
40006 * __fracthiha: Fixed-point fractional library routines.
40008 * __fracthihq: Fixed-point fractional library routines.
40010 * __fracthiqq: Fixed-point fractional library routines.
40012 * __fracthisa: Fixed-point fractional library routines.
40014 * __fracthisq: Fixed-point fractional library routines.
40016 * __fracthita: Fixed-point fractional library routines.
40018 * __fracthiuda: Fixed-point fractional library routines.
40020 * __fracthiudq: Fixed-point fractional library routines.
40022 * __fracthiuha: Fixed-point fractional library routines.
40024 * __fracthiuhq: Fixed-point fractional library routines.
40026 * __fracthiuqq: Fixed-point fractional library routines.
40028 * __fracthiusa: Fixed-point fractional library routines.
40030 * __fracthiusq: Fixed-point fractional library routines.
40032 * __fracthiuta: Fixed-point fractional library routines.
40034 * __fracthqda: Fixed-point fractional library routines.
40036 * __fracthqdf: Fixed-point fractional library routines.
40038 * __fracthqdi: Fixed-point fractional library routines.
40040 * __fracthqdq2: Fixed-point fractional library routines.
40042 * __fracthqha: Fixed-point fractional library routines.
40044 * __fracthqhi: Fixed-point fractional library routines.
40046 * __fracthqqi: Fixed-point fractional library routines.
40048 * __fracthqqq2: Fixed-point fractional library routines.
40050 * __fracthqsa: Fixed-point fractional library routines.
40052 * __fracthqsf: Fixed-point fractional library routines.
40054 * __fracthqsi: Fixed-point fractional library routines.
40056 * __fracthqsq2: Fixed-point fractional library routines.
40058 * __fracthqta: Fixed-point fractional library routines.
40060 * __fracthqti: Fixed-point fractional library routines.
40062 * __fracthquda: Fixed-point fractional library routines.
40064 * __fracthqudq: Fixed-point fractional library routines.
40066 * __fracthquha: Fixed-point fractional library routines.
40068 * __fracthquhq: Fixed-point fractional library routines.
40070 * __fracthquqq: Fixed-point fractional library routines.
40072 * __fracthqusa: Fixed-point fractional library routines.
40074 * __fracthqusq: Fixed-point fractional library routines.
40076 * __fracthquta: Fixed-point fractional library routines.
40078 * __fractqida: Fixed-point fractional library routines.
40080 * __fractqidq: Fixed-point fractional library routines.
40082 * __fractqiha: Fixed-point fractional library routines.
40084 * __fractqihq: Fixed-point fractional library routines.
40086 * __fractqiqq: Fixed-point fractional library routines.
40088 * __fractqisa: Fixed-point fractional library routines.
40090 * __fractqisq: Fixed-point fractional library routines.
40092 * __fractqita: Fixed-point fractional library routines.
40094 * __fractqiuda: Fixed-point fractional library routines.
40096 * __fractqiudq: Fixed-point fractional library routines.
40098 * __fractqiuha: Fixed-point fractional library routines.
40100 * __fractqiuhq: Fixed-point fractional library routines.
40102 * __fractqiuqq: Fixed-point fractional library routines.
40104 * __fractqiusa: Fixed-point fractional library routines.
40106 * __fractqiusq: Fixed-point fractional library routines.
40108 * __fractqiuta: Fixed-point fractional library routines.
40110 * __fractqqda: Fixed-point fractional library routines.
40112 * __fractqqdf: Fixed-point fractional library routines.
40114 * __fractqqdi: Fixed-point fractional library routines.
40116 * __fractqqdq2: Fixed-point fractional library routines.
40118 * __fractqqha: Fixed-point fractional library routines.
40120 * __fractqqhi: Fixed-point fractional library routines.
40122 * __fractqqhq2: Fixed-point fractional library routines.
40124 * __fractqqqi: Fixed-point fractional library routines.
40126 * __fractqqsa: Fixed-point fractional library routines.
40128 * __fractqqsf: Fixed-point fractional library routines.
40130 * __fractqqsi: Fixed-point fractional library routines.
40132 * __fractqqsq2: Fixed-point fractional library routines.
40134 * __fractqqta: Fixed-point fractional library routines.
40136 * __fractqqti: Fixed-point fractional library routines.
40138 * __fractqquda: Fixed-point fractional library routines.
40140 * __fractqqudq: Fixed-point fractional library routines.
40142 * __fractqquha: Fixed-point fractional library routines.
40144 * __fractqquhq: Fixed-point fractional library routines.
40146 * __fractqquqq: Fixed-point fractional library routines.
40148 * __fractqqusa: Fixed-point fractional library routines.
40150 * __fractqqusq: Fixed-point fractional library routines.
40152 * __fractqquta: Fixed-point fractional library routines.
40154 * __fractsada2: Fixed-point fractional library routines.
40156 * __fractsadf: Fixed-point fractional library routines.
40158 * __fractsadi: Fixed-point fractional library routines.
40160 * __fractsadq: Fixed-point fractional library routines.
40162 * __fractsaha2: Fixed-point fractional library routines.
40164 * __fractsahi: Fixed-point fractional library routines.
40166 * __fractsahq: Fixed-point fractional library routines.
40168 * __fractsaqi: Fixed-point fractional library routines.
40170 * __fractsaqq: Fixed-point fractional library routines.
40172 * __fractsasf: Fixed-point fractional library routines.
40174 * __fractsasi: Fixed-point fractional library routines.
40176 * __fractsasq: Fixed-point fractional library routines.
40178 * __fractsata2: Fixed-point fractional library routines.
40180 * __fractsati: Fixed-point fractional library routines.
40182 * __fractsauda: Fixed-point fractional library routines.
40184 * __fractsaudq: Fixed-point fractional library routines.
40186 * __fractsauha: Fixed-point fractional library routines.
40188 * __fractsauhq: Fixed-point fractional library routines.
40190 * __fractsauqq: Fixed-point fractional library routines.
40192 * __fractsausa: Fixed-point fractional library routines.
40194 * __fractsausq: Fixed-point fractional library routines.
40196 * __fractsauta: Fixed-point fractional library routines.
40198 * __fractsfda: Fixed-point fractional library routines.
40200 * __fractsfdq: Fixed-point fractional library routines.
40202 * __fractsfha: Fixed-point fractional library routines.
40204 * __fractsfhq: Fixed-point fractional library routines.
40206 * __fractsfqq: Fixed-point fractional library routines.
40208 * __fractsfsa: Fixed-point fractional library routines.
40210 * __fractsfsq: Fixed-point fractional library routines.
40212 * __fractsfta: Fixed-point fractional library routines.
40214 * __fractsfuda: Fixed-point fractional library routines.
40216 * __fractsfudq: Fixed-point fractional library routines.
40218 * __fractsfuha: Fixed-point fractional library routines.
40220 * __fractsfuhq: Fixed-point fractional library routines.
40222 * __fractsfuqq: Fixed-point fractional library routines.
40224 * __fractsfusa: Fixed-point fractional library routines.
40226 * __fractsfusq: Fixed-point fractional library routines.
40228 * __fractsfuta: Fixed-point fractional library routines.
40230 * __fractsida: Fixed-point fractional library routines.
40232 * __fractsidq: Fixed-point fractional library routines.
40234 * __fractsiha: Fixed-point fractional library routines.
40236 * __fractsihq: Fixed-point fractional library routines.
40238 * __fractsiqq: Fixed-point fractional library routines.
40240 * __fractsisa: Fixed-point fractional library routines.
40242 * __fractsisq: Fixed-point fractional library routines.
40244 * __fractsita: Fixed-point fractional library routines.
40246 * __fractsiuda: Fixed-point fractional library routines.
40248 * __fractsiudq: Fixed-point fractional library routines.
40250 * __fractsiuha: Fixed-point fractional library routines.
40252 * __fractsiuhq: Fixed-point fractional library routines.
40254 * __fractsiuqq: Fixed-point fractional library routines.
40256 * __fractsiusa: Fixed-point fractional library routines.
40258 * __fractsiusq: Fixed-point fractional library routines.
40260 * __fractsiuta: Fixed-point fractional library routines.
40262 * __fractsqda: Fixed-point fractional library routines.
40264 * __fractsqdf: Fixed-point fractional library routines.
40266 * __fractsqdi: Fixed-point fractional library routines.
40268 * __fractsqdq2: Fixed-point fractional library routines.
40270 * __fractsqha: Fixed-point fractional library routines.
40272 * __fractsqhi: Fixed-point fractional library routines.
40274 * __fractsqhq2: Fixed-point fractional library routines.
40276 * __fractsqqi: Fixed-point fractional library routines.
40278 * __fractsqqq2: Fixed-point fractional library routines.
40280 * __fractsqsa: Fixed-point fractional library routines.
40282 * __fractsqsf: Fixed-point fractional library routines.
40284 * __fractsqsi: Fixed-point fractional library routines.
40286 * __fractsqta: Fixed-point fractional library routines.
40288 * __fractsqti: Fixed-point fractional library routines.
40290 * __fractsquda: Fixed-point fractional library routines.
40292 * __fractsqudq: Fixed-point fractional library routines.
40294 * __fractsquha: Fixed-point fractional library routines.
40296 * __fractsquhq: Fixed-point fractional library routines.
40298 * __fractsquqq: Fixed-point fractional library routines.
40300 * __fractsqusa: Fixed-point fractional library routines.
40302 * __fractsqusq: Fixed-point fractional library routines.
40304 * __fractsquta: Fixed-point fractional library routines.
40306 * __fracttada2: Fixed-point fractional library routines.
40308 * __fracttadf: Fixed-point fractional library routines.
40310 * __fracttadi: Fixed-point fractional library routines.
40312 * __fracttadq: Fixed-point fractional library routines.
40314 * __fracttaha2: Fixed-point fractional library routines.
40316 * __fracttahi: Fixed-point fractional library routines.
40318 * __fracttahq: Fixed-point fractional library routines.
40320 * __fracttaqi: Fixed-point fractional library routines.
40322 * __fracttaqq: Fixed-point fractional library routines.
40324 * __fracttasa2: Fixed-point fractional library routines.
40326 * __fracttasf: Fixed-point fractional library routines.
40328 * __fracttasi: Fixed-point fractional library routines.
40330 * __fracttasq: Fixed-point fractional library routines.
40332 * __fracttati: Fixed-point fractional library routines.
40334 * __fracttauda: Fixed-point fractional library routines.
40336 * __fracttaudq: Fixed-point fractional library routines.
40338 * __fracttauha: Fixed-point fractional library routines.
40340 * __fracttauhq: Fixed-point fractional library routines.
40342 * __fracttauqq: Fixed-point fractional library routines.
40344 * __fracttausa: Fixed-point fractional library routines.
40346 * __fracttausq: Fixed-point fractional library routines.
40348 * __fracttauta: Fixed-point fractional library routines.
40350 * __fracttida: Fixed-point fractional library routines.
40352 * __fracttidq: Fixed-point fractional library routines.
40354 * __fracttiha: Fixed-point fractional library routines.
40356 * __fracttihq: Fixed-point fractional library routines.
40358 * __fracttiqq: Fixed-point fractional library routines.
40360 * __fracttisa: Fixed-point fractional library routines.
40362 * __fracttisq: Fixed-point fractional library routines.
40364 * __fracttita: Fixed-point fractional library routines.
40366 * __fracttiuda: Fixed-point fractional library routines.
40368 * __fracttiudq: Fixed-point fractional library routines.
40370 * __fracttiuha: Fixed-point fractional library routines.
40372 * __fracttiuhq: Fixed-point fractional library routines.
40374 * __fracttiuqq: Fixed-point fractional library routines.
40376 * __fracttiusa: Fixed-point fractional library routines.
40378 * __fracttiusq: Fixed-point fractional library routines.
40380 * __fracttiuta: Fixed-point fractional library routines.
40382 * __fractudada: Fixed-point fractional library routines.
40384 * __fractudadf: Fixed-point fractional library routines.
40386 * __fractudadi: Fixed-point fractional library routines.
40388 * __fractudadq: Fixed-point fractional library routines.
40390 * __fractudaha: Fixed-point fractional library routines.
40392 * __fractudahi: Fixed-point fractional library routines.
40394 * __fractudahq: Fixed-point fractional library routines.
40396 * __fractudaqi: Fixed-point fractional library routines.
40398 * __fractudaqq: Fixed-point fractional library routines.
40400 * __fractudasa: Fixed-point fractional library routines.
40402 * __fractudasf: Fixed-point fractional library routines.
40404 * __fractudasi: Fixed-point fractional library routines.
40406 * __fractudasq: Fixed-point fractional library routines.
40408 * __fractudata: Fixed-point fractional library routines.
40410 * __fractudati: Fixed-point fractional library routines.
40412 * __fractudaudq: Fixed-point fractional library routines.
40414 * __fractudauha2: Fixed-point fractional library routines.
40416 * __fractudauhq: Fixed-point fractional library routines.
40418 * __fractudauqq: Fixed-point fractional library routines.
40420 * __fractudausa2: Fixed-point fractional library routines.
40422 * __fractudausq: Fixed-point fractional library routines.
40424 * __fractudauta2: Fixed-point fractional library routines.
40426 * __fractudqda: Fixed-point fractional library routines.
40428 * __fractudqdf: Fixed-point fractional library routines.
40430 * __fractudqdi: Fixed-point fractional library routines.
40432 * __fractudqdq: Fixed-point fractional library routines.
40434 * __fractudqha: Fixed-point fractional library routines.
40436 * __fractudqhi: Fixed-point fractional library routines.
40438 * __fractudqhq: Fixed-point fractional library routines.
40440 * __fractudqqi: Fixed-point fractional library routines.
40442 * __fractudqqq: Fixed-point fractional library routines.
40444 * __fractudqsa: Fixed-point fractional library routines.
40446 * __fractudqsf: Fixed-point fractional library routines.
40448 * __fractudqsi: Fixed-point fractional library routines.
40450 * __fractudqsq: Fixed-point fractional library routines.
40452 * __fractudqta: Fixed-point fractional library routines.
40454 * __fractudqti: Fixed-point fractional library routines.
40456 * __fractudquda: Fixed-point fractional library routines.
40458 * __fractudquha: Fixed-point fractional library routines.
40460 * __fractudquhq2: Fixed-point fractional library routines.
40462 * __fractudquqq2: Fixed-point fractional library routines.
40464 * __fractudqusa: Fixed-point fractional library routines.
40466 * __fractudqusq2: Fixed-point fractional library routines.
40468 * __fractudquta: Fixed-point fractional library routines.
40470 * __fractuhada: Fixed-point fractional library routines.
40472 * __fractuhadf: Fixed-point fractional library routines.
40474 * __fractuhadi: Fixed-point fractional library routines.
40476 * __fractuhadq: Fixed-point fractional library routines.
40478 * __fractuhaha: Fixed-point fractional library routines.
40480 * __fractuhahi: Fixed-point fractional library routines.
40482 * __fractuhahq: Fixed-point fractional library routines.
40484 * __fractuhaqi: Fixed-point fractional library routines.
40486 * __fractuhaqq: Fixed-point fractional library routines.
40488 * __fractuhasa: Fixed-point fractional library routines.
40490 * __fractuhasf: Fixed-point fractional library routines.
40492 * __fractuhasi: Fixed-point fractional library routines.
40494 * __fractuhasq: Fixed-point fractional library routines.
40496 * __fractuhata: Fixed-point fractional library routines.
40498 * __fractuhati: Fixed-point fractional library routines.
40500 * __fractuhauda2: Fixed-point fractional library routines.
40502 * __fractuhaudq: Fixed-point fractional library routines.
40504 * __fractuhauhq: Fixed-point fractional library routines.
40506 * __fractuhauqq: Fixed-point fractional library routines.
40508 * __fractuhausa2: Fixed-point fractional library routines.
40510 * __fractuhausq: Fixed-point fractional library routines.
40512 * __fractuhauta2: Fixed-point fractional library routines.
40514 * __fractuhqda: Fixed-point fractional library routines.
40516 * __fractuhqdf: Fixed-point fractional library routines.
40518 * __fractuhqdi: Fixed-point fractional library routines.
40520 * __fractuhqdq: Fixed-point fractional library routines.
40522 * __fractuhqha: Fixed-point fractional library routines.
40524 * __fractuhqhi: Fixed-point fractional library routines.
40526 * __fractuhqhq: Fixed-point fractional library routines.
40528 * __fractuhqqi: Fixed-point fractional library routines.
40530 * __fractuhqqq: Fixed-point fractional library routines.
40532 * __fractuhqsa: Fixed-point fractional library routines.
40534 * __fractuhqsf: Fixed-point fractional library routines.
40536 * __fractuhqsi: Fixed-point fractional library routines.
40538 * __fractuhqsq: Fixed-point fractional library routines.
40540 * __fractuhqta: Fixed-point fractional library routines.
40542 * __fractuhqti: Fixed-point fractional library routines.
40544 * __fractuhquda: Fixed-point fractional library routines.
40546 * __fractuhqudq2: Fixed-point fractional library routines.
40548 * __fractuhquha: Fixed-point fractional library routines.
40550 * __fractuhquqq2: Fixed-point fractional library routines.
40552 * __fractuhqusa: Fixed-point fractional library routines.
40554 * __fractuhqusq2: Fixed-point fractional library routines.
40556 * __fractuhquta: Fixed-point fractional library routines.
40558 * __fractunsdadi: Fixed-point fractional library routines.
40560 * __fractunsdahi: Fixed-point fractional library routines.
40562 * __fractunsdaqi: Fixed-point fractional library routines.
40564 * __fractunsdasi: Fixed-point fractional library routines.
40566 * __fractunsdati: Fixed-point fractional library routines.
40568 * __fractunsdida: Fixed-point fractional library routines.
40570 * __fractunsdidq: Fixed-point fractional library routines.
40572 * __fractunsdiha: Fixed-point fractional library routines.
40574 * __fractunsdihq: Fixed-point fractional library routines.
40576 * __fractunsdiqq: Fixed-point fractional library routines.
40578 * __fractunsdisa: Fixed-point fractional library routines.
40580 * __fractunsdisq: Fixed-point fractional library routines.
40582 * __fractunsdita: Fixed-point fractional library routines.
40584 * __fractunsdiuda: Fixed-point fractional library routines.
40586 * __fractunsdiudq: Fixed-point fractional library routines.
40588 * __fractunsdiuha: Fixed-point fractional library routines.
40590 * __fractunsdiuhq: Fixed-point fractional library routines.
40592 * __fractunsdiuqq: Fixed-point fractional library routines.
40594 * __fractunsdiusa: Fixed-point fractional library routines.
40596 * __fractunsdiusq: Fixed-point fractional library routines.
40598 * __fractunsdiuta: Fixed-point fractional library routines.
40600 * __fractunsdqdi: Fixed-point fractional library routines.
40602 * __fractunsdqhi: Fixed-point fractional library routines.
40604 * __fractunsdqqi: Fixed-point fractional library routines.
40606 * __fractunsdqsi: Fixed-point fractional library routines.
40608 * __fractunsdqti: Fixed-point fractional library routines.
40610 * __fractunshadi: Fixed-point fractional library routines.
40612 * __fractunshahi: Fixed-point fractional library routines.
40614 * __fractunshaqi: Fixed-point fractional library routines.
40616 * __fractunshasi: Fixed-point fractional library routines.
40618 * __fractunshati: Fixed-point fractional library routines.
40620 * __fractunshida: Fixed-point fractional library routines.
40622 * __fractunshidq: Fixed-point fractional library routines.
40624 * __fractunshiha: Fixed-point fractional library routines.
40626 * __fractunshihq: Fixed-point fractional library routines.
40628 * __fractunshiqq: Fixed-point fractional library routines.
40630 * __fractunshisa: Fixed-point fractional library routines.
40632 * __fractunshisq: Fixed-point fractional library routines.
40634 * __fractunshita: Fixed-point fractional library routines.
40636 * __fractunshiuda: Fixed-point fractional library routines.
40638 * __fractunshiudq: Fixed-point fractional library routines.
40640 * __fractunshiuha: Fixed-point fractional library routines.
40642 * __fractunshiuhq: Fixed-point fractional library routines.
40644 * __fractunshiuqq: Fixed-point fractional library routines.
40646 * __fractunshiusa: Fixed-point fractional library routines.
40648 * __fractunshiusq: Fixed-point fractional library routines.
40650 * __fractunshiuta: Fixed-point fractional library routines.
40652 * __fractunshqdi: Fixed-point fractional library routines.
40654 * __fractunshqhi: Fixed-point fractional library routines.
40656 * __fractunshqqi: Fixed-point fractional library routines.
40658 * __fractunshqsi: Fixed-point fractional library routines.
40660 * __fractunshqti: Fixed-point fractional library routines.
40662 * __fractunsqida: Fixed-point fractional library routines.
40664 * __fractunsqidq: Fixed-point fractional library routines.
40666 * __fractunsqiha: Fixed-point fractional library routines.
40668 * __fractunsqihq: Fixed-point fractional library routines.
40670 * __fractunsqiqq: Fixed-point fractional library routines.
40672 * __fractunsqisa: Fixed-point fractional library routines.
40674 * __fractunsqisq: Fixed-point fractional library routines.
40676 * __fractunsqita: Fixed-point fractional library routines.
40678 * __fractunsqiuda: Fixed-point fractional library routines.
40680 * __fractunsqiudq: Fixed-point fractional library routines.
40682 * __fractunsqiuha: Fixed-point fractional library routines.
40684 * __fractunsqiuhq: Fixed-point fractional library routines.
40686 * __fractunsqiuqq: Fixed-point fractional library routines.
40688 * __fractunsqiusa: Fixed-point fractional library routines.
40690 * __fractunsqiusq: Fixed-point fractional library routines.
40692 * __fractunsqiuta: Fixed-point fractional library routines.
40694 * __fractunsqqdi: Fixed-point fractional library routines.
40696 * __fractunsqqhi: Fixed-point fractional library routines.
40698 * __fractunsqqqi: Fixed-point fractional library routines.
40700 * __fractunsqqsi: Fixed-point fractional library routines.
40702 * __fractunsqqti: Fixed-point fractional library routines.
40704 * __fractunssadi: Fixed-point fractional library routines.
40706 * __fractunssahi: Fixed-point fractional library routines.
40708 * __fractunssaqi: Fixed-point fractional library routines.
40710 * __fractunssasi: Fixed-point fractional library routines.
40712 * __fractunssati: Fixed-point fractional library routines.
40714 * __fractunssida: Fixed-point fractional library routines.
40716 * __fractunssidq: Fixed-point fractional library routines.
40718 * __fractunssiha: Fixed-point fractional library routines.
40720 * __fractunssihq: Fixed-point fractional library routines.
40722 * __fractunssiqq: Fixed-point fractional library routines.
40724 * __fractunssisa: Fixed-point fractional library routines.
40726 * __fractunssisq: Fixed-point fractional library routines.
40728 * __fractunssita: Fixed-point fractional library routines.
40730 * __fractunssiuda: Fixed-point fractional library routines.
40732 * __fractunssiudq: Fixed-point fractional library routines.
40734 * __fractunssiuha: Fixed-point fractional library routines.
40736 * __fractunssiuhq: Fixed-point fractional library routines.
40738 * __fractunssiuqq: Fixed-point fractional library routines.
40740 * __fractunssiusa: Fixed-point fractional library routines.
40742 * __fractunssiusq: Fixed-point fractional library routines.
40744 * __fractunssiuta: Fixed-point fractional library routines.
40746 * __fractunssqdi: Fixed-point fractional library routines.
40748 * __fractunssqhi: Fixed-point fractional library routines.
40750 * __fractunssqqi: Fixed-point fractional library routines.
40752 * __fractunssqsi: Fixed-point fractional library routines.
40754 * __fractunssqti: Fixed-point fractional library routines.
40756 * __fractunstadi: Fixed-point fractional library routines.
40758 * __fractunstahi: Fixed-point fractional library routines.
40760 * __fractunstaqi: Fixed-point fractional library routines.
40762 * __fractunstasi: Fixed-point fractional library routines.
40764 * __fractunstati: Fixed-point fractional library routines.
40766 * __fractunstida: Fixed-point fractional library routines.
40768 * __fractunstidq: Fixed-point fractional library routines.
40770 * __fractunstiha: Fixed-point fractional library routines.
40772 * __fractunstihq: Fixed-point fractional library routines.
40774 * __fractunstiqq: Fixed-point fractional library routines.
40776 * __fractunstisa: Fixed-point fractional library routines.
40778 * __fractunstisq: Fixed-point fractional library routines.
40780 * __fractunstita: Fixed-point fractional library routines.
40782 * __fractunstiuda: Fixed-point fractional library routines.
40784 * __fractunstiudq: Fixed-point fractional library routines.
40786 * __fractunstiuha: Fixed-point fractional library routines.
40788 * __fractunstiuhq: Fixed-point fractional library routines.
40790 * __fractunstiuqq: Fixed-point fractional library routines.
40792 * __fractunstiusa: Fixed-point fractional library routines.
40794 * __fractunstiusq: Fixed-point fractional library routines.
40796 * __fractunstiuta: Fixed-point fractional library routines.
40798 * __fractunsudadi: Fixed-point fractional library routines.
40800 * __fractunsudahi: Fixed-point fractional library routines.
40802 * __fractunsudaqi: Fixed-point fractional library routines.
40804 * __fractunsudasi: Fixed-point fractional library routines.
40806 * __fractunsudati: Fixed-point fractional library routines.
40808 * __fractunsudqdi: Fixed-point fractional library routines.
40810 * __fractunsudqhi: Fixed-point fractional library routines.
40812 * __fractunsudqqi: Fixed-point fractional library routines.
40814 * __fractunsudqsi: Fixed-point fractional library routines.
40816 * __fractunsudqti: Fixed-point fractional library routines.
40818 * __fractunsuhadi: Fixed-point fractional library routines.
40820 * __fractunsuhahi: Fixed-point fractional library routines.
40822 * __fractunsuhaqi: Fixed-point fractional library routines.
40824 * __fractunsuhasi: Fixed-point fractional library routines.
40826 * __fractunsuhati: Fixed-point fractional library routines.
40828 * __fractunsuhqdi: Fixed-point fractional library routines.
40830 * __fractunsuhqhi: Fixed-point fractional library routines.
40832 * __fractunsuhqqi: Fixed-point fractional library routines.
40834 * __fractunsuhqsi: Fixed-point fractional library routines.
40836 * __fractunsuhqti: Fixed-point fractional library routines.
40838 * __fractunsuqqdi: Fixed-point fractional library routines.
40840 * __fractunsuqqhi: Fixed-point fractional library routines.
40842 * __fractunsuqqqi: Fixed-point fractional library routines.
40844 * __fractunsuqqsi: Fixed-point fractional library routines.
40846 * __fractunsuqqti: Fixed-point fractional library routines.
40848 * __fractunsusadi: Fixed-point fractional library routines.
40850 * __fractunsusahi: Fixed-point fractional library routines.
40852 * __fractunsusaqi: Fixed-point fractional library routines.
40854 * __fractunsusasi: Fixed-point fractional library routines.
40856 * __fractunsusati: Fixed-point fractional library routines.
40858 * __fractunsusqdi: Fixed-point fractional library routines.
40860 * __fractunsusqhi: Fixed-point fractional library routines.
40862 * __fractunsusqqi: Fixed-point fractional library routines.
40864 * __fractunsusqsi: Fixed-point fractional library routines.
40866 * __fractunsusqti: Fixed-point fractional library routines.
40868 * __fractunsutadi: Fixed-point fractional library routines.
40870 * __fractunsutahi: Fixed-point fractional library routines.
40872 * __fractunsutaqi: Fixed-point fractional library routines.
40874 * __fractunsutasi: Fixed-point fractional library routines.
40876 * __fractunsutati: Fixed-point fractional library routines.
40878 * __fractuqqda: Fixed-point fractional library routines.
40880 * __fractuqqdf: Fixed-point fractional library routines.
40882 * __fractuqqdi: Fixed-point fractional library routines.
40884 * __fractuqqdq: Fixed-point fractional library routines.
40886 * __fractuqqha: Fixed-point fractional library routines.
40888 * __fractuqqhi: Fixed-point fractional library routines.
40890 * __fractuqqhq: Fixed-point fractional library routines.
40892 * __fractuqqqi: Fixed-point fractional library routines.
40894 * __fractuqqqq: Fixed-point fractional library routines.
40896 * __fractuqqsa: Fixed-point fractional library routines.
40898 * __fractuqqsf: Fixed-point fractional library routines.
40900 * __fractuqqsi: Fixed-point fractional library routines.
40902 * __fractuqqsq: Fixed-point fractional library routines.
40904 * __fractuqqta: Fixed-point fractional library routines.
40906 * __fractuqqti: Fixed-point fractional library routines.
40908 * __fractuqquda: Fixed-point fractional library routines.
40910 * __fractuqqudq2: Fixed-point fractional library routines.
40912 * __fractuqquha: Fixed-point fractional library routines.
40914 * __fractuqquhq2: Fixed-point fractional library routines.
40916 * __fractuqqusa: Fixed-point fractional library routines.
40918 * __fractuqqusq2: Fixed-point fractional library routines.
40920 * __fractuqquta: Fixed-point fractional library routines.
40922 * __fractusada: Fixed-point fractional library routines.
40924 * __fractusadf: Fixed-point fractional library routines.
40926 * __fractusadi: Fixed-point fractional library routines.
40928 * __fractusadq: Fixed-point fractional library routines.
40930 * __fractusaha: Fixed-point fractional library routines.
40932 * __fractusahi: Fixed-point fractional library routines.
40934 * __fractusahq: Fixed-point fractional library routines.
40936 * __fractusaqi: Fixed-point fractional library routines.
40938 * __fractusaqq: Fixed-point fractional library routines.
40940 * __fractusasa: Fixed-point fractional library routines.
40942 * __fractusasf: Fixed-point fractional library routines.
40944 * __fractusasi: Fixed-point fractional library routines.
40946 * __fractusasq: Fixed-point fractional library routines.
40948 * __fractusata: Fixed-point fractional library routines.
40950 * __fractusati: Fixed-point fractional library routines.
40952 * __fractusauda2: Fixed-point fractional library routines.
40954 * __fractusaudq: Fixed-point fractional library routines.
40956 * __fractusauha2: Fixed-point fractional library routines.
40958 * __fractusauhq: Fixed-point fractional library routines.
40960 * __fractusauqq: Fixed-point fractional library routines.
40962 * __fractusausq: Fixed-point fractional library routines.
40964 * __fractusauta2: Fixed-point fractional library routines.
40966 * __fractusqda: Fixed-point fractional library routines.
40968 * __fractusqdf: Fixed-point fractional library routines.
40970 * __fractusqdi: Fixed-point fractional library routines.
40972 * __fractusqdq: Fixed-point fractional library routines.
40974 * __fractusqha: Fixed-point fractional library routines.
40976 * __fractusqhi: Fixed-point fractional library routines.
40978 * __fractusqhq: Fixed-point fractional library routines.
40980 * __fractusqqi: Fixed-point fractional library routines.
40982 * __fractusqqq: Fixed-point fractional library routines.
40984 * __fractusqsa: Fixed-point fractional library routines.
40986 * __fractusqsf: Fixed-point fractional library routines.
40988 * __fractusqsi: Fixed-point fractional library routines.
40990 * __fractusqsq: Fixed-point fractional library routines.
40992 * __fractusqta: Fixed-point fractional library routines.
40994 * __fractusqti: Fixed-point fractional library routines.
40996 * __fractusquda: Fixed-point fractional library routines.
40998 * __fractusqudq2: Fixed-point fractional library routines.
41000 * __fractusquha: Fixed-point fractional library routines.
41002 * __fractusquhq2: Fixed-point fractional library routines.
41004 * __fractusquqq2: Fixed-point fractional library routines.
41006 * __fractusqusa: Fixed-point fractional library routines.
41008 * __fractusquta: Fixed-point fractional library routines.
41010 * __fractutada: Fixed-point fractional library routines.
41012 * __fractutadf: Fixed-point fractional library routines.
41014 * __fractutadi: Fixed-point fractional library routines.
41016 * __fractutadq: Fixed-point fractional library routines.
41018 * __fractutaha: Fixed-point fractional library routines.
41020 * __fractutahi: Fixed-point fractional library routines.
41022 * __fractutahq: Fixed-point fractional library routines.
41024 * __fractutaqi: Fixed-point fractional library routines.
41026 * __fractutaqq: Fixed-point fractional library routines.
41028 * __fractutasa: Fixed-point fractional library routines.
41030 * __fractutasf: Fixed-point fractional library routines.
41032 * __fractutasi: Fixed-point fractional library routines.
41034 * __fractutasq: Fixed-point fractional library routines.
41036 * __fractutata: Fixed-point fractional library routines.
41038 * __fractutati: Fixed-point fractional library routines.
41040 * __fractutauda2: Fixed-point fractional library routines.
41042 * __fractutaudq: Fixed-point fractional library routines.
41044 * __fractutauha2: Fixed-point fractional library routines.
41046 * __fractutauhq: Fixed-point fractional library routines.
41048 * __fractutauqq: Fixed-point fractional library routines.
41050 * __fractutausa2: Fixed-point fractional library routines.
41052 * __fractutausq: Fixed-point fractional library routines.
41054 * __gedf2: Soft float library routines.
41056 * __gesf2: Soft float library routines.
41058 * __getf2: Soft float library routines.
41060 * __gtdf2: Soft float library routines.
41062 * __gtsf2: Soft float library routines.
41064 * __gttf2: Soft float library routines.
41066 * __ledf2: Soft float library routines.
41068 * __lesf2: Soft float library routines.
41070 * __letf2: Soft float library routines.
41072 * __lshrdi3: Integer library routines.
41074 * __lshrsi3: Integer library routines.
41076 * __lshrti3: Integer library routines.
41078 * __lshruda3: Fixed-point fractional library routines.
41080 * __lshrudq3: Fixed-point fractional library routines.
41082 * __lshruha3: Fixed-point fractional library routines.
41084 * __lshruhq3: Fixed-point fractional library routines.
41086 * __lshruqq3: Fixed-point fractional library routines.
41088 * __lshrusa3: Fixed-point fractional library routines.
41090 * __lshrusq3: Fixed-point fractional library routines.
41092 * __lshruta3: Fixed-point fractional library routines.
41094 * __ltdf2: Soft float library routines.
41096 * __ltsf2: Soft float library routines.
41098 * __lttf2: Soft float library routines.
41100 * __main: Collect2. (line 15)
41101 * __moddi3: Integer library routines.
41103 * __modsi3: Integer library routines.
41105 * __modti3: Integer library routines.
41107 * __mulda3: Fixed-point fractional library routines.
41109 * __muldc3: Soft float library routines.
41111 * __muldf3: Soft float library routines.
41113 * __muldi3: Integer library routines.
41115 * __muldq3: Fixed-point fractional library routines.
41117 * __mulha3: Fixed-point fractional library routines.
41119 * __mulhq3: Fixed-point fractional library routines.
41121 * __mulqq3: Fixed-point fractional library routines.
41123 * __mulsa3: Fixed-point fractional library routines.
41125 * __mulsc3: Soft float library routines.
41127 * __mulsf3: Soft float library routines.
41129 * __mulsi3: Integer library routines.
41131 * __mulsq3: Fixed-point fractional library routines.
41133 * __multa3: Fixed-point fractional library routines.
41135 * __multc3: Soft float library routines.
41137 * __multf3: Soft float library routines.
41139 * __multi3: Integer library routines.
41141 * __muluda3: Fixed-point fractional library routines.
41143 * __muludq3: Fixed-point fractional library routines.
41145 * __muluha3: Fixed-point fractional library routines.
41147 * __muluhq3: Fixed-point fractional library routines.
41149 * __muluqq3: Fixed-point fractional library routines.
41151 * __mulusa3: Fixed-point fractional library routines.
41153 * __mulusq3: Fixed-point fractional library routines.
41155 * __muluta3: Fixed-point fractional library routines.
41157 * __mulvdi3: Integer library routines.
41159 * __mulvsi3: Integer library routines.
41161 * __mulxc3: Soft float library routines.
41163 * __mulxf3: Soft float library routines.
41165 * __nedf2: Soft float library routines.
41167 * __negda2: Fixed-point fractional library routines.
41169 * __negdf2: Soft float library routines.
41171 * __negdi2: Integer library routines.
41173 * __negdq2: Fixed-point fractional library routines.
41175 * __negha2: Fixed-point fractional library routines.
41177 * __neghq2: Fixed-point fractional library routines.
41179 * __negqq2: Fixed-point fractional library routines.
41181 * __negsa2: Fixed-point fractional library routines.
41183 * __negsf2: Soft float library routines.
41185 * __negsq2: Fixed-point fractional library routines.
41187 * __negta2: Fixed-point fractional library routines.
41189 * __negtf2: Soft float library routines.
41191 * __negti2: Integer library routines.
41193 * __neguda2: Fixed-point fractional library routines.
41195 * __negudq2: Fixed-point fractional library routines.
41197 * __neguha2: Fixed-point fractional library routines.
41199 * __neguhq2: Fixed-point fractional library routines.
41201 * __neguqq2: Fixed-point fractional library routines.
41203 * __negusa2: Fixed-point fractional library routines.
41205 * __negusq2: Fixed-point fractional library routines.
41207 * __neguta2: Fixed-point fractional library routines.
41209 * __negvdi2: Integer library routines.
41211 * __negvsi2: Integer library routines.
41213 * __negxf2: Soft float library routines.
41215 * __nesf2: Soft float library routines.
41217 * __netf2: Soft float library routines.
41219 * __paritydi2: Integer library routines.
41221 * __paritysi2: Integer library routines.
41223 * __parityti2: Integer library routines.
41225 * __popcountdi2: Integer library routines.
41227 * __popcountsi2: Integer library routines.
41229 * __popcountti2: Integer library routines.
41231 * __powidf2: Soft float library routines.
41233 * __powisf2: Soft float library routines.
41235 * __powitf2: Soft float library routines.
41237 * __powixf2: Soft float library routines.
41239 * __satfractdadq: Fixed-point fractional library routines.
41241 * __satfractdaha2: Fixed-point fractional library routines.
41243 * __satfractdahq: Fixed-point fractional library routines.
41245 * __satfractdaqq: Fixed-point fractional library routines.
41247 * __satfractdasa2: Fixed-point fractional library routines.
41249 * __satfractdasq: Fixed-point fractional library routines.
41251 * __satfractdata2: Fixed-point fractional library routines.
41253 * __satfractdauda: Fixed-point fractional library routines.
41255 * __satfractdaudq: Fixed-point fractional library routines.
41257 * __satfractdauha: Fixed-point fractional library routines.
41259 * __satfractdauhq: Fixed-point fractional library routines.
41261 * __satfractdauqq: Fixed-point fractional library routines.
41263 * __satfractdausa: Fixed-point fractional library routines.
41265 * __satfractdausq: Fixed-point fractional library routines.
41267 * __satfractdauta: Fixed-point fractional library routines.
41269 * __satfractdfda: Fixed-point fractional library routines.
41271 * __satfractdfdq: Fixed-point fractional library routines.
41273 * __satfractdfha: Fixed-point fractional library routines.
41275 * __satfractdfhq: Fixed-point fractional library routines.
41277 * __satfractdfqq: Fixed-point fractional library routines.
41279 * __satfractdfsa: Fixed-point fractional library routines.
41281 * __satfractdfsq: Fixed-point fractional library routines.
41283 * __satfractdfta: Fixed-point fractional library routines.
41285 * __satfractdfuda: Fixed-point fractional library routines.
41287 * __satfractdfudq: Fixed-point fractional library routines.
41289 * __satfractdfuha: Fixed-point fractional library routines.
41291 * __satfractdfuhq: Fixed-point fractional library routines.
41293 * __satfractdfuqq: Fixed-point fractional library routines.
41295 * __satfractdfusa: Fixed-point fractional library routines.
41297 * __satfractdfusq: Fixed-point fractional library routines.
41299 * __satfractdfuta: Fixed-point fractional library routines.
41301 * __satfractdida: Fixed-point fractional library routines.
41303 * __satfractdidq: Fixed-point fractional library routines.
41305 * __satfractdiha: Fixed-point fractional library routines.
41307 * __satfractdihq: Fixed-point fractional library routines.
41309 * __satfractdiqq: Fixed-point fractional library routines.
41311 * __satfractdisa: Fixed-point fractional library routines.
41313 * __satfractdisq: Fixed-point fractional library routines.
41315 * __satfractdita: Fixed-point fractional library routines.
41317 * __satfractdiuda: Fixed-point fractional library routines.
41319 * __satfractdiudq: Fixed-point fractional library routines.
41321 * __satfractdiuha: Fixed-point fractional library routines.
41323 * __satfractdiuhq: Fixed-point fractional library routines.
41325 * __satfractdiuqq: Fixed-point fractional library routines.
41327 * __satfractdiusa: Fixed-point fractional library routines.
41329 * __satfractdiusq: Fixed-point fractional library routines.
41331 * __satfractdiuta: Fixed-point fractional library routines.
41333 * __satfractdqda: Fixed-point fractional library routines.
41335 * __satfractdqha: Fixed-point fractional library routines.
41337 * __satfractdqhq2: Fixed-point fractional library routines.
41339 * __satfractdqqq2: Fixed-point fractional library routines.
41341 * __satfractdqsa: Fixed-point fractional library routines.
41343 * __satfractdqsq2: Fixed-point fractional library routines.
41345 * __satfractdqta: Fixed-point fractional library routines.
41347 * __satfractdquda: Fixed-point fractional library routines.
41349 * __satfractdqudq: Fixed-point fractional library routines.
41351 * __satfractdquha: Fixed-point fractional library routines.
41353 * __satfractdquhq: Fixed-point fractional library routines.
41355 * __satfractdquqq: Fixed-point fractional library routines.
41357 * __satfractdqusa: Fixed-point fractional library routines.
41359 * __satfractdqusq: Fixed-point fractional library routines.
41361 * __satfractdquta: Fixed-point fractional library routines.
41363 * __satfracthada2: Fixed-point fractional library routines.
41365 * __satfracthadq: Fixed-point fractional library routines.
41367 * __satfracthahq: Fixed-point fractional library routines.
41369 * __satfracthaqq: Fixed-point fractional library routines.
41371 * __satfracthasa2: Fixed-point fractional library routines.
41373 * __satfracthasq: Fixed-point fractional library routines.
41375 * __satfracthata2: Fixed-point fractional library routines.
41377 * __satfracthauda: Fixed-point fractional library routines.
41379 * __satfracthaudq: Fixed-point fractional library routines.
41381 * __satfracthauha: Fixed-point fractional library routines.
41383 * __satfracthauhq: Fixed-point fractional library routines.
41385 * __satfracthauqq: Fixed-point fractional library routines.
41387 * __satfracthausa: Fixed-point fractional library routines.
41389 * __satfracthausq: Fixed-point fractional library routines.
41391 * __satfracthauta: Fixed-point fractional library routines.
41393 * __satfracthida: Fixed-point fractional library routines.
41395 * __satfracthidq: Fixed-point fractional library routines.
41397 * __satfracthiha: Fixed-point fractional library routines.
41399 * __satfracthihq: Fixed-point fractional library routines.
41401 * __satfracthiqq: Fixed-point fractional library routines.
41403 * __satfracthisa: Fixed-point fractional library routines.
41405 * __satfracthisq: Fixed-point fractional library routines.
41407 * __satfracthita: Fixed-point fractional library routines.
41409 * __satfracthiuda: Fixed-point fractional library routines.
41411 * __satfracthiudq: Fixed-point fractional library routines.
41413 * __satfracthiuha: Fixed-point fractional library routines.
41415 * __satfracthiuhq: Fixed-point fractional library routines.
41417 * __satfracthiuqq: Fixed-point fractional library routines.
41419 * __satfracthiusa: Fixed-point fractional library routines.
41421 * __satfracthiusq: Fixed-point fractional library routines.
41423 * __satfracthiuta: Fixed-point fractional library routines.
41425 * __satfracthqda: Fixed-point fractional library routines.
41427 * __satfracthqdq2: Fixed-point fractional library routines.
41429 * __satfracthqha: Fixed-point fractional library routines.
41431 * __satfracthqqq2: Fixed-point fractional library routines.
41433 * __satfracthqsa: Fixed-point fractional library routines.
41435 * __satfracthqsq2: Fixed-point fractional library routines.
41437 * __satfracthqta: Fixed-point fractional library routines.
41439 * __satfracthquda: Fixed-point fractional library routines.
41441 * __satfracthqudq: Fixed-point fractional library routines.
41443 * __satfracthquha: Fixed-point fractional library routines.
41445 * __satfracthquhq: Fixed-point fractional library routines.
41447 * __satfracthquqq: Fixed-point fractional library routines.
41449 * __satfracthqusa: Fixed-point fractional library routines.
41451 * __satfracthqusq: Fixed-point fractional library routines.
41453 * __satfracthquta: Fixed-point fractional library routines.
41455 * __satfractqida: Fixed-point fractional library routines.
41457 * __satfractqidq: Fixed-point fractional library routines.
41459 * __satfractqiha: Fixed-point fractional library routines.
41461 * __satfractqihq: Fixed-point fractional library routines.
41463 * __satfractqiqq: Fixed-point fractional library routines.
41465 * __satfractqisa: Fixed-point fractional library routines.
41467 * __satfractqisq: Fixed-point fractional library routines.
41469 * __satfractqita: Fixed-point fractional library routines.
41471 * __satfractqiuda: Fixed-point fractional library routines.
41473 * __satfractqiudq: Fixed-point fractional library routines.
41475 * __satfractqiuha: Fixed-point fractional library routines.
41477 * __satfractqiuhq: Fixed-point fractional library routines.
41479 * __satfractqiuqq: Fixed-point fractional library routines.
41481 * __satfractqiusa: Fixed-point fractional library routines.
41483 * __satfractqiusq: Fixed-point fractional library routines.
41485 * __satfractqiuta: Fixed-point fractional library routines.
41487 * __satfractqqda: Fixed-point fractional library routines.
41489 * __satfractqqdq2: Fixed-point fractional library routines.
41491 * __satfractqqha: Fixed-point fractional library routines.
41493 * __satfractqqhq2: Fixed-point fractional library routines.
41495 * __satfractqqsa: Fixed-point fractional library routines.
41497 * __satfractqqsq2: Fixed-point fractional library routines.
41499 * __satfractqqta: Fixed-point fractional library routines.
41501 * __satfractqquda: Fixed-point fractional library routines.
41503 * __satfractqqudq: Fixed-point fractional library routines.
41505 * __satfractqquha: Fixed-point fractional library routines.
41507 * __satfractqquhq: Fixed-point fractional library routines.
41509 * __satfractqquqq: Fixed-point fractional library routines.
41511 * __satfractqqusa: Fixed-point fractional library routines.
41513 * __satfractqqusq: Fixed-point fractional library routines.
41515 * __satfractqquta: Fixed-point fractional library routines.
41517 * __satfractsada2: Fixed-point fractional library routines.
41519 * __satfractsadq: Fixed-point fractional library routines.
41521 * __satfractsaha2: Fixed-point fractional library routines.
41523 * __satfractsahq: Fixed-point fractional library routines.
41525 * __satfractsaqq: Fixed-point fractional library routines.
41527 * __satfractsasq: Fixed-point fractional library routines.
41529 * __satfractsata2: Fixed-point fractional library routines.
41531 * __satfractsauda: Fixed-point fractional library routines.
41533 * __satfractsaudq: Fixed-point fractional library routines.
41535 * __satfractsauha: Fixed-point fractional library routines.
41537 * __satfractsauhq: Fixed-point fractional library routines.
41539 * __satfractsauqq: Fixed-point fractional library routines.
41541 * __satfractsausa: Fixed-point fractional library routines.
41543 * __satfractsausq: Fixed-point fractional library routines.
41545 * __satfractsauta: Fixed-point fractional library routines.
41547 * __satfractsfda: Fixed-point fractional library routines.
41549 * __satfractsfdq: Fixed-point fractional library routines.
41551 * __satfractsfha: Fixed-point fractional library routines.
41553 * __satfractsfhq: Fixed-point fractional library routines.
41555 * __satfractsfqq: Fixed-point fractional library routines.
41557 * __satfractsfsa: Fixed-point fractional library routines.
41559 * __satfractsfsq: Fixed-point fractional library routines.
41561 * __satfractsfta: Fixed-point fractional library routines.
41563 * __satfractsfuda: Fixed-point fractional library routines.
41565 * __satfractsfudq: Fixed-point fractional library routines.
41567 * __satfractsfuha: Fixed-point fractional library routines.
41569 * __satfractsfuhq: Fixed-point fractional library routines.
41571 * __satfractsfuqq: Fixed-point fractional library routines.
41573 * __satfractsfusa: Fixed-point fractional library routines.
41575 * __satfractsfusq: Fixed-point fractional library routines.
41577 * __satfractsfuta: Fixed-point fractional library routines.
41579 * __satfractsida: Fixed-point fractional library routines.
41581 * __satfractsidq: Fixed-point fractional library routines.
41583 * __satfractsiha: Fixed-point fractional library routines.
41585 * __satfractsihq: Fixed-point fractional library routines.
41587 * __satfractsiqq: Fixed-point fractional library routines.
41589 * __satfractsisa: Fixed-point fractional library routines.
41591 * __satfractsisq: Fixed-point fractional library routines.
41593 * __satfractsita: Fixed-point fractional library routines.
41595 * __satfractsiuda: Fixed-point fractional library routines.
41597 * __satfractsiudq: Fixed-point fractional library routines.
41599 * __satfractsiuha: Fixed-point fractional library routines.
41601 * __satfractsiuhq: Fixed-point fractional library routines.
41603 * __satfractsiuqq: Fixed-point fractional library routines.
41605 * __satfractsiusa: Fixed-point fractional library routines.
41607 * __satfractsiusq: Fixed-point fractional library routines.
41609 * __satfractsiuta: Fixed-point fractional library routines.
41611 * __satfractsqda: Fixed-point fractional library routines.
41613 * __satfractsqdq2: Fixed-point fractional library routines.
41615 * __satfractsqha: Fixed-point fractional library routines.
41617 * __satfractsqhq2: Fixed-point fractional library routines.
41619 * __satfractsqqq2: Fixed-point fractional library routines.
41621 * __satfractsqsa: Fixed-point fractional library routines.
41623 * __satfractsqta: Fixed-point fractional library routines.
41625 * __satfractsquda: Fixed-point fractional library routines.
41627 * __satfractsqudq: Fixed-point fractional library routines.
41629 * __satfractsquha: Fixed-point fractional library routines.
41631 * __satfractsquhq: Fixed-point fractional library routines.
41633 * __satfractsquqq: Fixed-point fractional library routines.
41635 * __satfractsqusa: Fixed-point fractional library routines.
41637 * __satfractsqusq: Fixed-point fractional library routines.
41639 * __satfractsquta: Fixed-point fractional library routines.
41641 * __satfracttada2: Fixed-point fractional library routines.
41643 * __satfracttadq: Fixed-point fractional library routines.
41645 * __satfracttaha2: Fixed-point fractional library routines.
41647 * __satfracttahq: Fixed-point fractional library routines.
41649 * __satfracttaqq: Fixed-point fractional library routines.
41651 * __satfracttasa2: Fixed-point fractional library routines.
41653 * __satfracttasq: Fixed-point fractional library routines.
41655 * __satfracttauda: Fixed-point fractional library routines.
41657 * __satfracttaudq: Fixed-point fractional library routines.
41659 * __satfracttauha: Fixed-point fractional library routines.
41661 * __satfracttauhq: Fixed-point fractional library routines.
41663 * __satfracttauqq: Fixed-point fractional library routines.
41665 * __satfracttausa: Fixed-point fractional library routines.
41667 * __satfracttausq: Fixed-point fractional library routines.
41669 * __satfracttauta: Fixed-point fractional library routines.
41671 * __satfracttida: Fixed-point fractional library routines.
41673 * __satfracttidq: Fixed-point fractional library routines.
41675 * __satfracttiha: Fixed-point fractional library routines.
41677 * __satfracttihq: Fixed-point fractional library routines.
41679 * __satfracttiqq: Fixed-point fractional library routines.
41681 * __satfracttisa: Fixed-point fractional library routines.
41683 * __satfracttisq: Fixed-point fractional library routines.
41685 * __satfracttita: Fixed-point fractional library routines.
41687 * __satfracttiuda: Fixed-point fractional library routines.
41689 * __satfracttiudq: Fixed-point fractional library routines.
41691 * __satfracttiuha: Fixed-point fractional library routines.
41693 * __satfracttiuhq: Fixed-point fractional library routines.
41695 * __satfracttiuqq: Fixed-point fractional library routines.
41697 * __satfracttiusa: Fixed-point fractional library routines.
41699 * __satfracttiusq: Fixed-point fractional library routines.
41701 * __satfracttiuta: Fixed-point fractional library routines.
41703 * __satfractudada: Fixed-point fractional library routines.
41705 * __satfractudadq: Fixed-point fractional library routines.
41707 * __satfractudaha: Fixed-point fractional library routines.
41709 * __satfractudahq: Fixed-point fractional library routines.
41711 * __satfractudaqq: Fixed-point fractional library routines.
41713 * __satfractudasa: Fixed-point fractional library routines.
41715 * __satfractudasq: Fixed-point fractional library routines.
41717 * __satfractudata: Fixed-point fractional library routines.
41719 * __satfractudaudq: Fixed-point fractional library routines.
41721 * __satfractudauha2: Fixed-point fractional library routines.
41723 * __satfractudauhq: Fixed-point fractional library routines.
41725 * __satfractudauqq: Fixed-point fractional library routines.
41727 * __satfractudausa2: Fixed-point fractional library routines.
41729 * __satfractudausq: Fixed-point fractional library routines.
41731 * __satfractudauta2: Fixed-point fractional library routines.
41733 * __satfractudqda: Fixed-point fractional library routines.
41735 * __satfractudqdq: Fixed-point fractional library routines.
41737 * __satfractudqha: Fixed-point fractional library routines.
41739 * __satfractudqhq: Fixed-point fractional library routines.
41741 * __satfractudqqq: Fixed-point fractional library routines.
41743 * __satfractudqsa: Fixed-point fractional library routines.
41745 * __satfractudqsq: Fixed-point fractional library routines.
41747 * __satfractudqta: Fixed-point fractional library routines.
41749 * __satfractudquda: Fixed-point fractional library routines.
41751 * __satfractudquha: Fixed-point fractional library routines.
41753 * __satfractudquhq2: Fixed-point fractional library routines.
41755 * __satfractudquqq2: Fixed-point fractional library routines.
41757 * __satfractudqusa: Fixed-point fractional library routines.
41759 * __satfractudqusq2: Fixed-point fractional library routines.
41761 * __satfractudquta: Fixed-point fractional library routines.
41763 * __satfractuhada: Fixed-point fractional library routines.
41765 * __satfractuhadq: Fixed-point fractional library routines.
41767 * __satfractuhaha: Fixed-point fractional library routines.
41769 * __satfractuhahq: Fixed-point fractional library routines.
41771 * __satfractuhaqq: Fixed-point fractional library routines.
41773 * __satfractuhasa: Fixed-point fractional library routines.
41775 * __satfractuhasq: Fixed-point fractional library routines.
41777 * __satfractuhata: Fixed-point fractional library routines.
41779 * __satfractuhauda2: Fixed-point fractional library routines.
41781 * __satfractuhaudq: Fixed-point fractional library routines.
41783 * __satfractuhauhq: Fixed-point fractional library routines.
41785 * __satfractuhauqq: Fixed-point fractional library routines.
41787 * __satfractuhausa2: Fixed-point fractional library routines.
41789 * __satfractuhausq: Fixed-point fractional library routines.
41791 * __satfractuhauta2: Fixed-point fractional library routines.
41793 * __satfractuhqda: Fixed-point fractional library routines.
41795 * __satfractuhqdq: Fixed-point fractional library routines.
41797 * __satfractuhqha: Fixed-point fractional library routines.
41799 * __satfractuhqhq: Fixed-point fractional library routines.
41801 * __satfractuhqqq: Fixed-point fractional library routines.
41803 * __satfractuhqsa: Fixed-point fractional library routines.
41805 * __satfractuhqsq: Fixed-point fractional library routines.
41807 * __satfractuhqta: Fixed-point fractional library routines.
41809 * __satfractuhquda: Fixed-point fractional library routines.
41811 * __satfractuhqudq2: Fixed-point fractional library routines.
41813 * __satfractuhquha: Fixed-point fractional library routines.
41815 * __satfractuhquqq2: Fixed-point fractional library routines.
41817 * __satfractuhqusa: Fixed-point fractional library routines.
41819 * __satfractuhqusq2: Fixed-point fractional library routines.
41821 * __satfractuhquta: Fixed-point fractional library routines.
41823 * __satfractunsdida: Fixed-point fractional library routines.
41825 * __satfractunsdidq: Fixed-point fractional library routines.
41827 * __satfractunsdiha: Fixed-point fractional library routines.
41829 * __satfractunsdihq: Fixed-point fractional library routines.
41831 * __satfractunsdiqq: Fixed-point fractional library routines.
41833 * __satfractunsdisa: Fixed-point fractional library routines.
41835 * __satfractunsdisq: Fixed-point fractional library routines.
41837 * __satfractunsdita: Fixed-point fractional library routines.
41839 * __satfractunsdiuda: Fixed-point fractional library routines.
41841 * __satfractunsdiudq: Fixed-point fractional library routines.
41843 * __satfractunsdiuha: Fixed-point fractional library routines.
41845 * __satfractunsdiuhq: Fixed-point fractional library routines.
41847 * __satfractunsdiuqq: Fixed-point fractional library routines.
41849 * __satfractunsdiusa: Fixed-point fractional library routines.
41851 * __satfractunsdiusq: Fixed-point fractional library routines.
41853 * __satfractunsdiuta: Fixed-point fractional library routines.
41855 * __satfractunshida: Fixed-point fractional library routines.
41857 * __satfractunshidq: Fixed-point fractional library routines.
41859 * __satfractunshiha: Fixed-point fractional library routines.
41861 * __satfractunshihq: Fixed-point fractional library routines.
41863 * __satfractunshiqq: Fixed-point fractional library routines.
41865 * __satfractunshisa: Fixed-point fractional library routines.
41867 * __satfractunshisq: Fixed-point fractional library routines.
41869 * __satfractunshita: Fixed-point fractional library routines.
41871 * __satfractunshiuda: Fixed-point fractional library routines.
41873 * __satfractunshiudq: Fixed-point fractional library routines.
41875 * __satfractunshiuha: Fixed-point fractional library routines.
41877 * __satfractunshiuhq: Fixed-point fractional library routines.
41879 * __satfractunshiuqq: Fixed-point fractional library routines.
41881 * __satfractunshiusa: Fixed-point fractional library routines.
41883 * __satfractunshiusq: Fixed-point fractional library routines.
41885 * __satfractunshiuta: Fixed-point fractional library routines.
41887 * __satfractunsqida: Fixed-point fractional library routines.
41889 * __satfractunsqidq: Fixed-point fractional library routines.
41891 * __satfractunsqiha: Fixed-point fractional library routines.
41893 * __satfractunsqihq: Fixed-point fractional library routines.
41895 * __satfractunsqiqq: Fixed-point fractional library routines.
41897 * __satfractunsqisa: Fixed-point fractional library routines.
41899 * __satfractunsqisq: Fixed-point fractional library routines.
41901 * __satfractunsqita: Fixed-point fractional library routines.
41903 * __satfractunsqiuda: Fixed-point fractional library routines.
41905 * __satfractunsqiudq: Fixed-point fractional library routines.
41907 * __satfractunsqiuha: Fixed-point fractional library routines.
41909 * __satfractunsqiuhq: Fixed-point fractional library routines.
41911 * __satfractunsqiuqq: Fixed-point fractional library routines.
41913 * __satfractunsqiusa: Fixed-point fractional library routines.
41915 * __satfractunsqiusq: Fixed-point fractional library routines.
41917 * __satfractunsqiuta: Fixed-point fractional library routines.
41919 * __satfractunssida: Fixed-point fractional library routines.
41921 * __satfractunssidq: Fixed-point fractional library routines.
41923 * __satfractunssiha: Fixed-point fractional library routines.
41925 * __satfractunssihq: Fixed-point fractional library routines.
41927 * __satfractunssiqq: Fixed-point fractional library routines.
41929 * __satfractunssisa: Fixed-point fractional library routines.
41931 * __satfractunssisq: Fixed-point fractional library routines.
41933 * __satfractunssita: Fixed-point fractional library routines.
41935 * __satfractunssiuda: Fixed-point fractional library routines.
41937 * __satfractunssiudq: Fixed-point fractional library routines.
41939 * __satfractunssiuha: Fixed-point fractional library routines.
41941 * __satfractunssiuhq: Fixed-point fractional library routines.
41943 * __satfractunssiuqq: Fixed-point fractional library routines.
41945 * __satfractunssiusa: Fixed-point fractional library routines.
41947 * __satfractunssiusq: Fixed-point fractional library routines.
41949 * __satfractunssiuta: Fixed-point fractional library routines.
41951 * __satfractunstida: Fixed-point fractional library routines.
41953 * __satfractunstidq: Fixed-point fractional library routines.
41955 * __satfractunstiha: Fixed-point fractional library routines.
41957 * __satfractunstihq: Fixed-point fractional library routines.
41959 * __satfractunstiqq: Fixed-point fractional library routines.
41961 * __satfractunstisa: Fixed-point fractional library routines.
41963 * __satfractunstisq: Fixed-point fractional library routines.
41965 * __satfractunstita: Fixed-point fractional library routines.
41967 * __satfractunstiuda: Fixed-point fractional library routines.
41969 * __satfractunstiudq: Fixed-point fractional library routines.
41971 * __satfractunstiuha: Fixed-point fractional library routines.
41973 * __satfractunstiuhq: Fixed-point fractional library routines.
41975 * __satfractunstiuqq: Fixed-point fractional library routines.
41977 * __satfractunstiusa: Fixed-point fractional library routines.
41979 * __satfractunstiusq: Fixed-point fractional library routines.
41981 * __satfractunstiuta: Fixed-point fractional library routines.
41983 * __satfractuqqda: Fixed-point fractional library routines.
41985 * __satfractuqqdq: Fixed-point fractional library routines.
41987 * __satfractuqqha: Fixed-point fractional library routines.
41989 * __satfractuqqhq: Fixed-point fractional library routines.
41991 * __satfractuqqqq: Fixed-point fractional library routines.
41993 * __satfractuqqsa: Fixed-point fractional library routines.
41995 * __satfractuqqsq: Fixed-point fractional library routines.
41997 * __satfractuqqta: Fixed-point fractional library routines.
41999 * __satfractuqquda: Fixed-point fractional library routines.
42001 * __satfractuqqudq2: Fixed-point fractional library routines.
42003 * __satfractuqquha: Fixed-point fractional library routines.
42005 * __satfractuqquhq2: Fixed-point fractional library routines.
42007 * __satfractuqqusa: Fixed-point fractional library routines.
42009 * __satfractuqqusq2: Fixed-point fractional library routines.
42011 * __satfractuqquta: Fixed-point fractional library routines.
42013 * __satfractusada: Fixed-point fractional library routines.
42015 * __satfractusadq: Fixed-point fractional library routines.
42017 * __satfractusaha: Fixed-point fractional library routines.
42019 * __satfractusahq: Fixed-point fractional library routines.
42021 * __satfractusaqq: Fixed-point fractional library routines.
42023 * __satfractusasa: Fixed-point fractional library routines.
42025 * __satfractusasq: Fixed-point fractional library routines.
42027 * __satfractusata: Fixed-point fractional library routines.
42029 * __satfractusauda2: Fixed-point fractional library routines.
42031 * __satfractusaudq: Fixed-point fractional library routines.
42033 * __satfractusauha2: Fixed-point fractional library routines.
42035 * __satfractusauhq: Fixed-point fractional library routines.
42037 * __satfractusauqq: Fixed-point fractional library routines.
42039 * __satfractusausq: Fixed-point fractional library routines.
42041 * __satfractusauta2: Fixed-point fractional library routines.
42043 * __satfractusqda: Fixed-point fractional library routines.
42045 * __satfractusqdq: Fixed-point fractional library routines.
42047 * __satfractusqha: Fixed-point fractional library routines.
42049 * __satfractusqhq: Fixed-point fractional library routines.
42051 * __satfractusqqq: Fixed-point fractional library routines.
42053 * __satfractusqsa: Fixed-point fractional library routines.
42055 * __satfractusqsq: Fixed-point fractional library routines.
42057 * __satfractusqta: Fixed-point fractional library routines.
42059 * __satfractusquda: Fixed-point fractional library routines.
42061 * __satfractusqudq2: Fixed-point fractional library routines.
42063 * __satfractusquha: Fixed-point fractional library routines.
42065 * __satfractusquhq2: Fixed-point fractional library routines.
42067 * __satfractusquqq2: Fixed-point fractional library routines.
42069 * __satfractusqusa: Fixed-point fractional library routines.
42071 * __satfractusquta: Fixed-point fractional library routines.
42073 * __satfractutada: Fixed-point fractional library routines.
42075 * __satfractutadq: Fixed-point fractional library routines.
42077 * __satfractutaha: Fixed-point fractional library routines.
42079 * __satfractutahq: Fixed-point fractional library routines.
42081 * __satfractutaqq: Fixed-point fractional library routines.
42083 * __satfractutasa: Fixed-point fractional library routines.
42085 * __satfractutasq: Fixed-point fractional library routines.
42087 * __satfractutata: Fixed-point fractional library routines.
42089 * __satfractutauda2: Fixed-point fractional library routines.
42091 * __satfractutaudq: Fixed-point fractional library routines.
42093 * __satfractutauha2: Fixed-point fractional library routines.
42095 * __satfractutauhq: Fixed-point fractional library routines.
42097 * __satfractutauqq: Fixed-point fractional library routines.
42099 * __satfractutausa2: Fixed-point fractional library routines.
42101 * __satfractutausq: Fixed-point fractional library routines.
42103 * __ssaddda3: Fixed-point fractional library routines.
42105 * __ssadddq3: Fixed-point fractional library routines.
42107 * __ssaddha3: Fixed-point fractional library routines.
42109 * __ssaddhq3: Fixed-point fractional library routines.
42111 * __ssaddqq3: Fixed-point fractional library routines.
42113 * __ssaddsa3: Fixed-point fractional library routines.
42115 * __ssaddsq3: Fixed-point fractional library routines.
42117 * __ssaddta3: Fixed-point fractional library routines.
42119 * __ssashlda3: Fixed-point fractional library routines.
42121 * __ssashldq3: Fixed-point fractional library routines.
42123 * __ssashlha3: Fixed-point fractional library routines.
42125 * __ssashlhq3: Fixed-point fractional library routines.
42127 * __ssashlsa3: Fixed-point fractional library routines.
42129 * __ssashlsq3: Fixed-point fractional library routines.
42131 * __ssashlta3: Fixed-point fractional library routines.
42133 * __ssdivda3: Fixed-point fractional library routines.
42135 * __ssdivdq3: Fixed-point fractional library routines.
42137 * __ssdivha3: Fixed-point fractional library routines.
42139 * __ssdivhq3: Fixed-point fractional library routines.
42141 * __ssdivqq3: Fixed-point fractional library routines.
42143 * __ssdivsa3: Fixed-point fractional library routines.
42145 * __ssdivsq3: Fixed-point fractional library routines.
42147 * __ssdivta3: Fixed-point fractional library routines.
42149 * __ssmulda3: Fixed-point fractional library routines.
42151 * __ssmuldq3: Fixed-point fractional library routines.
42153 * __ssmulha3: Fixed-point fractional library routines.
42155 * __ssmulhq3: Fixed-point fractional library routines.
42157 * __ssmulqq3: Fixed-point fractional library routines.
42159 * __ssmulsa3: Fixed-point fractional library routines.
42161 * __ssmulsq3: Fixed-point fractional library routines.
42163 * __ssmulta3: Fixed-point fractional library routines.
42165 * __ssnegda2: Fixed-point fractional library routines.
42167 * __ssnegdq2: Fixed-point fractional library routines.
42169 * __ssnegha2: Fixed-point fractional library routines.
42171 * __ssneghq2: Fixed-point fractional library routines.
42173 * __ssnegqq2: Fixed-point fractional library routines.
42175 * __ssnegsa2: Fixed-point fractional library routines.
42177 * __ssnegsq2: Fixed-point fractional library routines.
42179 * __ssnegta2: Fixed-point fractional library routines.
42181 * __sssubda3: Fixed-point fractional library routines.
42183 * __sssubdq3: Fixed-point fractional library routines.
42185 * __sssubha3: Fixed-point fractional library routines.
42187 * __sssubhq3: Fixed-point fractional library routines.
42189 * __sssubqq3: Fixed-point fractional library routines.
42191 * __sssubsa3: Fixed-point fractional library routines.
42193 * __sssubsq3: Fixed-point fractional library routines.
42195 * __sssubta3: Fixed-point fractional library routines.
42197 * __subda3: Fixed-point fractional library routines.
42199 * __subdf3: Soft float library routines.
42201 * __subdq3: Fixed-point fractional library routines.
42203 * __subha3: Fixed-point fractional library routines.
42205 * __subhq3: Fixed-point fractional library routines.
42207 * __subqq3: Fixed-point fractional library routines.
42209 * __subsa3: Fixed-point fractional library routines.
42211 * __subsf3: Soft float library routines.
42213 * __subsq3: Fixed-point fractional library routines.
42215 * __subta3: Fixed-point fractional library routines.
42217 * __subtf3: Soft float library routines.
42219 * __subuda3: Fixed-point fractional library routines.
42221 * __subudq3: Fixed-point fractional library routines.
42223 * __subuha3: Fixed-point fractional library routines.
42225 * __subuhq3: Fixed-point fractional library routines.
42227 * __subuqq3: Fixed-point fractional library routines.
42229 * __subusa3: Fixed-point fractional library routines.
42231 * __subusq3: Fixed-point fractional library routines.
42233 * __subuta3: Fixed-point fractional library routines.
42235 * __subvdi3: Integer library routines.
42237 * __subvsi3: Integer library routines.
42239 * __subxf3: Soft float library routines.
42241 * __truncdfsf2: Soft float library routines.
42243 * __trunctfdf2: Soft float library routines.
42245 * __trunctfsf2: Soft float library routines.
42247 * __truncxfdf2: Soft float library routines.
42249 * __truncxfsf2: Soft float library routines.
42251 * __ucmpdi2: Integer library routines.
42253 * __ucmpti2: Integer library routines.
42255 * __udivdi3: Integer library routines.
42257 * __udivmoddi3: Integer library routines.
42259 * __udivsi3: Integer library routines.
42261 * __udivti3: Integer library routines.
42263 * __udivuda3: Fixed-point fractional library routines.
42265 * __udivudq3: Fixed-point fractional library routines.
42267 * __udivuha3: Fixed-point fractional library routines.
42269 * __udivuhq3: Fixed-point fractional library routines.
42271 * __udivuqq3: Fixed-point fractional library routines.
42273 * __udivusa3: Fixed-point fractional library routines.
42275 * __udivusq3: Fixed-point fractional library routines.
42277 * __udivuta3: Fixed-point fractional library routines.
42279 * __umoddi3: Integer library routines.
42281 * __umodsi3: Integer library routines.
42283 * __umodti3: Integer library routines.
42285 * __unorddf2: Soft float library routines.
42287 * __unordsf2: Soft float library routines.
42289 * __unordtf2: Soft float library routines.
42291 * __usadduda3: Fixed-point fractional library routines.
42293 * __usaddudq3: Fixed-point fractional library routines.
42295 * __usadduha3: Fixed-point fractional library routines.
42297 * __usadduhq3: Fixed-point fractional library routines.
42299 * __usadduqq3: Fixed-point fractional library routines.
42301 * __usaddusa3: Fixed-point fractional library routines.
42303 * __usaddusq3: Fixed-point fractional library routines.
42305 * __usadduta3: Fixed-point fractional library routines.
42307 * __usashluda3: Fixed-point fractional library routines.
42309 * __usashludq3: Fixed-point fractional library routines.
42311 * __usashluha3: Fixed-point fractional library routines.
42313 * __usashluhq3: Fixed-point fractional library routines.
42315 * __usashluqq3: Fixed-point fractional library routines.
42317 * __usashlusa3: Fixed-point fractional library routines.
42319 * __usashlusq3: Fixed-point fractional library routines.
42321 * __usashluta3: Fixed-point fractional library routines.
42323 * __usdivuda3: Fixed-point fractional library routines.
42325 * __usdivudq3: Fixed-point fractional library routines.
42327 * __usdivuha3: Fixed-point fractional library routines.
42329 * __usdivuhq3: Fixed-point fractional library routines.
42331 * __usdivuqq3: Fixed-point fractional library routines.
42333 * __usdivusa3: Fixed-point fractional library routines.
42335 * __usdivusq3: Fixed-point fractional library routines.
42337 * __usdivuta3: Fixed-point fractional library routines.
42339 * __usmuluda3: Fixed-point fractional library routines.
42341 * __usmuludq3: Fixed-point fractional library routines.
42343 * __usmuluha3: Fixed-point fractional library routines.
42345 * __usmuluhq3: Fixed-point fractional library routines.
42347 * __usmuluqq3: Fixed-point fractional library routines.
42349 * __usmulusa3: Fixed-point fractional library routines.
42351 * __usmulusq3: Fixed-point fractional library routines.
42353 * __usmuluta3: Fixed-point fractional library routines.
42355 * __usneguda2: Fixed-point fractional library routines.
42357 * __usnegudq2: Fixed-point fractional library routines.
42359 * __usneguha2: Fixed-point fractional library routines.
42361 * __usneguhq2: Fixed-point fractional library routines.
42363 * __usneguqq2: Fixed-point fractional library routines.
42365 * __usnegusa2: Fixed-point fractional library routines.
42367 * __usnegusq2: Fixed-point fractional library routines.
42369 * __usneguta2: Fixed-point fractional library routines.
42371 * __ussubuda3: Fixed-point fractional library routines.
42373 * __ussubudq3: Fixed-point fractional library routines.
42375 * __ussubuha3: Fixed-point fractional library routines.
42377 * __ussubuhq3: Fixed-point fractional library routines.
42379 * __ussubuqq3: Fixed-point fractional library routines.
42381 * __ussubusa3: Fixed-point fractional library routines.
42383 * __ussubusq3: Fixed-point fractional library routines.
42385 * __ussubuta3: Fixed-point fractional library routines.
42387 * abort: Portability. (line 21)
42388 * abs: Arithmetic. (line 195)
42389 * abs and attributes: Expressions. (line 64)
42390 * ABS_EXPR: Unary and Binary Expressions.
42392 * absence_set: Processor pipeline description.
42394 * absM2 instruction pattern: Standard Names. (line 452)
42395 * absolute value: Arithmetic. (line 195)
42396 * access to operands: Accessors. (line 6)
42397 * access to special operands: Special Accessors. (line 6)
42398 * accessors: Accessors. (line 6)
42399 * ACCUM_TYPE_SIZE: Type Layout. (line 88)
42400 * ACCUMULATE_OUTGOING_ARGS: Stack Arguments. (line 46)
42401 * ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line 135)
42402 * ADA_LONG_TYPE_SIZE: Type Layout. (line 26)
42403 * Adding a new GIMPLE statement code: Adding a new GIMPLE statement code.
42405 * ADDITIONAL_REGISTER_NAMES: Instruction Output. (line 15)
42406 * addM3 instruction pattern: Standard Names. (line 216)
42407 * addMODEcc instruction pattern: Standard Names. (line 886)
42408 * addr_diff_vec: Side Effects. (line 302)
42409 * addr_diff_vec, length of: Insn Lengths. (line 26)
42410 * ADDR_EXPR: Storage References. (line 6)
42411 * addr_vec: Side Effects. (line 297)
42412 * addr_vec, length of: Insn Lengths. (line 26)
42413 * address constraints: Simple Constraints. (line 154)
42414 * address_operand <1>: Simple Constraints. (line 158)
42415 * address_operand: Machine-Independent Predicates.
42417 * addressing modes: Addressing Modes. (line 6)
42418 * ADJUST_FIELD_ALIGN: Storage Layout. (line 202)
42419 * ADJUST_INSN_LENGTH: Insn Lengths. (line 35)
42420 * aggregates as return values: Aggregate Return. (line 6)
42421 * alias: Alias analysis. (line 6)
42422 * ALL_COP_ADDITIONAL_REGISTER_NAMES: MIPS Coprocessors. (line 32)
42423 * ALL_REGS: Register Classes. (line 17)
42424 * allocate_stack instruction pattern: Standard Names. (line 1186)
42425 * alternate entry points: Insns. (line 140)
42426 * anchored addresses: Anchored Addresses. (line 6)
42427 * and: Arithmetic. (line 153)
42428 * and and attributes: Expressions. (line 50)
42429 * and, canonicalization of: Insn Canonicalizations.
42431 * andM3 instruction pattern: Standard Names. (line 222)
42432 * annotations: Annotations. (line 6)
42433 * APPLY_RESULT_SIZE: Scalar Return. (line 107)
42434 * ARG_POINTER_CFA_OFFSET: Frame Layout. (line 194)
42435 * ARG_POINTER_REGNUM: Frame Registers. (line 41)
42436 * ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line 65)
42437 * arg_pointer_rtx: Frame Registers. (line 90)
42438 * ARGS_GROW_DOWNWARD: Frame Layout. (line 35)
42439 * argument passing: Interface. (line 36)
42440 * arguments in registers: Register Arguments. (line 6)
42441 * arguments on stack: Stack Arguments. (line 6)
42442 * arithmetic library: Soft float library routines.
42444 * arithmetic shift: Arithmetic. (line 168)
42445 * arithmetic shift with signed saturation: Arithmetic. (line 168)
42446 * arithmetic shift with unsigned saturation: Arithmetic. (line 168)
42447 * arithmetic, in RTL: Arithmetic. (line 6)
42448 * ARITHMETIC_TYPE_P: Types for C++. (line 61)
42449 * array: Types. (line 6)
42450 * ARRAY_RANGE_REF: Storage References. (line 6)
42451 * ARRAY_REF: Storage References. (line 6)
42452 * ARRAY_TYPE: Types. (line 6)
42453 * AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 151)
42454 * ashift: Arithmetic. (line 168)
42455 * ashift and attributes: Expressions. (line 64)
42456 * ashiftrt: Arithmetic. (line 185)
42457 * ashiftrt and attributes: Expressions. (line 64)
42458 * ashlM3 instruction pattern: Standard Names. (line 431)
42459 * ashrM3 instruction pattern: Standard Names. (line 441)
42460 * ASM_APP_OFF: File Framework. (line 78)
42461 * ASM_APP_ON: File Framework. (line 71)
42462 * ASM_COMMENT_START: File Framework. (line 66)
42463 * ASM_DECLARE_CLASS_REFERENCE: Label Output. (line 437)
42464 * ASM_DECLARE_CONSTANT_NAME: Label Output. (line 128)
42465 * ASM_DECLARE_FUNCTION_NAME: Label Output. (line 87)
42466 * ASM_DECLARE_FUNCTION_SIZE: Label Output. (line 101)
42467 * ASM_DECLARE_OBJECT_NAME: Label Output. (line 114)
42468 * ASM_DECLARE_REGISTER_GLOBAL: Label Output. (line 143)
42469 * ASM_DECLARE_UNRESOLVED_REFERENCE: Label Output. (line 443)
42470 * ASM_FINAL_SPEC: Driver. (line 144)
42471 * ASM_FINISH_DECLARE_OBJECT: Label Output. (line 151)
42472 * ASM_FORMAT_PRIVATE_NAME: Label Output. (line 355)
42473 * asm_fprintf: Instruction Output. (line 136)
42474 * ASM_FPRINTF_EXTENSIONS: Instruction Output. (line 147)
42475 * ASM_GENERATE_INTERNAL_LABEL: Label Output. (line 339)
42476 * asm_input: Side Effects. (line 284)
42477 * asm_input and /v: Flags. (line 94)
42478 * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX: Exception Handling. (line 82)
42479 * ASM_NO_SKIP_IN_TEXT: Alignment Output. (line 72)
42480 * asm_noperands: Insns. (line 307)
42481 * asm_operands and /v: Flags. (line 94)
42482 * asm_operands, RTL sharing: Sharing. (line 45)
42483 * asm_operands, usage: Assembler. (line 6)
42484 * ASM_OUTPUT_ADDR_DIFF_ELT: Dispatch Tables. (line 9)
42485 * ASM_OUTPUT_ADDR_VEC_ELT: Dispatch Tables. (line 26)
42486 * ASM_OUTPUT_ALIGN: Alignment Output. (line 79)
42487 * ASM_OUTPUT_ALIGN_WITH_NOP: Alignment Output. (line 84)
42488 * ASM_OUTPUT_ALIGNED_BSS: Uninitialized Data. (line 71)
42489 * ASM_OUTPUT_ALIGNED_COMMON: Uninitialized Data. (line 30)
42490 * ASM_OUTPUT_ALIGNED_DECL_COMMON: Uninitialized Data. (line 38)
42491 * ASM_OUTPUT_ALIGNED_DECL_LOCAL: Uninitialized Data. (line 102)
42492 * ASM_OUTPUT_ALIGNED_LOCAL: Uninitialized Data. (line 94)
42493 * ASM_OUTPUT_ASCII: Data Output. (line 50)
42494 * ASM_OUTPUT_BSS: Uninitialized Data. (line 46)
42495 * ASM_OUTPUT_CASE_END: Dispatch Tables. (line 51)
42496 * ASM_OUTPUT_CASE_LABEL: Dispatch Tables. (line 38)
42497 * ASM_OUTPUT_COMMON: Uninitialized Data. (line 10)
42498 * ASM_OUTPUT_DEBUG_LABEL: Label Output. (line 327)
42499 * ASM_OUTPUT_DEF: Label Output. (line 376)
42500 * ASM_OUTPUT_DEF_FROM_DECLS: Label Output. (line 384)
42501 * ASM_OUTPUT_DWARF_DELTA: SDB and DWARF. (line 42)
42502 * ASM_OUTPUT_DWARF_OFFSET: SDB and DWARF. (line 46)
42503 * ASM_OUTPUT_DWARF_PCREL: SDB and DWARF. (line 52)
42504 * ASM_OUTPUT_DWARF_TABLE_REF: SDB and DWARF. (line 57)
42505 * ASM_OUTPUT_EXTERNAL: Label Output. (line 264)
42506 * ASM_OUTPUT_FDESC: Data Output. (line 59)
42507 * ASM_OUTPUT_IDENT: File Framework. (line 100)
42508 * ASM_OUTPUT_INTERNAL_LABEL: Label Output. (line 17)
42509 * ASM_OUTPUT_LABEL: Label Output. (line 9)
42510 * ASM_OUTPUT_LABEL_REF: Label Output. (line 300)
42511 * ASM_OUTPUT_LABELREF: Label Output. (line 286)
42512 * ASM_OUTPUT_LOCAL: Uninitialized Data. (line 81)
42513 * ASM_OUTPUT_MAX_SKIP_ALIGN: Alignment Output. (line 88)
42514 * ASM_OUTPUT_MEASURED_SIZE: Label Output. (line 41)
42515 * ASM_OUTPUT_OPCODE: Instruction Output. (line 21)
42516 * ASM_OUTPUT_POOL_EPILOGUE: Data Output. (line 109)
42517 * ASM_OUTPUT_POOL_PROLOGUE: Data Output. (line 72)
42518 * ASM_OUTPUT_REG_POP: Instruction Output. (line 191)
42519 * ASM_OUTPUT_REG_PUSH: Instruction Output. (line 186)
42520 * ASM_OUTPUT_SIZE_DIRECTIVE: Label Output. (line 35)
42521 * ASM_OUTPUT_SKIP: Alignment Output. (line 66)
42522 * ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 85)
42523 * ASM_OUTPUT_SPECIAL_POOL_ENTRY: Data Output. (line 84)
42524 * ASM_OUTPUT_SYMBOL_REF: Label Output. (line 293)
42525 * ASM_OUTPUT_TYPE_DIRECTIVE: Label Output. (line 77)
42526 * ASM_OUTPUT_WEAK_ALIAS: Label Output. (line 402)
42527 * ASM_OUTPUT_WEAKREF: Label Output. (line 203)
42528 * ASM_PREFERRED_EH_DATA_FORMAT: Exception Handling. (line 67)
42529 * ASM_SPEC: Driver. (line 136)
42530 * ASM_STABD_OP: DBX Options. (line 36)
42531 * ASM_STABN_OP: DBX Options. (line 43)
42532 * ASM_STABS_OP: DBX Options. (line 29)
42533 * ASM_WEAKEN_DECL: Label Output. (line 195)
42534 * ASM_WEAKEN_LABEL: Label Output. (line 182)
42535 * assemble_name: Label Output. (line 8)
42536 * assemble_name_raw: Label Output. (line 16)
42537 * assembler format: File Framework. (line 6)
42538 * assembler instructions in RTL: Assembler. (line 6)
42539 * ASSEMBLER_DIALECT: Instruction Output. (line 159)
42540 * assigning attribute values to insns: Tagging Insns. (line 6)
42541 * asterisk in template: Output Statement. (line 29)
42542 * atan2M3 instruction pattern: Standard Names. (line 522)
42543 * attr <1>: Tagging Insns. (line 54)
42544 * attr: Expressions. (line 154)
42545 * attr_flag: Expressions. (line 119)
42546 * attribute expressions: Expressions. (line 6)
42547 * attribute specifications: Attr Example. (line 6)
42548 * attribute specifications example: Attr Example. (line 6)
42549 * ATTRIBUTE_ALIGNED_VALUE: Storage Layout. (line 184)
42550 * attributes: Attributes. (line 6)
42551 * attributes, defining: Defining Attributes.
42553 * attributes, target-specific: Target Attributes. (line 6)
42554 * autoincrement addressing, availability: Portability. (line 21)
42555 * autoincrement/decrement addressing: Simple Constraints. (line 30)
42556 * automata_option: Processor pipeline description.
42558 * automaton based pipeline description: Processor pipeline description.
42560 * automaton based scheduler: Processor pipeline description.
42562 * AVOID_CCMODE_COPIES: Values in Registers.
42564 * backslash: Output Template. (line 46)
42565 * barrier: Insns. (line 160)
42566 * barrier and /f: Flags. (line 125)
42567 * barrier and /v: Flags. (line 44)
42568 * BASE_REG_CLASS: Register Classes. (line 107)
42569 * basic block: Basic Blocks. (line 6)
42570 * Basic Statements: Basic Statements. (line 6)
42571 * basic-block.h: Control Flow. (line 6)
42572 * BASIC_BLOCK: Basic Blocks. (line 19)
42573 * basic_block: Basic Blocks. (line 6)
42574 * BB_HEAD, BB_END: Maintaining the CFG.
42576 * bb_seq: GIMPLE sequences. (line 73)
42577 * BIGGEST_ALIGNMENT: Storage Layout. (line 174)
42578 * BIGGEST_FIELD_ALIGNMENT: Storage Layout. (line 195)
42579 * BImode: Machine Modes. (line 22)
42580 * BIND_EXPR: Unary and Binary Expressions.
42582 * BINFO_TYPE: Classes. (line 6)
42583 * bit-fields: Bit-Fields. (line 6)
42584 * BIT_AND_EXPR: Unary and Binary Expressions.
42586 * BIT_IOR_EXPR: Unary and Binary Expressions.
42588 * BIT_NOT_EXPR: Unary and Binary Expressions.
42590 * BIT_XOR_EXPR: Unary and Binary Expressions.
42592 * BITFIELD_NBYTES_LIMITED: Storage Layout. (line 383)
42593 * BITS_BIG_ENDIAN: Storage Layout. (line 12)
42594 * BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields. (line 8)
42595 * BITS_PER_UNIT: Storage Layout. (line 52)
42596 * BITS_PER_WORD: Storage Layout. (line 57)
42597 * bitwise complement: Arithmetic. (line 149)
42598 * bitwise exclusive-or: Arithmetic. (line 163)
42599 * bitwise inclusive-or: Arithmetic. (line 158)
42600 * bitwise logical-and: Arithmetic. (line 153)
42601 * BLKmode: Machine Modes. (line 183)
42602 * BLKmode, and function return values: Calls. (line 23)
42603 * block statement iterators <1>: Maintaining the CFG.
42605 * block statement iterators: Basic Blocks. (line 68)
42606 * BLOCK_FOR_INSN, bb_for_stmt: Maintaining the CFG.
42608 * BLOCK_REG_PADDING: Register Arguments. (line 229)
42609 * blockage instruction pattern: Standard Names. (line 1376)
42610 * Blocks: Blocks. (line 6)
42611 * bool: Misc. (line 876)
42612 * BOOL_TYPE_SIZE: Type Layout. (line 44)
42613 * BOOLEAN_TYPE: Types. (line 6)
42614 * branch prediction: Profile information.
42616 * BRANCH_COST: Costs. (line 52)
42617 * break_out_memory_refs: Addressing Modes. (line 131)
42618 * BREAK_STMT: Statements for C++. (line 6)
42619 * bsi_commit_edge_inserts: Maintaining the CFG.
42621 * bsi_end_p: Maintaining the CFG.
42623 * bsi_insert_after: Maintaining the CFG.
42625 * bsi_insert_before: Maintaining the CFG.
42627 * bsi_insert_on_edge: Maintaining the CFG.
42629 * bsi_last: Maintaining the CFG.
42631 * bsi_next: Maintaining the CFG.
42633 * bsi_prev: Maintaining the CFG.
42635 * bsi_remove: Maintaining the CFG.
42637 * bsi_start: Maintaining the CFG.
42639 * BSS_SECTION_ASM_OP: Sections. (line 68)
42640 * bswap: Arithmetic. (line 236)
42641 * btruncM2 instruction pattern: Standard Names. (line 540)
42642 * build0: Macros and Functions.
42644 * build1: Macros and Functions.
42646 * build2: Macros and Functions.
42648 * build3: Macros and Functions.
42650 * build4: Macros and Functions.
42652 * build5: Macros and Functions.
42654 * build6: Macros and Functions.
42656 * builtin_longjmp instruction pattern: Standard Names. (line 1279)
42657 * builtin_setjmp_receiver instruction pattern: Standard Names.
42659 * builtin_setjmp_setup instruction pattern: Standard Names. (line 1258)
42660 * byte_mode: Machine Modes. (line 336)
42661 * BYTES_BIG_ENDIAN: Storage Layout. (line 24)
42662 * BYTES_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 221)
42663 * C statements for assembler output: Output Statement. (line 6)
42664 * C99 math functions, implicit usage: Library Calls. (line 76)
42665 * C_COMMON_OVERRIDE_OPTIONS: Run-time Target. (line 128)
42666 * c_register_pragma: Misc. (line 404)
42667 * c_register_pragma_with_expansion: Misc. (line 406)
42668 * call <1>: Side Effects. (line 86)
42669 * call: Flags. (line 239)
42670 * call instruction pattern: Standard Names. (line 933)
42671 * call usage: Calls. (line 10)
42672 * call, in call_insn: Flags. (line 33)
42673 * call, in mem: Flags. (line 99)
42674 * call-clobbered register: Register Basics. (line 35)
42675 * call-saved register: Register Basics. (line 35)
42676 * call-used register: Register Basics. (line 35)
42677 * CALL_EXPR: Unary and Binary Expressions.
42679 * call_insn: Insns. (line 95)
42680 * call_insn and /c: Flags. (line 33)
42681 * call_insn and /f: Flags. (line 125)
42682 * call_insn and /i: Flags. (line 24)
42683 * call_insn and /j: Flags. (line 179)
42684 * call_insn and /s: Flags. (line 49)
42685 * call_insn and /u: Flags. (line 19)
42686 * call_insn and /u or /i: Flags. (line 29)
42687 * call_insn and /v: Flags. (line 44)
42688 * CALL_INSN_FUNCTION_USAGE: Insns. (line 101)
42689 * call_pop instruction pattern: Standard Names. (line 961)
42690 * CALL_POPS_ARGS: Stack Arguments. (line 130)
42691 * CALL_REALLY_USED_REGISTERS: Register Basics. (line 46)
42692 * CALL_USED_REGISTERS: Register Basics. (line 35)
42693 * call_used_regs: Register Basics. (line 59)
42694 * call_value instruction pattern: Standard Names. (line 953)
42695 * call_value_pop instruction pattern: Standard Names. (line 961)
42696 * CALLER_SAVE_PROFITABLE: Caller Saves. (line 11)
42697 * calling conventions: Stack and Calling. (line 6)
42698 * calling functions in RTL: Calls. (line 6)
42699 * can_create_pseudo_p: Standard Names. (line 75)
42700 * CAN_DEBUG_WITHOUT_FP: Run-time Target. (line 160)
42701 * can_fallthru: Basic Blocks. (line 57)
42702 * canadian: Configure Terms. (line 6)
42703 * CANNOT_CHANGE_MODE_CLASS: Register Classes. (line 496)
42704 * CANNOT_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory.
42706 * canonicalization of instructions: Insn Canonicalizations.
42708 * CANONICALIZE_COMPARISON: MODE_CC Condition Codes.
42710 * canonicalize_funcptr_for_compare instruction pattern: Standard Names.
42712 * CASE_USE_BIT_TESTS: Misc. (line 54)
42713 * CASE_VECTOR_MODE: Misc. (line 27)
42714 * CASE_VECTOR_PC_RELATIVE: Misc. (line 40)
42715 * CASE_VECTOR_SHORTEN_MODE: Misc. (line 31)
42716 * casesi instruction pattern: Standard Names. (line 1041)
42717 * cbranchMODE4 instruction pattern: Standard Names. (line 922)
42718 * cc0 <1>: CC0 Condition Codes.
42720 * cc0: Regs and Memory. (line 307)
42721 * cc0, RTL sharing: Sharing. (line 27)
42722 * cc0_rtx: Regs and Memory. (line 333)
42723 * CC1_SPEC: Driver. (line 118)
42724 * CC1PLUS_SPEC: Driver. (line 126)
42725 * cc_status: CC0 Condition Codes.
42727 * CC_STATUS_MDEP: CC0 Condition Codes.
42729 * CC_STATUS_MDEP_INIT: CC0 Condition Codes.
42731 * CCmode <1>: MODE_CC Condition Codes.
42733 * CCmode: Machine Modes. (line 176)
42734 * CDImode: Machine Modes. (line 202)
42735 * CEIL_DIV_EXPR: Unary and Binary Expressions.
42737 * CEIL_MOD_EXPR: Unary and Binary Expressions.
42739 * ceilM2 instruction pattern: Standard Names. (line 556)
42740 * CFA_FRAME_BASE_OFFSET: Frame Layout. (line 226)
42741 * CFG, Control Flow Graph: Control Flow. (line 6)
42742 * cfghooks.h: Maintaining the CFG.
42744 * cgraph_finalize_function: Parsing pass. (line 52)
42745 * chain_circular: GTY Options. (line 196)
42746 * chain_next: GTY Options. (line 196)
42747 * chain_prev: GTY Options. (line 196)
42748 * change_address: Standard Names. (line 47)
42749 * char: GIMPLE_ASM. (line 53)
42750 * CHAR_TYPE_SIZE: Type Layout. (line 39)
42751 * check_stack instruction pattern: Standard Names. (line 1204)
42752 * CHImode: Machine Modes. (line 202)
42753 * class definitions, register: Register Classes. (line 6)
42754 * class preference constraints: Class Preferences. (line 6)
42755 * class, scope: Classes. (line 6)
42756 * CLASS_LIKELY_SPILLED_P: Register Classes. (line 467)
42757 * CLASS_MAX_NREGS: Register Classes. (line 484)
42758 * CLASS_TYPE_P: Types for C++. (line 65)
42759 * classes of RTX codes: RTL Classes. (line 6)
42760 * CLASSTYPE_DECLARED_CLASS: Classes. (line 6)
42761 * CLASSTYPE_HAS_MUTABLE: Classes. (line 85)
42762 * CLASSTYPE_NON_POD_P: Classes. (line 90)
42763 * CLEANUP_DECL: Statements for C++. (line 6)
42764 * CLEANUP_EXPR: Statements for C++. (line 6)
42765 * CLEANUP_POINT_EXPR: Unary and Binary Expressions.
42767 * CLEANUP_STMT: Statements for C++. (line 6)
42768 * Cleanups: Cleanups. (line 6)
42769 * CLEAR_BY_PIECES_P: Costs. (line 136)
42770 * clear_cache instruction pattern: Standard Names. (line 1520)
42771 * CLEAR_INSN_CACHE: Trampolines. (line 99)
42772 * CLEAR_RATIO: Costs. (line 124)
42773 * clobber: Side Effects. (line 100)
42774 * clz: Arithmetic. (line 212)
42775 * CLZ_DEFINED_VALUE_AT_ZERO: Misc. (line 319)
42776 * clzM2 instruction pattern: Standard Names. (line 621)
42777 * cmpmemM instruction pattern: Standard Names. (line 751)
42778 * cmpstrM instruction pattern: Standard Names. (line 732)
42779 * cmpstrnM instruction pattern: Standard Names. (line 720)
42780 * code generation RTL sequences: Expander Definitions.
42782 * code iterators in .md files: Code Iterators. (line 6)
42783 * code_label: Insns. (line 119)
42784 * code_label and /i: Flags. (line 59)
42785 * code_label and /v: Flags. (line 44)
42786 * CODE_LABEL_NUMBER: Insns. (line 119)
42787 * codes, RTL expression: RTL Objects. (line 47)
42788 * COImode: Machine Modes. (line 202)
42789 * COLLECT2_HOST_INITIALIZATION: Host Misc. (line 32)
42790 * COLLECT_EXPORT_LIST: Misc. (line 783)
42791 * COLLECT_SHARED_FINI_FUNC: Macros for Initialization.
42793 * COLLECT_SHARED_INIT_FUNC: Macros for Initialization.
42795 * commit_edge_insertions: Maintaining the CFG.
42797 * compare: Arithmetic. (line 43)
42798 * compare, canonicalization of: Insn Canonicalizations.
42800 * comparison_operator: Machine-Independent Predicates.
42802 * compiler passes and files: Passes. (line 6)
42803 * complement, bitwise: Arithmetic. (line 149)
42804 * COMPLEX_CST: Constant expressions.
42806 * COMPLEX_EXPR: Unary and Binary Expressions.
42808 * COMPLEX_TYPE: Types. (line 6)
42809 * COMPONENT_REF: Storage References. (line 6)
42810 * Compound Expressions: Compound Expressions.
42812 * Compound Lvalues: Compound Lvalues. (line 6)
42813 * COMPOUND_EXPR: Unary and Binary Expressions.
42815 * COMPOUND_LITERAL_EXPR: Unary and Binary Expressions.
42817 * COMPOUND_LITERAL_EXPR_DECL: Unary and Binary Expressions.
42819 * COMPOUND_LITERAL_EXPR_DECL_EXPR: Unary and Binary Expressions.
42821 * computed jump: Edges. (line 128)
42822 * computing the length of an insn: Insn Lengths. (line 6)
42823 * concat: Regs and Memory. (line 385)
42824 * concatn: Regs and Memory. (line 391)
42825 * cond: Comparisons. (line 90)
42826 * cond and attributes: Expressions. (line 37)
42827 * cond_exec: Side Effects. (line 248)
42828 * COND_EXPR: Unary and Binary Expressions.
42830 * condition code register: Regs and Memory. (line 307)
42831 * condition code status: Condition Code. (line 6)
42832 * condition codes: Comparisons. (line 20)
42833 * conditional execution <1>: Cond. Exec. Macros. (line 6)
42834 * conditional execution: Conditional Execution.
42836 * Conditional Expressions: Conditional Expressions.
42838 * CONDITIONAL_REGISTER_USAGE: Register Basics. (line 60)
42839 * conditions, in patterns: Patterns. (line 43)
42840 * configuration file <1>: Host Misc. (line 6)
42841 * configuration file: Filesystem. (line 6)
42842 * configure terms: Configure Terms. (line 6)
42843 * CONJ_EXPR: Unary and Binary Expressions.
42845 * const: Constants. (line 99)
42846 * CONST0_RTX: Constants. (line 119)
42847 * const0_rtx: Constants. (line 16)
42848 * CONST1_RTX: Constants. (line 119)
42849 * const1_rtx: Constants. (line 16)
42850 * CONST2_RTX: Constants. (line 119)
42851 * const2_rtx: Constants. (line 16)
42852 * CONST_DECL: Declarations. (line 6)
42853 * const_double: Constants. (line 32)
42854 * const_double, RTL sharing: Sharing. (line 29)
42855 * CONST_DOUBLE_LOW: Constants. (line 39)
42856 * CONST_DOUBLE_OK_FOR_CONSTRAINT_P: Old Constraints. (line 69)
42857 * CONST_DOUBLE_OK_FOR_LETTER_P: Old Constraints. (line 54)
42858 * const_double_operand: Machine-Independent Predicates.
42860 * const_fixed: Constants. (line 52)
42861 * const_int: Constants. (line 8)
42862 * const_int and attribute tests: Expressions. (line 47)
42863 * const_int and attributes: Expressions. (line 10)
42864 * const_int, RTL sharing: Sharing. (line 23)
42865 * const_int_operand: Machine-Independent Predicates.
42867 * CONST_OK_FOR_CONSTRAINT_P: Old Constraints. (line 49)
42868 * CONST_OK_FOR_LETTER_P: Old Constraints. (line 40)
42869 * const_string: Constants. (line 71)
42870 * const_string and attributes: Expressions. (line 20)
42871 * const_true_rtx: Constants. (line 26)
42872 * const_vector: Constants. (line 59)
42873 * const_vector, RTL sharing: Sharing. (line 32)
42874 * constant attributes: Constant Attributes.
42876 * constant definitions: Constant Definitions.
42878 * CONSTANT_ADDRESS_P: Addressing Modes. (line 29)
42879 * CONSTANT_ALIGNMENT: Storage Layout. (line 242)
42880 * CONSTANT_P: Addressing Modes. (line 36)
42881 * CONSTANT_POOL_ADDRESS_P: Flags. (line 10)
42882 * CONSTANT_POOL_BEFORE_FUNCTION: Data Output. (line 64)
42883 * constants in constraints: Simple Constraints. (line 60)
42884 * constm1_rtx: Constants. (line 16)
42885 * constraint modifier characters: Modifiers. (line 6)
42886 * constraint, matching: Simple Constraints. (line 132)
42887 * CONSTRAINT_LEN: Old Constraints. (line 12)
42888 * constraint_num: C Constraint Interface.
42890 * constraint_satisfied_p: C Constraint Interface.
42892 * constraints: Constraints. (line 6)
42893 * constraints, defining: Define Constraints. (line 6)
42894 * constraints, defining, obsolete method: Old Constraints. (line 6)
42895 * constraints, machine specific: Machine Constraints.
42897 * constraints, testing: C Constraint Interface.
42899 * CONSTRUCTOR: Unary and Binary Expressions.
42901 * constructors, automatic calls: Collect2. (line 15)
42902 * constructors, output of: Initialization. (line 6)
42903 * container: Containers. (line 6)
42904 * CONTINUE_STMT: Statements for C++. (line 6)
42905 * contributors: Contributors. (line 6)
42906 * controlling register usage: Register Basics. (line 76)
42907 * controlling the compilation driver: Driver. (line 6)
42908 * conventions, run-time: Interface. (line 6)
42909 * conversions: Conversions. (line 6)
42910 * CONVERT_EXPR: Unary and Binary Expressions.
42912 * copy_rtx: Addressing Modes. (line 184)
42913 * copy_rtx_if_shared: Sharing. (line 64)
42914 * copysignM3 instruction pattern: Standard Names. (line 602)
42915 * cosM2 instruction pattern: Standard Names. (line 481)
42916 * costs of instructions: Costs. (line 6)
42917 * CP_INTEGRAL_TYPE: Types for C++. (line 57)
42918 * cp_namespace_decls: Namespaces. (line 49)
42919 * CP_TYPE_CONST_NON_VOLATILE_P: Types for C++. (line 33)
42920 * CP_TYPE_CONST_P: Types for C++. (line 24)
42921 * CP_TYPE_QUALS: Types for C++. (line 6)
42922 * CP_TYPE_RESTRICT_P: Types for C++. (line 30)
42923 * CP_TYPE_VOLATILE_P: Types for C++. (line 27)
42924 * CPLUSPLUS_CPP_SPEC: Driver. (line 113)
42925 * CPP_SPEC: Driver. (line 106)
42926 * CQImode: Machine Modes. (line 202)
42927 * cross compilation and floating point: Floating Point. (line 6)
42928 * CRT_CALL_STATIC_FUNCTION: Sections. (line 122)
42929 * CRTSTUFF_T_CFLAGS: Target Fragment. (line 35)
42930 * CRTSTUFF_T_CFLAGS_S: Target Fragment. (line 39)
42931 * CSImode: Machine Modes. (line 202)
42932 * cstoreMODE4 instruction pattern: Standard Names. (line 893)
42933 * CTImode: Machine Modes. (line 202)
42934 * ctrapMM4 instruction pattern: Standard Names. (line 1345)
42935 * ctz: Arithmetic. (line 220)
42936 * CTZ_DEFINED_VALUE_AT_ZERO: Misc. (line 320)
42937 * ctzM2 instruction pattern: Standard Names. (line 630)
42938 * CUMULATIVE_ARGS: Register Arguments. (line 127)
42939 * current_function_epilogue_delay_list: Function Entry. (line 181)
42940 * current_function_is_leaf: Leaf Functions. (line 51)
42941 * current_function_outgoing_args_size: Stack Arguments. (line 45)
42942 * current_function_pops_args: Function Entry. (line 106)
42943 * current_function_pretend_args_size: Function Entry. (line 112)
42944 * current_function_uses_only_leaf_regs: Leaf Functions. (line 51)
42945 * current_insn_predicate: Conditional Execution.
42947 * DAmode: Machine Modes. (line 152)
42948 * data bypass: Processor pipeline description.
42950 * data dependence delays: Processor pipeline description.
42952 * Data Dependency Analysis: Dependency analysis.
42954 * data structures: Per-Function Data. (line 6)
42955 * DATA_ALIGNMENT: Storage Layout. (line 229)
42956 * DATA_SECTION_ASM_OP: Sections. (line 53)
42957 * DBR_OUTPUT_SEQEND: Instruction Output. (line 120)
42958 * dbr_sequence_length: Instruction Output. (line 119)
42959 * DBX_BLOCKS_FUNCTION_RELATIVE: DBX Options. (line 103)
42960 * DBX_CONTIN_CHAR: DBX Options. (line 66)
42961 * DBX_CONTIN_LENGTH: DBX Options. (line 56)
42962 * DBX_DEBUGGING_INFO: DBX Options. (line 9)
42963 * DBX_FUNCTION_FIRST: DBX Options. (line 97)
42964 * DBX_LINES_FUNCTION_RELATIVE: DBX Options. (line 109)
42965 * DBX_NO_XREFS: DBX Options. (line 50)
42966 * DBX_OUTPUT_LBRAC: DBX Hooks. (line 9)
42967 * DBX_OUTPUT_MAIN_SOURCE_FILE_END: File Names and DBX. (line 34)
42968 * DBX_OUTPUT_MAIN_SOURCE_FILENAME: File Names and DBX. (line 9)
42969 * DBX_OUTPUT_NFUN: DBX Hooks. (line 18)
42970 * DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX.
42972 * DBX_OUTPUT_RBRAC: DBX Hooks. (line 15)
42973 * DBX_OUTPUT_SOURCE_LINE: DBX Hooks. (line 22)
42974 * DBX_REGISTER_NUMBER: All Debuggers. (line 9)
42975 * DBX_REGPARM_STABS_CODE: DBX Options. (line 87)
42976 * DBX_REGPARM_STABS_LETTER: DBX Options. (line 92)
42977 * DBX_STATIC_CONST_VAR_CODE: DBX Options. (line 82)
42978 * DBX_STATIC_STAB_DATA_SECTION: DBX Options. (line 73)
42979 * DBX_TYPE_DECL_STABS_CODE: DBX Options. (line 78)
42980 * DBX_USE_BINCL: DBX Options. (line 115)
42981 * DCmode: Machine Modes. (line 197)
42982 * DDmode: Machine Modes. (line 90)
42983 * De Morgan's law: Insn Canonicalizations.
42985 * dead_or_set_p: define_peephole. (line 65)
42986 * debug_expr: Debug Information. (line 22)
42987 * DEBUG_EXPR_DECL: Declarations. (line 6)
42988 * debug_insn: Insns. (line 239)
42989 * DEBUG_SYMS_TEXT: DBX Options. (line 25)
42990 * DEBUGGER_ARG_OFFSET: All Debuggers. (line 37)
42991 * DEBUGGER_AUTO_OFFSET: All Debuggers. (line 28)
42992 * decimal float library: Decimal float library routines.
42994 * DECL_ALIGN: Declarations. (line 6)
42995 * DECL_ANTICIPATED: Functions for C++. (line 42)
42996 * DECL_ARGUMENTS: Function Basics. (line 36)
42997 * DECL_ARRAY_DELETE_OPERATOR_P: Functions for C++. (line 158)
42998 * DECL_ARTIFICIAL <1>: Function Properties.
43000 * DECL_ARTIFICIAL <2>: Function Basics. (line 6)
43001 * DECL_ARTIFICIAL: Working with declarations.
43003 * DECL_ASSEMBLER_NAME: Function Basics. (line 6)
43004 * DECL_ATTRIBUTES: Attributes. (line 22)
43005 * DECL_BASE_CONSTRUCTOR_P: Functions for C++. (line 88)
43006 * DECL_COMPLETE_CONSTRUCTOR_P: Functions for C++. (line 84)
43007 * DECL_COMPLETE_DESTRUCTOR_P: Functions for C++. (line 98)
43008 * DECL_CONST_MEMFUNC_P: Functions for C++. (line 71)
43009 * DECL_CONSTRUCTOR_P: Functions for C++. (line 77)
43010 * DECL_CONTEXT: Namespaces. (line 31)
43011 * DECL_CONV_FN_P: Functions for C++. (line 105)
43012 * DECL_COPY_CONSTRUCTOR_P: Functions for C++. (line 92)
43013 * DECL_DESTRUCTOR_P: Functions for C++. (line 95)
43014 * DECL_EXTERN_C_FUNCTION_P: Functions for C++. (line 46)
43015 * DECL_EXTERNAL <1>: Function Properties.
43017 * DECL_EXTERNAL: Declarations. (line 6)
43018 * DECL_FUNCTION_MEMBER_P: Functions for C++. (line 61)
43019 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties.
43021 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION: Function Basics. (line 6)
43022 * DECL_FUNCTION_SPECIFIC_TARGET <1>: Function Properties.
43024 * DECL_FUNCTION_SPECIFIC_TARGET: Function Basics. (line 6)
43025 * DECL_GLOBAL_CTOR_P: Functions for C++. (line 108)
43026 * DECL_GLOBAL_DTOR_P: Functions for C++. (line 112)
43027 * DECL_INITIAL <1>: Function Basics. (line 51)
43028 * DECL_INITIAL: Declarations. (line 6)
43029 * DECL_LINKONCE_P: Functions for C++. (line 50)
43030 * DECL_LOCAL_FUNCTION_P: Functions for C++. (line 38)
43031 * DECL_MAIN_P: Functions for C++. (line 34)
43032 * DECL_NAME <1>: Namespaces. (line 20)
43033 * DECL_NAME <2>: Function Basics. (line 6)
43034 * DECL_NAME: Working with declarations.
43036 * DECL_NAMESPACE_ALIAS: Namespaces. (line 35)
43037 * DECL_NAMESPACE_STD_P: Namespaces. (line 45)
43038 * DECL_NON_THUNK_FUNCTION_P: Functions for C++. (line 138)
43039 * DECL_NONCONVERTING_P: Functions for C++. (line 80)
43040 * DECL_NONSTATIC_MEMBER_FUNCTION_P: Functions for C++. (line 68)
43041 * DECL_OVERLOADED_OPERATOR_P: Functions for C++. (line 102)
43042 * DECL_PURE_P: Function Properties.
43044 * DECL_RESULT: Function Basics. (line 41)
43045 * DECL_SAVED_TREE: Function Basics. (line 44)
43046 * DECL_SIZE: Declarations. (line 6)
43047 * DECL_STATIC_FUNCTION_P: Functions for C++. (line 65)
43048 * DECL_STMT: Statements for C++. (line 6)
43049 * DECL_STMT_DECL: Statements for C++. (line 6)
43050 * DECL_THUNK_P: Functions for C++. (line 116)
43051 * DECL_VIRTUAL_P: Function Properties.
43053 * DECL_VOLATILE_MEMFUNC_P: Functions for C++. (line 74)
43054 * declaration: Declarations. (line 6)
43055 * declarations, RTL: RTL Declarations. (line 6)
43056 * DECLARE_LIBRARY_RENAMES: Library Calls. (line 9)
43057 * decrement_and_branch_until_zero instruction pattern: Standard Names.
43059 * def_optype_d: Manipulating GIMPLE statements.
43061 * default: GTY Options. (line 82)
43062 * default_file_start: File Framework. (line 8)
43063 * DEFAULT_GDB_EXTENSIONS: DBX Options. (line 18)
43064 * DEFAULT_PCC_STRUCT_RETURN: Aggregate Return. (line 35)
43065 * DEFAULT_SIGNED_CHAR: Type Layout. (line 154)
43066 * define_address_constraint: Define Constraints. (line 107)
43067 * define_asm_attributes: Tagging Insns. (line 73)
43068 * define_attr: Defining Attributes.
43070 * define_automaton: Processor pipeline description.
43072 * define_bypass: Processor pipeline description.
43074 * define_code_attr: Code Iterators. (line 6)
43075 * define_code_iterator: Code Iterators. (line 6)
43076 * define_cond_exec: Conditional Execution.
43078 * define_constants: Constant Definitions.
43080 * define_constraint: Define Constraints. (line 48)
43081 * define_cpu_unit: Processor pipeline description.
43083 * define_delay: Delay Slots. (line 25)
43084 * define_expand: Expander Definitions.
43086 * define_insn: Patterns. (line 6)
43087 * define_insn example: Example. (line 6)
43088 * define_insn_and_split: Insn Splitting. (line 170)
43089 * define_insn_reservation: Processor pipeline description.
43091 * define_memory_constraint: Define Constraints. (line 88)
43092 * define_mode_attr: Substitutions. (line 6)
43093 * define_mode_iterator: Defining Mode Iterators.
43095 * define_peephole: define_peephole. (line 6)
43096 * define_peephole2: define_peephole2. (line 6)
43097 * define_predicate: Defining Predicates.
43099 * define_query_cpu_unit: Processor pipeline description.
43101 * define_register_constraint: Define Constraints. (line 28)
43102 * define_reservation: Processor pipeline description.
43104 * define_special_predicate: Defining Predicates.
43106 * define_split: Insn Splitting. (line 32)
43107 * defining attributes and their values: Defining Attributes.
43109 * defining constraints: Define Constraints. (line 6)
43110 * defining constraints, obsolete method: Old Constraints. (line 6)
43111 * defining jump instruction patterns: Jump Patterns. (line 6)
43112 * defining looping instruction patterns: Looping Patterns. (line 6)
43113 * defining peephole optimizers: Peephole Definitions.
43115 * defining predicates: Defining Predicates.
43117 * defining RTL sequences for code generation: Expander Definitions.
43119 * delay slots, defining: Delay Slots. (line 6)
43120 * DELAY_SLOTS_FOR_EPILOGUE: Function Entry. (line 163)
43121 * deletable: GTY Options. (line 150)
43122 * DELETE_IF_ORDINARY: Filesystem. (line 79)
43123 * Dependent Patterns: Dependent Patterns. (line 6)
43124 * desc: GTY Options. (line 82)
43125 * destructors, output of: Initialization. (line 6)
43126 * deterministic finite state automaton: Processor pipeline description.
43128 * DF_SIZE: Type Layout. (line 130)
43129 * DFmode: Machine Modes. (line 73)
43130 * digits in constraint: Simple Constraints. (line 120)
43131 * DImode: Machine Modes. (line 45)
43132 * DIR_SEPARATOR: Filesystem. (line 18)
43133 * DIR_SEPARATOR_2: Filesystem. (line 19)
43134 * directory options .md: Including Patterns. (line 44)
43135 * disabling certain registers: Register Basics. (line 76)
43136 * dispatch table: Dispatch Tables. (line 8)
43137 * div: Arithmetic. (line 111)
43138 * div and attributes: Expressions. (line 64)
43139 * division: Arithmetic. (line 111)
43140 * divM3 instruction pattern: Standard Names. (line 222)
43141 * divmodM4 instruction pattern: Standard Names. (line 411)
43142 * DO_BODY: Statements for C++. (line 6)
43143 * DO_COND: Statements for C++. (line 6)
43144 * DO_STMT: Statements for C++. (line 6)
43145 * DOLLARS_IN_IDENTIFIERS: Misc. (line 491)
43146 * doloop_begin instruction pattern: Standard Names. (line 1110)
43147 * doloop_end instruction pattern: Standard Names. (line 1089)
43148 * DONE: Expander Definitions.
43150 * DONT_USE_BUILTIN_SETJMP: Exception Region Output.
43152 * DOUBLE_TYPE_SIZE: Type Layout. (line 53)
43153 * DQmode: Machine Modes. (line 115)
43154 * driver: Driver. (line 6)
43155 * DRIVER_SELF_SPECS: Driver. (line 71)
43156 * DUMPFILE_FORMAT: Filesystem. (line 67)
43157 * DWARF2_ASM_LINE_DEBUG_INFO: SDB and DWARF. (line 36)
43158 * DWARF2_DEBUGGING_INFO: SDB and DWARF. (line 13)
43159 * DWARF2_FRAME_INFO: SDB and DWARF. (line 30)
43160 * DWARF2_FRAME_REG_OUT: Frame Registers. (line 136)
43161 * DWARF2_UNWIND_INFO: Exception Region Output.
43163 * DWARF_ALT_FRAME_RETURN_COLUMN: Frame Layout. (line 152)
43164 * DWARF_CIE_DATA_ALIGNMENT: Exception Region Output.
43166 * DWARF_FRAME_REGISTERS: Frame Registers. (line 96)
43167 * DWARF_FRAME_REGNUM: Frame Registers. (line 128)
43168 * DWARF_REG_TO_UNWIND_COLUMN: Frame Registers. (line 120)
43169 * DWARF_ZERO_REG: Frame Layout. (line 163)
43170 * DYNAMIC_CHAIN_ADDRESS: Frame Layout. (line 92)
43171 * E in constraint: Simple Constraints. (line 79)
43172 * earlyclobber operand: Modifiers. (line 25)
43173 * edge: Edges. (line 6)
43174 * edge in the flow graph: Edges. (line 6)
43175 * edge iterators: Edges. (line 15)
43176 * edge splitting: Maintaining the CFG.
43178 * EDGE_ABNORMAL: Edges. (line 128)
43179 * EDGE_ABNORMAL, EDGE_ABNORMAL_CALL: Edges. (line 171)
43180 * EDGE_ABNORMAL, EDGE_EH: Edges. (line 96)
43181 * EDGE_ABNORMAL, EDGE_SIBCALL: Edges. (line 122)
43182 * EDGE_FALLTHRU, force_nonfallthru: Edges. (line 86)
43183 * EDOM, implicit usage: Library Calls. (line 58)
43184 * EH_FRAME_IN_DATA_SECTION: Exception Region Output.
43186 * EH_FRAME_SECTION_NAME: Exception Region Output.
43188 * eh_return instruction pattern: Standard Names. (line 1285)
43189 * EH_RETURN_DATA_REGNO: Exception Handling. (line 7)
43190 * EH_RETURN_HANDLER_RTX: Exception Handling. (line 39)
43191 * EH_RETURN_STACKADJ_RTX: Exception Handling. (line 22)
43192 * EH_TABLES_CAN_BE_READ_ONLY: Exception Region Output.
43194 * EH_USES: Function Entry. (line 158)
43195 * ei_edge: Edges. (line 43)
43196 * ei_end_p: Edges. (line 27)
43197 * ei_last: Edges. (line 23)
43198 * ei_next: Edges. (line 35)
43199 * ei_one_before_end_p: Edges. (line 31)
43200 * ei_prev: Edges. (line 39)
43201 * ei_safe_safe: Edges. (line 47)
43202 * ei_start: Edges. (line 19)
43203 * ELIGIBLE_FOR_EPILOGUE_DELAY: Function Entry. (line 169)
43204 * ELIMINABLE_REGS: Elimination. (line 47)
43205 * ELSE_CLAUSE: Statements for C++. (line 6)
43206 * Embedded C: Fixed-point fractional library routines.
43208 * EMIT_MODE_SET: Mode Switching. (line 74)
43209 * Empty Statements: Empty Statements. (line 6)
43210 * EMPTY_CLASS_EXPR: Statements for C++. (line 6)
43211 * EMPTY_FIELD_BOUNDARY: Storage Layout. (line 296)
43212 * Emulated TLS: Emulated TLS. (line 6)
43213 * ENABLE_EXECUTE_STACK: Trampolines. (line 109)
43214 * enabled: Disable Insn Alternatives.
43216 * ENDFILE_SPEC: Driver. (line 218)
43217 * endianness: Portability. (line 21)
43218 * ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR: Basic Blocks. (line 28)
43219 * enum machine_mode: Machine Modes. (line 6)
43220 * enum reg_class: Register Classes. (line 65)
43221 * ENUMERAL_TYPE: Types. (line 6)
43222 * epilogue: Function Entry. (line 6)
43223 * epilogue instruction pattern: Standard Names. (line 1317)
43224 * EPILOGUE_USES: Function Entry. (line 152)
43225 * eq: Comparisons. (line 52)
43226 * eq and attributes: Expressions. (line 64)
43227 * eq_attr: Expressions. (line 85)
43228 * EQ_EXPR: Unary and Binary Expressions.
43230 * equal: Comparisons. (line 52)
43231 * errno, implicit usage: Library Calls. (line 70)
43232 * EXACT_DIV_EXPR: Unary and Binary Expressions.
43234 * examining SSA_NAMEs: SSA. (line 218)
43235 * exception handling <1>: Exception Handling. (line 6)
43236 * exception handling: Edges. (line 96)
43237 * exception_receiver instruction pattern: Standard Names. (line 1249)
43238 * exclamation point: Multi-Alternative. (line 47)
43239 * exclusion_set: Processor pipeline description.
43241 * exclusive-or, bitwise: Arithmetic. (line 163)
43242 * EXIT_EXPR: Unary and Binary Expressions.
43244 * EXIT_IGNORE_STACK: Function Entry. (line 140)
43245 * expander definitions: Expander Definitions.
43247 * expM2 instruction pattern: Standard Names. (line 497)
43248 * EXPR_FILENAME: Working with declarations.
43250 * EXPR_LINENO: Working with declarations.
43252 * expr_list: Insns. (line 545)
43253 * EXPR_STMT: Statements for C++. (line 6)
43254 * EXPR_STMT_EXPR: Statements for C++. (line 6)
43255 * expression: Expression trees. (line 6)
43256 * expression codes: RTL Objects. (line 47)
43257 * extendMN2 instruction pattern: Standard Names. (line 808)
43258 * extensible constraints: Simple Constraints. (line 163)
43259 * EXTRA_ADDRESS_CONSTRAINT: Old Constraints. (line 123)
43260 * EXTRA_CONSTRAINT: Old Constraints. (line 74)
43261 * EXTRA_CONSTRAINT_STR: Old Constraints. (line 95)
43262 * EXTRA_MEMORY_CONSTRAINT: Old Constraints. (line 100)
43263 * EXTRA_SPECS: Driver. (line 245)
43264 * extv instruction pattern: Standard Names. (line 844)
43265 * extzv instruction pattern: Standard Names. (line 859)
43266 * F in constraint: Simple Constraints. (line 84)
43267 * FAIL: Expander Definitions.
43269 * fall-thru: Edges. (line 69)
43270 * FATAL_EXIT_CODE: Host Misc. (line 6)
43271 * FDL, GNU Free Documentation License: GNU Free Documentation License.
43273 * features, optional, in system conventions: Run-time Target.
43275 * ffs: Arithmetic. (line 206)
43276 * ffsM2 instruction pattern: Standard Names. (line 611)
43277 * FIELD_DECL: Declarations. (line 6)
43278 * file_end_indicate_exec_stack: File Framework. (line 41)
43279 * files and passes of the compiler: Passes. (line 6)
43280 * files, generated: Files. (line 6)
43281 * final_absence_set: Processor pipeline description.
43283 * FINAL_PRESCAN_INSN: Instruction Output. (line 46)
43284 * final_presence_set: Processor pipeline description.
43286 * final_scan_insn: Function Entry. (line 181)
43287 * final_sequence: Instruction Output. (line 130)
43288 * FIND_BASE_TERM: Addressing Modes. (line 115)
43289 * FINI_ARRAY_SECTION_ASM_OP: Sections. (line 115)
43290 * FINI_SECTION_ASM_OP: Sections. (line 100)
43291 * finite state automaton minimization: Processor pipeline description.
43293 * FIRST_PARM_OFFSET: Frame Layout. (line 67)
43294 * FIRST_PARM_OFFSET and virtual registers: Regs and Memory. (line 65)
43295 * FIRST_PSEUDO_REGISTER: Register Basics. (line 9)
43296 * FIRST_STACK_REG: Stack Registers. (line 27)
43297 * FIRST_VIRTUAL_REGISTER: Regs and Memory. (line 51)
43298 * fix: Conversions. (line 66)
43299 * FIX_TRUNC_EXPR: Unary and Binary Expressions.
43301 * fix_truncMN2 instruction pattern: Standard Names. (line 795)
43302 * fixed register: Register Basics. (line 15)
43303 * fixed-point fractional library: Fixed-point fractional library routines.
43305 * FIXED_CONVERT_EXPR: Unary and Binary Expressions.
43307 * FIXED_CST: Constant expressions.
43309 * FIXED_POINT_TYPE: Types. (line 6)
43310 * FIXED_REGISTERS: Register Basics. (line 15)
43311 * fixed_regs: Register Basics. (line 59)
43312 * fixMN2 instruction pattern: Standard Names. (line 775)
43313 * FIXUNS_TRUNC_LIKE_FIX_TRUNC: Misc. (line 100)
43314 * fixuns_truncMN2 instruction pattern: Standard Names. (line 799)
43315 * fixunsMN2 instruction pattern: Standard Names. (line 784)
43316 * flags in RTL expression: Flags. (line 6)
43317 * float: Conversions. (line 58)
43318 * FLOAT_EXPR: Unary and Binary Expressions.
43320 * float_extend: Conversions. (line 33)
43321 * FLOAT_LIB_COMPARE_RETURNS_BOOL: Library Calls. (line 25)
43322 * FLOAT_STORE_FLAG_VALUE: Misc. (line 301)
43323 * float_truncate: Conversions. (line 53)
43324 * FLOAT_TYPE_SIZE: Type Layout. (line 49)
43325 * FLOAT_WORDS_BIG_ENDIAN: Storage Layout. (line 43)
43326 * FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory.
43328 * floating point and cross compilation: Floating Point. (line 6)
43329 * Floating Point Emulation: Target Fragment. (line 15)
43330 * floating point emulation library, US Software GOFAST: Library Calls.
43332 * floatMN2 instruction pattern: Standard Names. (line 767)
43333 * floatunsMN2 instruction pattern: Standard Names. (line 771)
43334 * FLOOR_DIV_EXPR: Unary and Binary Expressions.
43336 * FLOOR_MOD_EXPR: Unary and Binary Expressions.
43338 * floorM2 instruction pattern: Standard Names. (line 532)
43339 * flow-insensitive alias analysis: Alias analysis. (line 6)
43340 * flow-sensitive alias analysis: Alias analysis. (line 6)
43341 * fmodM3 instruction pattern: Standard Names. (line 463)
43342 * FOR_BODY: Statements for C++. (line 6)
43343 * FOR_COND: Statements for C++. (line 6)
43344 * FOR_EXPR: Statements for C++. (line 6)
43345 * FOR_INIT_STMT: Statements for C++. (line 6)
43346 * FOR_STMT: Statements for C++. (line 6)
43347 * FORCE_CODE_SECTION_ALIGN: Sections. (line 146)
43348 * force_reg: Standard Names. (line 36)
43349 * fract_convert: Conversions. (line 82)
43350 * FRACT_TYPE_SIZE: Type Layout. (line 68)
43351 * fractional types: Fixed-point fractional library routines.
43353 * fractMN2 instruction pattern: Standard Names. (line 817)
43354 * fractunsMN2 instruction pattern: Standard Names. (line 832)
43355 * frame layout: Frame Layout. (line 6)
43356 * FRAME_ADDR_RTX: Frame Layout. (line 116)
43357 * FRAME_GROWS_DOWNWARD: Frame Layout. (line 31)
43358 * FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory.
43360 * FRAME_POINTER_CFA_OFFSET: Frame Layout. (line 212)
43361 * frame_pointer_needed: Function Entry. (line 34)
43362 * FRAME_POINTER_REGNUM: Frame Registers. (line 14)
43363 * FRAME_POINTER_REGNUM and virtual registers: Regs and Memory.
43365 * frame_pointer_rtx: Frame Registers. (line 90)
43366 * frame_related: Flags. (line 247)
43367 * frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags.
43369 * frame_related, in mem: Flags. (line 103)
43370 * frame_related, in reg: Flags. (line 112)
43371 * frame_related, in symbol_ref: Flags. (line 183)
43372 * frequency, count, BB_FREQ_BASE: Profile information.
43374 * ftruncM2 instruction pattern: Standard Names. (line 790)
43375 * function <1>: Functions for C++. (line 6)
43376 * function: Functions. (line 6)
43377 * function call conventions: Interface. (line 6)
43378 * function entry and exit: Function Entry. (line 6)
43379 * function entry point, alternate function entry point: Edges.
43381 * function properties: Function Properties.
43383 * function-call insns: Calls. (line 6)
43384 * FUNCTION_ARG: Register Arguments. (line 11)
43385 * FUNCTION_ARG_ADVANCE: Register Arguments. (line 186)
43386 * FUNCTION_ARG_BOUNDARY: Register Arguments. (line 239)
43387 * FUNCTION_ARG_OFFSET: Register Arguments. (line 197)
43388 * FUNCTION_ARG_PADDING: Register Arguments. (line 204)
43389 * FUNCTION_ARG_REGNO_P: Register Arguments. (line 244)
43390 * FUNCTION_BOUNDARY: Storage Layout. (line 171)
43391 * FUNCTION_DECL <1>: Functions for C++. (line 6)
43392 * FUNCTION_DECL: Functions. (line 6)
43393 * FUNCTION_INCOMING_ARG: Register Arguments. (line 68)
43394 * FUNCTION_MODE: Misc. (line 356)
43395 * FUNCTION_OUTGOING_VALUE: Scalar Return. (line 56)
43396 * FUNCTION_PROFILER: Profiling. (line 9)
43397 * FUNCTION_TYPE: Types. (line 6)
43398 * FUNCTION_VALUE: Scalar Return. (line 52)
43399 * FUNCTION_VALUE_REGNO_P: Scalar Return. (line 81)
43400 * functions, leaf: Leaf Functions. (line 6)
43401 * fundamental type: Types. (line 6)
43402 * g in constraint: Simple Constraints. (line 110)
43403 * G in constraint: Simple Constraints. (line 88)
43404 * garbage collector, invocation: Invoking the garbage collector.
43406 * GCC and portability: Portability. (line 6)
43407 * GCC_DRIVER_HOST_INITIALIZATION: Host Misc. (line 36)
43408 * gcov_type: Profile information.
43410 * ge: Comparisons. (line 72)
43411 * ge and attributes: Expressions. (line 64)
43412 * GE_EXPR: Unary and Binary Expressions.
43414 * GEN_ERRNO_RTX: Library Calls. (line 71)
43415 * gencodes: RTL passes. (line 18)
43416 * general_operand: Machine-Independent Predicates.
43418 * GENERAL_REGS: Register Classes. (line 23)
43419 * generated files: Files. (line 6)
43420 * generating assembler output: Output Statement. (line 6)
43421 * generating insns: RTL Template. (line 6)
43422 * GENERIC <1>: GENERIC. (line 6)
43423 * GENERIC <2>: Gimplification pass.
43425 * GENERIC: Parsing pass. (line 6)
43426 * generic predicates: Machine-Independent Predicates.
43428 * genflags: RTL passes. (line 18)
43429 * get_attr: Expressions. (line 80)
43430 * get_attr_length: Insn Lengths. (line 46)
43431 * GET_CLASS_NARROWEST_MODE: Machine Modes. (line 333)
43432 * GET_CODE: RTL Objects. (line 47)
43433 * get_frame_size: Elimination. (line 34)
43434 * get_insns: Insns. (line 34)
43435 * get_last_insn: Insns. (line 34)
43436 * GET_MODE: Machine Modes. (line 280)
43437 * GET_MODE_ALIGNMENT: Machine Modes. (line 320)
43438 * GET_MODE_BITSIZE: Machine Modes. (line 304)
43439 * GET_MODE_CLASS: Machine Modes. (line 294)
43440 * GET_MODE_FBIT: Machine Modes. (line 311)
43441 * GET_MODE_IBIT: Machine Modes. (line 307)
43442 * GET_MODE_MASK: Machine Modes. (line 315)
43443 * GET_MODE_NAME: Machine Modes. (line 291)
43444 * GET_MODE_NUNITS: Machine Modes. (line 329)
43445 * GET_MODE_SIZE: Machine Modes. (line 301)
43446 * GET_MODE_UNIT_SIZE: Machine Modes. (line 323)
43447 * GET_MODE_WIDER_MODE: Machine Modes. (line 297)
43448 * GET_RTX_CLASS: RTL Classes. (line 6)
43449 * GET_RTX_FORMAT: RTL Classes. (line 130)
43450 * GET_RTX_LENGTH: RTL Classes. (line 127)
43451 * geu: Comparisons. (line 72)
43452 * geu and attributes: Expressions. (line 64)
43453 * GGC: Type Information. (line 6)
43454 * ggc_collect: Invoking the garbage collector.
43456 * GIMPLE <1>: GIMPLE. (line 6)
43457 * GIMPLE <2>: Gimplification pass.
43459 * GIMPLE: Parsing pass. (line 14)
43460 * GIMPLE Exception Handling: GIMPLE Exception Handling.
43462 * GIMPLE instruction set: GIMPLE instruction set.
43464 * GIMPLE sequences: GIMPLE sequences. (line 6)
43465 * gimple_addresses_taken: Manipulating GIMPLE statements.
43467 * GIMPLE_ASM: GIMPLE_ASM. (line 6)
43468 * gimple_asm_clear_volatile: GIMPLE_ASM. (line 63)
43469 * gimple_asm_clobber_op: GIMPLE_ASM. (line 46)
43470 * gimple_asm_input_op: GIMPLE_ASM. (line 30)
43471 * gimple_asm_output_op: GIMPLE_ASM. (line 38)
43472 * gimple_asm_set_clobber_op: GIMPLE_ASM. (line 50)
43473 * gimple_asm_set_input_op: GIMPLE_ASM. (line 34)
43474 * gimple_asm_set_output_op: GIMPLE_ASM. (line 42)
43475 * gimple_asm_set_volatile: GIMPLE_ASM. (line 60)
43476 * gimple_asm_volatile_p: GIMPLE_ASM. (line 57)
43477 * GIMPLE_ASSIGN: GIMPLE_ASSIGN. (line 6)
43478 * gimple_assign_cast_p: GIMPLE_ASSIGN. (line 89)
43479 * gimple_assign_lhs: GIMPLE_ASSIGN. (line 51)
43480 * gimple_assign_rhs1: GIMPLE_ASSIGN. (line 57)
43481 * gimple_assign_rhs2: GIMPLE_ASSIGN. (line 64)
43482 * gimple_assign_set_lhs: GIMPLE_ASSIGN. (line 71)
43483 * gimple_assign_set_rhs1: GIMPLE_ASSIGN. (line 74)
43484 * gimple_assign_set_rhs2: GIMPLE_ASSIGN. (line 85)
43485 * gimple_bb: Manipulating GIMPLE statements.
43487 * GIMPLE_BIND: GIMPLE_BIND. (line 6)
43488 * gimple_bind_add_seq: GIMPLE_BIND. (line 36)
43489 * gimple_bind_add_stmt: GIMPLE_BIND. (line 32)
43490 * gimple_bind_append_vars: GIMPLE_BIND. (line 19)
43491 * gimple_bind_block: GIMPLE_BIND. (line 40)
43492 * gimple_bind_body: GIMPLE_BIND. (line 23)
43493 * gimple_bind_set_block: GIMPLE_BIND. (line 45)
43494 * gimple_bind_set_body: GIMPLE_BIND. (line 28)
43495 * gimple_bind_set_vars: GIMPLE_BIND. (line 15)
43496 * gimple_bind_vars: GIMPLE_BIND. (line 12)
43497 * gimple_block: Manipulating GIMPLE statements.
43499 * gimple_build_asm: GIMPLE_ASM. (line 8)
43500 * gimple_build_asm_vec: GIMPLE_ASM. (line 17)
43501 * gimple_build_assign: GIMPLE_ASSIGN. (line 7)
43502 * gimple_build_assign_with_ops: GIMPLE_ASSIGN. (line 30)
43503 * gimple_build_bind: GIMPLE_BIND. (line 8)
43504 * gimple_build_call: GIMPLE_CALL. (line 8)
43505 * gimple_build_call_from_tree: GIMPLE_CALL. (line 16)
43506 * gimple_build_call_vec: GIMPLE_CALL. (line 25)
43507 * gimple_build_catch: GIMPLE_CATCH. (line 8)
43508 * gimple_build_cond: GIMPLE_COND. (line 8)
43509 * gimple_build_cond_from_tree: GIMPLE_COND. (line 16)
43510 * gimple_build_debug_bind: GIMPLE_DEBUG. (line 8)
43511 * gimple_build_eh_filter: GIMPLE_EH_FILTER. (line 8)
43512 * gimple_build_goto: GIMPLE_LABEL. (line 18)
43513 * gimple_build_label: GIMPLE_LABEL. (line 7)
43514 * gimple_build_nop: GIMPLE_NOP. (line 7)
43515 * gimple_build_omp_atomic_load: GIMPLE_OMP_ATOMIC_LOAD.
43517 * gimple_build_omp_atomic_store: GIMPLE_OMP_ATOMIC_STORE.
43519 * gimple_build_omp_continue: GIMPLE_OMP_CONTINUE.
43521 * gimple_build_omp_critical: GIMPLE_OMP_CRITICAL.
43523 * gimple_build_omp_for: GIMPLE_OMP_FOR. (line 9)
43524 * gimple_build_omp_master: GIMPLE_OMP_MASTER. (line 7)
43525 * gimple_build_omp_ordered: GIMPLE_OMP_ORDERED. (line 7)
43526 * gimple_build_omp_parallel: GIMPLE_OMP_PARALLEL.
43528 * gimple_build_omp_return: GIMPLE_OMP_RETURN. (line 7)
43529 * gimple_build_omp_section: GIMPLE_OMP_SECTION. (line 7)
43530 * gimple_build_omp_sections: GIMPLE_OMP_SECTIONS.
43532 * gimple_build_omp_sections_switch: GIMPLE_OMP_SECTIONS.
43534 * gimple_build_omp_single: GIMPLE_OMP_SINGLE. (line 8)
43535 * gimple_build_resx: GIMPLE_RESX. (line 7)
43536 * gimple_build_return: GIMPLE_RETURN. (line 7)
43537 * gimple_build_switch: GIMPLE_SWITCH. (line 8)
43538 * gimple_build_switch_vec: GIMPLE_SWITCH. (line 16)
43539 * gimple_build_try: GIMPLE_TRY. (line 8)
43540 * gimple_build_wce: GIMPLE_WITH_CLEANUP_EXPR.
43542 * GIMPLE_CALL: GIMPLE_CALL. (line 6)
43543 * gimple_call_arg: GIMPLE_CALL. (line 66)
43544 * gimple_call_cannot_inline_p: GIMPLE_CALL. (line 91)
43545 * gimple_call_chain: GIMPLE_CALL. (line 57)
43546 * gimple_call_copy_skip_args: GIMPLE_CALL. (line 98)
43547 * gimple_call_fn: GIMPLE_CALL. (line 38)
43548 * gimple_call_fndecl: GIMPLE_CALL. (line 46)
43549 * gimple_call_lhs: GIMPLE_CALL. (line 29)
43550 * gimple_call_mark_uninlinable: GIMPLE_CALL. (line 88)
43551 * gimple_call_noreturn_p: GIMPLE_CALL. (line 94)
43552 * gimple_call_return_type: GIMPLE_CALL. (line 54)
43553 * gimple_call_set_arg: GIMPLE_CALL. (line 76)
43554 * gimple_call_set_chain: GIMPLE_CALL. (line 60)
43555 * gimple_call_set_fn: GIMPLE_CALL. (line 42)
43556 * gimple_call_set_fndecl: GIMPLE_CALL. (line 51)
43557 * gimple_call_set_lhs: GIMPLE_CALL. (line 35)
43558 * gimple_call_set_tail: GIMPLE_CALL. (line 80)
43559 * gimple_call_tail_p: GIMPLE_CALL. (line 85)
43560 * GIMPLE_CATCH: GIMPLE_CATCH. (line 6)
43561 * gimple_catch_handler: GIMPLE_CATCH. (line 20)
43562 * gimple_catch_set_handler: GIMPLE_CATCH. (line 28)
43563 * gimple_catch_set_types: GIMPLE_CATCH. (line 24)
43564 * gimple_catch_types: GIMPLE_CATCH. (line 13)
43565 * gimple_code: Manipulating GIMPLE statements.
43567 * GIMPLE_COND: GIMPLE_COND. (line 6)
43568 * gimple_cond_false_label: GIMPLE_COND. (line 60)
43569 * gimple_cond_lhs: GIMPLE_COND. (line 30)
43570 * gimple_cond_make_false: GIMPLE_COND. (line 64)
43571 * gimple_cond_make_true: GIMPLE_COND. (line 67)
43572 * gimple_cond_rhs: GIMPLE_COND. (line 38)
43573 * gimple_cond_set_code: GIMPLE_COND. (line 26)
43574 * gimple_cond_set_false_label: GIMPLE_COND. (line 56)
43575 * gimple_cond_set_lhs: GIMPLE_COND. (line 34)
43576 * gimple_cond_set_rhs: GIMPLE_COND. (line 42)
43577 * gimple_cond_set_true_label: GIMPLE_COND. (line 51)
43578 * gimple_cond_true_label: GIMPLE_COND. (line 46)
43579 * gimple_copy: Manipulating GIMPLE statements.
43581 * GIMPLE_DEBUG: GIMPLE_DEBUG. (line 6)
43582 * GIMPLE_DEBUG_BIND: GIMPLE_DEBUG. (line 6)
43583 * gimple_debug_bind_get_value: GIMPLE_DEBUG. (line 48)
43584 * gimple_debug_bind_get_var: GIMPLE_DEBUG. (line 45)
43585 * gimple_debug_bind_has_value_p: GIMPLE_DEBUG. (line 69)
43586 * gimple_debug_bind_reset_value: GIMPLE_DEBUG. (line 65)
43587 * gimple_debug_bind_set_value: GIMPLE_DEBUG. (line 61)
43588 * gimple_debug_bind_set_var: GIMPLE_DEBUG. (line 57)
43589 * GIMPLE_EH_FILTER: GIMPLE_EH_FILTER. (line 6)
43590 * gimple_eh_filter_failure: GIMPLE_EH_FILTER. (line 19)
43591 * gimple_eh_filter_must_not_throw: GIMPLE_EH_FILTER. (line 33)
43592 * gimple_eh_filter_set_failure: GIMPLE_EH_FILTER. (line 29)
43593 * gimple_eh_filter_set_must_not_throw: GIMPLE_EH_FILTER. (line 37)
43594 * gimple_eh_filter_set_types: GIMPLE_EH_FILTER. (line 24)
43595 * gimple_eh_filter_types: GIMPLE_EH_FILTER. (line 12)
43596 * gimple_expr_type: Manipulating GIMPLE statements.
43598 * gimple_goto_dest: GIMPLE_LABEL. (line 21)
43599 * gimple_goto_set_dest: GIMPLE_LABEL. (line 24)
43600 * gimple_has_mem_ops: Manipulating GIMPLE statements.
43602 * gimple_has_ops: Manipulating GIMPLE statements.
43604 * gimple_has_volatile_ops: Manipulating GIMPLE statements.
43606 * GIMPLE_LABEL: GIMPLE_LABEL. (line 6)
43607 * gimple_label_label: GIMPLE_LABEL. (line 11)
43608 * gimple_label_set_label: GIMPLE_LABEL. (line 14)
43609 * gimple_loaded_syms: Manipulating GIMPLE statements.
43611 * gimple_locus: Manipulating GIMPLE statements.
43613 * gimple_locus_empty_p: Manipulating GIMPLE statements.
43615 * gimple_modified_p: Manipulating GIMPLE statements.
43617 * gimple_no_warning_p: Manipulating GIMPLE statements.
43619 * GIMPLE_NOP: GIMPLE_NOP. (line 6)
43620 * gimple_nop_p: GIMPLE_NOP. (line 10)
43621 * gimple_num_ops <1>: Manipulating GIMPLE statements.
43623 * gimple_num_ops: Logical Operators. (line 76)
43624 * GIMPLE_OMP_ATOMIC_LOAD: GIMPLE_OMP_ATOMIC_LOAD.
43626 * gimple_omp_atomic_load_lhs: GIMPLE_OMP_ATOMIC_LOAD.
43628 * gimple_omp_atomic_load_rhs: GIMPLE_OMP_ATOMIC_LOAD.
43630 * gimple_omp_atomic_load_set_lhs: GIMPLE_OMP_ATOMIC_LOAD.
43632 * gimple_omp_atomic_load_set_rhs: GIMPLE_OMP_ATOMIC_LOAD.
43634 * GIMPLE_OMP_ATOMIC_STORE: GIMPLE_OMP_ATOMIC_STORE.
43636 * gimple_omp_atomic_store_set_val: GIMPLE_OMP_ATOMIC_STORE.
43638 * gimple_omp_atomic_store_val: GIMPLE_OMP_ATOMIC_STORE.
43640 * gimple_omp_body: GIMPLE_OMP_PARALLEL.
43642 * GIMPLE_OMP_CONTINUE: GIMPLE_OMP_CONTINUE.
43644 * gimple_omp_continue_control_def: GIMPLE_OMP_CONTINUE.
43646 * gimple_omp_continue_control_def_ptr: GIMPLE_OMP_CONTINUE.
43648 * gimple_omp_continue_control_use: GIMPLE_OMP_CONTINUE.
43650 * gimple_omp_continue_control_use_ptr: GIMPLE_OMP_CONTINUE.
43652 * gimple_omp_continue_set_control_def: GIMPLE_OMP_CONTINUE.
43654 * gimple_omp_continue_set_control_use: GIMPLE_OMP_CONTINUE.
43656 * GIMPLE_OMP_CRITICAL: GIMPLE_OMP_CRITICAL.
43658 * gimple_omp_critical_name: GIMPLE_OMP_CRITICAL.
43660 * gimple_omp_critical_set_name: GIMPLE_OMP_CRITICAL.
43662 * GIMPLE_OMP_FOR: GIMPLE_OMP_FOR. (line 6)
43663 * gimple_omp_for_clauses: GIMPLE_OMP_FOR. (line 20)
43664 * gimple_omp_for_final: GIMPLE_OMP_FOR. (line 51)
43665 * gimple_omp_for_incr: GIMPLE_OMP_FOR. (line 61)
43666 * gimple_omp_for_index: GIMPLE_OMP_FOR. (line 31)
43667 * gimple_omp_for_initial: GIMPLE_OMP_FOR. (line 41)
43668 * gimple_omp_for_pre_body: GIMPLE_OMP_FOR. (line 70)
43669 * gimple_omp_for_set_clauses: GIMPLE_OMP_FOR. (line 27)
43670 * gimple_omp_for_set_cond: GIMPLE_OMP_FOR. (line 80)
43671 * gimple_omp_for_set_final: GIMPLE_OMP_FOR. (line 58)
43672 * gimple_omp_for_set_incr: GIMPLE_OMP_FOR. (line 67)
43673 * gimple_omp_for_set_index: GIMPLE_OMP_FOR. (line 38)
43674 * gimple_omp_for_set_initial: GIMPLE_OMP_FOR. (line 48)
43675 * gimple_omp_for_set_pre_body: GIMPLE_OMP_FOR. (line 75)
43676 * GIMPLE_OMP_MASTER: GIMPLE_OMP_MASTER. (line 6)
43677 * GIMPLE_OMP_ORDERED: GIMPLE_OMP_ORDERED. (line 6)
43678 * GIMPLE_OMP_PARALLEL: GIMPLE_OMP_PARALLEL.
43680 * gimple_omp_parallel_child_fn: GIMPLE_OMP_PARALLEL.
43682 * gimple_omp_parallel_clauses: GIMPLE_OMP_PARALLEL.
43684 * gimple_omp_parallel_combined_p: GIMPLE_OMP_PARALLEL.
43686 * gimple_omp_parallel_data_arg: GIMPLE_OMP_PARALLEL.
43688 * gimple_omp_parallel_set_child_fn: GIMPLE_OMP_PARALLEL.
43690 * gimple_omp_parallel_set_clauses: GIMPLE_OMP_PARALLEL.
43692 * gimple_omp_parallel_set_combined_p: GIMPLE_OMP_PARALLEL.
43694 * gimple_omp_parallel_set_data_arg: GIMPLE_OMP_PARALLEL.
43696 * GIMPLE_OMP_RETURN: GIMPLE_OMP_RETURN. (line 6)
43697 * gimple_omp_return_nowait_p: GIMPLE_OMP_RETURN. (line 14)
43698 * gimple_omp_return_set_nowait: GIMPLE_OMP_RETURN. (line 11)
43699 * GIMPLE_OMP_SECTION: GIMPLE_OMP_SECTION. (line 6)
43700 * gimple_omp_section_last_p: GIMPLE_OMP_SECTION. (line 12)
43701 * gimple_omp_section_set_last: GIMPLE_OMP_SECTION. (line 16)
43702 * GIMPLE_OMP_SECTIONS: GIMPLE_OMP_SECTIONS.
43704 * gimple_omp_sections_clauses: GIMPLE_OMP_SECTIONS.
43706 * gimple_omp_sections_control: GIMPLE_OMP_SECTIONS.
43708 * gimple_omp_sections_set_clauses: GIMPLE_OMP_SECTIONS.
43710 * gimple_omp_sections_set_control: GIMPLE_OMP_SECTIONS.
43712 * gimple_omp_set_body: GIMPLE_OMP_PARALLEL.
43714 * GIMPLE_OMP_SINGLE: GIMPLE_OMP_SINGLE. (line 6)
43715 * gimple_omp_single_clauses: GIMPLE_OMP_SINGLE. (line 14)
43716 * gimple_omp_single_set_clauses: GIMPLE_OMP_SINGLE. (line 21)
43717 * gimple_op <1>: Manipulating GIMPLE statements.
43719 * gimple_op: Logical Operators. (line 79)
43720 * GIMPLE_PHI: GIMPLE_PHI. (line 6)
43721 * gimple_phi_capacity: GIMPLE_PHI. (line 10)
43722 * gimple_phi_num_args: GIMPLE_PHI. (line 14)
43723 * gimple_phi_result: GIMPLE_PHI. (line 19)
43724 * gimple_phi_set_arg: GIMPLE_PHI. (line 33)
43725 * gimple_phi_set_result: GIMPLE_PHI. (line 25)
43726 * GIMPLE_RESX: GIMPLE_RESX. (line 6)
43727 * gimple_resx_region: GIMPLE_RESX. (line 13)
43728 * gimple_resx_set_region: GIMPLE_RESX. (line 16)
43729 * GIMPLE_RETURN: GIMPLE_RETURN. (line 6)
43730 * gimple_return_retval: GIMPLE_RETURN. (line 10)
43731 * gimple_return_set_retval: GIMPLE_RETURN. (line 14)
43732 * gimple_rhs_class: GIMPLE_ASSIGN. (line 46)
43733 * gimple_seq_add_seq: GIMPLE sequences. (line 32)
43734 * gimple_seq_add_stmt: GIMPLE sequences. (line 26)
43735 * gimple_seq_alloc: GIMPLE sequences. (line 62)
43736 * gimple_seq_copy: GIMPLE sequences. (line 67)
43737 * gimple_seq_deep_copy: GIMPLE sequences. (line 37)
43738 * gimple_seq_empty_p: GIMPLE sequences. (line 70)
43739 * gimple_seq_first: GIMPLE sequences. (line 44)
43740 * gimple_seq_init: GIMPLE sequences. (line 59)
43741 * gimple_seq_last: GIMPLE sequences. (line 47)
43742 * gimple_seq_reverse: GIMPLE sequences. (line 40)
43743 * gimple_seq_set_first: GIMPLE sequences. (line 55)
43744 * gimple_seq_set_last: GIMPLE sequences. (line 51)
43745 * gimple_seq_singleton_p: GIMPLE sequences. (line 79)
43746 * gimple_set_block: Manipulating GIMPLE statements.
43748 * gimple_set_def_ops: Manipulating GIMPLE statements.
43750 * gimple_set_has_volatile_ops: Manipulating GIMPLE statements.
43752 * gimple_set_locus: Manipulating GIMPLE statements.
43754 * gimple_set_op: Manipulating GIMPLE statements.
43756 * gimple_set_plf: Manipulating GIMPLE statements.
43758 * gimple_set_use_ops: Manipulating GIMPLE statements.
43760 * gimple_set_vdef_ops: Manipulating GIMPLE statements.
43762 * gimple_set_visited: Manipulating GIMPLE statements.
43764 * gimple_set_vuse_ops: Manipulating GIMPLE statements.
43766 * gimple_statement_base: Tuple representation.
43768 * gimple_statement_with_ops: Tuple representation.
43770 * gimple_stored_syms: Manipulating GIMPLE statements.
43772 * GIMPLE_SWITCH: GIMPLE_SWITCH. (line 6)
43773 * gimple_switch_default_label: GIMPLE_SWITCH. (line 46)
43774 * gimple_switch_index: GIMPLE_SWITCH. (line 31)
43775 * gimple_switch_label: GIMPLE_SWITCH. (line 37)
43776 * gimple_switch_num_labels: GIMPLE_SWITCH. (line 22)
43777 * gimple_switch_set_default_label: GIMPLE_SWITCH. (line 50)
43778 * gimple_switch_set_index: GIMPLE_SWITCH. (line 34)
43779 * gimple_switch_set_label: GIMPLE_SWITCH. (line 42)
43780 * gimple_switch_set_num_labels: GIMPLE_SWITCH. (line 27)
43781 * GIMPLE_TRY: GIMPLE_TRY. (line 6)
43782 * gimple_try_catch_is_cleanup: GIMPLE_TRY. (line 20)
43783 * gimple_try_cleanup: GIMPLE_TRY. (line 27)
43784 * gimple_try_eval: GIMPLE_TRY. (line 23)
43785 * gimple_try_flags: GIMPLE_TRY. (line 16)
43786 * gimple_try_set_catch_is_cleanup: GIMPLE_TRY. (line 32)
43787 * gimple_try_set_cleanup: GIMPLE_TRY. (line 41)
43788 * gimple_try_set_eval: GIMPLE_TRY. (line 36)
43789 * gimple_visited_p: Manipulating GIMPLE statements.
43791 * gimple_wce_cleanup: GIMPLE_WITH_CLEANUP_EXPR.
43793 * gimple_wce_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR.
43795 * gimple_wce_set_cleanup: GIMPLE_WITH_CLEANUP_EXPR.
43797 * gimple_wce_set_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR.
43799 * GIMPLE_WITH_CLEANUP_EXPR: GIMPLE_WITH_CLEANUP_EXPR.
43801 * gimplification <1>: Gimplification pass.
43803 * gimplification: Parsing pass. (line 14)
43804 * gimplifier: Parsing pass. (line 14)
43805 * gimplify_assign: GIMPLE_ASSIGN. (line 19)
43806 * gimplify_expr: Gimplification pass.
43808 * gimplify_function_tree: Gimplification pass.
43810 * GLOBAL_INIT_PRIORITY: Functions for C++. (line 141)
43811 * global_regs: Register Basics. (line 59)
43812 * GO_IF_LEGITIMATE_ADDRESS: Addressing Modes. (line 91)
43813 * GO_IF_MODE_DEPENDENT_ADDRESS: Addressing Modes. (line 192)
43814 * GOFAST, floating point emulation library: Library Calls. (line 44)
43815 * gofast_maybe_init_libfuncs: Library Calls. (line 44)
43816 * greater than: Comparisons. (line 60)
43817 * gsi_after_labels: Sequence iterators. (line 76)
43818 * gsi_bb: Sequence iterators. (line 83)
43819 * gsi_commit_edge_inserts: Sequence iterators. (line 194)
43820 * gsi_commit_one_edge_insert: Sequence iterators. (line 190)
43821 * gsi_end_p: Sequence iterators. (line 60)
43822 * gsi_for_stmt: Sequence iterators. (line 157)
43823 * gsi_insert_after: Sequence iterators. (line 147)
43824 * gsi_insert_before: Sequence iterators. (line 136)
43825 * gsi_insert_on_edge: Sequence iterators. (line 174)
43826 * gsi_insert_on_edge_immediate: Sequence iterators. (line 185)
43827 * gsi_insert_seq_after: Sequence iterators. (line 154)
43828 * gsi_insert_seq_before: Sequence iterators. (line 143)
43829 * gsi_insert_seq_on_edge: Sequence iterators. (line 179)
43830 * gsi_last: Sequence iterators. (line 50)
43831 * gsi_last_bb: Sequence iterators. (line 56)
43832 * gsi_link_after: Sequence iterators. (line 115)
43833 * gsi_link_before: Sequence iterators. (line 105)
43834 * gsi_link_seq_after: Sequence iterators. (line 110)
43835 * gsi_link_seq_before: Sequence iterators. (line 99)
43836 * gsi_move_after: Sequence iterators. (line 161)
43837 * gsi_move_before: Sequence iterators. (line 166)
43838 * gsi_move_to_bb_end: Sequence iterators. (line 171)
43839 * gsi_next: Sequence iterators. (line 66)
43840 * gsi_one_before_end_p: Sequence iterators. (line 63)
43841 * gsi_prev: Sequence iterators. (line 69)
43842 * gsi_remove: Sequence iterators. (line 90)
43843 * gsi_replace: Sequence iterators. (line 130)
43844 * gsi_seq: Sequence iterators. (line 86)
43845 * gsi_split_seq_after: Sequence iterators. (line 120)
43846 * gsi_split_seq_before: Sequence iterators. (line 125)
43847 * gsi_start: Sequence iterators. (line 40)
43848 * gsi_start_bb: Sequence iterators. (line 46)
43849 * gsi_stmt: Sequence iterators. (line 72)
43850 * gt: Comparisons. (line 60)
43851 * gt and attributes: Expressions. (line 64)
43852 * GT_EXPR: Unary and Binary Expressions.
43854 * gtu: Comparisons. (line 64)
43855 * gtu and attributes: Expressions. (line 64)
43856 * GTY: Type Information. (line 6)
43857 * H in constraint: Simple Constraints. (line 88)
43858 * HAmode: Machine Modes. (line 144)
43859 * HANDLE_PRAGMA_PACK_PUSH_POP: Misc. (line 467)
43860 * HANDLE_PRAGMA_PACK_WITH_EXPANSION: Misc. (line 478)
43861 * HANDLE_SYSV_PRAGMA: Misc. (line 438)
43862 * HANDLER: Statements for C++. (line 6)
43863 * HANDLER_BODY: Statements for C++. (line 6)
43864 * HANDLER_PARMS: Statements for C++. (line 6)
43865 * hard registers: Regs and Memory. (line 9)
43866 * HARD_FRAME_POINTER_REGNUM: Frame Registers. (line 20)
43867 * HARD_REGNO_CALL_PART_CLOBBERED: Register Basics. (line 53)
43868 * HARD_REGNO_CALLER_SAVE_MODE: Caller Saves. (line 20)
43869 * HARD_REGNO_MODE_OK: Values in Registers.
43871 * HARD_REGNO_NREGS: Values in Registers.
43873 * HARD_REGNO_NREGS_HAS_PADDING: Values in Registers.
43875 * HARD_REGNO_NREGS_WITH_PADDING: Values in Registers.
43877 * HARD_REGNO_RENAME_OK: Values in Registers.
43879 * HAS_INIT_SECTION: Macros for Initialization.
43881 * HAS_LONG_COND_BRANCH: Misc. (line 9)
43882 * HAS_LONG_UNCOND_BRANCH: Misc. (line 18)
43883 * HAVE_DOS_BASED_FILE_SYSTEM: Filesystem. (line 11)
43884 * HAVE_POST_DECREMENT: Addressing Modes. (line 12)
43885 * HAVE_POST_INCREMENT: Addressing Modes. (line 11)
43886 * HAVE_POST_MODIFY_DISP: Addressing Modes. (line 18)
43887 * HAVE_POST_MODIFY_REG: Addressing Modes. (line 24)
43888 * HAVE_PRE_DECREMENT: Addressing Modes. (line 10)
43889 * HAVE_PRE_INCREMENT: Addressing Modes. (line 9)
43890 * HAVE_PRE_MODIFY_DISP: Addressing Modes. (line 17)
43891 * HAVE_PRE_MODIFY_REG: Addressing Modes. (line 23)
43892 * HCmode: Machine Modes. (line 197)
43893 * HFmode: Machine Modes. (line 58)
43894 * high: Constants. (line 109)
43895 * HImode: Machine Modes. (line 29)
43896 * HImode, in insn: Insns. (line 272)
43897 * host configuration: Host Config. (line 6)
43898 * host functions: Host Common. (line 6)
43899 * host hooks: Host Common. (line 6)
43900 * host makefile fragment: Host Fragment. (line 6)
43901 * HOST_BIT_BUCKET: Filesystem. (line 51)
43902 * HOST_EXECUTABLE_SUFFIX: Filesystem. (line 45)
43903 * HOST_HOOKS_EXTRA_SIGNALS: Host Common. (line 12)
43904 * HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY: Host Common. (line 45)
43905 * HOST_HOOKS_GT_PCH_USE_ADDRESS: Host Common. (line 26)
43906 * HOST_LACKS_INODE_NUMBERS: Filesystem. (line 89)
43907 * HOST_LONG_FORMAT: Host Misc. (line 45)
43908 * HOST_LONG_LONG_FORMAT: Host Misc. (line 41)
43909 * HOST_OBJECT_SUFFIX: Filesystem. (line 40)
43910 * HOST_PTR_PRINTF: Host Misc. (line 49)
43911 * HOT_TEXT_SECTION_NAME: Sections. (line 43)
43912 * HQmode: Machine Modes. (line 107)
43913 * I in constraint: Simple Constraints. (line 71)
43914 * i in constraint: Simple Constraints. (line 60)
43915 * identifier: Identifiers. (line 6)
43916 * IDENTIFIER_LENGTH: Identifiers. (line 22)
43917 * IDENTIFIER_NODE: Identifiers. (line 6)
43918 * IDENTIFIER_OPNAME_P: Identifiers. (line 27)
43919 * IDENTIFIER_POINTER: Identifiers. (line 17)
43920 * IDENTIFIER_TYPENAME_P: Identifiers. (line 33)
43921 * IEEE 754-2008: Decimal float library routines.
43923 * IF_COND: Statements for C++. (line 6)
43924 * if_marked: GTY Options. (line 156)
43925 * IF_STMT: Statements for C++. (line 6)
43926 * if_then_else: Comparisons. (line 80)
43927 * if_then_else and attributes: Expressions. (line 32)
43928 * if_then_else usage: Side Effects. (line 56)
43929 * IFCVT_EXTRA_FIELDS: Misc. (line 622)
43930 * IFCVT_INIT_EXTRA_FIELDS: Misc. (line 617)
43931 * IFCVT_MODIFY_CANCEL: Misc. (line 611)
43932 * IFCVT_MODIFY_FINAL: Misc. (line 605)
43933 * IFCVT_MODIFY_INSN: Misc. (line 599)
43934 * IFCVT_MODIFY_MULTIPLE_TESTS: Misc. (line 592)
43935 * IFCVT_MODIFY_TESTS: Misc. (line 581)
43936 * IMAGPART_EXPR: Unary and Binary Expressions.
43938 * Immediate Uses: SSA Operands. (line 274)
43939 * immediate_operand: Machine-Independent Predicates.
43941 * IMMEDIATE_PREFIX: Instruction Output. (line 140)
43942 * in_struct: Flags. (line 263)
43943 * in_struct, in code_label and note: Flags. (line 59)
43944 * in_struct, in insn and jump_insn and call_insn: Flags. (line 49)
43945 * in_struct, in insn, jump_insn and call_insn: Flags. (line 166)
43946 * in_struct, in mem: Flags. (line 70)
43947 * in_struct, in subreg: Flags. (line 205)
43948 * include: Including Patterns. (line 6)
43949 * INCLUDE_DEFAULTS: Driver. (line 430)
43950 * inclusive-or, bitwise: Arithmetic. (line 158)
43951 * INCOMING_FRAME_SP_OFFSET: Frame Layout. (line 183)
43952 * INCOMING_REGNO: Register Basics. (line 91)
43953 * INCOMING_RETURN_ADDR_RTX: Frame Layout. (line 139)
43954 * INCOMING_STACK_BOUNDARY: Storage Layout. (line 166)
43955 * INDEX_REG_CLASS: Register Classes. (line 134)
43956 * indirect_jump instruction pattern: Standard Names. (line 1037)
43957 * indirect_operand: Machine-Independent Predicates.
43959 * INDIRECT_REF: Storage References. (line 6)
43960 * INIT_ARRAY_SECTION_ASM_OP: Sections. (line 108)
43961 * INIT_CUMULATIVE_ARGS: Register Arguments. (line 149)
43962 * INIT_CUMULATIVE_INCOMING_ARGS: Register Arguments. (line 177)
43963 * INIT_CUMULATIVE_LIBCALL_ARGS: Register Arguments. (line 170)
43964 * INIT_ENVIRONMENT: Driver. (line 369)
43965 * INIT_EXPANDERS: Per-Function Data. (line 39)
43966 * INIT_EXPR: Unary and Binary Expressions.
43968 * init_machine_status: Per-Function Data. (line 45)
43969 * init_one_libfunc: Library Calls. (line 15)
43970 * INIT_SECTION_ASM_OP <1>: Macros for Initialization.
43972 * INIT_SECTION_ASM_OP: Sections. (line 92)
43973 * INITIAL_ELIMINATION_OFFSET: Elimination. (line 85)
43974 * INITIAL_FRAME_ADDRESS_RTX: Frame Layout. (line 83)
43975 * INITIAL_FRAME_POINTER_OFFSET: Elimination. (line 35)
43976 * initialization routines: Initialization. (line 6)
43977 * inlining: Target Attributes. (line 87)
43978 * insert_insn_on_edge: Maintaining the CFG.
43980 * insn: Insns. (line 63)
43981 * insn and /f: Flags. (line 125)
43982 * insn and /j: Flags. (line 175)
43983 * insn and /s: Flags. (line 49)
43984 * insn and /u: Flags. (line 39)
43985 * insn and /v: Flags. (line 44)
43986 * insn attributes: Insn Attributes. (line 6)
43987 * insn canonicalization: Insn Canonicalizations.
43989 * insn includes: Including Patterns. (line 6)
43990 * insn lengths, computing: Insn Lengths. (line 6)
43991 * insn splitting: Insn Splitting. (line 6)
43992 * insn-attr.h: Defining Attributes.
43994 * INSN_ANNULLED_BRANCH_P: Flags. (line 39)
43995 * INSN_CODE: Insns. (line 298)
43996 * INSN_DELETED_P: Flags. (line 44)
43997 * INSN_FROM_TARGET_P: Flags. (line 49)
43998 * insn_list: Insns. (line 545)
43999 * INSN_REFERENCES_ARE_DELAYED: Misc. (line 520)
44000 * INSN_SETS_ARE_DELAYED: Misc. (line 509)
44001 * INSN_UID: Insns. (line 23)
44002 * INSN_VAR_LOCATION: Insns. (line 239)
44003 * insns: Insns. (line 6)
44004 * insns, generating: RTL Template. (line 6)
44005 * insns, recognizing: RTL Template. (line 6)
44006 * instruction attributes: Insn Attributes. (line 6)
44007 * instruction latency time: Processor pipeline description.
44009 * instruction patterns: Patterns. (line 6)
44010 * instruction splitting: Insn Splitting. (line 6)
44011 * insv instruction pattern: Standard Names. (line 862)
44012 * int: Manipulating GIMPLE statements.
44014 * INT16_TYPE: Type Layout. (line 237)
44015 * INT32_TYPE: Type Layout. (line 238)
44016 * INT64_TYPE: Type Layout. (line 239)
44017 * INT8_TYPE: Type Layout. (line 236)
44018 * INT_FAST16_TYPE: Type Layout. (line 253)
44019 * INT_FAST32_TYPE: Type Layout. (line 254)
44020 * INT_FAST64_TYPE: Type Layout. (line 255)
44021 * INT_FAST8_TYPE: Type Layout. (line 252)
44022 * INT_LEAST16_TYPE: Type Layout. (line 245)
44023 * INT_LEAST32_TYPE: Type Layout. (line 246)
44024 * INT_LEAST64_TYPE: Type Layout. (line 247)
44025 * INT_LEAST8_TYPE: Type Layout. (line 244)
44026 * INT_TYPE_SIZE: Type Layout. (line 12)
44027 * INTEGER_CST: Constant expressions.
44029 * INTEGER_TYPE: Types. (line 6)
44030 * Interdependence of Patterns: Dependent Patterns. (line 6)
44031 * interfacing to GCC output: Interface. (line 6)
44032 * interlock delays: Processor pipeline description.
44034 * intermediate representation lowering: Parsing pass. (line 14)
44035 * INTMAX_TYPE: Type Layout. (line 213)
44036 * INTPTR_TYPE: Type Layout. (line 260)
44037 * introduction: Top. (line 6)
44038 * INVOKE__main: Macros for Initialization.
44040 * ior: Arithmetic. (line 158)
44041 * ior and attributes: Expressions. (line 50)
44042 * ior, canonicalization of: Insn Canonicalizations.
44044 * iorM3 instruction pattern: Standard Names. (line 222)
44045 * IRA_COVER_CLASSES: Register Classes. (line 535)
44046 * IRA_HARD_REGNO_ADD_COST_MULTIPLIER: Allocation Order. (line 37)
44047 * IS_ASM_LOGICAL_LINE_SEPARATOR: Data Output. (line 120)
44048 * is_gimple_omp: GIMPLE_OMP_PARALLEL.
44050 * iterators in .md files: Iterators. (line 6)
44051 * IV analysis on GIMPLE: Scalar evolutions. (line 6)
44052 * IV analysis on RTL: loop-iv. (line 6)
44053 * jump: Flags. (line 314)
44054 * jump instruction pattern: Standard Names. (line 928)
44055 * jump instruction patterns: Jump Patterns. (line 6)
44056 * jump instructions and set: Side Effects. (line 56)
44057 * jump, in call_insn: Flags. (line 179)
44058 * jump, in insn: Flags. (line 175)
44059 * jump, in mem: Flags. (line 79)
44060 * JUMP_ALIGN: Alignment Output. (line 9)
44061 * jump_insn: Insns. (line 73)
44062 * jump_insn and /f: Flags. (line 125)
44063 * jump_insn and /s: Flags. (line 49)
44064 * jump_insn and /u: Flags. (line 39)
44065 * jump_insn and /v: Flags. (line 44)
44066 * JUMP_LABEL: Insns. (line 80)
44067 * JUMP_TABLES_IN_TEXT_SECTION: Sections. (line 152)
44068 * Jumps: Jumps. (line 6)
44069 * LABEL_ALIGN: Alignment Output. (line 52)
44070 * LABEL_ALIGN_AFTER_BARRIER: Alignment Output. (line 22)
44071 * LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output. (line 30)
44072 * LABEL_ALIGN_MAX_SKIP: Alignment Output. (line 62)
44073 * LABEL_ALT_ENTRY_P: Insns. (line 140)
44074 * LABEL_ALTERNATE_NAME: Edges. (line 180)
44075 * LABEL_DECL: Declarations. (line 6)
44076 * LABEL_KIND: Insns. (line 140)
44077 * LABEL_NUSES: Insns. (line 136)
44078 * LABEL_PRESERVE_P: Flags. (line 59)
44079 * label_ref: Constants. (line 86)
44080 * label_ref and /v: Flags. (line 65)
44081 * label_ref, RTL sharing: Sharing. (line 35)
44082 * LABEL_REF_NONLOCAL_P: Flags. (line 65)
44083 * lang_hooks.gimplify_expr: Gimplification pass.
44085 * lang_hooks.parse_file: Parsing pass. (line 6)
44086 * language-dependent trees: Language-dependent trees.
44088 * language-independent intermediate representation: Parsing pass.
44090 * large return values: Aggregate Return. (line 6)
44091 * LARGEST_EXPONENT_IS_NORMAL: Storage Layout. (line 474)
44092 * LAST_STACK_REG: Stack Registers. (line 31)
44093 * LAST_VIRTUAL_REGISTER: Regs and Memory. (line 51)
44094 * lceilMN2: Standard Names. (line 597)
44095 * LCSSA: LCSSA. (line 6)
44096 * LD_FINI_SWITCH: Macros for Initialization.
44098 * LD_INIT_SWITCH: Macros for Initialization.
44100 * LDD_SUFFIX: Macros for Initialization.
44102 * le: Comparisons. (line 76)
44103 * le and attributes: Expressions. (line 64)
44104 * LE_EXPR: Unary and Binary Expressions.
44106 * leaf functions: Leaf Functions. (line 6)
44107 * leaf_function_p: Standard Names. (line 999)
44108 * LEAF_REG_REMAP: Leaf Functions. (line 39)
44109 * LEAF_REGISTERS: Leaf Functions. (line 25)
44110 * left rotate: Arithmetic. (line 190)
44111 * left shift: Arithmetic. (line 168)
44112 * LEGITIMATE_CONSTANT_P: Addressing Modes. (line 207)
44113 * LEGITIMATE_PIC_OPERAND_P: PIC. (line 31)
44114 * LEGITIMIZE_RELOAD_ADDRESS: Addressing Modes. (line 147)
44115 * length: GTY Options. (line 50)
44116 * less than: Comparisons. (line 68)
44117 * less than or equal: Comparisons. (line 76)
44118 * leu: Comparisons. (line 76)
44119 * leu and attributes: Expressions. (line 64)
44120 * lfloorMN2: Standard Names. (line 592)
44121 * LIB2FUNCS_EXTRA: Target Fragment. (line 11)
44122 * LIB_SPEC: Driver. (line 170)
44123 * LIBCALL_VALUE: Scalar Return. (line 60)
44124 * libgcc.a: Library Calls. (line 6)
44125 * LIBGCC2_CFLAGS: Target Fragment. (line 8)
44126 * LIBGCC2_HAS_DF_MODE: Type Layout. (line 109)
44127 * LIBGCC2_HAS_TF_MODE: Type Layout. (line 123)
44128 * LIBGCC2_HAS_XF_MODE: Type Layout. (line 117)
44129 * LIBGCC2_LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 103)
44130 * LIBGCC2_UNWIND_ATTRIBUTE: Misc. (line 982)
44131 * LIBGCC2_WORDS_BIG_ENDIAN: Storage Layout. (line 36)
44132 * LIBGCC_SPEC: Driver. (line 178)
44133 * library subroutine names: Library Calls. (line 6)
44134 * LIBRARY_PATH_ENV: Misc. (line 560)
44135 * LIMIT_RELOAD_CLASS: Register Classes. (line 254)
44136 * Linear loop transformations framework: Lambda. (line 6)
44137 * LINK_COMMAND_SPEC: Driver. (line 299)
44138 * LINK_EH_SPEC: Driver. (line 205)
44139 * LINK_ELIMINATE_DUPLICATE_LDIRECTORIES: Driver. (line 309)
44140 * LINK_GCC_C_SEQUENCE_SPEC: Driver. (line 295)
44141 * LINK_LIBGCC_SPECIAL_1: Driver. (line 290)
44142 * LINK_SPEC: Driver. (line 163)
44143 * list: Containers. (line 6)
44144 * Liveness representation: Liveness information.
44146 * lo_sum: Arithmetic. (line 24)
44147 * load address instruction: Simple Constraints. (line 154)
44148 * LOAD_EXTEND_OP: Misc. (line 69)
44149 * load_multiple instruction pattern: Standard Names. (line 137)
44150 * LOCAL_ALIGNMENT: Storage Layout. (line 255)
44151 * LOCAL_CLASS_P: Classes. (line 73)
44152 * LOCAL_DECL_ALIGNMENT: Storage Layout. (line 279)
44153 * LOCAL_INCLUDE_DIR: Driver. (line 376)
44154 * LOCAL_LABEL_PREFIX: Instruction Output. (line 138)
44155 * LOCAL_REGNO: Register Basics. (line 105)
44156 * LOG_LINKS: Insns. (line 317)
44157 * Logical Operators: Logical Operators. (line 6)
44158 * logical-and, bitwise: Arithmetic. (line 153)
44159 * logM2 instruction pattern: Standard Names. (line 505)
44160 * LONG_ACCUM_TYPE_SIZE: Type Layout. (line 93)
44161 * LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 58)
44162 * LONG_FRACT_TYPE_SIZE: Type Layout. (line 73)
44163 * LONG_LONG_ACCUM_TYPE_SIZE: Type Layout. (line 98)
44164 * LONG_LONG_FRACT_TYPE_SIZE: Type Layout. (line 78)
44165 * LONG_LONG_TYPE_SIZE: Type Layout. (line 33)
44166 * LONG_TYPE_SIZE: Type Layout. (line 22)
44167 * longjmp and automatic variables: Interface. (line 52)
44168 * Loop analysis: Loop representation.
44170 * Loop manipulation: Loop manipulation. (line 6)
44171 * Loop querying: Loop querying. (line 6)
44172 * Loop representation: Loop representation.
44174 * Loop-closed SSA form: LCSSA. (line 6)
44175 * LOOP_ALIGN: Alignment Output. (line 35)
44176 * LOOP_ALIGN_MAX_SKIP: Alignment Output. (line 48)
44177 * LOOP_EXPR: Unary and Binary Expressions.
44179 * looping instruction patterns: Looping Patterns. (line 6)
44180 * lowering, language-dependent intermediate representation: Parsing pass.
44182 * lrintMN2: Standard Names. (line 582)
44183 * lroundMN2: Standard Names. (line 587)
44184 * LSHIFT_EXPR: Unary and Binary Expressions.
44186 * lshiftrt: Arithmetic. (line 185)
44187 * lshiftrt and attributes: Expressions. (line 64)
44188 * lshrM3 instruction pattern: Standard Names. (line 441)
44189 * lt: Comparisons. (line 68)
44190 * lt and attributes: Expressions. (line 64)
44191 * LT_EXPR: Unary and Binary Expressions.
44193 * LTGT_EXPR: Unary and Binary Expressions.
44195 * ltu: Comparisons. (line 68)
44196 * m in constraint: Simple Constraints. (line 17)
44197 * machine attributes: Target Attributes. (line 6)
44198 * machine description macros: Target Macros. (line 6)
44199 * machine descriptions: Machine Desc. (line 6)
44200 * machine mode conversions: Conversions. (line 6)
44201 * machine modes: Machine Modes. (line 6)
44202 * machine specific constraints: Machine Constraints.
44204 * machine-independent predicates: Machine-Independent Predicates.
44206 * macros, target description: Target Macros. (line 6)
44207 * maddMN4 instruction pattern: Standard Names. (line 364)
44208 * MAKE_DECL_ONE_ONLY: Label Output. (line 218)
44209 * make_phi_node: GIMPLE_PHI. (line 7)
44210 * make_safe_from: Expander Definitions.
44212 * makefile fragment: Fragments. (line 6)
44213 * makefile targets: Makefile. (line 6)
44214 * MALLOC_ABI_ALIGNMENT: Storage Layout. (line 180)
44215 * Manipulating GIMPLE statements: Manipulating GIMPLE statements.
44217 * mark_hook: GTY Options. (line 171)
44218 * marking roots: GGC Roots. (line 6)
44219 * MASK_RETURN_ADDR: Exception Region Output.
44221 * match_dup <1>: define_peephole2. (line 28)
44222 * match_dup: RTL Template. (line 73)
44223 * match_dup and attributes: Insn Lengths. (line 16)
44224 * match_op_dup: RTL Template. (line 163)
44225 * match_operand: RTL Template. (line 16)
44226 * match_operand and attributes: Expressions. (line 55)
44227 * match_operator: RTL Template. (line 95)
44228 * match_par_dup: RTL Template. (line 219)
44229 * match_parallel: RTL Template. (line 172)
44230 * match_scratch <1>: define_peephole2. (line 28)
44231 * match_scratch: RTL Template. (line 58)
44232 * matching constraint: Simple Constraints. (line 132)
44233 * matching operands: Output Template. (line 49)
44234 * math library: Soft float library routines.
44236 * math, in RTL: Arithmetic. (line 6)
44237 * MATH_LIBRARY: Misc. (line 553)
44238 * matherr: Library Calls. (line 58)
44239 * MAX_BITS_PER_WORD: Storage Layout. (line 61)
44240 * MAX_CONDITIONAL_EXECUTE: Misc. (line 575)
44241 * MAX_FIXED_MODE_SIZE: Storage Layout. (line 421)
44242 * MAX_MOVE_MAX: Misc. (line 120)
44243 * MAX_OFILE_ALIGNMENT: Storage Layout. (line 217)
44244 * MAX_REGS_PER_ADDRESS: Addressing Modes. (line 43)
44245 * MAX_STACK_ALIGNMENT: Storage Layout. (line 210)
44246 * maxM3 instruction pattern: Standard Names. (line 234)
44247 * may_trap_p, tree_could_trap_p: Edges. (line 115)
44248 * maybe_undef: GTY Options. (line 179)
44249 * mcount: Profiling. (line 12)
44250 * MD_CAN_REDIRECT_BRANCH: Misc. (line 712)
44251 * MD_EXEC_PREFIX: Driver. (line 330)
44252 * MD_FALLBACK_FRAME_STATE_FOR: Exception Handling. (line 98)
44253 * MD_HANDLE_UNWABI: Exception Handling. (line 118)
44254 * MD_STARTFILE_PREFIX: Driver. (line 358)
44255 * MD_STARTFILE_PREFIX_1: Driver. (line 364)
44256 * MD_UNWIND_SUPPORT: Exception Handling. (line 94)
44257 * mem: Regs and Memory. (line 374)
44258 * mem and /c: Flags. (line 99)
44259 * mem and /f: Flags. (line 103)
44260 * mem and /i: Flags. (line 85)
44261 * mem and /j: Flags. (line 79)
44262 * mem and /s: Flags. (line 70)
44263 * mem and /u: Flags. (line 152)
44264 * mem and /v: Flags. (line 94)
44265 * mem, RTL sharing: Sharing. (line 40)
44266 * MEM_ADDR_SPACE: Special Accessors. (line 39)
44267 * MEM_ALIAS_SET: Special Accessors. (line 9)
44268 * MEM_ALIGN: Special Accessors. (line 36)
44269 * MEM_EXPR: Special Accessors. (line 20)
44270 * MEM_IN_STRUCT_P: Flags. (line 70)
44271 * MEM_KEEP_ALIAS_SET_P: Flags. (line 79)
44272 * MEM_NOTRAP_P: Flags. (line 99)
44273 * MEM_OFFSET: Special Accessors. (line 28)
44274 * MEM_POINTER: Flags. (line 103)
44275 * MEM_READONLY_P: Flags. (line 152)
44276 * MEM_SCALAR_P: Flags. (line 85)
44277 * MEM_SIZE: Special Accessors. (line 31)
44278 * MEM_VOLATILE_P: Flags. (line 94)
44279 * MEMBER_TYPE_FORCES_BLK: Storage Layout. (line 401)
44280 * memory model: Memory model. (line 6)
44281 * memory reference, nonoffsettable: Simple Constraints. (line 246)
44282 * memory references in constraints: Simple Constraints. (line 17)
44283 * memory_barrier instruction pattern: Standard Names. (line 1381)
44284 * MEMORY_MOVE_COST: Costs. (line 29)
44285 * memory_operand: Machine-Independent Predicates.
44287 * METHOD_TYPE: Types. (line 6)
44288 * MIN_UNITS_PER_WORD: Storage Layout. (line 71)
44289 * MINIMUM_ALIGNMENT: Storage Layout. (line 289)
44290 * MINIMUM_ATOMIC_ALIGNMENT: Storage Layout. (line 188)
44291 * minM3 instruction pattern: Standard Names. (line 234)
44292 * minus: Arithmetic. (line 36)
44293 * minus and attributes: Expressions. (line 64)
44294 * minus, canonicalization of: Insn Canonicalizations.
44296 * MINUS_EXPR: Unary and Binary Expressions.
44298 * MIPS coprocessor-definition macros: MIPS Coprocessors. (line 6)
44299 * mod: Arithmetic. (line 131)
44300 * mod and attributes: Expressions. (line 64)
44301 * mode classes: Machine Modes. (line 219)
44302 * mode iterators in .md files: Mode Iterators. (line 6)
44303 * mode switching: Mode Switching. (line 6)
44304 * MODE_ACCUM: Machine Modes. (line 249)
44305 * MODE_AFTER: Mode Switching. (line 49)
44306 * MODE_BASE_REG_CLASS: Register Classes. (line 112)
44307 * MODE_BASE_REG_REG_CLASS: Register Classes. (line 118)
44308 * MODE_CC <1>: MODE_CC Condition Codes.
44310 * MODE_CC: Machine Modes. (line 268)
44311 * MODE_CODE_BASE_REG_CLASS: Register Classes. (line 125)
44312 * MODE_COMPLEX_FLOAT: Machine Modes. (line 260)
44313 * MODE_COMPLEX_INT: Machine Modes. (line 257)
44314 * MODE_DECIMAL_FLOAT: Machine Modes. (line 237)
44315 * MODE_ENTRY: Mode Switching. (line 54)
44316 * MODE_EXIT: Mode Switching. (line 60)
44317 * MODE_FLOAT: Machine Modes. (line 233)
44318 * MODE_FRACT: Machine Modes. (line 241)
44319 * MODE_FUNCTION: Machine Modes. (line 264)
44320 * MODE_INT: Machine Modes. (line 225)
44321 * MODE_NEEDED: Mode Switching. (line 42)
44322 * MODE_PARTIAL_INT: Machine Modes. (line 229)
44323 * MODE_PRIORITY_TO_MODE: Mode Switching. (line 66)
44324 * MODE_RANDOM: Machine Modes. (line 273)
44325 * MODE_UACCUM: Machine Modes. (line 253)
44326 * MODE_UFRACT: Machine Modes. (line 245)
44327 * MODES_TIEABLE_P: Values in Registers.
44329 * modifiers in constraints: Modifiers. (line 6)
44330 * MODIFY_EXPR: Unary and Binary Expressions.
44332 * MODIFY_JNI_METHOD_CALL: Misc. (line 790)
44333 * MODIFY_TARGET_NAME: Driver. (line 385)
44334 * modM3 instruction pattern: Standard Names. (line 222)
44335 * modulo scheduling: RTL passes. (line 131)
44336 * MOVE_BY_PIECES_P: Costs. (line 113)
44337 * MOVE_MAX: Misc. (line 115)
44338 * MOVE_MAX_PIECES: Costs. (line 119)
44339 * MOVE_RATIO: Costs. (line 97)
44340 * movM instruction pattern: Standard Names. (line 11)
44341 * movmemM instruction pattern: Standard Names. (line 654)
44342 * movmisalignM instruction pattern: Standard Names. (line 126)
44343 * movMODEcc instruction pattern: Standard Names. (line 873)
44344 * movstr instruction pattern: Standard Names. (line 689)
44345 * movstrictM instruction pattern: Standard Names. (line 120)
44346 * msubMN4 instruction pattern: Standard Names. (line 387)
44347 * mulhisi3 instruction pattern: Standard Names. (line 340)
44348 * mulM3 instruction pattern: Standard Names. (line 222)
44349 * mulqihi3 instruction pattern: Standard Names. (line 344)
44350 * mulsidi3 instruction pattern: Standard Names. (line 344)
44351 * mult: Arithmetic. (line 92)
44352 * mult and attributes: Expressions. (line 64)
44353 * mult, canonicalization of: Insn Canonicalizations.
44355 * MULT_EXPR: Unary and Binary Expressions.
44357 * MULTILIB_DEFAULTS: Driver. (line 315)
44358 * MULTILIB_DIRNAMES: Target Fragment. (line 64)
44359 * MULTILIB_EXCEPTIONS: Target Fragment. (line 84)
44360 * MULTILIB_EXTRA_OPTS: Target Fragment. (line 96)
44361 * MULTILIB_MATCHES: Target Fragment. (line 77)
44362 * MULTILIB_OPTIONS: Target Fragment. (line 44)
44363 * multiple alternative constraints: Multi-Alternative. (line 6)
44364 * MULTIPLE_SYMBOL_SPACES: Misc. (line 533)
44365 * multiplication: Arithmetic. (line 92)
44366 * multiplication with signed saturation: Arithmetic. (line 92)
44367 * multiplication with unsigned saturation: Arithmetic. (line 92)
44368 * MUST_USE_SJLJ_EXCEPTIONS: Exception Region Output.
44370 * n in constraint: Simple Constraints. (line 65)
44371 * N_REG_CLASSES: Register Classes. (line 76)
44372 * name: Identifiers. (line 6)
44373 * named address spaces: Named Address Spaces.
44375 * named patterns and conditions: Patterns. (line 47)
44376 * names, pattern: Standard Names. (line 6)
44377 * namespace, scope: Namespaces. (line 6)
44378 * NAMESPACE_DECL <1>: Namespaces. (line 6)
44379 * NAMESPACE_DECL: Declarations. (line 6)
44380 * NATIVE_SYSTEM_HEADER_DIR: Target Fragment. (line 103)
44381 * ne: Comparisons. (line 56)
44382 * ne and attributes: Expressions. (line 64)
44383 * NE_EXPR: Unary and Binary Expressions.
44385 * nearbyintM2 instruction pattern: Standard Names. (line 564)
44386 * neg: Arithmetic. (line 81)
44387 * neg and attributes: Expressions. (line 64)
44388 * neg, canonicalization of: Insn Canonicalizations.
44390 * NEGATE_EXPR: Unary and Binary Expressions.
44392 * negation: Arithmetic. (line 81)
44393 * negation with signed saturation: Arithmetic. (line 81)
44394 * negation with unsigned saturation: Arithmetic. (line 81)
44395 * negM2 instruction pattern: Standard Names. (line 449)
44396 * nested functions, trampolines for: Trampolines. (line 6)
44397 * nested_ptr: GTY Options. (line 186)
44398 * next_bb, prev_bb, FOR_EACH_BB: Basic Blocks. (line 10)
44399 * NEXT_INSN: Insns. (line 30)
44400 * NEXT_OBJC_RUNTIME: Library Calls. (line 94)
44401 * nil: RTL Objects. (line 73)
44402 * NO_DBX_BNSYM_ENSYM: DBX Hooks. (line 39)
44403 * NO_DBX_FUNCTION_END: DBX Hooks. (line 33)
44404 * NO_DBX_GCC_MARKER: File Names and DBX. (line 28)
44405 * NO_DBX_MAIN_SOURCE_DIRECTORY: File Names and DBX. (line 23)
44406 * NO_DOLLAR_IN_LABEL: Misc. (line 497)
44407 * NO_DOT_IN_LABEL: Misc. (line 503)
44408 * NO_FUNCTION_CSE: Costs. (line 209)
44409 * NO_IMPLICIT_EXTERN_C: Misc. (line 376)
44410 * NO_PROFILE_COUNTERS: Profiling. (line 28)
44411 * NO_REGS: Register Classes. (line 17)
44412 * NON_LVALUE_EXPR: Unary and Binary Expressions.
44414 * nondeterministic finite state automaton: Processor pipeline description.
44416 * nonimmediate_operand: Machine-Independent Predicates.
44418 * nonlocal goto handler: Edges. (line 171)
44419 * nonlocal_goto instruction pattern: Standard Names. (line 1221)
44420 * nonlocal_goto_receiver instruction pattern: Standard Names.
44422 * nonmemory_operand: Machine-Independent Predicates.
44424 * nonoffsettable memory reference: Simple Constraints. (line 246)
44425 * nop instruction pattern: Standard Names. (line 1032)
44426 * NOP_EXPR: Unary and Binary Expressions.
44428 * normal predicates: Predicates. (line 31)
44429 * not: Arithmetic. (line 149)
44430 * not and attributes: Expressions. (line 50)
44431 * not equal: Comparisons. (line 56)
44432 * not, canonicalization of: Insn Canonicalizations.
44434 * note: Insns. (line 168)
44435 * note and /i: Flags. (line 59)
44436 * note and /v: Flags. (line 44)
44437 * NOTE_INSN_BASIC_BLOCK, CODE_LABEL, notes: Basic Blocks. (line 41)
44438 * NOTE_INSN_BLOCK_BEG: Insns. (line 193)
44439 * NOTE_INSN_BLOCK_END: Insns. (line 193)
44440 * NOTE_INSN_DELETED: Insns. (line 183)
44441 * NOTE_INSN_DELETED_LABEL: Insns. (line 188)
44442 * NOTE_INSN_EH_REGION_BEG: Insns. (line 199)
44443 * NOTE_INSN_EH_REGION_END: Insns. (line 199)
44444 * NOTE_INSN_FUNCTION_BEG: Insns. (line 223)
44445 * NOTE_INSN_LOOP_BEG: Insns. (line 207)
44446 * NOTE_INSN_LOOP_CONT: Insns. (line 213)
44447 * NOTE_INSN_LOOP_END: Insns. (line 207)
44448 * NOTE_INSN_LOOP_VTOP: Insns. (line 217)
44449 * NOTE_INSN_VAR_LOCATION: Insns. (line 227)
44450 * NOTE_LINE_NUMBER: Insns. (line 168)
44451 * NOTE_SOURCE_FILE: Insns. (line 168)
44452 * NOTE_VAR_LOCATION: Insns. (line 227)
44453 * NOTICE_UPDATE_CC: CC0 Condition Codes.
44455 * NUM_MACHINE_MODES: Machine Modes. (line 286)
44456 * NUM_MODES_FOR_MODE_SWITCHING: Mode Switching. (line 30)
44457 * Number of iterations analysis: Number of iterations.
44459 * o in constraint: Simple Constraints. (line 23)
44460 * OBJC_GEN_METHOD_LABEL: Label Output. (line 412)
44461 * OBJC_JBLEN: Misc. (line 977)
44462 * OBJECT_FORMAT_COFF: Macros for Initialization.
44464 * OFFSET_TYPE: Types. (line 6)
44465 * offsettable address: Simple Constraints. (line 23)
44466 * OImode: Machine Modes. (line 51)
44467 * Omega a solver for linear programming problems: Omega. (line 6)
44468 * OMP_ATOMIC: OpenMP. (line 6)
44469 * OMP_CLAUSE: OpenMP. (line 6)
44470 * OMP_CONTINUE: OpenMP. (line 6)
44471 * OMP_CRITICAL: OpenMP. (line 6)
44472 * OMP_FOR: OpenMP. (line 6)
44473 * OMP_MASTER: OpenMP. (line 6)
44474 * OMP_ORDERED: OpenMP. (line 6)
44475 * OMP_PARALLEL: OpenMP. (line 6)
44476 * OMP_RETURN: OpenMP. (line 6)
44477 * OMP_SECTION: OpenMP. (line 6)
44478 * OMP_SECTIONS: OpenMP. (line 6)
44479 * OMP_SINGLE: OpenMP. (line 6)
44480 * one_cmplM2 instruction pattern: Standard Names. (line 651)
44481 * operand access: Accessors. (line 6)
44482 * Operand Access Routines: SSA Operands. (line 119)
44483 * operand constraints: Constraints. (line 6)
44484 * Operand Iterators: SSA Operands. (line 119)
44485 * operand predicates: Predicates. (line 6)
44486 * operand substitution: Output Template. (line 6)
44487 * operands <1>: Patterns. (line 53)
44488 * operands: SSA Operands. (line 6)
44489 * Operands: Operands. (line 6)
44490 * operator predicates: Predicates. (line 6)
44491 * optc-gen.awk: Options. (line 6)
44492 * Optimization infrastructure for GIMPLE: Tree SSA. (line 6)
44493 * OPTIMIZATION_OPTIONS: Run-time Target. (line 134)
44494 * OPTIMIZE_MODE_SWITCHING: Mode Switching. (line 9)
44495 * option specification files: Options. (line 6)
44496 * OPTION_DEFAULT_SPECS: Driver. (line 88)
44497 * optional hardware or system features: Run-time Target. (line 59)
44498 * options, directory search: Including Patterns. (line 44)
44499 * order of register allocation: Allocation Order. (line 6)
44500 * ORDER_REGS_FOR_LOCAL_ALLOC: Allocation Order. (line 23)
44501 * ordered_comparison_operator: Machine-Independent Predicates.
44503 * ORDERED_EXPR: Unary and Binary Expressions.
44505 * Ordering of Patterns: Pattern Ordering. (line 6)
44506 * ORIGINAL_REGNO: Special Accessors. (line 44)
44507 * other register constraints: Simple Constraints. (line 163)
44508 * OUTGOING_REG_PARM_STACK_SPACE: Stack Arguments. (line 71)
44509 * OUTGOING_REGNO: Register Basics. (line 98)
44510 * output of assembler code: File Framework. (line 6)
44511 * output statements: Output Statement. (line 6)
44512 * output templates: Output Template. (line 6)
44513 * OUTPUT_ADDR_CONST_EXTRA: Data Output. (line 39)
44514 * output_asm_insn: Output Statement. (line 53)
44515 * OUTPUT_QUOTED_STRING: File Framework. (line 93)
44516 * OVERLOAD: Functions for C++. (line 6)
44517 * OVERRIDE_ABI_FORMAT: Register Arguments. (line 140)
44518 * OVERRIDE_OPTIONS: Run-time Target. (line 105)
44519 * OVL_CURRENT: Functions for C++. (line 6)
44520 * OVL_NEXT: Functions for C++. (line 6)
44521 * p in constraint: Simple Constraints. (line 154)
44522 * PAD_VARARGS_DOWN: Register Arguments. (line 221)
44523 * parallel: Side Effects. (line 204)
44524 * param_is: GTY Options. (line 114)
44525 * parameters, c++ abi: C++ ABI. (line 6)
44526 * parameters, miscellaneous: Misc. (line 6)
44527 * parameters, precompiled headers: PCH Target. (line 6)
44528 * paramN_is: GTY Options. (line 132)
44529 * parity: Arithmetic. (line 232)
44530 * parityM2 instruction pattern: Standard Names. (line 645)
44531 * PARM_BOUNDARY: Storage Layout. (line 145)
44532 * PARM_DECL: Declarations. (line 6)
44533 * PARSE_LDD_OUTPUT: Macros for Initialization.
44535 * passes and files of the compiler: Passes. (line 6)
44536 * passing arguments: Interface. (line 36)
44537 * PATH_SEPARATOR: Filesystem. (line 31)
44538 * PATTERN: Insns. (line 288)
44539 * pattern conditions: Patterns. (line 43)
44540 * pattern names: Standard Names. (line 6)
44541 * Pattern Ordering: Pattern Ordering. (line 6)
44542 * patterns: Patterns. (line 6)
44543 * pc: Regs and Memory. (line 361)
44544 * pc and attributes: Insn Lengths. (line 20)
44545 * pc, RTL sharing: Sharing. (line 25)
44546 * PC_REGNUM: Register Basics. (line 112)
44547 * pc_rtx: Regs and Memory. (line 366)
44548 * PCC_BITFIELD_TYPE_MATTERS: Storage Layout. (line 315)
44549 * PCC_STATIC_STRUCT_RETURN: Aggregate Return. (line 65)
44550 * PDImode: Machine Modes. (line 40)
44551 * peephole optimization, RTL representation: Side Effects. (line 238)
44552 * peephole optimizer definitions: Peephole Definitions.
44554 * per-function data: Per-Function Data. (line 6)
44555 * percent sign: Output Template. (line 6)
44556 * PHI nodes: SSA. (line 31)
44557 * phi_arg_d: GIMPLE_PHI. (line 28)
44558 * PHI_ARG_DEF: SSA. (line 71)
44559 * PHI_ARG_EDGE: SSA. (line 68)
44560 * PHI_ARG_ELT: SSA. (line 63)
44561 * PHI_NUM_ARGS: SSA. (line 59)
44562 * PHI_RESULT: SSA. (line 56)
44563 * PIC: PIC. (line 6)
44564 * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED: PIC. (line 26)
44565 * PIC_OFFSET_TABLE_REGNUM: PIC. (line 16)
44566 * pipeline hazard recognizer: Processor pipeline description.
44568 * Plugins: Plugins. (line 6)
44569 * plus: Arithmetic. (line 14)
44570 * plus and attributes: Expressions. (line 64)
44571 * plus, canonicalization of: Insn Canonicalizations.
44573 * PLUS_EXPR: Unary and Binary Expressions.
44575 * Pmode: Misc. (line 344)
44576 * pmode_register_operand: Machine-Independent Predicates.
44578 * pointer: Types. (line 6)
44579 * POINTER_PLUS_EXPR: Unary and Binary Expressions.
44581 * POINTER_SIZE: Storage Layout. (line 83)
44582 * POINTER_TYPE: Types. (line 6)
44583 * POINTERS_EXTEND_UNSIGNED: Storage Layout. (line 89)
44584 * pop_operand: Machine-Independent Predicates.
44586 * popcount: Arithmetic. (line 228)
44587 * popcountM2 instruction pattern: Standard Names. (line 639)
44588 * portability: Portability. (line 6)
44589 * position independent code: PIC. (line 6)
44590 * post_dec: Incdec. (line 25)
44591 * post_inc: Incdec. (line 30)
44592 * post_modify: Incdec. (line 33)
44593 * POSTDECREMENT_EXPR: Unary and Binary Expressions.
44595 * POSTINCREMENT_EXPR: Unary and Binary Expressions.
44597 * POWI_MAX_MULTS: Misc. (line 845)
44598 * powM3 instruction pattern: Standard Names. (line 513)
44599 * pragma: Misc. (line 381)
44600 * pre_dec: Incdec. (line 8)
44601 * PRE_GCC3_DWARF_FRAME_REGISTERS: Frame Registers. (line 113)
44602 * pre_inc: Incdec. (line 22)
44603 * pre_modify: Incdec. (line 51)
44604 * PREDECREMENT_EXPR: Unary and Binary Expressions.
44606 * predefined macros: Run-time Target. (line 6)
44607 * predicates: Predicates. (line 6)
44608 * predicates and machine modes: Predicates. (line 31)
44609 * predication <1>: Cond. Exec. Macros. (line 6)
44610 * predication: Conditional Execution.
44612 * predict.def: Profile information.
44614 * PREFERRED_DEBUGGING_TYPE: All Debuggers. (line 42)
44615 * PREFERRED_OUTPUT_RELOAD_CLASS: Register Classes. (line 246)
44616 * PREFERRED_RELOAD_CLASS: Register Classes. (line 211)
44617 * PREFERRED_STACK_BOUNDARY: Storage Layout. (line 159)
44618 * prefetch: Side Effects. (line 312)
44619 * prefetch and /v: Flags. (line 232)
44620 * prefetch instruction pattern: Standard Names. (line 1360)
44621 * PREFETCH_SCHEDULE_BARRIER_P: Flags. (line 232)
44622 * PREINCREMENT_EXPR: Unary and Binary Expressions.
44624 * presence_set: Processor pipeline description.
44626 * preserving SSA form: SSA. (line 76)
44627 * preserving virtual SSA form: SSA. (line 186)
44628 * prev_active_insn: define_peephole. (line 60)
44629 * PREV_INSN: Insns. (line 26)
44630 * PRINT_OPERAND: Instruction Output. (line 81)
44631 * PRINT_OPERAND_ADDRESS: Instruction Output. (line 109)
44632 * PRINT_OPERAND_PUNCT_VALID_P: Instruction Output. (line 102)
44633 * probe_stack instruction pattern: Standard Names. (line 1213)
44634 * processor functional units: Processor pipeline description.
44636 * processor pipeline description: Processor pipeline description.
44638 * product: Arithmetic. (line 92)
44639 * profile feedback: Profile information.
44641 * profile representation: Profile information.
44643 * PROFILE_BEFORE_PROLOGUE: Profiling. (line 35)
44644 * PROFILE_HOOK: Profiling. (line 23)
44645 * profiling, code generation: Profiling. (line 6)
44646 * program counter: Regs and Memory. (line 362)
44647 * prologue: Function Entry. (line 6)
44648 * prologue instruction pattern: Standard Names. (line 1304)
44649 * PROMOTE_MODE: Storage Layout. (line 100)
44650 * pseudo registers: Regs and Memory. (line 9)
44651 * PSImode: Machine Modes. (line 32)
44652 * PTRDIFF_TYPE: Type Layout. (line 184)
44653 * purge_dead_edges <1>: Maintaining the CFG.
44655 * purge_dead_edges: Edges. (line 104)
44656 * push address instruction: Simple Constraints. (line 154)
44657 * PUSH_ARGS: Stack Arguments. (line 18)
44658 * PUSH_ARGS_REVERSED: Stack Arguments. (line 26)
44659 * push_operand: Machine-Independent Predicates.
44661 * push_reload: Addressing Modes. (line 171)
44662 * PUSH_ROUNDING: Stack Arguments. (line 32)
44663 * pushM1 instruction pattern: Standard Names. (line 209)
44664 * PUT_CODE: RTL Objects. (line 47)
44665 * PUT_MODE: Machine Modes. (line 283)
44666 * PUT_REG_NOTE_KIND: Insns. (line 350)
44667 * PUT_SDB_: SDB and DWARF. (line 69)
44668 * QCmode: Machine Modes. (line 197)
44669 * QFmode: Machine Modes. (line 54)
44670 * QImode: Machine Modes. (line 25)
44671 * QImode, in insn: Insns. (line 272)
44672 * QQmode: Machine Modes. (line 103)
44673 * qualified type <1>: Types for C++. (line 6)
44674 * qualified type: Types. (line 6)
44675 * querying function unit reservations: Processor pipeline description.
44677 * question mark: Multi-Alternative. (line 41)
44678 * quotient: Arithmetic. (line 111)
44679 * r in constraint: Simple Constraints. (line 56)
44680 * RANGE_TEST_NON_SHORT_CIRCUIT: Costs. (line 213)
44681 * RDIV_EXPR: Unary and Binary Expressions.
44683 * READONLY_DATA_SECTION_ASM_OP: Sections. (line 63)
44684 * real operands: SSA Operands. (line 6)
44685 * REAL_ARITHMETIC: Floating Point. (line 66)
44686 * REAL_CST: Constant expressions.
44688 * REAL_LIBGCC_SPEC: Driver. (line 187)
44689 * REAL_NM_FILE_NAME: Macros for Initialization.
44691 * REAL_TYPE: Types. (line 6)
44692 * REAL_VALUE_ABS: Floating Point. (line 82)
44693 * REAL_VALUE_ATOF: Floating Point. (line 50)
44694 * REAL_VALUE_FIX: Floating Point. (line 41)
44695 * REAL_VALUE_FROM_INT: Floating Point. (line 99)
44696 * REAL_VALUE_ISINF: Floating Point. (line 59)
44697 * REAL_VALUE_ISNAN: Floating Point. (line 62)
44698 * REAL_VALUE_NEGATE: Floating Point. (line 79)
44699 * REAL_VALUE_NEGATIVE: Floating Point. (line 56)
44700 * REAL_VALUE_TO_INT: Floating Point. (line 93)
44701 * REAL_VALUE_TO_TARGET_DECIMAL128: Data Output. (line 144)
44702 * REAL_VALUE_TO_TARGET_DECIMAL32: Data Output. (line 142)
44703 * REAL_VALUE_TO_TARGET_DECIMAL64: Data Output. (line 143)
44704 * REAL_VALUE_TO_TARGET_DOUBLE: Data Output. (line 140)
44705 * REAL_VALUE_TO_TARGET_LONG_DOUBLE: Data Output. (line 141)
44706 * REAL_VALUE_TO_TARGET_SINGLE: Data Output. (line 139)
44707 * REAL_VALUE_TRUNCATE: Floating Point. (line 86)
44708 * REAL_VALUE_TYPE: Floating Point. (line 26)
44709 * REAL_VALUE_UNSIGNED_FIX: Floating Point. (line 45)
44710 * REAL_VALUES_EQUAL: Floating Point. (line 32)
44711 * REAL_VALUES_LESS: Floating Point. (line 38)
44712 * REALPART_EXPR: Unary and Binary Expressions.
44714 * recog_data.operand: Instruction Output. (line 39)
44715 * recognizing insns: RTL Template. (line 6)
44716 * RECORD_TYPE <1>: Classes. (line 6)
44717 * RECORD_TYPE: Types. (line 6)
44718 * redirect_edge_and_branch: Profile information.
44720 * redirect_edge_and_branch, redirect_jump: Maintaining the CFG.
44722 * reduc_smax_M instruction pattern: Standard Names. (line 240)
44723 * reduc_smin_M instruction pattern: Standard Names. (line 240)
44724 * reduc_splus_M instruction pattern: Standard Names. (line 252)
44725 * reduc_umax_M instruction pattern: Standard Names. (line 246)
44726 * reduc_umin_M instruction pattern: Standard Names. (line 246)
44727 * reduc_uplus_M instruction pattern: Standard Names. (line 258)
44728 * reference: Types. (line 6)
44729 * REFERENCE_TYPE: Types. (line 6)
44730 * reg: Regs and Memory. (line 9)
44731 * reg and /f: Flags. (line 112)
44732 * reg and /i: Flags. (line 107)
44733 * reg and /v: Flags. (line 116)
44734 * reg, RTL sharing: Sharing. (line 17)
44735 * REG_ALLOC_ORDER: Allocation Order. (line 9)
44736 * REG_BR_PRED: Insns. (line 531)
44737 * REG_BR_PROB: Insns. (line 525)
44738 * REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information.
44740 * REG_BR_PROB_BASE, EDGE_FREQUENCY: Profile information.
44742 * REG_CC_SETTER: Insns. (line 496)
44743 * REG_CC_USER: Insns. (line 496)
44744 * REG_CLASS_CONTENTS: Register Classes. (line 86)
44745 * reg_class_contents: Register Basics. (line 59)
44746 * REG_CLASS_FROM_CONSTRAINT: Old Constraints. (line 35)
44747 * REG_CLASS_FROM_LETTER: Old Constraints. (line 27)
44748 * REG_CLASS_NAMES: Register Classes. (line 81)
44749 * REG_CROSSING_JUMP: Insns. (line 409)
44750 * REG_DEAD: Insns. (line 361)
44751 * REG_DEAD, REG_UNUSED: Liveness information.
44753 * REG_DEP_ANTI: Insns. (line 518)
44754 * REG_DEP_OUTPUT: Insns. (line 514)
44755 * REG_DEP_TRUE: Insns. (line 511)
44756 * REG_EH_REGION, EDGE_ABNORMAL_CALL: Edges. (line 110)
44757 * REG_EQUAL: Insns. (line 424)
44758 * REG_EQUIV: Insns. (line 424)
44759 * REG_EXPR: Special Accessors. (line 50)
44760 * REG_FRAME_RELATED_EXPR: Insns. (line 537)
44761 * REG_FUNCTION_VALUE_P: Flags. (line 107)
44762 * REG_INC: Insns. (line 377)
44763 * reg_label and /v: Flags. (line 65)
44764 * REG_LABEL_OPERAND: Insns. (line 391)
44765 * REG_LABEL_TARGET: Insns. (line 400)
44766 * reg_names <1>: Instruction Output. (line 93)
44767 * reg_names: Register Basics. (line 59)
44768 * REG_NONNEG: Insns. (line 383)
44769 * REG_NOTE_KIND: Insns. (line 350)
44770 * REG_NOTES: Insns. (line 324)
44771 * REG_OFFSET: Special Accessors. (line 54)
44772 * REG_OK_STRICT: Register Classes. (line 148)
44773 * REG_PARM_STACK_SPACE: Stack Arguments. (line 56)
44774 * REG_PARM_STACK_SPACE, and FUNCTION_ARG: Register Arguments.
44776 * REG_POINTER: Flags. (line 112)
44777 * REG_SETJMP: Insns. (line 418)
44778 * REG_UNUSED: Insns. (line 370)
44779 * REG_USERVAR_P: Flags. (line 116)
44780 * regclass_for_constraint: C Constraint Interface.
44782 * register allocation order: Allocation Order. (line 6)
44783 * register class definitions: Register Classes. (line 6)
44784 * register class preference constraints: Class Preferences. (line 6)
44785 * register pairs: Values in Registers.
44787 * Register Transfer Language (RTL): RTL. (line 6)
44788 * register usage: Registers. (line 6)
44789 * REGISTER_MOVE_COST: Costs. (line 10)
44790 * REGISTER_NAMES: Instruction Output. (line 9)
44791 * register_operand: Machine-Independent Predicates.
44793 * REGISTER_PREFIX: Instruction Output. (line 137)
44794 * REGISTER_TARGET_PRAGMAS: Misc. (line 382)
44795 * registers arguments: Register Arguments. (line 6)
44796 * registers in constraints: Simple Constraints. (line 56)
44797 * REGMODE_NATURAL_SIZE: Values in Registers.
44799 * REGNO_MODE_CODE_OK_FOR_BASE_P: Register Classes. (line 181)
44800 * REGNO_MODE_OK_FOR_BASE_P: Register Classes. (line 154)
44801 * REGNO_MODE_OK_FOR_REG_BASE_P: Register Classes. (line 166)
44802 * REGNO_OK_FOR_BASE_P: Register Classes. (line 140)
44803 * REGNO_OK_FOR_INDEX_P: Register Classes. (line 194)
44804 * REGNO_REG_CLASS: Register Classes. (line 101)
44805 * regs_ever_live: Function Entry. (line 21)
44806 * regular expressions: Processor pipeline description.
44808 * relative costs: Costs. (line 6)
44809 * RELATIVE_PREFIX_NOT_LINKDIR: Driver. (line 325)
44810 * reload_completed: Standard Names. (line 999)
44811 * reload_in instruction pattern: Standard Names. (line 99)
44812 * reload_in_progress: Standard Names. (line 57)
44813 * reload_out instruction pattern: Standard Names. (line 99)
44814 * reloading: RTL passes. (line 182)
44815 * remainder: Arithmetic. (line 131)
44816 * remainderM3 instruction pattern: Standard Names. (line 472)
44817 * reorder: GTY Options. (line 210)
44818 * representation of RTL: RTL. (line 6)
44819 * reservation delays: Processor pipeline description.
44821 * rest_of_decl_compilation: Parsing pass. (line 52)
44822 * rest_of_type_compilation: Parsing pass. (line 52)
44823 * restore_stack_block instruction pattern: Standard Names. (line 1133)
44824 * restore_stack_function instruction pattern: Standard Names.
44826 * restore_stack_nonlocal instruction pattern: Standard Names.
44828 * RESULT_DECL: Declarations. (line 6)
44829 * return: Side Effects. (line 72)
44830 * return instruction pattern: Standard Names. (line 986)
44831 * return values in registers: Scalar Return. (line 6)
44832 * RETURN_ADDR_IN_PREVIOUS_FRAME: Frame Layout. (line 135)
44833 * RETURN_ADDR_OFFSET: Exception Handling. (line 60)
44834 * RETURN_ADDR_RTX: Frame Layout. (line 124)
44835 * RETURN_ADDRESS_POINTER_REGNUM: Frame Registers. (line 51)
44836 * RETURN_EXPR: Statements for C++. (line 6)
44837 * RETURN_POPS_ARGS: Stack Arguments. (line 90)
44838 * RETURN_STMT: Statements for C++. (line 6)
44839 * return_val: Flags. (line 299)
44840 * return_val, in call_insn: Flags. (line 24)
44841 * return_val, in mem: Flags. (line 85)
44842 * return_val, in reg: Flags. (line 107)
44843 * return_val, in symbol_ref: Flags. (line 220)
44844 * returning aggregate values: Aggregate Return. (line 6)
44845 * returning structures and unions: Interface. (line 10)
44846 * reverse probability: Profile information.
44848 * REVERSE_CONDEXEC_PREDICATES_P: Cond. Exec. Macros. (line 11)
44849 * REVERSE_CONDITION: MODE_CC Condition Codes.
44851 * REVERSIBLE_CC_MODE: MODE_CC Condition Codes.
44853 * right rotate: Arithmetic. (line 190)
44854 * right shift: Arithmetic. (line 185)
44855 * rintM2 instruction pattern: Standard Names. (line 572)
44856 * RISC: Processor pipeline description.
44858 * roots, marking: GGC Roots. (line 6)
44859 * rotate: Arithmetic. (line 190)
44860 * rotatert: Arithmetic. (line 190)
44861 * rotlM3 instruction pattern: Standard Names. (line 441)
44862 * rotrM3 instruction pattern: Standard Names. (line 441)
44863 * ROUND_DIV_EXPR: Unary and Binary Expressions.
44865 * ROUND_MOD_EXPR: Unary and Binary Expressions.
44867 * ROUND_TOWARDS_ZERO: Storage Layout. (line 465)
44868 * ROUND_TYPE_ALIGN: Storage Layout. (line 412)
44869 * roundM2 instruction pattern: Standard Names. (line 548)
44870 * RSHIFT_EXPR: Unary and Binary Expressions.
44872 * RTL addition: Arithmetic. (line 14)
44873 * RTL addition with signed saturation: Arithmetic. (line 14)
44874 * RTL addition with unsigned saturation: Arithmetic. (line 14)
44875 * RTL classes: RTL Classes. (line 6)
44876 * RTL comparison: Arithmetic. (line 43)
44877 * RTL comparison operations: Comparisons. (line 6)
44878 * RTL constant expression types: Constants. (line 6)
44879 * RTL constants: Constants. (line 6)
44880 * RTL declarations: RTL Declarations. (line 6)
44881 * RTL difference: Arithmetic. (line 36)
44882 * RTL expression: RTL Objects. (line 6)
44883 * RTL expressions for arithmetic: Arithmetic. (line 6)
44884 * RTL format: RTL Classes. (line 71)
44885 * RTL format characters: RTL Classes. (line 76)
44886 * RTL function-call insns: Calls. (line 6)
44887 * RTL insn template: RTL Template. (line 6)
44888 * RTL integers: RTL Objects. (line 6)
44889 * RTL memory expressions: Regs and Memory. (line 6)
44890 * RTL object types: RTL Objects. (line 6)
44891 * RTL postdecrement: Incdec. (line 6)
44892 * RTL postincrement: Incdec. (line 6)
44893 * RTL predecrement: Incdec. (line 6)
44894 * RTL preincrement: Incdec. (line 6)
44895 * RTL register expressions: Regs and Memory. (line 6)
44896 * RTL representation: RTL. (line 6)
44897 * RTL side effect expressions: Side Effects. (line 6)
44898 * RTL strings: RTL Objects. (line 6)
44899 * RTL structure sharing assumptions: Sharing. (line 6)
44900 * RTL subtraction: Arithmetic. (line 36)
44901 * RTL subtraction with signed saturation: Arithmetic. (line 36)
44902 * RTL subtraction with unsigned saturation: Arithmetic. (line 36)
44903 * RTL sum: Arithmetic. (line 14)
44904 * RTL vectors: RTL Objects. (line 6)
44905 * RTL_CONST_CALL_P: Flags. (line 19)
44906 * RTL_CONST_OR_PURE_CALL_P: Flags. (line 29)
44907 * RTL_LOOPING_CONST_OR_PURE_CALL_P: Flags. (line 33)
44908 * RTL_PURE_CALL_P: Flags. (line 24)
44909 * RTX (See RTL): RTL Objects. (line 6)
44910 * RTX codes, classes of: RTL Classes. (line 6)
44911 * RTX_FRAME_RELATED_P: Flags. (line 125)
44912 * run-time conventions: Interface. (line 6)
44913 * run-time target specification: Run-time Target. (line 6)
44914 * s in constraint: Simple Constraints. (line 92)
44915 * same_type_p: Types. (line 88)
44916 * SAmode: Machine Modes. (line 148)
44917 * sat_fract: Conversions. (line 90)
44918 * satfractMN2 instruction pattern: Standard Names. (line 825)
44919 * satfractunsMN2 instruction pattern: Standard Names. (line 838)
44920 * satisfies_constraint_: C Constraint Interface.
44922 * SAVE_EXPR: Unary and Binary Expressions.
44924 * save_stack_block instruction pattern: Standard Names. (line 1133)
44925 * save_stack_function instruction pattern: Standard Names. (line 1133)
44926 * save_stack_nonlocal instruction pattern: Standard Names. (line 1133)
44927 * SBSS_SECTION_ASM_OP: Sections. (line 77)
44928 * Scalar evolutions: Scalar evolutions. (line 6)
44929 * scalars, returned as values: Scalar Return. (line 6)
44930 * SCHED_GROUP_P: Flags. (line 166)
44931 * SCmode: Machine Modes. (line 197)
44932 * scratch: Regs and Memory. (line 298)
44933 * scratch operands: Regs and Memory. (line 298)
44934 * scratch, RTL sharing: Sharing. (line 35)
44935 * scratch_operand: Machine-Independent Predicates.
44937 * SDATA_SECTION_ASM_OP: Sections. (line 58)
44938 * SDB_ALLOW_FORWARD_REFERENCES: SDB and DWARF. (line 87)
44939 * SDB_ALLOW_UNKNOWN_REFERENCES: SDB and DWARF. (line 82)
44940 * SDB_DEBUGGING_INFO: SDB and DWARF. (line 9)
44941 * SDB_DELIM: SDB and DWARF. (line 75)
44942 * SDB_OUTPUT_SOURCE_LINE: SDB and DWARF. (line 92)
44943 * SDmode: Machine Modes. (line 85)
44944 * sdot_prodM instruction pattern: Standard Names. (line 264)
44945 * search options: Including Patterns. (line 44)
44946 * SECONDARY_INPUT_RELOAD_CLASS: Register Classes. (line 350)
44947 * SECONDARY_MEMORY_NEEDED: Register Classes. (line 406)
44948 * SECONDARY_MEMORY_NEEDED_MODE: Register Classes. (line 425)
44949 * SECONDARY_MEMORY_NEEDED_RTX: Register Classes. (line 416)
44950 * SECONDARY_OUTPUT_RELOAD_CLASS: Register Classes. (line 351)
44951 * SECONDARY_RELOAD_CLASS: Register Classes. (line 349)
44952 * SELECT_CC_MODE: MODE_CC Condition Codes.
44954 * sequence: Side Effects. (line 254)
44955 * Sequence iterators: Sequence iterators. (line 6)
44956 * set: Side Effects. (line 15)
44957 * set and /f: Flags. (line 125)
44958 * SET_ASM_OP: Label Output. (line 379)
44959 * set_attr: Tagging Insns. (line 31)
44960 * set_attr_alternative: Tagging Insns. (line 49)
44961 * set_bb_seq: GIMPLE sequences. (line 76)
44962 * SET_BY_PIECES_P: Costs. (line 154)
44963 * SET_DEST: Side Effects. (line 69)
44964 * SET_IS_RETURN_P: Flags. (line 175)
44965 * SET_LABEL_KIND: Insns. (line 140)
44966 * set_optab_libfunc: Library Calls. (line 15)
44967 * SET_RATIO: Costs. (line 142)
44968 * SET_SRC: Side Effects. (line 69)
44969 * SET_TYPE_STRUCTURAL_EQUALITY: Types. (line 6)
44970 * setmemM instruction pattern: Standard Names. (line 697)
44971 * SETUP_FRAME_ADDRESSES: Frame Layout. (line 102)
44972 * SF_SIZE: Type Layout. (line 129)
44973 * SFmode: Machine Modes. (line 66)
44974 * sharing of RTL components: Sharing. (line 6)
44975 * shift: Arithmetic. (line 168)
44976 * SHIFT_COUNT_TRUNCATED: Misc. (line 127)
44977 * SHLIB_SUFFIX: Macros for Initialization.
44979 * SHORT_ACCUM_TYPE_SIZE: Type Layout. (line 83)
44980 * SHORT_FRACT_TYPE_SIZE: Type Layout. (line 63)
44981 * SHORT_IMMEDIATES_SIGN_EXTEND: Misc. (line 96)
44982 * SHORT_TYPE_SIZE: Type Layout. (line 16)
44983 * sibcall_epilogue instruction pattern: Standard Names. (line 1330)
44984 * sibling call: Edges. (line 122)
44985 * SIBLING_CALL_P: Flags. (line 179)
44986 * SIG_ATOMIC_TYPE: Type Layout. (line 235)
44987 * sign_extend: Conversions. (line 23)
44988 * sign_extract: Bit-Fields. (line 8)
44989 * sign_extract, canonicalization of: Insn Canonicalizations.
44991 * signed division: Arithmetic. (line 111)
44992 * signed division with signed saturation: Arithmetic. (line 111)
44993 * signed maximum: Arithmetic. (line 136)
44994 * signed minimum: Arithmetic. (line 136)
44995 * SImode: Machine Modes. (line 37)
44996 * simple constraints: Simple Constraints. (line 6)
44997 * sincos math function, implicit usage: Library Calls. (line 84)
44998 * sinM2 instruction pattern: Standard Names. (line 489)
44999 * SIZE_ASM_OP: Label Output. (line 23)
45000 * SIZE_TYPE: Type Layout. (line 168)
45001 * skip: GTY Options. (line 77)
45002 * SLOW_BYTE_ACCESS: Costs. (line 66)
45003 * SLOW_UNALIGNED_ACCESS: Costs. (line 81)
45004 * SMALL_REGISTER_CLASSES: Register Classes. (line 448)
45005 * smax: Arithmetic. (line 136)
45006 * smin: Arithmetic. (line 136)
45007 * sms, swing, software pipelining: RTL passes. (line 131)
45008 * smulM3_highpart instruction pattern: Standard Names. (line 356)
45009 * soft float library: Soft float library routines.
45011 * special: GTY Options. (line 230)
45012 * special predicates: Predicates. (line 31)
45013 * SPECS: Target Fragment. (line 108)
45014 * speed of instructions: Costs. (line 6)
45015 * split_block: Maintaining the CFG.
45017 * splitting instructions: Insn Splitting. (line 6)
45018 * SQmode: Machine Modes. (line 111)
45019 * sqrt: Arithmetic. (line 202)
45020 * sqrtM2 instruction pattern: Standard Names. (line 455)
45021 * square root: Arithmetic. (line 202)
45022 * ss_abs: Arithmetic. (line 195)
45023 * ss_ashift: Arithmetic. (line 168)
45024 * ss_div: Arithmetic. (line 111)
45025 * ss_minus: Arithmetic. (line 36)
45026 * ss_mult: Arithmetic. (line 92)
45027 * ss_neg: Arithmetic. (line 81)
45028 * ss_plus: Arithmetic. (line 14)
45029 * ss_truncate: Conversions. (line 43)
45030 * SSA: SSA. (line 6)
45031 * SSA_NAME_DEF_STMT: SSA. (line 221)
45032 * SSA_NAME_VERSION: SSA. (line 226)
45033 * ssaddM3 instruction pattern: Standard Names. (line 222)
45034 * ssashlM3 instruction pattern: Standard Names. (line 431)
45035 * ssdivM3 instruction pattern: Standard Names. (line 222)
45036 * ssmaddMN4 instruction pattern: Standard Names. (line 379)
45037 * ssmsubMN4 instruction pattern: Standard Names. (line 403)
45038 * ssmulM3 instruction pattern: Standard Names. (line 222)
45039 * ssnegM2 instruction pattern: Standard Names. (line 449)
45040 * sssubM3 instruction pattern: Standard Names. (line 222)
45041 * ssum_widenM3 instruction pattern: Standard Names. (line 274)
45042 * stack arguments: Stack Arguments. (line 6)
45043 * stack frame layout: Frame Layout. (line 6)
45044 * stack smashing protection: Stack Smashing Protection.
45046 * STACK_ALIGNMENT_NEEDED: Frame Layout. (line 48)
45047 * STACK_BOUNDARY: Storage Layout. (line 151)
45048 * STACK_CHECK_BUILTIN: Stack Checking. (line 32)
45049 * STACK_CHECK_FIXED_FRAME_SIZE: Stack Checking. (line 83)
45050 * STACK_CHECK_MAX_FRAME_SIZE: Stack Checking. (line 74)
45051 * STACK_CHECK_MAX_VAR_SIZE: Stack Checking. (line 90)
45052 * STACK_CHECK_MOVING_SP: Stack Checking. (line 54)
45053 * STACK_CHECK_PROBE_INTERVAL_EXP: Stack Checking. (line 46)
45054 * STACK_CHECK_PROTECT: Stack Checking. (line 63)
45055 * STACK_CHECK_STATIC_BUILTIN: Stack Checking. (line 39)
45056 * STACK_DYNAMIC_OFFSET: Frame Layout. (line 75)
45057 * STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory.
45059 * STACK_GROWS_DOWNWARD: Frame Layout. (line 9)
45060 * STACK_PARMS_IN_REG_PARM_AREA: Stack Arguments. (line 81)
45061 * STACK_POINTER_OFFSET: Frame Layout. (line 58)
45062 * STACK_POINTER_OFFSET and virtual registers: Regs and Memory.
45064 * STACK_POINTER_REGNUM: Frame Registers. (line 9)
45065 * STACK_POINTER_REGNUM and virtual registers: Regs and Memory.
45067 * stack_pointer_rtx: Frame Registers. (line 90)
45068 * stack_protect_set instruction pattern: Standard Names. (line 1501)
45069 * stack_protect_test instruction pattern: Standard Names. (line 1511)
45070 * STACK_PUSH_CODE: Frame Layout. (line 17)
45071 * STACK_REG_COVER_CLASS: Stack Registers. (line 23)
45072 * STACK_REGS: Stack Registers. (line 20)
45073 * STACK_SAVEAREA_MODE: Storage Layout. (line 428)
45074 * STACK_SIZE_MODE: Storage Layout. (line 440)
45075 * STACK_SLOT_ALIGNMENT: Storage Layout. (line 266)
45076 * standard pattern names: Standard Names. (line 6)
45077 * STANDARD_INCLUDE_COMPONENT: Driver. (line 425)
45078 * STANDARD_INCLUDE_DIR: Driver. (line 417)
45079 * STANDARD_STARTFILE_PREFIX: Driver. (line 337)
45080 * STANDARD_STARTFILE_PREFIX_1: Driver. (line 344)
45081 * STANDARD_STARTFILE_PREFIX_2: Driver. (line 351)
45082 * STARTFILE_SPEC: Driver. (line 210)
45083 * STARTING_FRAME_OFFSET: Frame Layout. (line 39)
45084 * STARTING_FRAME_OFFSET and virtual registers: Regs and Memory.
45086 * Statement and operand traversals: Statement and operand traversals.
45088 * Statement Sequences: Statement Sequences.
45090 * statements <1>: Statements for C++. (line 6)
45091 * statements: Function Properties.
45093 * Statements: Statements. (line 6)
45094 * Static profile estimation: Profile information.
45096 * static single assignment: SSA. (line 6)
45097 * STATIC_CHAIN_INCOMING_REGNUM: Frame Registers. (line 64)
45098 * STATIC_CHAIN_REGNUM: Frame Registers. (line 63)
45099 * stdarg.h and register arguments: Register Arguments. (line 47)
45100 * STDC_0_IN_SYSTEM_HEADERS: Misc. (line 365)
45101 * STMT_EXPR: Unary and Binary Expressions.
45103 * STMT_IS_FULL_EXPR_P: Statements for C++. (line 22)
45104 * storage layout: Storage Layout. (line 6)
45105 * STORE_BY_PIECES_P: Costs. (line 161)
45106 * STORE_FLAG_VALUE: Misc. (line 216)
45107 * store_multiple instruction pattern: Standard Names. (line 160)
45108 * strcpy: Storage Layout. (line 236)
45109 * STRICT_ALIGNMENT: Storage Layout. (line 310)
45110 * strict_low_part: RTL Declarations. (line 9)
45111 * strict_memory_address_p: Addressing Modes. (line 181)
45112 * STRING_CST: Constant expressions.
45114 * STRING_POOL_ADDRESS_P: Flags. (line 183)
45115 * strlenM instruction pattern: Standard Names. (line 760)
45116 * structure value address: Aggregate Return. (line 6)
45117 * STRUCTURE_SIZE_BOUNDARY: Storage Layout. (line 302)
45118 * structures, returning: Interface. (line 10)
45119 * subM3 instruction pattern: Standard Names. (line 222)
45120 * SUBOBJECT: Statements for C++. (line 6)
45121 * SUBOBJECT_CLEANUP: Statements for C++. (line 6)
45122 * subreg: Regs and Memory. (line 97)
45123 * subreg and /s: Flags. (line 205)
45124 * subreg and /u: Flags. (line 198)
45125 * subreg and /u and /v: Flags. (line 188)
45126 * subreg, in strict_low_part: RTL Declarations. (line 9)
45127 * SUBREG_BYTE: Regs and Memory. (line 289)
45128 * SUBREG_PROMOTED_UNSIGNED_P: Flags. (line 188)
45129 * SUBREG_PROMOTED_UNSIGNED_SET: Flags. (line 198)
45130 * SUBREG_PROMOTED_VAR_P: Flags. (line 205)
45131 * SUBREG_REG: Regs and Memory. (line 289)
45132 * SUCCESS_EXIT_CODE: Host Misc. (line 12)
45133 * SUPPORTS_INIT_PRIORITY: Macros for Initialization.
45135 * SUPPORTS_ONE_ONLY: Label Output. (line 227)
45136 * SUPPORTS_WEAK: Label Output. (line 208)
45137 * SWITCH_BODY: Statements for C++. (line 6)
45138 * SWITCH_COND: Statements for C++. (line 6)
45139 * SWITCH_CURTAILS_COMPILATION: Driver. (line 33)
45140 * SWITCH_STMT: Statements for C++. (line 6)
45141 * SWITCH_TAKES_ARG: Driver. (line 9)
45142 * SWITCHES_NEED_SPACES: Driver. (line 47)
45143 * SYMBOL_FLAG_ANCHOR: Special Accessors. (line 110)
45144 * SYMBOL_FLAG_EXTERNAL: Special Accessors. (line 92)
45145 * SYMBOL_FLAG_FUNCTION: Special Accessors. (line 85)
45146 * SYMBOL_FLAG_HAS_BLOCK_INFO: Special Accessors. (line 106)
45147 * SYMBOL_FLAG_LOCAL: Special Accessors. (line 88)
45148 * SYMBOL_FLAG_SMALL: Special Accessors. (line 97)
45149 * SYMBOL_FLAG_TLS_SHIFT: Special Accessors. (line 101)
45150 * symbol_ref: Constants. (line 76)
45151 * symbol_ref and /f: Flags. (line 183)
45152 * symbol_ref and /i: Flags. (line 220)
45153 * symbol_ref and /u: Flags. (line 10)
45154 * symbol_ref and /v: Flags. (line 224)
45155 * symbol_ref, RTL sharing: Sharing. (line 20)
45156 * SYMBOL_REF_ANCHOR_P: Special Accessors. (line 110)
45157 * SYMBOL_REF_BLOCK: Special Accessors. (line 123)
45158 * SYMBOL_REF_BLOCK_OFFSET: Special Accessors. (line 128)
45159 * SYMBOL_REF_CONSTANT: Special Accessors. (line 71)
45160 * SYMBOL_REF_DATA: Special Accessors. (line 75)
45161 * SYMBOL_REF_DECL: Special Accessors. (line 59)
45162 * SYMBOL_REF_EXTERNAL_P: Special Accessors. (line 92)
45163 * SYMBOL_REF_FLAG: Flags. (line 224)
45164 * SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections. (line 269)
45165 * SYMBOL_REF_FLAGS: Special Accessors. (line 79)
45166 * SYMBOL_REF_FUNCTION_P: Special Accessors. (line 85)
45167 * SYMBOL_REF_HAS_BLOCK_INFO_P: Special Accessors. (line 106)
45168 * SYMBOL_REF_LOCAL_P: Special Accessors. (line 88)
45169 * SYMBOL_REF_SMALL_P: Special Accessors. (line 97)
45170 * SYMBOL_REF_TLS_MODEL: Special Accessors. (line 101)
45171 * SYMBOL_REF_USED: Flags. (line 215)
45172 * SYMBOL_REF_WEAK: Flags. (line 220)
45173 * symbolic label: Sharing. (line 20)
45174 * sync_addMODE instruction pattern: Standard Names. (line 1417)
45175 * sync_andMODE instruction pattern: Standard Names. (line 1417)
45176 * sync_compare_and_swapMODE instruction pattern: Standard Names.
45178 * sync_iorMODE instruction pattern: Standard Names. (line 1417)
45179 * sync_lock_releaseMODE instruction pattern: Standard Names. (line 1482)
45180 * sync_lock_test_and_setMODE instruction pattern: Standard Names.
45182 * sync_nandMODE instruction pattern: Standard Names. (line 1417)
45183 * sync_new_addMODE instruction pattern: Standard Names. (line 1449)
45184 * sync_new_andMODE instruction pattern: Standard Names. (line 1449)
45185 * sync_new_iorMODE instruction pattern: Standard Names. (line 1449)
45186 * sync_new_nandMODE instruction pattern: Standard Names. (line 1449)
45187 * sync_new_subMODE instruction pattern: Standard Names. (line 1449)
45188 * sync_new_xorMODE instruction pattern: Standard Names. (line 1449)
45189 * sync_old_addMODE instruction pattern: Standard Names. (line 1432)
45190 * sync_old_andMODE instruction pattern: Standard Names. (line 1432)
45191 * sync_old_iorMODE instruction pattern: Standard Names. (line 1432)
45192 * sync_old_nandMODE instruction pattern: Standard Names. (line 1432)
45193 * sync_old_subMODE instruction pattern: Standard Names. (line 1432)
45194 * sync_old_xorMODE instruction pattern: Standard Names. (line 1432)
45195 * sync_subMODE instruction pattern: Standard Names. (line 1417)
45196 * sync_xorMODE instruction pattern: Standard Names. (line 1417)
45197 * SYSROOT_HEADERS_SUFFIX_SPEC: Driver. (line 239)
45198 * SYSROOT_SUFFIX_SPEC: Driver. (line 234)
45199 * SYSTEM_INCLUDE_DIR: Driver. (line 408)
45200 * t-TARGET: Target Fragment. (line 6)
45201 * table jump: Basic Blocks. (line 57)
45202 * tablejump instruction pattern: Standard Names. (line 1061)
45203 * tag: GTY Options. (line 82)
45204 * tagging insns: Tagging Insns. (line 6)
45205 * tail calls: Tail Calls. (line 6)
45206 * TAmode: Machine Modes. (line 156)
45207 * target attributes: Target Attributes. (line 6)
45208 * target description macros: Target Macros. (line 6)
45209 * target functions: Target Structure. (line 6)
45210 * target hooks: Target Structure. (line 6)
45211 * target makefile fragment: Target Fragment. (line 6)
45212 * target specifications: Run-time Target. (line 6)
45213 * TARGET_ADDR_SPACE_ADDRESS_MODE: Named Address Spaces.
45215 * TARGET_ADDR_SPACE_CONVERT: Named Address Spaces.
45217 * TARGET_ADDR_SPACE_KEYWORDS: Named Address Spaces.
45219 * TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces.
45221 * TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS: Named Address Spaces.
45223 * TARGET_ADDR_SPACE_POINTER_MODE: Named Address Spaces.
45225 * TARGET_ADDR_SPACE_SUBSET_P: Named Address Spaces.
45227 * TARGET_ADDR_SPACE_VALID_POINTER_MODE: Named Address Spaces.
45229 * TARGET_ADDRESS_COST: Costs. (line 245)
45230 * TARGET_ALIGN_ANON_BITFIELD: Storage Layout. (line 387)
45231 * TARGET_ALLOCATE_INITIAL_VALUE: Misc. (line 727)
45232 * TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS: Misc. (line 999)
45233 * TARGET_ARG_PARTIAL_BYTES: Register Arguments. (line 83)
45234 * TARGET_ARM_EABI_UNWINDER: Exception Region Output.
45236 * TARGET_ASM_ALIGNED_DI_OP: Data Output. (line 10)
45237 * TARGET_ASM_ALIGNED_HI_OP: Data Output. (line 8)
45238 * TARGET_ASM_ALIGNED_SI_OP: Data Output. (line 9)
45239 * TARGET_ASM_ALIGNED_TI_OP: Data Output. (line 11)
45240 * TARGET_ASM_ASSEMBLE_VISIBILITY: Label Output. (line 239)
45241 * TARGET_ASM_BYTE_OP: Data Output. (line 7)
45242 * TARGET_ASM_CAN_OUTPUT_MI_THUNK: Function Entry. (line 237)
45243 * TARGET_ASM_CLOSE_PAREN: Data Output. (line 130)
45244 * TARGET_ASM_CODE_END: File Framework. (line 59)
45245 * TARGET_ASM_CONSTRUCTOR: Macros for Initialization.
45247 * TARGET_ASM_DESTRUCTOR: Macros for Initialization.
45249 * TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL: Dispatch Tables. (line 74)
45250 * TARGET_ASM_EMIT_UNWIND_LABEL: Dispatch Tables. (line 63)
45251 * TARGET_ASM_EXTERNAL_LIBCALL: Label Output. (line 274)
45252 * TARGET_ASM_FILE_END: File Framework. (line 37)
45253 * TARGET_ASM_FILE_START: File Framework. (line 9)
45254 * TARGET_ASM_FILE_START_APP_OFF: File Framework. (line 17)
45255 * TARGET_ASM_FILE_START_FILE_DIRECTIVE: File Framework. (line 31)
45256 * TARGET_ASM_FINAL_POSTSCAN_INSN: Instruction Output. (line 69)
45257 * TARGET_ASM_FUNCTION_BEGIN_EPILOGUE: Function Entry. (line 61)
45258 * TARGET_ASM_FUNCTION_END_PROLOGUE: Function Entry. (line 55)
45259 * TARGET_ASM_FUNCTION_EPILOGUE: Function Entry. (line 68)
45260 * TARGET_ASM_FUNCTION_PROLOGUE: Function Entry. (line 11)
45261 * TARGET_ASM_FUNCTION_RODATA_SECTION: Sections. (line 216)
45262 * TARGET_ASM_GLOBALIZE_DECL_NAME: Label Output. (line 174)
45263 * TARGET_ASM_GLOBALIZE_LABEL: Label Output. (line 165)
45264 * TARGET_ASM_INIT_SECTIONS: Sections. (line 161)
45265 * TARGET_ASM_INTEGER: Data Output. (line 27)
45266 * TARGET_ASM_INTERNAL_LABEL: Label Output. (line 310)
45267 * TARGET_ASM_LTO_END: File Framework. (line 54)
45268 * TARGET_ASM_LTO_START: File Framework. (line 49)
45269 * TARGET_ASM_MARK_DECL_PRESERVED: Label Output. (line 281)
45270 * TARGET_ASM_NAMED_SECTION: File Framework. (line 106)
45271 * TARGET_ASM_OPEN_PAREN: Data Output. (line 129)
45272 * TARGET_ASM_OUTPUT_ANCHOR: Anchored Addresses. (line 44)
45273 * TARGET_ASM_OUTPUT_DWARF_DTPREL: SDB and DWARF. (line 64)
45274 * TARGET_ASM_OUTPUT_MI_THUNK: Function Entry. (line 195)
45275 * TARGET_ASM_RECORD_GCC_SWITCHES: File Framework. (line 136)
45276 * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework. (line 180)
45277 * TARGET_ASM_RELOC_RW_MASK: Sections. (line 170)
45278 * TARGET_ASM_SELECT_RTX_SECTION: Sections. (line 224)
45279 * TARGET_ASM_SELECT_SECTION: Sections. (line 182)
45280 * TARGET_ASM_TRAMPOLINE_TEMPLATE: Trampolines. (line 29)
45281 * TARGET_ASM_TTYPE: Exception Region Output.
45283 * TARGET_ASM_UNALIGNED_DI_OP: Data Output. (line 14)
45284 * TARGET_ASM_UNALIGNED_HI_OP: Data Output. (line 12)
45285 * TARGET_ASM_UNALIGNED_SI_OP: Data Output. (line 13)
45286 * TARGET_ASM_UNALIGNED_TI_OP: Data Output. (line 15)
45287 * TARGET_ASM_UNIQUE_SECTION: Sections. (line 203)
45288 * TARGET_ATTRIBUTE_TABLE: Target Attributes. (line 11)
45289 * TARGET_BINDS_LOCAL_P: Sections. (line 294)
45290 * TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc. (line 825)
45291 * TARGET_BRANCH_TARGET_REGISTER_CLASS: Misc. (line 817)
45292 * TARGET_BUILD_BUILTIN_VA_LIST: Register Arguments. (line 264)
45293 * TARGET_BUILTIN_DECL: Misc. (line 660)
45294 * TARGET_BUILTIN_RECIPROCAL: Addressing Modes. (line 242)
45295 * TARGET_BUILTIN_SETJMP_FRAME_VALUE: Frame Layout. (line 109)
45296 * TARGET_C99_FUNCTIONS: Library Calls. (line 77)
45297 * TARGET_CALLEE_COPIES: Register Arguments. (line 115)
45298 * TARGET_CAN_ELIMINATE: Elimination. (line 75)
45299 * TARGET_CAN_INLINE_P: Target Attributes. (line 128)
45300 * TARGET_CANNOT_FORCE_CONST_MEM: Addressing Modes. (line 223)
45301 * TARGET_CANNOT_MODIFY_JUMPS_P: Misc. (line 803)
45302 * TARGET_CANONICAL_VA_LIST_TYPE: Register Arguments. (line 273)
45303 * TARGET_CASE_VALUES_THRESHOLD: Misc. (line 47)
45304 * TARGET_CC_MODES_COMPATIBLE: MODE_CC Condition Codes.
45306 * TARGET_CHECK_PCH_TARGET_FLAGS: PCH Target. (line 28)
45307 * TARGET_COMMUTATIVE_P: Misc. (line 720)
45308 * TARGET_COMP_TYPE_ATTRIBUTES: Target Attributes. (line 19)
45309 * TARGET_CONST_ANCHOR: Misc. (line 1010)
45310 * TARGET_CONVERT_TO_TYPE: Misc. (line 963)
45311 * TARGET_CPU_CPP_BUILTINS: Run-time Target. (line 9)
45312 * TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI. (line 87)
45313 * TARGET_CXX_CDTOR_RETURNS_THIS: C++ ABI. (line 38)
45314 * TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT: C++ ABI. (line 62)
45315 * TARGET_CXX_COOKIE_HAS_SIZE: C++ ABI. (line 25)
45316 * TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI. (line 54)
45317 * TARGET_CXX_GET_COOKIE_SIZE: C++ ABI. (line 18)
45318 * TARGET_CXX_GUARD_MASK_BIT: C++ ABI. (line 12)
45319 * TARGET_CXX_GUARD_TYPE: C++ ABI. (line 7)
45320 * TARGET_CXX_IMPORT_EXPORT_CLASS: C++ ABI. (line 30)
45321 * TARGET_CXX_KEY_METHOD_MAY_BE_INLINE: C++ ABI. (line 43)
45322 * TARGET_CXX_LIBRARY_RTTI_COMDAT: C++ ABI. (line 69)
45323 * TARGET_CXX_USE_AEABI_ATEXIT: C++ ABI. (line 74)
45324 * TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT: C++ ABI. (line 80)
45325 * TARGET_DECIMAL_FLOAT_SUPPORTED_P: Storage Layout. (line 512)
45326 * TARGET_DECLSPEC: Target Attributes. (line 65)
45327 * TARGET_DEFAULT_PACK_STRUCT: Misc. (line 485)
45328 * TARGET_DEFAULT_SHORT_ENUMS: Type Layout. (line 160)
45329 * TARGET_DEFAULT_TARGET_FLAGS: Run-time Target. (line 56)
45330 * TARGET_DEFERRED_OUTPUT_DEFS: Label Output. (line 394)
45331 * TARGET_DELEGITIMIZE_ADDRESS: Addressing Modes. (line 214)
45332 * TARGET_DLLIMPORT_DECL_ATTRIBUTES: Target Attributes. (line 47)
45333 * TARGET_DWARF_CALLING_CONVENTION: SDB and DWARF. (line 18)
45334 * TARGET_DWARF_HANDLE_FRAME_UNSPEC: Frame Layout. (line 172)
45335 * TARGET_DWARF_REGISTER_SPAN: Exception Region Output.
45337 * TARGET_EDOM: Library Calls. (line 59)
45338 * TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS: Emulated TLS. (line 68)
45339 * TARGET_EMUTLS_GET_ADDRESS: Emulated TLS. (line 19)
45340 * TARGET_EMUTLS_REGISTER_COMMON: Emulated TLS. (line 24)
45341 * TARGET_EMUTLS_TMPL_PREFIX: Emulated TLS. (line 45)
45342 * TARGET_EMUTLS_TMPL_SECTION: Emulated TLS. (line 36)
45343 * TARGET_EMUTLS_VAR_ALIGN_FIXED: Emulated TLS. (line 63)
45344 * TARGET_EMUTLS_VAR_FIELDS: Emulated TLS. (line 49)
45345 * TARGET_EMUTLS_VAR_INIT: Emulated TLS. (line 57)
45346 * TARGET_EMUTLS_VAR_PREFIX: Emulated TLS. (line 41)
45347 * TARGET_EMUTLS_VAR_SECTION: Emulated TLS. (line 31)
45348 * TARGET_ENCODE_SECTION_INFO: Sections. (line 245)
45349 * TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes.
45351 * TARGET_ENCODE_SECTION_INFO usage: Instruction Output. (line 113)
45352 * TARGET_ENUM_VA_LIST: Scalar Return. (line 96)
45353 * TARGET_EXECUTABLE_SUFFIX: Misc. (line 777)
45354 * TARGET_EXPAND_BUILTIN: Misc. (line 670)
45355 * TARGET_EXPAND_BUILTIN_SAVEREGS: Varargs. (line 92)
45356 * TARGET_EXPAND_TO_RTL_HOOK: Storage Layout. (line 518)
45357 * TARGET_EXPR: Unary and Binary Expressions.
45359 * TARGET_EXTRA_INCLUDES: Misc. (line 856)
45360 * TARGET_EXTRA_LIVE_ON_ENTRY: Tail Calls. (line 21)
45361 * TARGET_EXTRA_PRE_INCLUDES: Misc. (line 863)
45362 * TARGET_FIXED_CONDITION_CODE_REGS: MODE_CC Condition Codes.
45364 * TARGET_FIXED_POINT_SUPPORTED_P: Storage Layout. (line 515)
45365 * target_flags: Run-time Target. (line 52)
45366 * TARGET_FLT_EVAL_METHOD: Type Layout. (line 141)
45367 * TARGET_FN_ABI_VA_LIST: Register Arguments. (line 268)
45368 * TARGET_FOLD_BUILTIN: Misc. (line 691)
45369 * TARGET_FORMAT_TYPES: Misc. (line 883)
45370 * TARGET_FRAME_POINTER_REQUIRED: Elimination. (line 9)
45371 * TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes. (line 87)
45372 * TARGET_FUNCTION_OK_FOR_SIBCALL: Tail Calls. (line 8)
45373 * TARGET_FUNCTION_VALUE: Scalar Return. (line 11)
45374 * TARGET_GET_DRAP_RTX: Misc. (line 993)
45375 * TARGET_GET_PCH_VALIDITY: PCH Target. (line 7)
45376 * TARGET_GIMPLIFY_VA_ARG_EXPR: Register Arguments. (line 279)
45377 * TARGET_HANDLE_C_OPTION: Run-time Target. (line 78)
45378 * TARGET_HANDLE_OPTION: Run-time Target. (line 61)
45379 * TARGET_HANDLE_PRAGMA_EXTERN_PREFIX: Misc. (line 482)
45380 * TARGET_HARD_REGNO_SCRATCH_OK: Values in Registers.
45382 * TARGET_HAS_SINCOS: Library Calls. (line 85)
45383 * TARGET_HAVE_CONDITIONAL_EXECUTION: Misc. (line 839)
45384 * TARGET_HAVE_CTORS_DTORS: Macros for Initialization.
45386 * TARGET_HAVE_NAMED_SECTIONS: File Framework. (line 113)
45387 * TARGET_HAVE_SRODATA_SECTION: Sections. (line 290)
45388 * TARGET_HAVE_SWITCHABLE_BSS_SECTIONS: File Framework. (line 117)
45389 * TARGET_HAVE_TLS: Sections. (line 303)
45390 * TARGET_HELP: Run-time Target. (line 154)
45391 * TARGET_IN_SMALL_DATA_P: Sections. (line 286)
45392 * TARGET_INIT_BUILTINS: Misc. (line 642)
45393 * TARGET_INIT_DWARF_REG_SIZES_EXTRA: Exception Region Output.
45395 * TARGET_INIT_LIBFUNCS: Library Calls. (line 16)
45396 * TARGET_INSERT_ATTRIBUTES: Target Attributes. (line 74)
45397 * TARGET_INSTANTIATE_DECLS: Storage Layout. (line 526)
45398 * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc. (line 917)
45399 * TARGET_INVALID_BINARY_OP: Misc. (line 936)
45400 * TARGET_INVALID_CONVERSION: Misc. (line 923)
45401 * TARGET_INVALID_PARAMETER_TYPE: Misc. (line 942)
45402 * TARGET_INVALID_RETURN_TYPE: Misc. (line 949)
45403 * TARGET_INVALID_UNARY_OP: Misc. (line 929)
45404 * TARGET_INVALID_WITHIN_DOLOOP: Misc. (line 700)
45405 * TARGET_IRA_COVER_CLASSES: Register Classes. (line 511)
45406 * TARGET_LEGITIMATE_ADDRESS_P: Addressing Modes. (line 50)
45407 * TARGET_LEGITIMIZE_ADDRESS: Addressing Modes. (line 128)
45408 * TARGET_LIB_INT_CMP_BIASED: Library Calls. (line 35)
45409 * TARGET_LIBCALL_VALUE: Scalar Return. (line 69)
45410 * TARGET_LIBGCC_CMP_RETURN_MODE: Storage Layout. (line 449)
45411 * TARGET_LIBGCC_SDATA_SECTION: Sections. (line 133)
45412 * TARGET_LIBGCC_SHIFT_COUNT_MODE: Storage Layout. (line 455)
45413 * TARGET_MACHINE_DEPENDENT_REORG: Misc. (line 627)
45414 * TARGET_MANGLE_DECL_ASSEMBLER_NAME: Sections. (line 235)
45415 * TARGET_MANGLE_TYPE: Storage Layout. (line 530)
45416 * TARGET_MAX_ANCHOR_OFFSET: Anchored Addresses. (line 39)
45417 * TARGET_MD_ASM_CLOBBERS: Misc. (line 543)
45418 * TARGET_MEM_CONSTRAINT: Addressing Modes. (line 105)
45419 * TARGET_MEM_REF: Storage References. (line 6)
45420 * TARGET_MERGE_DECL_ATTRIBUTES: Target Attributes. (line 39)
45421 * TARGET_MERGE_TYPE_ATTRIBUTES: Target Attributes. (line 31)
45422 * TARGET_MIN_ANCHOR_OFFSET: Anchored Addresses. (line 33)
45423 * TARGET_MIN_DIVISIONS_FOR_RECIP_MUL: Misc. (line 106)
45424 * TARGET_MODE_REP_EXTENDED: Misc. (line 191)
45425 * TARGET_MS_BITFIELD_LAYOUT_P: Storage Layout. (line 485)
45426 * TARGET_MUST_PASS_IN_STACK: Register Arguments. (line 62)
45427 * TARGET_MUST_PASS_IN_STACK, and FUNCTION_ARG: Register Arguments.
45429 * TARGET_N_FORMAT_TYPES: Misc. (line 888)
45430 * TARGET_NARROW_VOLATILE_BITFIELD: Storage Layout. (line 393)
45431 * TARGET_OBJECT_SUFFIX: Misc. (line 772)
45432 * TARGET_OBJFMT_CPP_BUILTINS: Run-time Target. (line 46)
45433 * TARGET_OPTF: Misc. (line 870)
45434 * TARGET_OPTION_PRAGMA_PARSE: Target Attributes. (line 122)
45435 * TARGET_OPTION_PRINT: Target Attributes. (line 117)
45436 * TARGET_OPTION_RESTORE: Target Attributes. (line 111)
45437 * TARGET_OPTION_SAVE: Target Attributes. (line 105)
45438 * TARGET_OPTION_TRANSLATE_TABLE: Driver. (line 53)
45439 * TARGET_OPTION_VALID_ATTRIBUTE_P: Target Attributes. (line 94)
45440 * TARGET_OS_CPP_BUILTINS: Run-time Target. (line 42)
45441 * TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE: Run-time Target. (line 119)
45442 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES: Misc. (line 892)
45443 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc. (line 898)
45444 * TARGET_OVERRIDES_FORMAT_INIT: Misc. (line 902)
45445 * TARGET_PASS_BY_REFERENCE: Register Arguments. (line 103)
45446 * TARGET_PCH_VALID_P: PCH Target. (line 13)
45447 * TARGET_POSIX_IO: Misc. (line 567)
45448 * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs. (line 153)
45449 * TARGET_PROMOTE_FUNCTION_MODE: Storage Layout. (line 125)
45450 * TARGET_PROMOTE_PROTOTYPES: Stack Arguments. (line 11)
45451 * TARGET_PROMOTED_TYPE: Misc. (line 955)
45452 * TARGET_PTRMEMFUNC_VBIT_LOCATION: Type Layout. (line 278)
45453 * TARGET_RELAXED_ORDERING: Misc. (line 907)
45454 * TARGET_RESOLVE_OVERLOADED_BUILTIN: Misc. (line 680)
45455 * TARGET_RETURN_IN_MEMORY: Aggregate Return. (line 17)
45456 * TARGET_RETURN_IN_MSB: Scalar Return. (line 112)
45457 * TARGET_RTX_COSTS: Costs. (line 219)
45458 * TARGET_SCALAR_MODE_SUPPORTED_P: Register Arguments. (line 291)
45459 * TARGET_SCHED_ADJUST_COST: Scheduling. (line 37)
45460 * TARGET_SCHED_ADJUST_PRIORITY: Scheduling. (line 52)
45461 * TARGET_SCHED_ALLOC_SCHED_CONTEXT: Scheduling. (line 243)
45462 * TARGET_SCHED_CLEAR_SCHED_CONTEXT: Scheduling. (line 258)
45463 * TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling. (line 89)
45464 * TARGET_SCHED_DFA_NEW_CYCLE: Scheduling. (line 204)
45465 * TARGET_SCHED_DFA_POST_ADVANCE_CYCLE: Scheduling. (line 160)
45466 * TARGET_SCHED_DFA_POST_CYCLE_INSN: Scheduling. (line 144)
45467 * TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE: Scheduling. (line 153)
45468 * TARGET_SCHED_DFA_PRE_CYCLE_INSN: Scheduling. (line 132)
45469 * TARGET_SCHED_FINISH: Scheduling. (line 109)
45470 * TARGET_SCHED_FINISH_GLOBAL: Scheduling. (line 126)
45471 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling.
45473 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling.
45475 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling.
45477 * TARGET_SCHED_FREE_SCHED_CONTEXT: Scheduling. (line 262)
45478 * TARGET_SCHED_GEN_SPEC_CHECK: Scheduling. (line 284)
45479 * TARGET_SCHED_H_I_D_EXTENDED: Scheduling. (line 238)
45480 * TARGET_SCHED_INIT: Scheduling. (line 99)
45481 * TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling. (line 149)
45482 * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN: Scheduling. (line 141)
45483 * TARGET_SCHED_INIT_GLOBAL: Scheduling. (line 118)
45484 * TARGET_SCHED_INIT_SCHED_CONTEXT: Scheduling. (line 248)
45485 * TARGET_SCHED_IS_COSTLY_DEPENDENCE: Scheduling. (line 215)
45486 * TARGET_SCHED_ISSUE_RATE: Scheduling. (line 12)
45487 * TARGET_SCHED_NEEDS_BLOCK_P: Scheduling. (line 277)
45488 * TARGET_SCHED_REORDER: Scheduling. (line 60)
45489 * TARGET_SCHED_REORDER2: Scheduling. (line 77)
45490 * TARGET_SCHED_SET_SCHED_CONTEXT: Scheduling. (line 254)
45491 * TARGET_SCHED_SET_SCHED_FLAGS: Scheduling. (line 309)
45492 * TARGET_SCHED_SMS_RES_MII: Scheduling. (line 315)
45493 * TARGET_SCHED_SPECULATE_INSN: Scheduling. (line 266)
45494 * TARGET_SCHED_VARIABLE_ISSUE: Scheduling. (line 24)
45495 * TARGET_SECONDARY_RELOAD: Register Classes. (line 272)
45496 * TARGET_SECTION_TYPE_FLAGS: File Framework. (line 123)
45497 * TARGET_SET_CURRENT_FUNCTION: Misc. (line 754)
45498 * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES: Target Attributes. (line 26)
45499 * TARGET_SETUP_INCOMING_VARARGS: Varargs. (line 101)
45500 * TARGET_SHIFT_TRUNCATION_MASK: Misc. (line 154)
45501 * TARGET_SPLIT_COMPLEX_ARG: Register Arguments. (line 252)
45502 * TARGET_STACK_PROTECT_FAIL: Stack Smashing Protection.
45504 * TARGET_STACK_PROTECT_GUARD: Stack Smashing Protection.
45506 * TARGET_STATIC_CHAIN: Frame Registers. (line 78)
45507 * TARGET_STRICT_ARGUMENT_NAMING: Varargs. (line 137)
45508 * TARGET_STRIP_NAME_ENCODING: Sections. (line 282)
45509 * TARGET_STRUCT_VALUE_RTX: Aggregate Return. (line 45)
45510 * TARGET_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes. (line 345)
45511 * TARGET_TERMINATE_DW2_EH_FRAME_INFO: Exception Region Output.
45513 * TARGET_TRAMPOLINE_ADJUST_ADDRESS: Trampolines. (line 75)
45514 * TARGET_TRAMPOLINE_INIT: Trampolines. (line 56)
45515 * TARGET_UNSPEC_MAY_TRAP_P: Misc. (line 746)
45516 * TARGET_UNWIND_EMIT: Dispatch Tables. (line 81)
45517 * TARGET_UNWIND_INFO: Exception Region Output.
45519 * TARGET_UNWIND_TABLES_DEFAULT: Exception Region Output.
45521 * TARGET_UNWIND_WORD_MODE: Storage Layout. (line 461)
45522 * TARGET_UPDATE_STACK_BOUNDARY: Misc. (line 989)
45523 * TARGET_USE_ANCHORS_FOR_SYMBOL_P: Anchored Addresses. (line 55)
45524 * TARGET_USE_BLOCKS_FOR_CONSTANT_P: Addressing Modes. (line 235)
45525 * TARGET_USE_JCR_SECTION: Misc. (line 971)
45526 * TARGET_USES_WEAK_UNWIND_INFO: Exception Handling. (line 129)
45527 * TARGET_VALID_DLLIMPORT_ATTRIBUTE_P: Target Attributes. (line 60)
45528 * TARGET_VALID_POINTER_MODE: Register Arguments. (line 285)
45529 * TARGET_VECTOR_MODE_SUPPORTED_P: Register Arguments. (line 303)
45530 * TARGET_VECTORIZE_BUILTIN_CONVERSION: Addressing Modes. (line 320)
45531 * TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes. (line 251)
45532 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN: Addressing Modes. (line 277)
45533 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD: Addressing Modes. (line 289)
45534 * TARGET_VECTORIZE_BUILTIN_VEC_PERM: Addressing Modes. (line 312)
45535 * TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK: Addressing Modes. (line 316)
45536 * TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes.
45538 * TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes.
45540 * TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes.
45542 * TARGET_VERSION: Run-time Target. (line 92)
45543 * TARGET_VTABLE_DATA_ENTRY_DISTANCE: Type Layout. (line 331)
45544 * TARGET_VTABLE_ENTRY_ALIGN: Type Layout. (line 325)
45545 * TARGET_VTABLE_USES_DESCRIPTORS: Type Layout. (line 314)
45546 * TARGET_WEAK_NOT_IN_ARCHIVE_TOC: Label Output. (line 245)
45547 * targetm: Target Structure. (line 7)
45548 * targets, makefile: Makefile. (line 6)
45549 * TCmode: Machine Modes. (line 197)
45550 * TDmode: Machine Modes. (line 94)
45551 * TEMPLATE_DECL: Declarations. (line 6)
45552 * Temporaries: Temporaries. (line 6)
45553 * termination routines: Initialization. (line 6)
45554 * testing constraints: C Constraint Interface.
45556 * TEXT_SECTION_ASM_OP: Sections. (line 38)
45557 * TF_SIZE: Type Layout. (line 132)
45558 * TFmode: Machine Modes. (line 98)
45559 * THEN_CLAUSE: Statements for C++. (line 6)
45560 * THREAD_MODEL_SPEC: Driver. (line 225)
45561 * THROW_EXPR: Unary and Binary Expressions.
45563 * THUNK_DECL: Declarations. (line 6)
45564 * THUNK_DELTA: Declarations. (line 6)
45565 * TImode: Machine Modes. (line 48)
45566 * TImode, in insn: Insns. (line 272)
45567 * TLS_COMMON_ASM_OP: Sections. (line 82)
45568 * TLS_SECTION_ASM_FLAG: Sections. (line 87)
45569 * tm.h macros: Target Macros. (line 6)
45570 * TQFmode: Machine Modes. (line 62)
45571 * TQmode: Machine Modes. (line 119)
45572 * TRAMPOLINE_ALIGNMENT: Trampolines. (line 49)
45573 * TRAMPOLINE_SECTION: Trampolines. (line 40)
45574 * TRAMPOLINE_SIZE: Trampolines. (line 45)
45575 * trampolines for nested functions: Trampolines. (line 6)
45576 * TRANSFER_FROM_TRAMPOLINE: Trampolines. (line 123)
45577 * trap instruction pattern: Standard Names. (line 1340)
45578 * tree <1>: Macros and Functions.
45580 * tree: Tree overview. (line 6)
45581 * Tree SSA: Tree SSA. (line 6)
45582 * TREE_CHAIN: Macros and Functions.
45584 * tree_code <1>: GIMPLE_OMP_FOR. (line 83)
45585 * tree_code <2>: GIMPLE_COND. (line 21)
45586 * tree_code <3>: GIMPLE_ASSIGN. (line 41)
45587 * tree_code: Manipulating GIMPLE statements.
45589 * TREE_CODE: Tree overview. (line 6)
45590 * tree_int_cst_equal: Constant expressions.
45592 * TREE_INT_CST_HIGH: Constant expressions.
45594 * TREE_INT_CST_LOW: Constant expressions.
45596 * tree_int_cst_lt: Constant expressions.
45598 * TREE_LIST: Containers. (line 6)
45599 * TREE_OPERAND: Expression trees. (line 6)
45600 * TREE_PUBLIC <1>: Function Properties.
45602 * TREE_PUBLIC: Function Basics. (line 6)
45603 * TREE_PURPOSE: Containers. (line 6)
45604 * TREE_READONLY: Function Properties.
45606 * tree_size: Macros and Functions.
45608 * TREE_STATIC: Function Properties.
45610 * TREE_STRING_LENGTH: Constant expressions.
45612 * TREE_STRING_POINTER: Constant expressions.
45614 * TREE_THIS_VOLATILE: Function Properties.
45616 * TREE_TYPE <1>: Types for C++. (line 6)
45617 * TREE_TYPE <2>: Function Basics. (line 47)
45618 * TREE_TYPE <3>: Expression trees. (line 6)
45619 * TREE_TYPE <4>: Working with declarations.
45621 * TREE_TYPE <5>: Types. (line 6)
45622 * TREE_TYPE: Macros and Functions.
45624 * TREE_VALUE: Containers. (line 6)
45625 * TREE_VEC: Containers. (line 6)
45626 * TREE_VEC_ELT: Containers. (line 6)
45627 * TREE_VEC_LENGTH: Containers. (line 6)
45628 * TRULY_NOOP_TRUNCATION: Misc. (line 177)
45629 * TRUNC_DIV_EXPR: Unary and Binary Expressions.
45631 * TRUNC_MOD_EXPR: Unary and Binary Expressions.
45633 * truncate: Conversions. (line 38)
45634 * truncMN2 instruction pattern: Standard Names. (line 803)
45635 * TRUTH_AND_EXPR: Unary and Binary Expressions.
45637 * TRUTH_ANDIF_EXPR: Unary and Binary Expressions.
45639 * TRUTH_NOT_EXPR: Unary and Binary Expressions.
45641 * TRUTH_OR_EXPR: Unary and Binary Expressions.
45643 * TRUTH_ORIF_EXPR: Unary and Binary Expressions.
45645 * TRUTH_XOR_EXPR: Unary and Binary Expressions.
45647 * TRY_BLOCK: Statements for C++. (line 6)
45648 * TRY_HANDLERS: Statements for C++. (line 6)
45649 * TRY_STMTS: Statements for C++. (line 6)
45650 * Tuple specific accessors: Tuple specific accessors.
45652 * tuples: Tuple representation.
45654 * type: Types. (line 6)
45655 * type declaration: Declarations. (line 6)
45656 * TYPE_ALIGN <1>: Types for C++. (line 6)
45657 * TYPE_ALIGN: Types. (line 6)
45658 * TYPE_ARG_TYPES <1>: Types for C++. (line 6)
45659 * TYPE_ARG_TYPES: Types. (line 6)
45660 * TYPE_ASM_OP: Label Output. (line 55)
45661 * TYPE_ATTRIBUTES: Attributes. (line 25)
45662 * TYPE_BINFO: Classes. (line 6)
45663 * TYPE_BUILT_IN: Types for C++. (line 68)
45664 * TYPE_CANONICAL: Types. (line 6)
45665 * TYPE_CONTEXT <1>: Types for C++. (line 6)
45666 * TYPE_CONTEXT: Types. (line 6)
45667 * TYPE_DECL: Declarations. (line 6)
45668 * TYPE_FIELDS <1>: Classes. (line 6)
45669 * TYPE_FIELDS <2>: Types for C++. (line 6)
45670 * TYPE_FIELDS: Types. (line 6)
45671 * TYPE_HAS_ARRAY_NEW_OPERATOR: Classes. (line 96)
45672 * TYPE_HAS_DEFAULT_CONSTRUCTOR: Classes. (line 81)
45673 * TYPE_HAS_MUTABLE_P: Classes. (line 86)
45674 * TYPE_HAS_NEW_OPERATOR: Classes. (line 93)
45675 * TYPE_MAIN_VARIANT <1>: Types for C++. (line 6)
45676 * TYPE_MAIN_VARIANT: Types. (line 6)
45677 * TYPE_MAX_VALUE: Types. (line 6)
45678 * TYPE_METHOD_BASETYPE <1>: Types for C++. (line 6)
45679 * TYPE_METHOD_BASETYPE: Types. (line 6)
45680 * TYPE_METHODS: Classes. (line 6)
45681 * TYPE_MIN_VALUE: Types. (line 6)
45682 * TYPE_NAME <1>: Types for C++. (line 6)
45683 * TYPE_NAME: Types. (line 6)
45684 * TYPE_NOTHROW_P: Functions for C++. (line 154)
45685 * TYPE_OFFSET_BASETYPE <1>: Types for C++. (line 6)
45686 * TYPE_OFFSET_BASETYPE: Types. (line 6)
45687 * TYPE_OPERAND_FMT: Label Output. (line 66)
45688 * TYPE_OVERLOADS_ARRAY_REF: Classes. (line 104)
45689 * TYPE_OVERLOADS_ARROW: Classes. (line 107)
45690 * TYPE_OVERLOADS_CALL_EXPR: Classes. (line 100)
45691 * TYPE_POLYMORPHIC_P: Classes. (line 77)
45692 * TYPE_PRECISION <1>: Types for C++. (line 6)
45693 * TYPE_PRECISION: Types. (line 6)
45694 * TYPE_PTR_P: Types for C++. (line 74)
45695 * TYPE_PTRFN_P: Types for C++. (line 78)
45696 * TYPE_PTRMEM_P: Types for C++. (line 6)
45697 * TYPE_PTROB_P: Types for C++. (line 81)
45698 * TYPE_PTROBV_P: Types for C++. (line 6)
45699 * TYPE_QUAL_CONST <1>: Types for C++. (line 6)
45700 * TYPE_QUAL_CONST: Types. (line 6)
45701 * TYPE_QUAL_RESTRICT <1>: Types for C++. (line 6)
45702 * TYPE_QUAL_RESTRICT: Types. (line 6)
45703 * TYPE_QUAL_VOLATILE <1>: Types for C++. (line 6)
45704 * TYPE_QUAL_VOLATILE: Types. (line 6)
45705 * TYPE_RAISES_EXCEPTIONS: Functions for C++. (line 149)
45706 * TYPE_SIZE <1>: Types for C++. (line 6)
45707 * TYPE_SIZE: Types. (line 6)
45708 * TYPE_STRUCTURAL_EQUALITY_P: Types. (line 6)
45709 * TYPE_UNQUALIFIED <1>: Types for C++. (line 6)
45710 * TYPE_UNQUALIFIED: Types. (line 6)
45711 * TYPE_VFIELD: Classes. (line 6)
45712 * TYPENAME_TYPE: Types for C++. (line 6)
45713 * TYPENAME_TYPE_FULLNAME <1>: Types for C++. (line 6)
45714 * TYPENAME_TYPE_FULLNAME: Types. (line 6)
45715 * TYPEOF_TYPE: Types for C++. (line 6)
45716 * UDAmode: Machine Modes. (line 168)
45717 * udiv: Arithmetic. (line 125)
45718 * udivM3 instruction pattern: Standard Names. (line 222)
45719 * udivmodM4 instruction pattern: Standard Names. (line 428)
45720 * udot_prodM instruction pattern: Standard Names. (line 265)
45721 * UDQmode: Machine Modes. (line 136)
45722 * UHAmode: Machine Modes. (line 160)
45723 * UHQmode: Machine Modes. (line 128)
45724 * UINT16_TYPE: Type Layout. (line 241)
45725 * UINT32_TYPE: Type Layout. (line 242)
45726 * UINT64_TYPE: Type Layout. (line 243)
45727 * UINT8_TYPE: Type Layout. (line 240)
45728 * UINT_FAST16_TYPE: Type Layout. (line 257)
45729 * UINT_FAST32_TYPE: Type Layout. (line 258)
45730 * UINT_FAST64_TYPE: Type Layout. (line 259)
45731 * UINT_FAST8_TYPE: Type Layout. (line 256)
45732 * UINT_LEAST16_TYPE: Type Layout. (line 249)
45733 * UINT_LEAST32_TYPE: Type Layout. (line 250)
45734 * UINT_LEAST64_TYPE: Type Layout. (line 251)
45735 * UINT_LEAST8_TYPE: Type Layout. (line 248)
45736 * UINTMAX_TYPE: Type Layout. (line 224)
45737 * UINTPTR_TYPE: Type Layout. (line 261)
45738 * umaddMN4 instruction pattern: Standard Names. (line 375)
45739 * umax: Arithmetic. (line 144)
45740 * umaxM3 instruction pattern: Standard Names. (line 222)
45741 * umin: Arithmetic. (line 144)
45742 * uminM3 instruction pattern: Standard Names. (line 222)
45743 * umod: Arithmetic. (line 131)
45744 * umodM3 instruction pattern: Standard Names. (line 222)
45745 * umsubMN4 instruction pattern: Standard Names. (line 399)
45746 * umulhisi3 instruction pattern: Standard Names. (line 347)
45747 * umulM3_highpart instruction pattern: Standard Names. (line 361)
45748 * umulqihi3 instruction pattern: Standard Names. (line 347)
45749 * umulsidi3 instruction pattern: Standard Names. (line 347)
45750 * unchanging: Flags. (line 324)
45751 * unchanging, in call_insn: Flags. (line 19)
45752 * unchanging, in jump_insn, call_insn and insn: Flags. (line 39)
45753 * unchanging, in mem: Flags. (line 152)
45754 * unchanging, in subreg: Flags. (line 188)
45755 * unchanging, in symbol_ref: Flags. (line 10)
45756 * UNEQ_EXPR: Unary and Binary Expressions.
45758 * UNGE_EXPR: Unary and Binary Expressions.
45760 * UNGT_EXPR: Unary and Binary Expressions.
45762 * UNION_TYPE <1>: Classes. (line 6)
45763 * UNION_TYPE: Types. (line 6)
45764 * unions, returning: Interface. (line 10)
45765 * UNITS_PER_SIMD_WORD: Storage Layout. (line 77)
45766 * UNITS_PER_WORD: Storage Layout. (line 67)
45767 * UNKNOWN_TYPE <1>: Types for C++. (line 6)
45768 * UNKNOWN_TYPE: Types. (line 6)
45769 * UNLE_EXPR: Unary and Binary Expressions.
45771 * UNLIKELY_EXECUTED_TEXT_SECTION_NAME: Sections. (line 49)
45772 * UNLT_EXPR: Unary and Binary Expressions.
45774 * UNORDERED_EXPR: Unary and Binary Expressions.
45776 * unshare_all_rtl: Sharing. (line 58)
45777 * unsigned division: Arithmetic. (line 125)
45778 * unsigned division with unsigned saturation: Arithmetic. (line 125)
45779 * unsigned greater than: Comparisons. (line 64)
45780 * unsigned less than: Comparisons. (line 68)
45781 * unsigned minimum and maximum: Arithmetic. (line 144)
45782 * unsigned_fix: Conversions. (line 77)
45783 * unsigned_float: Conversions. (line 62)
45784 * unsigned_fract_convert: Conversions. (line 97)
45785 * unsigned_sat_fract: Conversions. (line 103)
45786 * unspec: Side Effects. (line 287)
45787 * unspec_volatile: Side Effects. (line 287)
45788 * untyped_call instruction pattern: Standard Names. (line 971)
45789 * untyped_return instruction pattern: Standard Names. (line 1021)
45790 * UPDATE_PATH_HOST_CANONICALIZE (PATH): Filesystem. (line 59)
45791 * update_ssa: SSA. (line 76)
45792 * update_stmt <1>: SSA Operands. (line 6)
45793 * update_stmt: Manipulating GIMPLE statements.
45795 * update_stmt_if_modified: Manipulating GIMPLE statements.
45797 * UQQmode: Machine Modes. (line 123)
45798 * US Software GOFAST, floating point emulation library: Library Calls.
45800 * us_ashift: Arithmetic. (line 168)
45801 * us_minus: Arithmetic. (line 36)
45802 * us_mult: Arithmetic. (line 92)
45803 * us_neg: Arithmetic. (line 81)
45804 * us_plus: Arithmetic. (line 14)
45805 * US_SOFTWARE_GOFAST: Library Calls. (line 45)
45806 * us_truncate: Conversions. (line 48)
45807 * usaddM3 instruction pattern: Standard Names. (line 222)
45808 * USAmode: Machine Modes. (line 164)
45809 * usashlM3 instruction pattern: Standard Names. (line 431)
45810 * usdivM3 instruction pattern: Standard Names. (line 222)
45811 * use: Side Effects. (line 162)
45812 * USE_C_ALLOCA: Host Misc. (line 19)
45813 * USE_LD_AS_NEEDED: Driver. (line 198)
45814 * USE_LOAD_POST_DECREMENT: Costs. (line 174)
45815 * USE_LOAD_POST_INCREMENT: Costs. (line 169)
45816 * USE_LOAD_PRE_DECREMENT: Costs. (line 184)
45817 * USE_LOAD_PRE_INCREMENT: Costs. (line 179)
45818 * use_optype_d: Manipulating GIMPLE statements.
45820 * use_param: GTY Options. (line 114)
45821 * use_paramN: GTY Options. (line 132)
45822 * use_params: GTY Options. (line 140)
45823 * USE_SELECT_SECTION_FOR_FUNCTIONS: Sections. (line 195)
45824 * USE_STORE_POST_DECREMENT: Costs. (line 194)
45825 * USE_STORE_POST_INCREMENT: Costs. (line 189)
45826 * USE_STORE_PRE_DECREMENT: Costs. (line 204)
45827 * USE_STORE_PRE_INCREMENT: Costs. (line 199)
45828 * used: Flags. (line 342)
45829 * used, in symbol_ref: Flags. (line 215)
45830 * USER_LABEL_PREFIX: Instruction Output. (line 139)
45831 * USING_STMT: Statements for C++. (line 6)
45832 * usmaddMN4 instruction pattern: Standard Names. (line 383)
45833 * usmsubMN4 instruction pattern: Standard Names. (line 407)
45834 * usmulhisi3 instruction pattern: Standard Names. (line 351)
45835 * usmulM3 instruction pattern: Standard Names. (line 222)
45836 * usmulqihi3 instruction pattern: Standard Names. (line 351)
45837 * usmulsidi3 instruction pattern: Standard Names. (line 351)
45838 * usnegM2 instruction pattern: Standard Names. (line 449)
45839 * USQmode: Machine Modes. (line 132)
45840 * ussubM3 instruction pattern: Standard Names. (line 222)
45841 * usum_widenM3 instruction pattern: Standard Names. (line 275)
45842 * UTAmode: Machine Modes. (line 172)
45843 * UTQmode: Machine Modes. (line 140)
45844 * V in constraint: Simple Constraints. (line 43)
45845 * VA_ARG_EXPR: Unary and Binary Expressions.
45847 * values, returned by functions: Scalar Return. (line 6)
45848 * VAR_DECL: Declarations. (line 6)
45849 * var_location: Debug Information. (line 14)
45850 * varargs implementation: Varargs. (line 6)
45851 * variable: Declarations. (line 6)
45852 * Variable Location Debug Information in RTL: Debug Information.
45854 * vashlM3 instruction pattern: Standard Names. (line 445)
45855 * vashrM3 instruction pattern: Standard Names. (line 445)
45856 * vec_concat: Vector Operations. (line 28)
45857 * vec_duplicate: Vector Operations. (line 33)
45858 * VEC_EXTRACT_EVEN_EXPR: Vectors. (line 6)
45859 * vec_extract_evenM instruction pattern: Standard Names. (line 176)
45860 * VEC_EXTRACT_ODD_EXPR: Vectors. (line 6)
45861 * vec_extract_oddM instruction pattern: Standard Names. (line 183)
45862 * vec_extractM instruction pattern: Standard Names. (line 171)
45863 * vec_initM instruction pattern: Standard Names. (line 204)
45864 * VEC_INTERLEAVE_HIGH_EXPR: Vectors. (line 6)
45865 * vec_interleave_highM instruction pattern: Standard Names. (line 190)
45866 * VEC_INTERLEAVE_LOW_EXPR: Vectors. (line 6)
45867 * vec_interleave_lowM instruction pattern: Standard Names. (line 197)
45868 * VEC_LSHIFT_EXPR: Vectors. (line 6)
45869 * vec_merge: Vector Operations. (line 11)
45870 * VEC_PACK_FIX_TRUNC_EXPR: Vectors. (line 6)
45871 * VEC_PACK_SAT_EXPR: Vectors. (line 6)
45872 * vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line 302)
45873 * vec_pack_ssat_M instruction pattern: Standard Names. (line 295)
45874 * VEC_PACK_TRUNC_EXPR: Vectors. (line 6)
45875 * vec_pack_trunc_M instruction pattern: Standard Names. (line 288)
45876 * vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line 302)
45877 * vec_pack_usat_M instruction pattern: Standard Names. (line 295)
45878 * VEC_RSHIFT_EXPR: Vectors. (line 6)
45879 * vec_select: Vector Operations. (line 19)
45880 * vec_setM instruction pattern: Standard Names. (line 166)
45881 * vec_shl_M instruction pattern: Standard Names. (line 282)
45882 * vec_shr_M instruction pattern: Standard Names. (line 282)
45883 * VEC_UNPACK_FLOAT_HI_EXPR: Vectors. (line 6)
45884 * VEC_UNPACK_FLOAT_LO_EXPR: Vectors. (line 6)
45885 * VEC_UNPACK_HI_EXPR: Vectors. (line 6)
45886 * VEC_UNPACK_LO_EXPR: Vectors. (line 6)
45887 * vec_unpacks_float_hi_M instruction pattern: Standard Names.
45889 * vec_unpacks_float_lo_M instruction pattern: Standard Names.
45891 * vec_unpacks_hi_M instruction pattern: Standard Names. (line 309)
45892 * vec_unpacks_lo_M instruction pattern: Standard Names. (line 309)
45893 * vec_unpacku_float_hi_M instruction pattern: Standard Names.
45895 * vec_unpacku_float_lo_M instruction pattern: Standard Names.
45897 * vec_unpacku_hi_M instruction pattern: Standard Names. (line 317)
45898 * vec_unpacku_lo_M instruction pattern: Standard Names. (line 317)
45899 * VEC_WIDEN_MULT_HI_EXPR: Vectors. (line 6)
45900 * VEC_WIDEN_MULT_LO_EXPR: Vectors. (line 6)
45901 * vec_widen_smult_hi_M instruction pattern: Standard Names. (line 333)
45902 * vec_widen_smult_lo_M instruction pattern: Standard Names. (line 333)
45903 * vec_widen_umult_hi_M instruction pattern: Standard Names. (line 333)
45904 * vec_widen_umult_lo__M instruction pattern: Standard Names. (line 333)
45905 * vector: Containers. (line 6)
45906 * vector operations: Vector Operations. (line 6)
45907 * VECTOR_CST: Constant expressions.
45909 * VECTOR_STORE_FLAG_VALUE: Misc. (line 308)
45910 * virtual operands: SSA Operands. (line 6)
45911 * VIRTUAL_INCOMING_ARGS_REGNUM: Regs and Memory. (line 59)
45912 * VIRTUAL_OUTGOING_ARGS_REGNUM: Regs and Memory. (line 87)
45913 * VIRTUAL_STACK_DYNAMIC_REGNUM: Regs and Memory. (line 78)
45914 * VIRTUAL_STACK_VARS_REGNUM: Regs and Memory. (line 69)
45915 * VLIW: Processor pipeline description.
45917 * vlshrM3 instruction pattern: Standard Names. (line 445)
45918 * VMS: Filesystem. (line 37)
45919 * VMS_DEBUGGING_INFO: VMS Debug. (line 9)
45920 * VOID_TYPE: Types. (line 6)
45921 * VOIDmode: Machine Modes. (line 190)
45922 * volatil: Flags. (line 356)
45923 * volatil, in insn, call_insn, jump_insn, code_label, barrier, and note: Flags.
45925 * volatil, in label_ref and reg_label: Flags. (line 65)
45926 * volatil, in mem, asm_operands, and asm_input: Flags. (line 94)
45927 * volatil, in reg: Flags. (line 116)
45928 * volatil, in subreg: Flags. (line 188)
45929 * volatil, in symbol_ref: Flags. (line 224)
45930 * volatile memory references: Flags. (line 357)
45931 * volatile, in prefetch: Flags. (line 232)
45932 * voptype_d: Manipulating GIMPLE statements.
45934 * voting between constraint alternatives: Class Preferences. (line 6)
45935 * vrotlM3 instruction pattern: Standard Names. (line 445)
45936 * vrotrM3 instruction pattern: Standard Names. (line 445)
45937 * walk_dominator_tree: SSA. (line 256)
45938 * walk_gimple_op: Statement and operand traversals.
45940 * walk_gimple_seq: Statement and operand traversals.
45942 * walk_gimple_stmt: Statement and operand traversals.
45944 * walk_use_def_chains: SSA. (line 232)
45945 * WCHAR_TYPE: Type Layout. (line 192)
45946 * WCHAR_TYPE_SIZE: Type Layout. (line 200)
45947 * which_alternative: Output Statement. (line 59)
45948 * WHILE_BODY: Statements for C++. (line 6)
45949 * WHILE_COND: Statements for C++. (line 6)
45950 * WHILE_STMT: Statements for C++. (line 6)
45951 * WIDEST_HARDWARE_FP_SIZE: Type Layout. (line 147)
45952 * WINT_TYPE: Type Layout. (line 205)
45953 * word_mode: Machine Modes. (line 336)
45954 * WORD_REGISTER_OPERATIONS: Misc. (line 63)
45955 * WORD_SWITCH_TAKES_ARG: Driver. (line 20)
45956 * WORDS_BIG_ENDIAN: Storage Layout. (line 29)
45957 * WORDS_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 217)
45958 * X in constraint: Simple Constraints. (line 114)
45959 * x-HOST: Host Fragment. (line 6)
45960 * XCmode: Machine Modes. (line 197)
45961 * XCOFF_DEBUGGING_INFO: DBX Options. (line 13)
45962 * XEXP: Accessors. (line 6)
45963 * XF_SIZE: Type Layout. (line 131)
45964 * XFmode: Machine Modes. (line 79)
45965 * XINT: Accessors. (line 6)
45966 * xm-MACHINE.h <1>: Host Misc. (line 6)
45967 * xm-MACHINE.h: Filesystem. (line 6)
45968 * xor: Arithmetic. (line 163)
45969 * xor, canonicalization of: Insn Canonicalizations.
45971 * xorM3 instruction pattern: Standard Names. (line 222)
45972 * XSTR: Accessors. (line 6)
45973 * XVEC: Accessors. (line 41)
45974 * XVECEXP: Accessors. (line 48)
45975 * XVECLEN: Accessors. (line 44)
45976 * XWINT: Accessors. (line 6)
45977 * zero_extend: Conversions. (line 28)
45978 * zero_extendMN2 instruction pattern: Standard Names. (line 813)
45979 * zero_extract: Bit-Fields. (line 30)
45980 * zero_extract, canonicalization of: Insn Canonicalizations.
45987 Node: Contributing
\x7f5152
45988 Node: Portability
\x7f5893
45989 Node: Interface
\x7f7681
45990 Node: Libgcc
\x7f10721
45991 Node: Integer library routines
\x7f12562
45992 Node: Soft float library routines
\x7f19401
45993 Node: Decimal float library routines
\x7f31338
45994 Node: Fixed-point fractional library routines
\x7f47095
45995 Node: Exception handling routines
\x7f147493
45996 Node: Miscellaneous routines
\x7f148600
45997 Node: Languages
\x7f148983
45998 Node: Source Tree
\x7f150532
45999 Node: Configure Terms
\x7f151114
46000 Node: Top Level
\x7f154072
46001 Node: gcc Directory
\x7f157241
46002 Node: Subdirectories
\x7f158191
46003 Node: Configuration
\x7f160063
46004 Node: Config Fragments
\x7f160783
46005 Node: System Config
\x7f162012
46006 Node: Configuration Files
\x7f162948
46007 Node: Build
\x7f165395
46008 Node: Makefile
\x7f165807
46009 Ref: Makefile-Footnote-1
\x7f172455
46010 Ref: Makefile-Footnote-2
\x7f172600
46011 Node: Library Files
\x7f172672
46012 Node: Headers
\x7f173234
46013 Node: Documentation
\x7f175317
46014 Node: Texinfo Manuals
\x7f176176
46015 Node: Man Page Generation
\x7f178516
46016 Node: Miscellaneous Docs
\x7f180431
46017 Node: Front End
\x7f181820
46018 Node: Front End Directory
\x7f185739
46019 Node: Front End Config
\x7f187059
46020 Node: Front End Makefile
\x7f190001
46021 Node: Back End
\x7f193783
46022 Node: Testsuites
\x7f197462
46023 Node: Test Idioms
\x7f198393
46024 Node: Test Directives
\x7f201790
46025 Node: Directives
\x7f202317
46026 Node: Selectors
\x7f212385
46027 Node: Effective-Target Keywords
\x7f213527
46028 Node: Add Options
\x7f230072
46029 Node: Require Support
\x7f230869
46030 Node: Final Actions
\x7f233376
46031 Node: Ada Tests
\x7f237439
46032 Node: C Tests
\x7f238781
46033 Node: libgcj Tests
\x7f243204
46034 Node: LTO Testing
\x7f244331
46035 Node: gcov Testing
\x7f245936
46036 Node: profopt Testing
\x7f248923
46037 Node: compat Testing
\x7f250638
46038 Node: Torture Tests
\x7f254878
46039 Node: Options
\x7f256495
46040 Node: Option file format
\x7f256935
46041 Node: Option properties
\x7f259684
46042 Node: Passes
\x7f266159
46043 Node: Parsing pass
\x7f266903
46044 Node: Gimplification pass
\x7f270431
46045 Node: Pass manager
\x7f272258
46046 Node: Tree SSA passes
\x7f274053
46047 Node: RTL passes
\x7f296588
46048 Node: RTL
\x7f308931
46049 Node: RTL Objects
\x7f311119
46050 Node: RTL Classes
\x7f314993
46051 Node: Accessors
\x7f319945
46052 Node: Special Accessors
\x7f322339
46053 Node: Flags
\x7f327705
46054 Node: Machine Modes
\x7f343880
46055 Node: Constants
\x7f356196
46056 Node: Regs and Memory
\x7f362225
46057 Node: Arithmetic
\x7f380126
46058 Node: Comparisons
\x7f389758
46059 Node: Bit-Fields
\x7f394050
46060 Node: Vector Operations
\x7f395602
46061 Node: Conversions
\x7f397437
46062 Node: RTL Declarations
\x7f401935
46063 Node: Side Effects
\x7f402756
46064 Node: Incdec
\x7f419078
46065 Node: Assembler
\x7f422413
46066 Node: Debug Information
\x7f423958
46067 Node: Insns
\x7f425156
46068 Node: Calls
\x7f451356
46069 Node: Sharing
\x7f453949
46070 Node: Reading RTL
\x7f457059
46071 Node: GENERIC
\x7f458051
46072 Node: Deficiencies
\x7f459924
46073 Node: Tree overview
\x7f460165
46074 Node: Macros and Functions
\x7f464292
46075 Node: Identifiers
\x7f465117
46076 Node: Containers
\x7f466728
46077 Node: Types
\x7f467885
46078 Node: Declarations
\x7f479981
46079 Node: Working with declarations
\x7f480476
46080 Node: Internal structure
\x7f486082
46081 Node: Current structure hierarchy
\x7f486466
46082 Node: Adding new DECL node types
\x7f488560
46083 Node: Attributes
\x7f492633
46084 Node: Expression trees
\x7f493878
46085 Node: Constant expressions
\x7f495631
46086 Node: Storage References
\x7f499850
46087 Node: Unary and Binary Expressions
\x7f503024
46088 Node: Vectors
\x7f522442
46089 Node: Statements
\x7f527371
46090 Node: Basic Statements
\x7f527891
46091 Node: Blocks
\x7f532398
46092 Node: Statement Sequences
\x7f533802
46093 Node: Empty Statements
\x7f534135
46094 Node: Jumps
\x7f534709
46095 Node: Cleanups
\x7f535362
46096 Node: OpenMP
\x7f537130
46097 Node: Functions
\x7f542877
46098 Node: Function Basics
\x7f543348
46099 Node: Function Properties
\x7f547033
46100 Node: Language-dependent trees
\x7f550162
46101 Node: C and C++ Trees
\x7f551048
46102 Node: Types for C++
\x7f553952
46103 Node: Namespaces
\x7f558922
46104 Node: Classes
\x7f562029
46105 Node: Functions for C++
\x7f567107
46106 Node: Statements for C++
\x7f573360
46107 Node: C++ Expressions
\x7f581408
46108 Node: Java Trees
\x7f582909
46109 Node: GIMPLE
\x7f583022
46110 Node: Tuple representation
\x7f586643
46111 Node: GIMPLE instruction set
\x7f595298
46112 Node: GIMPLE Exception Handling
\x7f596966
46113 Node: Temporaries
\x7f598880
46114 Ref: Temporaries-Footnote-1
\x7f600199
46115 Node: Operands
\x7f600262
46116 Node: Compound Expressions
\x7f601036
46117 Node: Compound Lvalues
\x7f601270
46118 Node: Conditional Expressions
\x7f602036
46119 Node: Logical Operators
\x7f602706
46120 Node: Manipulating GIMPLE statements
\x7f609497
46121 Node: Tuple specific accessors
\x7f615425
46122 Node: `GIMPLE_ASM'
\x7f616244
46123 Node: `GIMPLE_ASSIGN'
\x7f618849
46124 Node: `GIMPLE_BIND'
\x7f622794
46125 Node: `GIMPLE_CALL'
\x7f624601
46126 Node: `GIMPLE_CATCH'
\x7f628860
46127 Node: `GIMPLE_COND'
\x7f630003
46128 Node: `GIMPLE_DEBUG'
\x7f632791
46129 Node: `GIMPLE_EH_FILTER'
\x7f636163
46130 Node: `GIMPLE_LABEL'
\x7f637650
46131 Node: `GIMPLE_NOP'
\x7f638625
46132 Node: `GIMPLE_OMP_ATOMIC_LOAD'
\x7f638994
46133 Node: `GIMPLE_OMP_ATOMIC_STORE'
\x7f639904
46134 Node: `GIMPLE_OMP_CONTINUE'
\x7f640543
46135 Node: `GIMPLE_OMP_CRITICAL'
\x7f641893
46136 Node: `GIMPLE_OMP_FOR'
\x7f642829
46137 Node: `GIMPLE_OMP_MASTER'
\x7f646339
46138 Node: `GIMPLE_OMP_ORDERED'
\x7f646722
46139 Node: `GIMPLE_OMP_PARALLEL'
\x7f647122
46140 Node: `GIMPLE_OMP_RETURN'
\x7f649891
46141 Node: `GIMPLE_OMP_SECTION'
\x7f650541
46142 Node: `GIMPLE_OMP_SECTIONS'
\x7f651207
46143 Node: `GIMPLE_OMP_SINGLE'
\x7f652811
46144 Node: `GIMPLE_PHI'
\x7f653747
46145 Node: `GIMPLE_RESX'
\x7f655160
46146 Node: `GIMPLE_RETURN'
\x7f655879
46147 Node: `GIMPLE_SWITCH'
\x7f656447
46148 Node: `GIMPLE_TRY'
\x7f658577
46149 Node: `GIMPLE_WITH_CLEANUP_EXPR'
\x7f660367
46150 Node: GIMPLE sequences
\x7f661250
46151 Node: Sequence iterators
\x7f664456
46152 Node: Adding a new GIMPLE statement code
\x7f672911
46153 Node: Statement and operand traversals
\x7f674191
46154 Node: Tree SSA
\x7f676801
46155 Node: Annotations
\x7f678587
46156 Node: SSA Operands
\x7f679113
46157 Node: SSA
\x7f693644
46158 Node: Alias analysis
\x7f705935
46159 Node: Memory model
\x7f709715
46160 Node: Loop Analysis and Representation
\x7f711078
46161 Node: Loop representation
\x7f712259
46162 Node: Loop querying
\x7f719179
46163 Node: Loop manipulation
\x7f722012
46164 Node: LCSSA
\x7f724380
46165 Node: Scalar evolutions
\x7f726452
46166 Node: loop-iv
\x7f729696
46167 Node: Number of iterations
\x7f731622
46168 Node: Dependency analysis
\x7f734431
46169 Node: Lambda
\x7f740799
46170 Node: Omega
\x7f742470
46171 Node: Control Flow
\x7f744035
46172 Node: Basic Blocks
\x7f745030
46173 Node: Edges
\x7f749598
46174 Node: Profile information
\x7f758160
46175 Node: Maintaining the CFG
\x7f762846
46176 Node: Liveness information
\x7f769723
46177 Node: Machine Desc
\x7f771849
46178 Node: Overview
\x7f774317
46179 Node: Patterns
\x7f776358
46180 Node: Example
\x7f779796
46181 Node: RTL Template
\x7f781231
46182 Node: Output Template
\x7f791886
46183 Node: Output Statement
\x7f795851
46184 Node: Predicates
\x7f799813
46185 Node: Machine-Independent Predicates
\x7f802731
46186 Node: Defining Predicates
\x7f807676
46187 Node: Constraints
\x7f813641
46188 Node: Simple Constraints
\x7f814889
46189 Node: Multi-Alternative
\x7f827095
46190 Node: Class Preferences
\x7f829936
46191 Node: Modifiers
\x7f830828
46192 Node: Machine Constraints
\x7f834960
46193 Node: Disable Insn Alternatives
\x7f871823
46194 Node: Define Constraints
\x7f874716
46195 Node: C Constraint Interface
\x7f881497
46196 Node: Standard Names
\x7f885138
46197 Ref: shift patterns
\x7f904066
46198 Ref: prologue instruction pattern
\x7f943785
46199 Ref: epilogue instruction pattern
\x7f944278
46200 Node: Pattern Ordering
\x7f953994
46201 Node: Dependent Patterns
\x7f955230
46202 Node: Jump Patterns
\x7f956850
46203 Ref: Jump Patterns-Footnote-1
\x7f958994
46204 Node: Looping Patterns
\x7f959040
46205 Node: Insn Canonicalizations
\x7f963768
46206 Node: Expander Definitions
\x7f967719
46207 Node: Insn Splitting
\x7f975837
46208 Node: Including Patterns
\x7f985439
46209 Node: Peephole Definitions
\x7f987219
46210 Node: define_peephole
\x7f988472
46211 Node: define_peephole2
\x7f994803
46212 Node: Insn Attributes
\x7f997870
46213 Node: Defining Attributes
\x7f998976
46214 Node: Expressions
\x7f1001496
46215 Node: Tagging Insns
\x7f1008098
46216 Node: Attr Example
\x7f1012451
46217 Node: Insn Lengths
\x7f1014825
46218 Node: Constant Attributes
\x7f1017884
46219 Node: Delay Slots
\x7f1019053
46220 Node: Processor pipeline description
\x7f1022277
46221 Ref: Processor pipeline description-Footnote-1
\x7f1039895
46222 Node: Conditional Execution
\x7f1040217
46223 Node: Constant Definitions
\x7f1043070
46224 Node: Iterators
\x7f1044665
46225 Node: Mode Iterators
\x7f1045112
46226 Node: Defining Mode Iterators
\x7f1046090
46227 Node: Substitutions
\x7f1047584
46228 Node: Examples
\x7f1049825
46229 Node: Code Iterators
\x7f1051273
46230 Node: Target Macros
\x7f1053530
46231 Node: Target Structure
\x7f1056618
46232 Node: Driver
\x7f1057887
46233 Node: Run-time Target
\x7f1081568
46234 Node: Per-Function Data
\x7f1089440
46235 Node: Storage Layout
\x7f1092203
46236 Node: Type Layout
\x7f1117789
46237 Node: Registers
\x7f1132289
46238 Node: Register Basics
\x7f1133263
46239 Node: Allocation Order
\x7f1138830
46240 Node: Values in Registers
\x7f1140851
46241 Node: Leaf Functions
\x7f1148340
46242 Node: Stack Registers
\x7f1151198
46243 Node: Register Classes
\x7f1152470
46244 Node: Old Constraints
\x7f1180095
46245 Node: Stack and Calling
\x7f1187247
46246 Node: Frame Layout
\x7f1187781
46247 Node: Exception Handling
\x7f1198661
46248 Node: Stack Checking
\x7f1205039
46249 Node: Frame Registers
\x7f1209852
46250 Node: Elimination
\x7f1216745
46251 Node: Stack Arguments
\x7f1220974
46252 Node: Register Arguments
\x7f1227783
46253 Node: Scalar Return
\x7f1243266
46254 Node: Aggregate Return
\x7f1249358
46255 Node: Caller Saves
\x7f1253039
46256 Node: Function Entry
\x7f1254217
46257 Node: Profiling
\x7f1266845
46258 Node: Tail Calls
\x7f1268544
46259 Node: Stack Smashing Protection
\x7f1269910
46260 Node: Varargs
\x7f1271022
46261 Node: Trampolines
\x7f1279017
46262 Node: Library Calls
\x7f1285664
46263 Node: Addressing Modes
\x7f1290514
46264 Node: Anchored Addresses
\x7f1307923
46265 Node: Condition Code
\x7f1310572
46266 Node: CC0 Condition Codes
\x7f1312701
46267 Node: MODE_CC Condition Codes
\x7f1315947
46268 Node: Cond. Exec. Macros
\x7f1322176
46269 Node: Costs
\x7f1323155
46270 Node: Scheduling
\x7f1336616
46271 Node: Sections
\x7f1353883
46272 Node: PIC
\x7f1368951
46273 Node: Assembler Format
\x7f1370955
46274 Node: File Framework
\x7f1372093
46275 Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
\x7f1377568
46276 Node: Data Output
\x7f1380833
46277 Node: Uninitialized Data
\x7f1388592
46278 Node: Label Output
\x7f1394156
46279 Node: Initialization
\x7f1415846
46280 Node: Macros for Initialization
\x7f1421808
46281 Node: Instruction Output
\x7f1428260
46282 Node: Dispatch Tables
\x7f1437931
46283 Node: Exception Region Output
\x7f1441746
46284 Node: Alignment Output
\x7f1447488
46285 Node: Debugging Info
\x7f1451651
46286 Node: All Debuggers
\x7f1452321
46287 Node: DBX Options
\x7f1455176
46288 Node: DBX Hooks
\x7f1460625
46289 Node: File Names and DBX
\x7f1462551
46290 Node: SDB and DWARF
\x7f1464663
46291 Node: VMS Debug
\x7f1468964
46292 Node: Floating Point
\x7f1469534
46293 Node: Mode Switching
\x7f1474357
46294 Node: Target Attributes
\x7f1478283
46295 Node: Emulated TLS
\x7f1485119
46296 Node: MIPS Coprocessors
\x7f1488509
46297 Node: PCH Target
\x7f1490078
46298 Node: C++ ABI
\x7f1491620
46299 Node: Named Address Spaces
\x7f1496269
46300 Node: Misc
\x7f1501371
46301 Ref: TARGET_SHIFT_TRUNCATION_MASK
\x7f1508800
46302 Node: Host Config
\x7f1553311
46303 Node: Host Common
\x7f1554379
46304 Node: Filesystem
\x7f1556758
46305 Node: Host Misc
\x7f1560873
46306 Node: Fragments
\x7f1563322
46307 Node: Target Fragment
\x7f1564517
46308 Node: Host Fragment
\x7f1570407
46309 Node: Collect2
\x7f1570647
46310 Node: Header Dirs
\x7f1573283
46311 Node: Type Information
\x7f1574706
46312 Node: GTY Options
\x7f1576997
46313 Node: GGC Roots
\x7f1587677
46314 Node: Files
\x7f1588397
46315 Node: Invoking the garbage collector
\x7f1591143
46316 Node: Plugins
\x7f1592196
46317 Node: Funding
\x7f1608018
46318 Node: GNU Project
\x7f1610505
46319 Node: Copying
\x7f1611154
46320 Node: GNU Free Documentation License
\x7f1648685
46321 Node: Contributors
\x7f1671094
46322 Node: Option Index
\x7f1707781
46323 Node: Concept Index
\x7f1708366